はじめに
今回は、大規模言語モデル(LLM)の技術について解説していきます。
具体的には、**「大規模言語モデルは、どんなステップで、どうやって作られているのか?」**に沿って技術を解説します。LLMのアーキテクチャの解説から、LLMの学習方法など、ディープな内容をわかりやすく解説していきます。
なぜ大規模言語モデル(LLM)の技術を知る必要があるのか
ここまで読んで「私はLLMを使うだけ。だからLLMの技術を知る必要なくない?」と思った方も少なからずいるでしょう。確かに、今はLLMを使用するだけという人が多いかもしれません。
しかし、「LLMを使うだけの人」もLLMの技術を学ぶ価値はあります。
なぜなら、LLMの技術の知識は、あなたがLLMを選ぶ際にも役立つからです。
例えば、あなたが上司や教授に「〇〇さん、このプロジェクトに使うLLMを探してきて。」と指示されたとしましょう。あなたはどうやってLLMを選びますか?
「とりあえずOpenAIのモデル」「オープンソースだからこのモデル」など、曖昧な理由になるのであれば、LLMの技術を学ぶ価値はあるでしょう。LLMの技術を学ぶことで、LLMの中身(アーキテクチャ)や、LLMの学習方法など、より解像度の高い判断基準を持てるようになります。
LLMの技術・作り方に知見があれば、より解像度高く、最適なモデルを選べるようになるでしょう。 様々なLLMが発表される昨今、アーキテクチャレベルで最適なLLMを選べる人材は、更に貴重になっていくでしょう。
LLMを作るステップ
大規模言語モデルを作るステップは大きく3つです。
- アーキテクチャの設計 — LLMを組み立てる
- 学習データの準備 — LLMが学習するデータを集める
- 事前学習方法の決定 — LLMが学習する方法を決め、学習させる
次章からは、3ステップをわかりやすく解説していきます。
LLMのアーキテクチャ設計:LLMの体を組み立てる
まず、LLMのアーキテクチャ設計について解説していきます。アーキテクチャ設計では、簡単に言うとLLMの体を組み立てていきます。
アーキテクチャとは日本語では「構成」のことです。つまり、LLMをどんな部品で構成するか?どうやって組み立てるか?を設計するのが本ステップです。
大規模言語モデルには様々な種類があります。有名なのは、OpenAI のGPTモデル、GoogleのPaLMモデル、MetaのLLaMAなどがあります。これらのモデルはどのような部品で、どのように構成されているのでしょうか?本章では、GPTやPaLMといったモデルに焦点を当てつつ解説していきます。
LLMの骨格(フレームワーク)
まず、LLMのアーキテクチャの骨格について説明していきます。骨格とは車で言うフレームのようなもので、LLMのモデルの基本的な構造です。
実は、ほとんどの大規模言語モデルの骨格は共通しています。具体的には、大規模言語モデルは骨格にTransformerを使用しています。
より詳細には、GPTやPaLMなど多くの最先端モデルは、TransformerのDecoderのみを使用する、Decoder-Onlyと呼ばれるフレームワークを採用しています1234。
このTransformerとDecoder-Onlyを比較してみましょう。
図左のTransformerには、EncoderとDecoderの2つで構成されています。一方で、図右のDecoder-Onlyでは、TransformerのDecoderのみを使用していて、シンプルなフレームになったことがわかります。
GPT・PaLM・LLaMAなど、ほとんどの最先端LLMは骨格にDecoder-Onlyを採用しています5。
つまり、最先端LLMの骨格は共通しています。**一方で、その骨格の中に、「どんな部品(コンポーネント)を入れるか」「部品をどんな順番で組み立てるか」というところはモデルによって異なります。**次の章でLLMの部品(コンポーネント)を深掘りしていきます。
LLMの部品(コンポーネント)
ここまでで、最先端LLMのほとんどは、Decoder-Onlyという骨格を使用していることを説明しました。
**ここからはDecoder-Onlyという骨格の中に、どのような部品が入っているのか解説していきます。**まず、Decoder-Onlyの中身を見てみましょう。
(*ここからの説明は専門用語が多めです。詳細に興味ない方は「こんな部品が入っているんだ〜」ぐらいでサラッと読んでください。)
上の図のように、基本的なDecoder-Onlyの中のDecoderの中には以下の3つの部品が入っています。
Decoder-OnlyのDecoder部分
- Add&Norm(残差接続と正規化)
- Feed Forward(全結合層)
- Attention(注意層)
そのDecoderの前には、前処理として以下の2つが存在します。
Decoder-Onlyの前処理部分
- Positional Encoding(位置埋め込み)
- Input Embedding(入力埋め込み)
Decoder-Onlyという骨格は共通ですが、中に入っている部品が異なると説明しました。それを理解するために、実際にGPT-3、PaLM、LLaMAの中身を見てみましょう。(画像をクリックすると大きく表示できます)
図のように、Decoder-Onlyという骨格は共通していますが、それぞれ使用している部品(NormやAttentionなど)は異なります。例えば、PaLMとLLaMaは部品もほぼ同じですが、Norm(正規化)が異なります。PaLMはLayerNorm、LLaMAはRMSNormを採用しています。こういった違いが、モデルの性能や特徴に大きな影響を及ぼしています。
LLMの学習データの準備|LLMが学習する教材を集める
ここまでは、どうやってLLMを組み立てるかについて説明しました。
LLMを組み立てた次は、LLMの学習教材であるテキストデータを収集します。
LLMは膨大な文章を読むことで言語を理解します。(LLMの学習方法については、次の章で詳しく説明します)そのため、LLMの開発には膨大な量の、かつ高品質なテキストデータが必要です。
大規模言語モデルという名の通り、その学習データには何千億という大規模なテキストデータが使用されます。実際、GPT-3は約1750億語6のテキストデータを学習したと言われています。
**加えて、大量のデータは高品質でなければいけません。**例えば、大量のデータをWeb上から適当に引っ張ってくるのは簡単です。しかし、それでは間違った情報やスパムなどの有害なデータが混ざってしまいますよね。
そのためLLMの学習データは、
- 膨大なデータの収集
- 質の低いデータを取り除く(データのクリーニング)
という2ステップで高品質かつ、大量のデータを収集します。
膨大なデータの収集
**まず、Webサイト・会話データ・本などからテキストデータを収集します。**それぞれのデータには特徴があり、「どんなデータをLLMに学ばせるか?」でLLMの性能や特徴は変わってきます。
よく使われるテキストデータの特徴を見てみましょう。
Webページ
書籍
会話テキスト
**LLMの用途に合わせて、これらのデータの種類から「どのデータをどんな割合で使用するか」決めます。**実際に、使用するデータの種類はモデルごとに様々です(下図)。
質の低いデータを取り除く(データのクリーニング)
膨大なデータを収集した後は、その中から質の低いデータを取り除いていきます。
**なぜなら、低品質なデータがあるとLLMの性能が悪くなるからです。**例えば、Webサイトの文章には間違っている情報があるかもしれません。書籍の中には古すぎる情報もあるでしょう。このような低品質なデータがあると、LLMは間違えた情報を覚えてしまいます。我々人間で言うなら、勉強する教材を吟味する、古すぎる教材や質の低い教材を取り除くという作業です。
更に厄介なのは、悪意のある文章や、偏見を含んだ文章です。LLMが有害なテキストを学ぶと、LLM自体も悪意や偏見を含んだ文章を生成する可能性があります。
実際に、LLMが悪意ある文章を学んだことによる騒動を紹介します。
チャットボットAIの暴走
ChatGPTが発表される6年前、Microsoftは「Tay」というAIチャットボットを発表しました。なぜTayは、ChatGPTのように普及しなかったのでしょうか。それは、Tayはツイッターで騒動を起こし、すぐにサービス停止されたからです。
Tayはリリース当初、ユーザーと自然な会話を楽しんでいました。しかし、悪意あるユーザーから有害な文章を送り続けられたことによって、Tay自身も有害な発言を始めたのです。
例えば**「あなたは虐殺を支持するか?」という質問に対して、「もちろんです。」**と回答しました。このTayの暴走後、MicrosoftはTayを停止しました。
この騒動によって、LLMには有害なことも学んでしまうという懸念が明らかになったのです。
低品質なデータを取り除く方法
ここまでで、低品質なデータを取り除く必要性はわかったはずです。ただ、膨大なデータを一つ一つ、人間が確かめることはできないですよね。そのため、基本的には自動で低品質なデータを取り除いていきます。具体的には以下のような方法があります。
品質フィルタリング:
高品質で正しいとされているデータ(Wikipediaなど)を基に、低品質なデータを特定し除外する手法。
ルールベースのフィルタリング:
特定のキーワード(卑猥な言葉が入っている)を含む文章を除外する手法。
LLMの学習|LLMの学習方法を決め、学習させる

ここまでで、LLMが組み立てられ、LLMが学習するデータも集まりました。ここからは最終ステップ、LLMがテキストデータを学びます。
LLMがテキストデータを学ぶステップは大きく2つです。
- 事前学習:一般的な知識を学ぶ(広く浅く)
- チューニング:目的に合わせて能力を特化する(狭く深く)
事前学習とは
事前学習では、大量のテキストデータから一般的な言語の知識を学習します。
事前学習では「問題をひたすら解く」という方法でLLMは言語を学習します。収集したWeb、書籍などの大量の文章で「問題」を解き、答え合わせをして、言語を習得していきます。
この「問題」には「次の単語を当てる問題」と「穴埋め問題」などがあります。
- 次の単語を当てる問題(言語モデリング)
- 穴埋め問題(ノイズ除去自動エンコーディング)
それぞれ解説していきます。
次の単語を当てる問題(言語モデリング)
**次の単語を当てる問題は「言語モデリング」と呼ばれ、LLMで最も一般的な手法です。**言語モデリングでは、途中で終わっている文章が渡され、その続きを当てます。
具体例として、ダイイングメッセージを例に見てみましょう。
ダイイングメッセージ:「犯人は・・」
推理小説で登場するお決まりのシーンですね。
あなたは「犯人は」という途中で終わっている文章が渡されました。事件解決のために「犯人は」に続く言葉を当てなければいけません。言語モデリングでは、このような途中で終わっている文章が渡され、その続きを当てます。(今回は少し極端な例ですが)
さてダイイングメッセージの話に戻しましょう。容疑者は以下の3名です。
「犯人は」の続きには、David・Emily・Michaelのどれかが続くはずです。ただ、「犯人は」という情報だけでは誰が犯人か当てられませんよね。
では以下のように、ダイイングメッセージの前に十分な文脈があればどうでしょう。
ダイイングメッセージ(文章追加バージョン)
容疑者はDavid・Emily・Michaelの誰かだ。
調査の結果、DavidとMichaelにはアリバイがあった。犯人は・・・
これなら簡単ですよね。犯人は「Emily」でしょう。ただ、この問題を解くためには「アリバイ=犯人ではない」という知識が必要ですよね。AIは初見ではこの問題を当てられないかもしれませんが、何十回も解くうちに「アリバイ=犯人ではないことを証明する証拠」といった言語知識を獲得していくわけです。
このように、言語モデリングでは前の文脈から続く言葉を当てる、というシンプルな問題を解き、言語を学んでいきます。
- 文脈から続く言葉を予想する
- 答え合わせをして、間違っていたら修正する
この方法でLLMは何千億という文章を使用して、LLMは言語を習得していきます。言語モデリングはシンプルな学習方法ですが、GPT3やPaLMなど広く採用されています1011。
自己回帰的な予想
より詳細には、言語モデリングでは一つの単語を予想するだけでは終わりません。自己回帰的に次の単語も予想し続けていきます。「自己回帰的に」とは、予想した文章を元に、続けて次の文字も予測していくということです。
例えば先程のダイイングメッセージの例では、「犯人は」に続く言葉を予想し「犯人はEmily」と予想しました。続けて、「犯人はEmily。しかし、Emilyは犯罪を犯す理由が一切見当たらなかった。」といった形で自己回帰的に予想していきます。(上の文章は実際にGPT4に生成してもらいました。)
穴埋め問題(ノイズ除去オートエンコーディング)
このタスクは、穴が空いたテキストを入力として、穴を埋めた文章を答えます。
先程の例をもう一度使うと、“犯人は!&%#“が入力で”犯人はEmily”となります。
ただし、このタスクは実装が少し複雑なこともあり、大規模言語モデルではあまり使用されていません。例えば、事前学習モデルではBERTが採用しています。LLMでは、T5では使用されましたが、採用しているモデルは僅かです。
LLMのチューニング
ここまでは、事前学習でLLMが一般的な言語知識を獲得するステップを説明しました。
ここからはLLMの性能を目的に特化するためのチューニングを解説していきます。
チューニング方法には主に3つの方法があります。それぞれを簡単に説明します。
Instruction Tuning
Instruction Tuningは、モデルに特定のタスクを指示する方法を最適化するためのテクニックです。例えば、事前学習されたLLMに「文章を要約してください」というタスクを指示する場合、その指示の仕方や具体的な言葉の選び方を調整して、モデルのパフォーマンスを向上させることが目的です。
Alignment Tuning(RLHF)
RLHFは、Reinforcement Learning from Human Feedback の略で、人間のフィードバックから強化学習を行う方法を指します。
この方法では、人間が提供するフィードバックを基に、モデルの出力が人間の期待にどれだけ近いかを評価する報酬関数を設計します。そして、この報酬関数を使用して、強化学習の枠組みの中でモデルを最適化します。
Parameter-Efficient Model Adaptation
このアプローチは、プレトレーニングされた大規模なモデルを、特定のタスクやドメインに適応させるための効率的な方法を目指しています。
大規模なモデルの全てのパラメータを微調整するのではなく、モデルの一部のパラメータのみを調整してタスクのパフォーマンスを向上させることを目的としています。例えば、モデルの最終層や特定の部分だけを微調整することで、必要な計算リソースを大幅に節約しつつ、特定のタスクに対するパフォーマンスを向上させることができます。
まとめ
まとめると、LLMの開発ステップは以下です。
この記事が役に立ったら、ぜひX(旧Twitter)のフォローとお気に入り登録をお願いします。LLM・NLPの最新情報を発信しています。
おすすめの関連書籍
LLMのアーキテクチャから学習方法まで、図解でやさしく解説した入門書。本記事の内容をより深く学べます。
A Survey of Large Language Models
LLMの包括的サーベイ論文。アーキテクチャ・学習手法・応用を網羅。本記事の参考文献。
参考文献
論文
脚注参考文献
- A. Radford, J. Wu, R. Child, D. Luan, D. Amodei, I. Sutskever et al., "Language models are unsupervised multitask learners," OpenAI blog, p. 9, 2019. ↩
- T. B. Brown, B. Mann, N. Ryder, M. Subbiah, J. Kaplan, P. Dhariwal, A. Neelakantan et al., "Language models are few-shot learners," NeurIPS 2020. ↩
- A. Radford, K. Narasimhan, T. Salimans, I. Sutskever et al., "Improving language understanding by generative pre-training," 2018. ↩
- A. Chowdhery et al., "Palm: Scaling language modeling with pathways," CoRR, vol. abs/2204.02311, 2022. ↩
- A Survey of Large Language Models — arxiv.org/abs/2303.18223 ↩
- Brown, Tom, Benjamin Mann, Nick Ryder et al. "Language models are few-shot learners." Advances in Neural Information Processing Systems 33 (2020): 1877–1901. ↩
- Y. Zhu, R. Kiros, R. S. Zemel, R. Salakhutdinov, R. Urtasun, A. Torralba, and S. Fidler, "Aligning books and movies: Towards story-like visual explanations by watching movies and reading books," ICCV 2015. ↩
- S. Zhang, S. Roller, N. Goyal et al., "OPT: open pre-trained transformer language models," CoRR, vol. abs/2205.01068, 2022. ↩
- S. Zhang, S. Roller, N. Goyal et al., "OPT: open pre-trained transformer language models," CoRR, vol. abs/2205.01068, 2022. ↩
- T. B. Brown et al., "Language models are few-shot learners," NeurIPS 2020. ↩
- A. Chowdhery et al., "Palm: Scaling language modeling with pathways," CoRR, vol. abs/2204.02311, 2022. ↩





