LLM(大規模言語モデル)って最近よく耳にしますよね。ChatGPTなどで注目されていますが、「中で何が行われているの?」と思ったことはありませんか?本記事では、難しい数式やアルゴリズムの厳密な話は抜きにして、LLMの内部構造をざっくりと解説します。
扱う内容は、例えば入力のテキストがどのように処理されて出力の文章になるか(トークナイザ→埋め込み→Transformer層→出力)、Transformerというアーキテクチャのキモ(自己注意機構=Self-Attention、位置エンコーディング、残差接続、LayerNormなど)、Attention機構の役割を直感的に説明すること、さらにLLMの学習プロセス(事前学習とファインチューニングの流れ)、そして「層が深い」「モデルが大きい」とはどういう意味でどんなインパクトがあるのか――といった点です。それでは早速、中身を見ていきましょう!
LLMの基本構成: 入力から出力まで
まず、LLMの内部は基本的なパイプライン構造になっています。入力されたテキストがトークナイザによってトークン(単語や記号などの単位)に分割され、それが数値ベクトルに埋め込み(Embedding)変換されます。続いて、そのベクトル列がTransformerと呼ばれるニューラルネットワークの層で処理され、最後に出力として次の単語が予測されます。この流れを順に追ってみましょう。
- 入力 & トークナイザ: ユーザから与えられたテキスト入力は、まずトークナイザという処理系でモデルが扱いやすい単位に分割されます。ここでいうトークンとは、単語そのものや単語の一部、記号など、意味をなす最小単位です。例えば英語では
it's
という短い文章がit
,'s
という2つのトークンに分かれることがあります(「単語 = トークン」ではない点がポイントです)。トークナイザにより入力文字列が一連のトークンIDに変換されます。 - 埋め込み層 (Embedding): 各トークンはベクトル(数値の集合)にマップされます。これが単語埋め込みと呼ばれるもので、トークンごとの意味的な特徴を表す高次元ベクトルです。モデルはこの数値ベクトル列を入力として受け取ります。言い換えると、人間の言葉をコンピュータが扱いやすい「数字の並び」に変換しているわけです。
- Transformer層による処理: 埋め込みベクトル列は、Transformerと呼ばれるネットワークの中に入ります。Transformerは自己注意機構(後述)やフィードフォワードネットワークを含むブロック構造で、これが何層も積み重なっています。各Transformer層で入力ベクトル列は文脈に応じて変換・更新され、徐々に文章の意味や文脈情報が濃縮されていきます。
- 出力 (デコーダ): 最後にTransformerの出力から、人間が読める単語列が生成されます。具体的には、モデルの最終出力ベクトルから次に来るべきトークンの確率分布を計算し、一番それらしい単語を選んで出力します。そしてその出力した単語を次の入力に追加して再度モデルに通すことで、文章を一語ずつ継続生成していきます(この一連の文章生成部分をデコーダと呼ぶこともあります)。GPT系モデルでは文脈に基づいて次のトークンを一つずつ予測しながらテキストを生成する仕組みになっています。
ざっくり言えば、「人間の言葉」をいったん「数字の列」に変換し、それを高度なニューラルネットワークで処理して、最後にまた「人間の言葉」に戻している、というわけです。この基本構造を押さえた上で、次にTransformer内部の仕組みについて見てみましょう。
Transformerアーキテクチャの基本
LLMの核となっているのはTransformer(トランスフォーマー)と呼ばれるニューラルネットワーク構造です。2017年にGoogleの研究者らが提案したこのモデルは、従来主流だったRNN(再帰型ニューラルネット)とは異なり、単語の列を一括して並列に処理できるのが特徴です。そして自己注意機構 (Self-Attention) により文中の単語同士の関係性を動的に捉え、長文の文脈も効率的に理解できるようになりました。Transformerではこの仕組みを含むブロック(層)を何十層も積み重ねて表現力を高めています。各ブロックに含まれる主な要素を簡単に紹介しましょう。
- 自己注意機構 (Self-Attention): 各トークン(単語)のベクトルが他のトークンのベクトルを参照し、関連度に応じて情報を取り込む仕組みです。簡単に言えば「他の単語に目を向けて、自分にとって重要な部分に注意を傾ける」処理を行っています。これにより離れた単語同士の関係も捉えることができ、長い文脈の依存関係も扱えるようになります。また、TransformerではこのAttentionを独立した複数のヘッドに分けて並行して行うマルチヘッド・アテンションを用いて、異なる種類の関係性を同時に学習しています(各ヘッドがそれぞれ異なる視点で注意を計算します)。
- フィードフォワードネットワーク (FFN): Self-Attentionで各単語が他から情報を集めた後、その結果のベクトルを各トークン毎にさらに変換する小さな全結合ネットワーク(多層パーセプトロン)が各ブロック内に含まれています。難しい言い方をすれば、各トークンの表現を高次元空間で写し変えて特徴を抽出する工程ですが、要するに各単語のベクトル表現を個別に磨く段階だと思ってください。Attention層が「単語間の情報のやり取り」だとすれば、このFFN層は「各単語の情報をより洗練させる」役割を担っています。
- 位置エンコーディング (Positional Encoding): 単語の順序情報をベクトルに組み込む仕組みです。Transformerは単語列を並列に処理するため、そのままでは語順を認識できません。そこで各位置に対応した所定のパターンのベクトル(例えばあらかじめ定めた周期関数に基づく数列など)を単語の埋め込みベクトルに加算し、「この単語は入力の中で何番目か」を表現できるようにします。こうすることでモデルは単語同士の距離や順序関係を把握できるようになります。
- 残差接続 (Residual Connection) と Layer Normalization: Transformerの各サブ層(AttentionやFFN)の出力には、その入力をそのまま足し合わせて次に渡す残差接続が使われています。また、その和に対しLayer Normalization (LayerNorm) という正規化処理も施されています。地味な存在ですが非常に重要な縁の下の力持ちです。残差接続のおかげでネットワークが深くなっても勾配が極端に減衰せず(入力の情報がそのまま次層に伝わるため)学習が進みやすくなり、LayerNormによって各層の出力のスケールが調整され学習の安定性が向上します。
以上がTransformerブロック内の主な構成要素です。要素の詳細は専門書に譲りますが、要点は「Attentionで単語同士の関係性を取り入れ、FFNで各単語の表現を磨き、適切に位置情報を加味しつつ、残差+正規化で安定してそれらを積み重ねている」ということです。
Attention機構の役割を直感的に理解する
では、このAttention (注意) 機構が実際に何をもたらしているのか、直感的な例で見てみましょう。自己注意では各単語が他のどの単語と強く関係しているかを学習しますが、それによってモデルが得られるメリットを示す典型例があります。
例えば英文で The animal didn't cross the street because it was too tired.
という文があったとします。この文中の it
が何を指しているか、一瞬で「その動物(animal)のことだな」と理解できますよね。実はモデルも、Self-Attentionの機構により、この対応関係を捉えることができます。Transformerでは単語 it
をエンコードする際に、自己注意によって**it
とanimal
を関連付けて処理し**、「it=animal」であるという文脈上の手掛かりを表現に織り込むのです。
このようにAttention機構は、モデルに「この単語は他のどの単語と関係が深いか?」を考えさせ、その情報を取り入れさせる仕組みです。人間が文章を読むときに重要なキーワードに注目したり、指示詞が指す対象を頭の中で結び付けたりするのと少し似ています。モデルは学習を通じて注意のパターン(どの単語がどれだけ他に影響を与えるか)を獲得し、文脈の把握に役立てています。Attentionという名前のとおり、「どこに注目すべきか」をモデルが学ぶことで、長文の意味解析や一貫した応答生成が可能になっているのです。
事前学習とファインチューニングの流れ
ここまでモデルの構造を見てきましたが、次は**どうやってこのモデルを育てるか(学習させるか)の話です。LLMの学習は大きく分けて事前学習 (Pre-training)とファインチューニング (Fine-tuning)**の二段階で行われます。
事前学習では、モデルに大量のテキストを読み込ませて言語のパターンを学習させます。人手でラベル付けされたデータは使わず、インターネットから集めた記事や書籍、ウェブページ(Common Crawlと呼ばれる数十億ページ規模のデータセットなど)
- 次の単語予測 (Next Token Prediction): ある文脈が与えられたときに、その続きを予測するタスクです。例えば「
The chicken crossed the ____
」という文章を途中まで見せて、次に来る単語が「road
」になるようモデルを訓練します。与えられた直前までの単語列から次の単語を当てるという言語モデルの基本タスクで、GPT系のモデルはこちらで事前学習されています。 - マスク化言語モデル (Masked Language Modeling): 文中の一部の単語を隠しておき(例えば15%の単語を
[MASK]
に置換)、前後の文脈からその隠れた単語が何かを当てるタスクです。文章の穴埋め問題のようなもので、BERTのようなモデルはこちらの方式で事前学習されています。
この事前学習によって、モデルは文法や語彙、言い回しなど言語の一般的なパターンを膨大なデータから統計的に学習します。
言ってみれば、人間が大量の本を読んで語彙や文章力を身につけるような段階です。
ファインチューニングでは、事前学習済みのモデルを特定のタスクに合わせて追加の訓練(微調整)します。
例えば文章の感情分析を行いたいなら、肯定・否定にラベル付けされたデータでモデルをさらに訓練し、分類タスクに特化させます。これによってモデルは一般的な言語知識に加えて、そのタスク固有の出力をする能力を得るのです
最近の大規模モデルでは、事前学習のみでも様々なタスクに対応できる汎用性がありますが、それでも回答をより洗練するために指示に沿った応答をするよう追加微調整(例えばChatGPTにおける人間フィードバックによる調整など)が施されることも多いです。
まとめると、LLMはまず大量のテキストから言語そのもののパターンを学習する段階(事前学習)を経て、その後特定用途に合わせて知識を調整する段階(ファインチューニング)へと進みます。この二段構えのおかげで、未知の文章を流暢に生成しつつ、必要に応じて特定分野に適応させることが可能になっているのです。
層の深さとモデルサイズのインパクト

一つ目の層では各単語の品詞(どの単語が動詞か、名詞か)や基本的な関係性を整理します。二つ目の層では、代名詞 his
が Neil
を指すことや、bank
が文脈上「金融機関」という意味で使われていることなど、より深い文脈の解釈が行われます
層が進むにつれて、持っている情報がどんどんリッチになり、高度な理解が積み重ねられていくイメージです。
実際のLLMではTransformer層が数十にも及ぶことがあります。層が深くなるほど、モデルはより複雑なパターンや長距離の依存関係を表現できるようになります。各層を通過するごとに単語の内部ベクトル表現は洗練され、抽象度が上がっていき、最終層に達する頃には「次にどの単語を出せばよいか」を判断するのに十分な文脈情報が含まれるようになります
例えばGPT-3では単語の埋め込みベクトルの次元数(特徴量の数)が12,288次元にも及び、各単語がそれだけ膨大な情報を内部に抱えていることになります
モデルのパラメータ数(規模)が大きいほど一般に表現力や汎用性も高まる傾向があります。実際、「LLMの性能を向上させる鍵はスケール(大規模化)にある」という指摘もあります
例えばOpenAIのGPT-3はおよそ1750億ものパラメータを持つ巨大モデルで、そのスケールによって非常に流暢な文章生成や少量の例示から推論できる能力(ゼロショット学習)が発現したとされています
またモデルが大きくなるにつれて、一度に処理できるテキストの長さ(コンテキスト長)も拡大してきました。最新のモデルでは数万トークンの入力も扱えます(例えばAnthropic社のClaude 2は一度に最大100Kトークンもの入力を与えられるとされ、数百ページの文書に相当します
)。
もちろん闇雲にモデルを巨大化すれば良いわけではなく、大規模モデルの学習には莫大な計算資源と時間が必要になり、実運用にも高性能なハードウェアが求められるなどの課題もあります
それでも現状ではモデルのスケールアップが性能向上に直結しやすいため、各社こぞってパラメータ数を増やしたLLMを開発しているのが実情です
層を深くしモデルを大きくすることは、LLMがより賢く、多様なタスクに対応できる力を引き出す上で重要なポイントと言えるでしょう。
おわりに
以上、LLMの内部構造について駆け足で説明しました。入力テキストがトークンに分解されてベクトルに変換され、Transformerの多層構造で文脈を捉えつつ処理され、最終的に次の単語を予測して文章を生成する――その一連の流れがお分かりいただけたでしょうか。自己注意をはじめとするTransformerの仕組み自体はアイデアの組み合わせに過ぎませんが、それを大規模データで徹底的に訓練することで、昨今のChatGPTのような高性能な言語AIが実現されています。難解に感じるLLMも、その中身を要素に分解してみると意外にシンプルな構造の積み重ねで動いていることがご理解いただけたかと思います。今後LLMがさらに進化しても基本的な原理は同じですので、本記事の内容が大規模言語モデルへの理解の一助になれば幸いです。
コメント