これらの質問に明確に答えられるなら、本書のコアを理解しています。

付録 C の概観: トークン化・Attention・学習・推論・アーキテクチャの派生にわたる最頻出質問の高速復習マップ — 本書のコアを本当に身につけたかどうかの素早い確認用

C.1 基本概念

Q1: GPT と Transformer の違いは何ですか?

GPT(Generative Pre-trained Transformer)は Transformer アーキテクチャの上に構築された特定のモデルです。Transformer はその基盤となるエンジン設計 — 2017 年に Google が発表した汎用ニューラルネットワークアーキテクチャです。GPT はそのエンジンを使って作られた一台の車に相当します: OpenAI が Transformer のデコーダー半分を取り、多数の複製を積み上げ、大量のテキストで学習させました。この比喩はさらに続きます: BERT は同じエンジンのエンコーダー半分を使った別の車で、T5 は両方を使っています。「Transformer を使っている」と言う場合、たいていは GPT や LLaMA のような特定のプロダクトを指しています。エンジニアが「Transformer アーキテクチャ」と言う場合、これらすべてのモデルが共有する抽象的な設計図を指しています。

Q2: なぜ Attention は "attention" と呼ばれるのですか?モデルは本当に「注目」しているのですか?

この名前は人間の選択的注意 — 質問に答えるときに文中の特定の単語に焦点を当てる方法 — からのアナロジーです。このメカニズムは構造的に似たことをします: 各トークンに対して、他のすべてのトークンの加重和を計算し、重みは関連性を反映します。高い重みのトークンが「より注目される」のです。これが認知的な意味での理解や意識を構成するかどうかは別の問いで、正直な答えは: いいえ、です。Attention は微分可能なルーティング操作です。モデルが意味を理解したり、意図を持ったり、概念を形成したりすることを意味しません。この名前は示唆的で教育的に有用ですが、数学が保証する以上のことを含意しないようにしてください。第 3 章でメカニズム全体を扱っています。

Q3: トークンとは何ですか?単語ですか、文字ですか、それとも他の何かですか?

トークンはモデルが実際に処理する単位です — そして正確には上記のどれでもありません。ほとんどの現代の LLM はバイトペアエンコーディング(BPE)トークナイザーを使い、テキストをサブワードの断片に分割します。"unbelievable" という単語は ["un", "believ", "able"] の 3 トークンになるかもしれません。"the" のような一般的な英語の単語はたいてい 1 トークンです。珍しい単語や低リソース言語の単語は 4〜5 トークンになるかもしれません。中国語テキストは通常 1 文字あたり 1〜2 トークンになります。実践的な含意: モデルが 128k コンテキストウィンドウを謳っている場合、それは 128,000 トークンであり、128,000 単語ではありません — 英語の散文では約 1.3 倍の差があります。トークン数はコスト・速度・コンテキスト制限を考える際の正しい単位です。第 2 章でトークン化を詳しく扱っています。

Q4: なぜ推論時に 1 トークンずつ生成するのですか?なぜ一度に全部生成できないのですか?

因果的な依存関係があるためです: 次のトークンの確率は、以前に生成されたすべてのトークンに依存します。形式的に言えば、モデルは各ステップで P(xtx1,x2,,xt1)P(x_t \mid x_1, x_2, \ldots, x_{t-1}) を計算しています。xtx_t を生成するには、x1x_1 から xt1x_{t-1} がすでに揃っていなければなりません。この依存関係を壊さずに同時にすべてを生成することはできません。これが自己回帰の契約です: モデルは自分の出力を将来の入力として食べます。KV キャッシュ(Q15 を参照)は冗長な再計算を回避することで各ステップを速くしますが、逐次的な構造は実装の選択ではなく根本的なものです。


C.2 Attention

Q5: なぜ Q、K、V の 3 つの行列が必要なのですか?2 つや 1 つではダメですか?

短い答え: Q、K、V を分離することで、2 行列スキームよりも高い表現力が得られます。直感はこうです。Q(「私が探しているのは何か?」)と K(「私が提供するのは何か?」)は一緒に、位置間の関連性スコアを計算するために使われます。V(「私が実際に貢献するのは何か?」)は出力を生成するために別途使われます。K と V を 1 つの行列に折りたたんでしまうと、「見つけられる」ためと「内容を貢献する」ための同じ表現を使わざるを得なくなります。その制約は厳しすぎます — トークンはクエリとの関連性が高く(高いAttention重み)ても、それを関連性高く見せたものとは全く異なるものを貢献するかもしれないのです。3 行列の設計はその 2 つが独立して変化できるようにします。1 行列の Attention は文献に存在しますが、一貫して性能が低くなります。

Q6: なぜ Attention スコアを dkey\sqrt{d_\text{key}} で割るのですか?

Softmax の飽和を防ぐためです。次元 dkd_k の 2 つのベクトルの内積を計算すると、Q と K の要素がおおよそ標準正規分布であると仮定すれば、結果の分散は dkd_k に比例して大きくなります。大きな dkd_k(例えば 128)では、内積の大きさが非常に大きくなり、Softmax が勾配がほぼゼロになる領域に追い込まれます。それが学習を殺します。dk\sqrt{d_k} で割ることで分散が 1 に戻り、Softmax が数値的に健全な範囲に保たれます。元の「Attention Is All You Need」論文は 1 段落でこれを導いています。アーキテクチャの中でも最もエレガントな小さな決定の一つです。

Q7: なぜマルチヘッドなのですか?1 つの大きな Attention ヘッドでは不十分ですか?

複数のヘッドにより、異なるヘッドが異なるタイプの関係に同時に特化できます。あるヘッドは統語的依存関係(節をまたいだ主語と動詞)を追跡し、別のヘッドは照応(代名詞とその先行詞)を追跡し、また別のヘッドは局所的な近接関係を追跡するかもしれません。1 つの大きなヘッドでは、そのすべてが同じパラメータ予算を奪い合わなければなりません。マルチヘッド設計には実用的な利点もあります: 総計算量は 1 つの大きなヘッドと同様です(d_model をヘッドに分割するため)が、表現の多様性は高くなります。ヘッド数はハイパーパラメータです — 第 5 章で一般的な設定を扱っています。経験則は head_dim = 64 または 128n_heads = d_model / head_dim です。

Q8: 因果マスクは実際に何をしているのですか?

学習中にトークンが未来のトークンに注目することを防ぎます。マスクなしでは、位置 tt のトークンが予測すべきトークンを見ることができてしまい、学習損失が自明に小さくなりますが、推論時には役に立たないモデルになります。マスクは Softmax の前に未来の位置の Attention ロジットを -\infty に設定することで実装され、それらの Attention 重みがゼロになります。結果として、各トークンは自分自身と左のトークンにしか注目できません。これがアーキテクチャを「自己回帰」にするものです — 各位置は因果的に注目します。第 5 章でこれを詳しく扱っており、Softmax の後ではなく前にマスクを適用すべき理由も含めて説明しています。

Q9: なぜ Attention の計算量はシーケンス長に対して O(n2)O(n^2) なのですか?

すべてのトークンが他のすべてのトークンに注目するからです。長さ nn のシーケンスでは、n×nn \times n の Attention 行列を計算します — 位置のペアごとに 1 つのスコア。計算量もメモリも O(n2)O(n^2) でスケールします。n=1000n = 1000 では 100 万エントリです。n=100,000n = 100{,}000 では 100 億エントリです — これが naive な Attention が非常に長いコンテキストにスケールしない理由です。FlashAttention は行列を完全にメモリに展開せずにタイル単位で計算することでメモリ側に対処します。スパース Attention の近似は多くのペアをスキップすることで計算側に対処します。約 8k トークンまでの実用的なほとんどの目的には、標準的な Attention で問題ありません。


C.3 学習

Q10: なぜ学習中に Teacher Forcing を使うのですか?モデルからサンプリングではダメですか?

Teacher Forcing は学習中、モデル自身の予測ではなく、各位置で正しい前のトークンをモデルに与えます。これには 2 つの大きな実用的な利点があります。第一に、エラーが蓄積しません — モデルがステップ 5 で誤ったトークンを予測しても、その間違いはポジション 6 から 100 に波及しません。第二に、完全な並列化が可能になります: 入力が固定されている(正解)ので、単一の順伝播と因果マスクを使ってすべての位置の損失を同時に計算できます。欠点は露出バイアスです: 推論時にモデルは自分自身の(潜在的に誤った)出力を見ますが、これは学習中に一度も見なかった分布です。このギャップは実在しますが、実際には管理可能です — Teacher Forcing はほぼすべての LLM 学習で使われます。なぜなら利益がコストをはるかに上回るからです。

Q11: 損失関数とは直感的に何ですか?クロスエントロピー損失とは?

損失関数は学習プロセスが最小化しようとする数値です — モデルが現在どれくらい間違っているかの尺度。言語モデリングには標準的な選択であるクロスエントロピー損失を使います。

L=logP(correct token)\mathcal{L} = -\log P(\text{correct token})

直感: モデルが正しいトークンに確率 0.9 を割り当てれば、損失は小さい(log0.90.1-\log 0.9 \approx 0.1)。確率 0.01 を割り当てれば、損失は大きい(log0.014.6-\log 0.01 \approx 4.6)。バッチ内のすべての位置で平均すると、クロスエントロピー損失はパープレキシティとしても直接解釈できます: ppl=eL\text{ppl} = e^{\mathcal{L}}。パープレキシティが低いほど、モデルがデータに驚かないことを意味します。第 8 章で学習目標を詳しく扱っています。

Q12: 学習データはどれくらい必要ですか?

Chinchilla 論文(Hoffmann et al., 2022)が実践的な答えを出しました: 計算最適な実行には、モデルパラメータあたり約 20 トークンの学習データを使います。このヒューリスティックでは、7B パラメータのモデルには約 140B トークンが必要です。現代の実践ではこれをしばしば超えます — LLaMA 3 は 15T トークンで学習しており、そのサイズに対して Chinchilla 最適をはるかに超えています。なぜなら、より小さいモデルの推論コスト削減に対してデータは安いからです。実際の制約は通常、持っているデータの量ではなく、学習に費やせる計算量です。スクラッチからの事前学習ではなくファインチューニングであれば、数字は劇的に小さくなります — 数十万の例で行動を意味のある形で変えることができます。

Q13: なぜ学習率をウォームアップするのですか?しないとどうなりますか?

学習の開始時、モデルパラメータはランダムに初期化されており、勾配シグナルはノイジーで条件が悪い状態です。完全な学習率をすぐに開始すると、オプティマイザーが制約の悪い方向に非常に大きな更新をする可能性があり、損失が不安定になったり NaN 値が発生したりします。ウォームアップ — 最初の数千ステップにわたって学習率をゼロに近い値からターゲット値に線形に増加させる — により、モデルはオプティマイザーが大きなステップを踏み始める前に合理的な勾配方向を確立する機会を得ます。ウォームアップなしでは、大きな学習率のランは最初の数百ステップで頻繁に発散します。ウォームアップありでは、同じ学習率が安定します。コストはわずかに遅い開始です; 利益は大規模な実行での大幅に高い信頼性です。


C.4 推論

Q14: なぜ 1 トークンずつの生成が遅く感じるのですか?

3 つの理由が重なります。第一に、自己回帰の構造により、トークン tt が完了するまでトークン t+1t+1 の生成を開始できません。第二に、各ステップでモデルの全層を通る完全な順伝播が必要です — 70B パラメータのモデルでは相当な計算量です。第三に、大きなモデルは計算バウンドではなくメモリ帯域幅バウンドであることが多い: ボトルネックは計算そのものではなく、GPU メモリからモデルパラメータを読み込むことです。KV キャッシュ(Q15)は冗長な作業の大きな源泉の一つを除去しますが、逐次的な構造は変わりません。バッチ推論(複数のリクエストを一緒に処理する)は GPU 使用率を改善しますが、単一ユーザーのレイテンシには役立ちません。投機的デコードは、小さなモデルで複数のトークンを下書きし並行して検証することで逐次的なボトルネックに対処する最近の技術です — 適切なハードウェアで 2〜3 倍の高速化が得られます。

Q15: KV キャッシュとは何ですか?いつ気にすべきですか?

各生成ステップで、Attention はすべての前のトークンのキーとバリューを必要とします。キャッシュなしでは毎ステップそれらをゼロから再計算します — つまり 100 番目のトークンを生成するには 99 回の冗長な再計算が必要です。KV キャッシュは前のステップのキーとバリューを保存して新しいものを追加するため、各ステップのコストは新しいトークンの K と V の計算だけになります。これにより、以前に生成されたトークン数に対するステップあたりのコストが O(n2)O(n^2) から O(n)O(n) に変わります。コストはメモリです。1 層の 1 KV キャッシュエントリは 2 × n_heads × head_dim × context_length 個の値です。多くの層を持つ長いコンテキストモデルでは、KV キャッシュが数十 GB の GPU メモリを消費する可能性があります。大規模に推論を実行する場合、MHA と GQA/MQA の選択をする場合、または負荷下でサーバーがメモリ不足になる理由を考える場合に気にすべきです。第 9 章でこれを詳しく扱っています。

Q16: Temperature は実際に何をしているのですか?

Temperature は Softmax 前にロジットをスケールします。

Pi=exp(zi/T)jexp(zj/T)P_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}

T=1T = 1 では生のモデル分布が得られます。T<1T < 1 では分布が尖ります — 最高確率のトークンがさらに多くの重みを得て、出力がより決定論的になります。T>1T > 1 では分布が平坦になります — 低確率トークンがより多くの重みを得て、出力がより変化に富み、時に非整合になります。T0T \to 0 では貪欲デコードになります: 常に最高確率のトークンを選びます。実際には: 正確さが重要なコードや数学には低い Temperature(0.2〜0.5)を使います; 創作や自由な対話には高い Temperature(0.7〜1.0)を使います。Temperature はどこからともなく創造性を追加するのではありません — モデル自身の不確実性にどれだけ傾くかを調整するだけです。

Q17: Top-K、Top-P、Beam Search の違いは何ですか?

これらはモデルの確率分布から次のトークンを選ぶ 3 つの異なる戦略です。貪欲デコードは最も確率の高い単一のトークンを選びます — 高速ですが繰り返しが多くなりがち。Top-K サンプリングは確率上位 K のトークンにサンプリングを制限して再正規化します。Top-P(ニュークリアス)サンプリングは累積確率が P を超える最小のトークンセットに制限します — なので実効的な K はモデルの確信度に適応します。Beam Search は各ステップで複数の候補シーケンスを並行して管理し、高確率の完全なシーケンスを見つけるために拡張・剪定を行います。正しい選択はタスクによります: Beam Search は正確さが求められる翻訳や要約に効果的; Top-P サンプリングは多様性が重要な対話や創作に効果的。デプロイされている LLM API のほとんど(ChatGPT や Claude を含む)は Beam Search ではなく Top-P を使ったサンプリングを使っています。


C.5 アーキテクチャの詳細

Q18: LayerNorm vs. BatchNorm — なぜ Transformer では LayerNorm なのですか?

BatchNorm はバッチ次元にわたって正規化します — ある位置でバッチ内の全サンプルに対して統計量を計算します。これは固定サイズの入力を持つ画像モデルにはうまく機能しますが、Transformer には 2 つの問題があります。第一に、シーケンス長が変わるので、バッチ要素をまたいで正規化する安定した「同じ位置」が存在しません。第二に、大規模なモデル学習ではデバイスあたりのバッチサイズが非常に小さいことが多く、BatchNorm の統計がノイジーで不安定になります。LayerNorm は各トークンを独立して特徴次元にわたって正規化します — バッチ統計不要、シーケンス長制約なし。また学習時と推論時で同じように動作します。これは正確さのために重要です。LayerNorm はオリジナルの論文以来 Transformer モデルの標準であり、置き換える真剣な競合者はいません。

Q19: Pre-Norm vs. Post-Norm — どちらが良いですか?

オリジナルの 2017 年の Transformer は Post-Norm を使っていました: x = LayerNorm(x + SubLayer(x))。ほとんどの現代の LLM は Pre-Norm を使います: x = x + SubLayer(LayerNorm(x))。この違いは深いネットワークの学習安定性に影響します。Post-Norm では残差ストリームが各層の出力で正規化されます — 浅い深さでは有効ですが、多くの層を通る勾配フローを難しくします。Pre-Norm では残差ストリームはメインパスで正規化されず、スタック全体を通るより綺麗な勾配フローが可能になります。Pre-Norm は今やほぼすべての真剣なモデルのデフォルトです(GPT-2、LLaMA、Mistral)。スクラッチから Transformer を実装するなら Pre-Norm を使ってください。オリジナル論文の Post-Norm は深さでの不安定を避けるために慎重なウォームアップと学習率スケジューリングが必要でした。

Q20: なぜ FFN は 4× に拡張するのですか?

オリジナル論文での経験的な選択で、うまく機能するので残っています。各 Transformer ブロックの FFN は d_model 次元の残差を 4 × d_model に射影し、非線形性を適用し、戻します。4× 拡張は FFN に事実の関連付けを保存・検索するのに十分な容量を与えます — FFN は Attention が行うことを補完するキーバリューメモリストアとして説明されることもあります。一般的に広いほど良いですが、ある点まで、4× が慣例になりました。いくつかのアーキテクチャは逸脱しています: LLaMA はゲーティングメカニズムで同様の容量を実現するために SwiGLU 活性化で約 8/3× 拡張を使います。具体的な比率は十分な容量を持つことよりも重要ではありません; 4× は合理的な出発点です。

Q21: 残差接続とは何ですか?なぜ必要なのですか?

残差接続(スキップ接続とも呼ばれる)は層の入力を出力に直接加算します: output = x + SubLayer(x)。直感: 各層に完全な変換を強制するのではなく、増分的な変化(「残差」)だけを学習させます。これには 2 つの重要な効果があります。第一に、損失から早い層まで、すべての非線形性を通過せずに直接勾配が流れる高速道路が作られます — 深いネットワークの学習を劇的に改善します。第二に、初期化時、各層は残差に対してゼロに近いものを寄与します(重みが小さいため)。なので初期計算はほぼ恒等関数になります。これは安定した出発点です。残差接続なしでは、100 層の Transformer はほぼ学習不可能です。あれば、浅いモデルとほぼ同じ信頼性で学習します。


C.6 実践的な問題

Q22: GPU なしでモデルをファインチューニングするにはどうすればいいですか?

正直な答えは: モデルサイズとタスクによります。最大 ~3B パラメータのモデルであれば、十分な RAM と根気があれば現代の CPU でファインチューニングできます — 遅いですが可能です。より実践的には: LoRA(低ランク適応)が学習可能なパラメータ数を劇的に削減し、コンシューマー GPU や Colab 程度のハードウェアでのファインチューニングを実現可能にします。QLoRA は LoRA の上に 4 ビット量子化を追加し、7B モデルのファインチューニングを単一の 16GB GPU の射程内に収めます。GPU なしのセットアップには、クラウドプロバイダー(Google Colab、Lambda、Vast.ai)が時間単位の GPU レンタルを提供しています。短いファインチューニングランでは思ったより安いことが多いです。より大きな制約は通常、計算量ではなくデータ品質です — LoRA でファインチューニングされた数千の高品質な例は、しばしば 10 万のノイジーな例を上回ります。

Q23: モデルの出力が繰り返しになっています。何を直せばいいですか?

繰り返しはほぼ常にモデルアーキテクチャの問題ではなく、Temperature とサンプリングの問題です。まず確認: Temperature が低すぎませんか?非常に低い Temperature(0.3 以下)では、最高確率の継続が文字通り直前に生成したトークンと同じになることが多いため、モデルがループします。Temperature を 0.7〜1.0 に上げてみてください。次に: 繰り返しペナルティを追加します(ほとんどの推論ライブラリで repetition_penalty = 1.11.3)。これは最近生成されたトークンのロジットを割引します。第三に: 貪欲または低 Temperature サンプリングから Top-P サンプリング(top_p = 0.9)に切り替えます。これらの調整後も繰り返しが続く場合、基盤となるモデルが繰り返しデータで学習された可能性があります — これはより多くのファインチューニングまたは別のベースモデルが必要なデータ品質の問題です。

Q24: モデルの出力が非整合です。何を直せばいいですか?

非整合は繰り返しとは異なる根本原因を持っています: モデルが分布の高エントロピー領域からサンプリングしています。まず Temperature を確認します — 1.2 以上では出力がしばしばワードスープになります。0.7〜1.0 に下げてください。Top-K を使っている場合は top_p = 0.9 の Top-P に切り替えてみてください。より適応的です。合理的な Temperature でも問題が続く場合、プロンプトがモデルに十分なコンテキストを与えているか確認します — 非常に短い、または曖昧なプロンプトは高分散な出力を生みます。また、モデルがあなたのタスクに実際に適切かどうかも確認します: ベースモデル(指示チューニングされていない)は、整合した対話を生成するために非常に特定のプロンプト形式が必要です。ファインチューニングをしていて非整合が見られる場合、学習損失がまだ高いかどうか確認します — モデルがまだ十分に学習できていない可能性があります。

Q25: 特定のモデルの GPU メモリをどう見積もりますか?

半精度(BF16/FP16)での推論の粗い公式: モデルパラメータ数 × 2 バイト。7B パラメータのモデルはパラメータだけで約 14 GB 必要です。KV キャッシュを追加: 2 × n_layers × n_heads × head_dim × context_length × batch_size × 2 バイト。7B モデル、32 層、32 ヘッド、head_dim 128、コンテキスト 4096、バッチサイズ 1 の場合: 追加で約 2 GB。学習では、勾配・オプティマイザー状態(Adam はパラメータごとに 2 つの追加テンソルを使う)・活性化を考慮して、パラメータメモリの約 12〜18 倍を掛けます。LoRA + 4 ビット量子化で 7B モデルの学習フットプリントを ~8〜10 GB に下げることができ、コンシューマー GPU に収まります。迷ったときは見積もりに 20% のマージンを加えます — メモリの断片化とフレームワークのオーバーヘッドは実在します。


C.7 デバッグ

Q26: 学習損失が NaN になりました。何が起きましたか?

NaN の損失はほぼ常に少数の原因のうちの一つを持っています。最も一般的: 学習率が高すぎて、float16 がオーバーフローするパラメータ更新が発生しています。学習率を 10 倍下げるか、BF16 に切り替えてみてください(BF16 は FP16 より広いダイナミックレンジを持つ)。2 番目に一般的: 悪いバッチ — 有効なトークンがゼロのシーケンス、またはすべてのトークンがマスクされている場合、損失の計算で 0/0 が発生します。3 番目: 勾配爆発 — まだ追加していなければグラジエントクリッピング(max_norm = 1.0)を追加してください。4 番目: 入力データそのものの NaN が順伝播に伝播しています。デバッグ手順: 損失の NaN チェックを追加し、最初に発生したときのバッチインデックスをログに記録します; そのバッチを異常がないか調べます。最初のステップで NaN が見られる場合はほぼ確実に初期化またはデータの問題; 多くのステップが経過してから発生する場合はたいてい学習率または特に難しいバッチです。

Q27: 学習損失は下がっているのにモデルがゴミを生成します。なぜですか?

損失は正しいことを測定しています(正解からの次のトークン予測)が、それは生成品質を保証しません。このケースに当てはまる失敗モードがいくつかあります。一: モデルが学習分布を記憶したが汎化できない — ホールドアウト検証セットで確認します。二: 評価時に Temperature が高すぎる; Temperature 0.7 または貪欲を試します。三: トークナイザーの不一致 — あるトークナイザーで入力をエンコードし別のトークナイザーでデコードすると、完璧なロジットでも出力がナンセンスになります。四: モデルが指示チューニングされたチェックポイントなのにベースモデルとしてプロンプトされている、またはその逆。五(あまり一般的でない): 推論中の数値精度の問題 — 学習と同じ dtype を使っているか確認します。最も信頼できる診断は、Teacher Forcing で既知の例に対してモデルを実行し、トークンごとの確率が合理的に見えるかどうかを確認することです。

Q28: 同じプロンプトで時間によって異なる出力が出ます。バグですか、仕様ですか?

仕様で、意図的なものです。ゼロより高い Temperature を使用している場合、または純粋な貪欲以外のサンプリング戦略を使用している場合、モデルは確率分布からサンプリングします — 異なる実行は異なるドローを生みます。これは設計によるものです: 決定論的な貪欲出力はしばしば繰り返しが多く、あまり有用ではありません。再現性が必要なら、推論ライブラリに固定ランダムシードを設定し、Temperature 0(貪欲)を使います。API 呼び出し全体で一貫性が必要なら seed パラメータを探します — ほとんどの現代の推論 API はこれを公開しています。基礎となるモデルは同じ入力とランダムシードが与えられれば決定論的です; 見かけ上の非決定論はサンプリングステップから来ています。一部のハードウェア(非決定論的オペレーションを持つマルチ GPU 推論)では同じシードでも異なる結果が得られます — これは分散推論に特有のより深い再現性の問題です。


C.8 概念の整理

Q29: Attention vs. Self-Attention vs. Cross-Attention — それぞれ何ですか?

Attention は一般的なメカニズムです: クエリとキーの間の関連性スコアを使ってバリューの加重和を計算します。Self-Attention はクエリ・キー・バリューがすべて同じシーケンスから来る Attention です — 各トークンが自分のシーケンス内の他のすべてのトークンに注目します。Cross-Attention はクエリが一つのシーケンスから来て、キーとバリューが別のシーケンスから来る Attention です。GPT スタイルのデコーダーのみのモデルでは、すべての Attention 層が Self-Attention です(モデルは自分のシーケンスしか見ない)。オリジナルの Transformer や T5 のようなエンコーダー・デコーダーモデルでは、デコーダーは Self-Attention(以前に生成されたトークンへの注目)と Cross-Attention(エンコーダーの出力への注目)の両方を持ちます。誰かが「モデルが Attention を使う」と言えば、ほぼ確実に Self-Attention を意味しています。

Q30: エンコーダーのみ vs. デコーダーのみ vs. エンコーダー・デコーダー — どれをいつ使いますか?

エンコーダーのみのモデル(BERT、RoBERTa)は入力全体を双方向に読み、豊富な表現を生成します。固定入力の深い理解が必要な分類・固有表現認識などのタスクに最適です。デコーダーのみのモデル(GPT、LLaMA、Mistral)は自己回帰的にテキストを生成し、オープンエンド生成・指示への従順・チャットに最適です。エンコーダー・デコーダーモデル(T5、BART、オリジナルの Transformer)はエンコーダーで入力を圧縮し、デコーダーで出力を生成します — 翻訳や要約のような明確な入出力構造を持つタスクに最適です。スケーリング則がデコーダーのみを支持し、指示チューニングによってエンコーダーなしでも分類・抽出タスクを教えられるため、フィールドは汎用 LLM にはデコーダーのみに大きく収束しています。エンコーダーのみのモデルは埋め込みと検索タスクでは依然として強力です。

Q31: 事前学習 vs. ファインチューニング vs. アライメント vs. RLHF — それらはどう関係しますか?

これらは現代の LLM 製品パイプラインの 4 つの段階で、この順序です。事前学習: 次のトークンを予測するために大きなコーパスでスクラッチからモデルを学習します — これがモデルが一般的な知識と言語能力を習得する場所です。ファインチューニング(SFT、教師あり Fine-Tuning とも呼ばれる): ターゲットタスクまたは形式のキュレートされた例で事前学習済みモデルを学習します — これで指示に従い、正しいスタイルの出力を生成することを教えます。アライメント: モデルを役立ち・無害・正直に振る舞わせるという広い目標です — ファインチューニングは一つの手段ですが、アライメントはより広いエンジニアリングと研究の問題です。RLHF(人間のフィードバックからの強化学習): 人間の評価者がモデルの出力をランク付けし、報酬モデルがその好みを学習し、ポリシー(LLM)が PPO または類似のアルゴリズムを使って報酬モデルに対して最適化される特定のアライメント技術です。RLHF は ChatGPT を生の事前学習済みモデルとは質的に異なるものにした技術です。4 つの段階は逐次的です; ファインチューニングとアライメントをスキップすると、テキストを予測できるが質問に役に立つ形で答えないモデルが残ります。


C.9 高度なトピック

Q32: 「創発的能力」とは正確に何ですか?それは本物ですか?

創発とは、小さいモデルにはない能力が大きいモデルに現れる現象を指し、一見非連続的に見えます — 例えば多ステップの算術・連鎖的な推論・文脈内学習が特定のモデルスケール付近で現れるなど。経験的な観察は本物です: 一部のタスクは閾値以下でほぼゼロのパフォーマンスを示し、それ以上では人間に近いパフォーマンスを示します。解釈は議論中です。一つの見方: これらの能力はスケールから真に創発し、小さいモデルに潜在的に存在するわけではない。反論(Wei et al., 2022; Schaeffer et al., 2023): 不連続性はしばしば評価指標のアーティファクトです — 精度の代わりに連続的な指標を使うと、しばしばスムーズなスケーリングが明らかになります。実践的な結論は本物です: スケールは特定の能力に対して非常に重要で、1B パラメータでは不可能なことが 70B では簡単になります。それを「創発」と呼ぶか「急峻なスケーリング」と呼ぶかは部分的に意味論的な問題です。

Q33: なぜ o1 や R1 のような推論モデルには「考える時間」が必要なのですか?

標準的な LLM は 1 トークンずつ生成し、各トークンに即座にコミットします。数学の証明・論理パズル・複雑なコーディングタスクのような多段階の推論が必要な問題では、単一の順伝播では正しい答えに到達するのに十分な計算が得られないことが多いです。推論モデルは最終回答を生成する前に中間的な「思考」トークン(スクラッチパッドとして見えることもあれば、隠れることもある)を生成することでこれに対処します。これにより、難しい単一ステップの問題が、モデルが自己回帰的に生成できるより簡単な一連のステップに変換されます。より深い点は、推論計算量がある程度まではモデルサイズと学習計算量の代わりになれるということです — 長く「考える」小さいモデルは即座に生成する大きいモデルに匹敵できます。これが、学習時計算量スケーリングと並んでテスト時計算量スケーリングにフィールドがますます注目している理由です。

Q34: Mamba が Transformer より優れている可能性があるのは何故ですか?劣っているのは何故ですか?

Mamba は線形(2 乗ではなく)の時間とメモリ複雑度でシーケンスを処理する選択的状態空間モデル(SSM)です。重要なメカニズムは、各ステップでどの情報を保持してどれを破棄するかを決定する、入力依存の学習済み選択行列です — Attention に類似していますが、全ペア比較ではなく再帰として動作します。潜在的な利点: 長いシーケンスに対してはるかに高速な推論(O(n2)O(n^2) ボトルネックなし)、コンテキスト長に関わらず固定サイズのメモリ、非常に長いシーケンス長での高速な学習。欠点: Mamba は過去のコンテキストを固定サイズの隠れ状態に圧縮するため、Attention が正確に保持するであろう情報を失う可能性があります。経験的に、現在の LLM で一般的なシーケンス長(4k〜128k トークン)では、よくチューニングされた Transformer はほとんどのベンチマークで Mamba に依然として匹敵するか上回ります。アーキテクチャ競争は進行中で、ハイブリッドモデル(SSM と Attention 層を交互に使う)が実際の可能性を示しています。


C.10 学習のアドバイス

Q35: 各コンポーネントは理解しているのに、全体がまだぼんやりしています。どうすれば良いですか?

小さな GPT をスクラッチで実装してください。ライブラリを使って 10 分で作るのではなく、生の行列演算から。埋め込みルックアップ・Q/K/V 射影・スケールドドットプロダクト Attention・因果マスク・Softmax・FFN・残差加算・LayerNorm・出力射影を書きます。いくつかの層を積み重ねます。学習ループを書きます。小さなテキストコーパスで損失が下がるまで学習します。数トークン生成します。この演習は、接続部分のバグがすぐに表面化するため、ぼんやりした断片を結晶化させます。エンジニアへの私の説明の仕方: 自転車の乗り方を読み、各コンポーネント(ハンドル・ペダル・バランス)を理解することと、実際に乗ることができることは別のことです。実装が乗ること。第 3〜6 章ではコード付きで各コンポーネントを扱っています; それらをまとめることが本書を「わかった」にする演習です。

Q36: 元の論文を読むべきですか?

はい、最終的には — ただし最初ではありません。論文はあなたがすでに直感を持っていることを前提として、正確な詳細を埋めています。「Attention Is All You Need」をメンタルモデルを構築する前に読み始めると、表記法に迷い、方程式のためにアーキテクチャを見失う可能性があります。私の推奨する順序: この本のようなリソースから直感を構築し、モデルを自分で実装し、次に設計決定とアブレーションを理解するために論文を読みます。その後、すでに何が説明されているかを知っているので、論文はずっと速く読めるようになります。この本の後に読む最も重要な論文: 「Attention Is All You Need」(Vaswani et al., 2017)・「Language Models are Few-Shot Learners」(Brown et al., 2020)・「Training language models to follow instructions with human feedback」(Ouyang et al., 2022)・そして現代のエンジニアリング決定のための LLaMA 論文群。

Q37: この本の後、何をすればいいですか?

3 つの具体的な次のステップ。第一に、実装してください: 小さなコーパス(シェイクスピア、コード、あなたが興味あるもの)で学習した文字レベルまたは BPE レベルの GPT を構築してください。Andrej Karpathy の nanoGPT コードベースが良いリファレンスです。第二に、より広くなってください: ファインチューニング・LoRA・量子化・推論最適化は今やコアなエンジニアリングスキルです — Hugging Face エコシステムが実践的な入口です。第三に、より深くなってください: メカニズムに慣れたら、研究の最前線(長いコンテキスト・混合エキスパート・マルチモーダル・推論モデル・アライメント)が基礎を持っているためにアクセス可能になります。この本のアーキテクチャは、他のすべてが構築される基礎です。フィールドは速く動きますが、コアのアイデアは 2017 年以来安定しています — それらを深く理解することで、各増分的な進歩をゼロから追いかけるのではなく、素早く学べる立場に立てます。


これらが最もよく聞く質問です。ここにないものがあれば、本書の GitHub が適切な場所です。

このページを引用する
Zhang, Wayland (2026). 付録 C: よくある質問 FAQ. In Transformer アーキテクチャ:直感から実装まで. https://waylandz.com/llm-transformer-book-ja/appendix-c-faq
@incollection{zhang2026transformer_ja_appendix_c_faq,
  author = {Zhang, Wayland},
  title = {付録 C: よくある質問 FAQ},
  booktitle = {Transformer アーキテクチャ:直感から実装まで},
  year = {2026},
  url = {https://waylandz.com/llm-transformer-book-ja/appendix-c-faq}
}