書誌と内容紹介
書誌_仕組みからわかる大規模言語モデル 生成AI時代のソフトウェア開発入門:奥田勝己

著者による内容紹介
第1章 Transformer
LLMの仕組みを理解することを目的とし、LLMの基盤となるニューラルネットワークのア
ーキテクチャであるTransformerについて詳しく解説します。本章では、Transformerの
具体的なアーキテクチャとして、2017年に発表されたオリジナルのTransformerと実用L
LMの一つであるLlama 3(2024年)について解説します。また、画像や音声を扱うマル
チモーダルLLMやトークナイザ、トークンのサンプリング手法についても本章で解説し
ます。
計算機アーキテクチャ、コンパイラ、OS(Operating System)の仕組みを知らなくても
プログラムが書けるのと同様、Transformerの仕組みを知らなくてもLLMを使うことは可
能です。しかし、プログラムの性能を引き出すためには計算機アーキテクチャ、コンパ
イラ、OSの仕組みの理解が不可欠であるのと同様、LLMの効果的な利用にはTransformer
の仕組みの理解が欠かせません。
第2章 学習
Transformerのパラメータを適切な値に設定するための学習プロセスについて解説しま
す。LLMの学習は、事前学習と指示チューニングやRLHF(Reinforcement Learning from
Human Feedback)などのファインチューニングに分けられます。これらの手法を解説す
ると共に、共通して使用される勾配降下法や誤差逆伝播法といった、機械学習の基本的
な手法も取り上げます。また、学習時に発生する問題や一般的なその解決方法について
も簡単に紹介します。
本章では、第1章で紹介したTransformerアーキテクチャのパラメータが実際にどのよう
に調整されるのかという疑問を解消します。
第3章 プロンプトエンジニアリング
LLMからより良い出力を得るための鍵となる、プロンプトエンジニアリングのテクニッ
クを紹介します。ChatGPTやLLMを扱うためのライブラリであるLangChainなどを効果的
に使用するためのテクニックや、ライブラリの内部で使われている手法も解説します。
LLMの知識を動的に拡張するRAG(Retrieval Augmented Generation)やエージェントの
実現手法として有力なReActやReflexionについても、プロンプトエンジニアリングの観
点から紹介します。
第4章 言語モデルAPI
LLMを利用するためのAPI(Application Programming Interface)について、OpenAI AP
IやAnthropic API、Gemini APIなどの主要なAPIを取り上げます。各APIの共通点と違い
を示すことで、APIの本質的な理解を目指します。
第5章 LLMフレームワーク -LangChain-
LLMの機能をさらに拡張するフレームワークについて、特に人気の高いLangChainを紹介します。また、LangChainらしくプログラムを書くための専用言語であるLCEL(LangChain Expression Language)についても図解で詳しく解説します。さらに、LangChainを用いてLLMから構造化出力を得る方法、LLMにツールを使わせる方法、RAGを使う方法、A
Iエージェントの構築方法を学びます。本章の内容をソースコードと共に理解することで、LangChainの主要な機能を一通り使いこなせるようになるはずです。
第6章 マルチエージェントフレームワーク -LangGraph-
複数のAIエージェントを活用したシステム構築のためのマルチエージェントフレームワ
ークについて、LangGraphを取り上げます。LangChainの使い方とマルチエージェントシ
ステムの基本的なアーキテクチャを紹介し、アーキテクチャごとの応用例を示します。
例えば、エージェンティックAIとして動作するソフトウェア開発チームをLangGraphを
用いて構築します。
第7章 アプリケーション
これまでに学んだ知識を応用し、実際にLLMを活用したアプリケーションを開発します。
マルチモーダルチャットボット、クイズ作成システムを通じて、実践的なLLMの利用方
法を学びます。
要約と目次
『仕組みからわかる大規模言語モデル』ブリーフィング資料
要旨
本書『仕組みからわかる大規模言語モデル 生成AI時代のソフトウェア開発入門』は、大規模言語モデル(LLM)の内部構造から、それを用いた高度なアプリケーション開発技術までを体系的に解説する包括的な技術書である。LLMをブラックボックスとして使うのではなく、基盤技術であるTransformerアーキテクチャを深く理解し、より効果的に活用することを目指す開発者、研究者、学生を対象としている。
本書は、LLMの中核であるTransformerの構造、モデルを形成する学習プロセス(事前学習、指示チューニング、RLHF)などの基礎理論から始める。続いて、LLMの性能を最大限に引き出すためのプロンプトエンジニアリング技法(CoT、RAG、ReActなど)や、主要な言語モデルAPI(OpenAI、Gemini、Anthropic)の利用法を解説する。
さらに本書の核心として、LLMアプリケーション開発を効率化するフレームワークLangChainと、より複雑なマルチエージェントシステムを構築するためのLangGraphを詳細に扱う。特にLangGraphでは、状態グラフを用いてループや条件分岐を含む動的なワークフローを定義し、単一エージェントから水平・垂直のアーキテクチャまで多様なシステムを構築する実践例(自然言語シェル、ソフトウェア開発チームなど)を示す。最終章では、これらの知識を統合し、マルチモーダルRAGチャットボットなど具体的なアプリケーション開発を通じて実践的なスキルを習得できる構成になっている。
第一部:大規模言語モデル(LLM)の基礎理論
序盤では、LLMを支える中核的な技術理論を詳細に解説する。LLMを効果的に利用するには、その内部メカニズムの理解が不可欠であるという前提に基づいている。
1.1 Transformerアーキテクチャの徹底解説
現代のLLMの基盤であるニューラルネットワークアーキテクチャ「Transformer」について、その仕組みを詳述する。特にGPT-3以降の主流であるデコーダのみのアーキテクチャに焦点を当てる。
- 主要構成要素:
- 埋め込み層: トークンIDを意味的な情報を持つベクトル(テキスト埋め込み)に変換し、位置情報(位置埋め込み)を付与する。
- デコーダスタック: マスク付きマルチヘッド注意機構とフィードフォワードニューラルネットワークを重ねた層。トークン間の関連性を計算し、文脈情報をベクトルに組み込むことで豊かな表現を獲得する。
- 出力線形層: デコーダスタックからの出力を語彙数次元のベクトルに変換し、ソフトマックス関数で次のトークンの確率分布を生成する。
- 中心的メカニズム:
- マスク付きマルチヘッド注意機構: クエリ、キー、バリューの3つのベクトルを用いてトークン間の関連性の重みを計算する。これによりモデルは文中のどの単語に「注意」を払うべきかを学習する。デコーダでは未来の情報を参照しないように「マスク」が適用される。
- 派生アーキテクチャ(Llama 3の例):
- Llama 3に見られる改良点として、位置エンコーディング(RoPE)、正規化手法(RMSNorm)、活性化関数(SwiGLU)、注意機構(GQA)などを紹介する。
1.2 LLMの学習プロセス
LLMが能力を獲得する学習プロセスを複数の段階で解説する。学習は損失関数を最小化するためにモデルの多数のパラメータを調整するプロセスである。
- 学習の段階:
- 事前学習 (Pre-training): 大規模なテキストデータ(Webページ、書籍など)を用いて言語の一般的な構造や知識を学習する。自己教師あり学習(次のトークン予測)と交差エントロピー損失が用いられる。
- 指示チューニング (Instruction Tuning): 特定の指示に従って応答する能力を与えるためのファインチューニング。「指示」と「模範的な回答」のペアで追加学習を行う。
- RLHF (Reinforcement Learning from Human Feedback): 人間のフィードバックを用いて応答が人間の好みや価値観に沿うように調整する。人間の評価に基づき報酬モデルを学習させ、その報酬を最大化するように強化学習(PPOなど)でLLMを最適化する。
- 基盤となるアルゴリズム:
- 勾配降下法: 損失関数の勾配を計算し、その方向にパラメータを少しずつ更新して損失を最小化する最適化手法。Adamなどの派生手法も扱う。
- 誤差逆伝播法: ニューラルネットワーク全体の勾配を効率的に計算するアルゴリズム。出力層から入力層へ誤差を逆方向に伝播させ、連鎖律を用いて各層の勾配を算出する。
第二部:LLMの活用技術と実践
理論的背景を踏まえ、LLMの能力を最大限に引き出すための具体的な技術と考え方を解説する。
2.1 プロンプトエンジニアリング
LLMから質の高い応答を得るためのプロンプト設計技術を体系的に紹介する。単純な指示から、複雑な推論や自律的行動を促す高度な手法までを扱う。
- 基本技法:
- Zero-Shotプロンプティング: 例を示さずタスクの指示のみを与える。
- Few-Shotプロンプティング: 少数の入力・出力ペアを示し、文脈内学習能力を利用する。
- 高度な推論技法:
- Chain-of-Thought (CoT)プロンプティング: 「ステップバイステップで考えてください」と指示し、中間的な思考プロセスを生成させることで複雑な問題の正答率を向上させる。
- Self-Consistency: 同一問題を複数の方法で解かせ、最頻出の回答を最終結果とすることで信頼性を高める。
- エージェント化技術:
- RAG (Retrieval Augmented Generation): 外部の知識源(ベクトルデータベース等)から関連情報を検索し、プロンプトに組み込むことで学習データにない最新情報や専門知識に基づく回答を可能にする。
- ReAct (Reasoning + Acting): LLMに「推論(Thought)」と「行動(Action)」を交互に行わせる。行動には外部ツール(検索、計算機等)の呼び出しを含み、実世界の問題解決能力を高める。
- Reflexion: LLM自身が過去の行動結果を評価し「言語的フィードバック」を生成して自己改善する。このフィードバックは長期記憶に保存され、将来のタスク遂行に活かされる。
2.2 言語モデルAPIの利用
プログラムからLLMを利用するためのAPIを解説する。主要プロバイダのAPIに共通する概念と具体的な使い方を示す。
- APIの種類と共通点:
- 会話型API: チャット形式の対話を実現するために設計され、会話履歴を文脈として維持する。
- 共通の利用フロー: HTTPリクエストでJSON形式のプロンプトを送信し、応答を受け取る。認証はAPIキーで行う。
- 制御パラメータ: temperature(出力の多様性)、top-p(サンプリングの確率閾値)、max_tokens(最大生成トークン数)など、共通のパラメータを紹介する。
- 主要APIの解説:
- OpenAI API、Gemini API、Anthropic APIの3つを取り上げ、Pythonライブラリを用いた会話(テキスト/マルチモーダル)の実装例を示す。
- LangChainによる抽象化:
- 特定APIに依存しないアプリケーション開発のためのフレームワークとしてLangChainを紹介し、異なるモデルを統一的なインターフェースで扱う方法を示す。
第三部:高度なアプリケーション開発フレームワーク
LLMアプリケーション開発を体系化し、より複雑なシステムを構築するための主要フレームワークとしてLangChainとLangGraphを詳述する。
3.1 LangChainによるLLMアプリケーション構築
LLMアプリケーション開発のための多機能フレームワーク。コンポーネントを組み合わせることで迅速な開発を可能にする。
- 主要コンポーネント:
- 会話モデル: 各社APIを抽象化し、統一的なインターフェースを提供する。
- プロンプトテンプレート: 変数を含むプロンプトの雛形を作成し、再利用性を高める。
- 出力パーサ: LLMのテキスト出力を構造化データ(JSONなど)に変換する。
- LCEL (LangChain Expression Language):
- LangChainのコンポーネントをパイプ演算子
|で直感的に連結(チェーン)するための専用言語。プロンプト生成、モデル呼び出し、出力解析といった一連の処理を宣言的に記述できる。 - 直列処理に加え、辞書構文を用いた並列処理も可能で、複雑なデータフローを簡潔に表現できる。
3.2 LangGraphによるマルチエージェントシステムの構築
LangChainを拡張し、ループや条件分岐を含む複雑なエージェントワークフローを構築するためのフレームワーク。エージェント間の協調動作をグラフ構造で定義する。
- グラフベースのワークフロー:
- 処理単位を「ノード」、処理間の遷移を「エッジ」としてグラフを定義する。これにより直線的なチェーンでは表現しにくいループや条件分岐が可能になる。
- ワークフロー全体で共有される「状態(State)」を持ち、各ノードが状態を読み書きすることでエージェントは文脈に応じた判断を行える。
- マルチエージェントアーキテクチャ:
- 単一エージェント: 一つのエージェントが推論とツール実行を繰り返す。
- 水平アーキテクチャ: 複数のエージェントが対等に協調し、共有の会話スペースで議論しながらタスクを遂行する。
- 垂直アーキテクチャ: リーダーエージェントがタスクを分割し、他のエージェントに指示を出す階層的構造。
- 実践的応用例:
- 自然言語シェル: 自然言語で指示されたOSコマンドを実行するエージェント。
- 訪問販売シミュレーション: 水平アーキテクチャを用いたロールプレイ。
- ソフトウェア開発チーム: リーダー、プログラマ、テスト作成者など役割分担されたエージェントが協調してソフトウェアを開発する垂直アーキテクチャの実装。
第四部:書籍の概要と対象読者
4.1 書籍の構成と目的
本書はLLMの技術的ブレークスルーを背景に、ソフトウェア開発者や研究者が本質を理解し応用能力を身につけることを目的とする。
人類と同等またはそれ以上の知性を持つ存在が現実になりつつある。この変化は人類史における大きな技術的ブレークスルーと言える。こうした背景から、LLMは今後ますます多くの分野に応用され、影響力を拡大していくと考えられる。したがって、LLMの新しい応用を切り拓き、システムに組み込む役割を担う開発者や研究者にとって、本質的理解に基づくLLMの活用は重要なスキルの一つとなる。
本書は基礎理論(第1–2章)から応用技術(第3–4章)、フレームワーク(第5–6章)、実践的なアプリケーション開発(第7章)へと知識を積み上げる構成である。各章は独立しており、読者は興味のある箇所から読み進めることができる。
4.2 対象読者とスコープ
- 対象読者: LLMを活用したソフトウェアを開発したい開発者、研究者、学生。
- 前提知識: Pythonの基本的な読み書き能力。機械学習の専門知識は不要。
- スコープ: 本書はLLMを「利用する」ことに重点を置き、PyTorchやTensorFlowを用いてLLMを自前で開発・実装する内容は扱わない。
4.3 提供されるサンプルとリソース
APIキー: 第4章以降のサンプル実行にはOpenAI、Anthropic、GeminiなどのAPIキーが必要で、利用に際してクレジットカード登録が求められる場合がある。
サンプルコード: 本書に掲載されたすべてのPythonサンプルは翔泳社のウェブサイトおよびGitHubリポジトリからダウンロード可能。
動作環境: サンプルは macOS、Debian GNU/Linux、Windows 11で動作確認済み。
- 第1章 Transformer
- 第2章 学習
- 2.1 LLMの学習の概要
- 2.1.1 学習手法の種類
- 2.1.2 パラメータ更新の仕組み
- 2.1.3 データセットの分割と役割
- 2.2 LLMの事前学習
- 2.2.1 事前学習用データ
- 2.2.2 自己教師あり学習
- 2.2.3 交差エントロピー損失
- ・情報量
- ・エントロピー
- ・交差エントロピー
- ・交差エントロピーの例
- ・言語モデルにおける交差エントロピー損失
- 2.3 指示チューニング(Instruction Tuning)
- 2.4 RLHF (Reinforcement Learning from Human Feedback)
- 2.4.1 強化学習の基本概念
- 2.4.2 強化学習のLLMへの適用
- 2.4.3 報酬モデル
- ・データ収集
- ・ペアワイズランキング学習
- 2.4.4 強化学習
- ・KLダイバージェンス
- ・目的関数におけるKLダイバージェンス
- ・PPO損失関数
- 2.5 勾配降下法
- 2.5.1 勾配降下法の考え方
- 2.5.2 学習率の役割と影響
- 2.5.3 勾配降下法によるパラメータ更新
- 2.5.4 勾配降下法の派生系
- 2.5.5 パラメータの初期化
- ・Xavier初期化(Glorot初期化)
- ・He初期化
- ・ゼロ初期化
- 2.6誤差逆伝播法(Backpropagation)
- 2.6.1 問題の整理
- 2.6.2 依存関係の抽出
- 2.6.3 サブ問題の解く順序
- 2.6.4 誤差逆伝播法のアルゴリズム
- 2.7 学習における問題と対策
- 2.7.1 過学習(Overfitting)
- 2.7.2 勾配消失 (Vanishing Gradient)
- 2.7.3 勾配爆発 (Exploding Gradient)
- 2.1 LLMの学習の概要
- 第3章 プロンプトエンジニアリング
- 3.1 プロンプトエンジニアリングの重要性
- 3.2 Zero-Shotプロンプティング
- 3.3 Few-Shotプロンプティング
- 3.4 Chain-of-Thought (CoT) プロンプティング
- 3.4.1 Few-Shot CoTプロンプティング
- 3.4.2 Zero-Shot CoTプロンプティング
- 3.5 Self-Consistency(自己整合性)
- 3.6 プロンプトチェーニング
- 3.7 RAG (Retrieval Augmented Generation)
- 3.7.1 インデックスの作成
- ・テキスト抽出
- ・分割
- ・ベクトル化
- ・保存
- 3.7.2 情報の検索
- 3.7.3 回答の生成
- 3.8 ReAct
- 3.8.1 ReActのプロンプトと処理手順
- 3.8.2 ReActの実装方法
- ・1. プロンプトの生成
- ・2(a)推論(Thought)
- ・2(b)行動(Action)
- ・2(c)観測 (Observation)
- ・2(d)次の推論のためのプロンプトの更新
- ・3. 最終回答の生成
- 3.9 Reflexion
- 3.9.1 エージェントの構成
- 3.9.2 Reflexionの処理手順
- 3.9.3 Reflexionを用いたコード生成の例
- 3.10 役割やペルソナの設定
- 3.10.1 役割設定によるCoT推論性能の向上
- 3.10.2 役割設定の限界
- 3.10.3 ペルソナの設定
- 第4章 言語モデルAPI
- 4.1 会話型APIと補完型API
- 4.1.1 会話型API
- 4.1.2 補完型API
- 4.2 各種言語モデルAPIの共通点
- 4.2.1 リクエストや応答の流れ
- 4.2.2 APIキーによる認証
- 4.2.3 PythonによるAPIライブラリの提供
- 4.2.4 言語モデルの制御パラメータ
- temperature (温度)
- top-p(トップp)
- ・最大トークン数
- ・ストップシーケンス
- 4.3 言語モデルAPIごとの使い方
- 4.3.1 OpenAI API
- ・会話
- ・マルチモーダル
- 4.3.2 Gemini API
- ・会話
- ・マルチモーダル
- 4.3.3 Anthropic API
- ・会話
- ・マルチモーダル
- 4.3.4 言語モデルに依存しないAPI (LangChain)
- 4.3.1 OpenAI API
- 4.1 会話型APIと補完型API
- 第5章 LLMフレームワーク -LangChain-
- 5.1 LangChainの概要
- 5.2 会話モデル
- 5.2.1 会話モデルの作成
- 5.2.2 会話モデルの呼び出し
- ・単一文字列による呼び出し
- ・メッセージリストによる呼び出し(テキストのみ)
- ・メッセージリストによる呼び出し(マルチモーダル)
- 5.2.3 ストリーム呼び出し
- 5.2.4 バッチ呼び出し
- 5.2.5 出力フォーマットの指定(構造化出力)
- ・単純なデータモデル
- ・入れ子になったデータモデル
- 5.2.6 ツールの利用
- ・ツールの定義と利用
- 5.3 プロンプトテンプレート
- 5.3.1 PromptTemplateクラス PromptTemplateの動作確認 PromptTemplateの利用
- 5.3.2 ChatPromptTemplateクラス MessagePromptTemplateの利用 5.3.3 MessagesPlaceholderクラス
- 5.4 出力パーサ
- 5.4.1 StrOutputParserの利用
- 5.5 チェーンのためのLCEL
- 5.5.1 プロンプトチェーニングとLCEL
- 5.5.2 チェーンとは
- 5.5.3 シーケンスとパラレル
- ・シーケンス
- ・パラレル
- ・辞書の値がRunnableの場合
- ・辞書の値がRunnableに変換できる式の場合
- 5.5.4 RunnableParallelの利用例
- ・辞書型出力を作るための利用
- ・並列化のための利用
- 5.6 RAGサポート
- 5. 6.1 テキストの抽出
- 5.6.2 テキストの分割
- 5.6.3 ベクトル化
- 5.6.4 ベクトルの保存
- 5.6.5 情報の検索
- 5.6.6 回答の生成
- 5.7 エージェントとツールの利用
- 5.7.1 エージェントの概要
- 5.7.2 エージェントの作成
- 第6章 マルチエージェントフレームワーク –LangGraph–
- 6.1 エージェントとは
- 6.2 マルチエージェントアーキテクチャ
- 6.2.1 単一エージェントアーキテクチャ
- 6.2.2 水平アーキテクチャ
- 6.2.3 垂直アーキテクチャ
- 6.3 LangGraphの基礎
- 6.3.1 LangGraphのAPI
- 6.3.2 LangGraphの使用例
- ・モジュールのインポート
- ・状態の定義
- ・ノード関数の定義
- ・条件チェック関数の定義
- ・状態グラフの定義
- ・状態グラフの実行
- 6.4 LangGraphの応用
- 6.4.1 単一エージェントの構築:自然言語シェルインタフェース
- ・モジュールのインポート
- ・ツールの定義
- ・エージェントの状態定義
- ・ノード関数の定義
- ・条件チェック関数の定義
- ・状態グラフの定義
- ・状態グラフの実行
- 6.4.2 水平アーキテクチャの構築:訪問販売シミュレーション
- ・モジュールのインポート
- ・プロンプトの定義
- ・チェーンの定義
- ・状態の定義
- ・ノード関数の定義
- ・条件チェック関数の定義
- ・状態グラフの定義
- ・状態グラフの実行
- 6.4.3 垂直アーキテクチャの構築:エージェントチームによるソフトウェア開発
- ・モジュールのインポート
- ・ツールの定義
- ・状態の定義
- ・エージェントの定義
- ・ノード関数の定義
- ・条件チェック関数の定義
- ・ワークフローの定義
- ・ワークフローの実行
- 6.4.1 単一エージェントの構築:自然言語シェルインタフェース
- 第7章 アプリケーション
- 7.1 マルチモーダルRAGチャットボット
- 7.1.1 構築するチャットボットの概要
- 7.1.2 ユーザインタフェースの実装
- 7.1.3 質問応答システムへの拡張
- 7.1.4 会話履歴の実装
- 7.1.5 コンテキストの拡張
- 7.1.6 RAGの実装
- ・インデックスの作成
- ・インデックスの利用
- 7.1.7 マルチモーダルへの対応
- 7.2 クイズ作成・採点システム
- 7.2.1 クイズ作成・採点システムの概要
- 7.2.2 事前準備
- 7.2.3 LLMの入出力
- 7.2.4 システムの実装
- 7.1 マルチモーダルRAGチャットボット
- Appendix 学習環境の構築
- A.1 Python環境のセットアップ
- A. 1.1 Pythonのインストール
- A. 1.2 仮想環境の作成
- A. 1.3 必要パッケージのインストール
- A. 1.4 Windowsでインストールに失敗する場合
- A.2 APIキーの取得
- A. 2.1 OpenAI APIキーの取得方法
- A.2.2 Anthropic APIキーの取得方法
- A. 2.3 Gemini APIキーの取得方法
- A.1 Python環境のセットアップ
- おわりに
- 参考文献
- 検索キーワード