「大規模言語モデル(LLM)」について学ぶ(ディープラーニング)

この記事では、ディープラーニングを初めて学ぶ筆者が、「大規模言語モデル」について学んだ内容について記載しています。

学習には、Wikipediaの「大規模言語モデル」の記事を参考にしました。

この記事は、他の人が参考にできるよう、わかりやすく書くことを心がけました。

大規模言語モデル(LLM)

大規模言語モデル(Large Language Model、LLM)は、非常に大きな人工的な脳みそみたいなものです。数千万から数十億もの「設定」を持つコンピュータプログラムみたいなものです。これを大量のテキストデータを使って、自分で学習させたり、半分手伝いながら学ばせたりします。

このLLMは、2018年ごろに登場しました。そして、さまざまな言語のタスク(作業)ですごくうまくできるんです。これによって、以前は特定のタスクに特化したモデルを作るのが主流だった自然言語処理の方法が変わりました。今では大規模言語モデルを使って、いろんなタスクをこなすことが注目されています。

大規模言語モデルは、さまざまな分野で素晴らしい成果を出しています。でも、まだまだこれからの段階で、多くの研究者がこれをもっと良くするために頑張っています。

大規模言語モデル(だいきぼげんごモデル、英: large language model、LLM)は、多数のパラメータ(数千万から数十億)を持つ人工ニューラルネットワークで構成されるコンピュータ言語モデルで、膨大なラベルなしテキストを使用して自己教師あり学習または半教師あり学習(英語版)によって訓練が行われる。
LLMは2018年頃に登場し、さまざまなタスク(仕事)で優れた性能を発揮している。これにより、自然言語処理の研究の焦点は、特定のタスクに特化した教師ありモデルを訓練するという以前のパラダイムから転換した。大規模言語モデルの応用は目覚ましい成果を上げているが、大規模言語モデルの開発はまだ始まったばかりであり、多くの研究者が大規模言語モデルの改良に貢献している。

大規模言語モデル

大規模言語モデルとは、非常に大きなディープラーニングモデルのことです。このモデルは、数百万から数十億もの設定を持っており、大量のテキストデータを元に学習します。大きな特徴は、あらゆる種類のタスクに適用できることです。感情分析や固有表現の抽出、数学の推論など、たくさんの異なる仕事をうまくこなすことができるんです。

このモデルは、文の中で次に来る単語を予測するという簡単なタスクをたくさんのデータを使って学んだ結果、人間の言葉の構造や意味の一部を理解できるようになりました。さらに、この大規模な言語モデルは、世の中のさまざまな情報を知っていることがあり、大量の事実を学習して「記憶」することもできるんです。つまり、多くのことを知っているし、いろんなタスクに使えるんです。

大規模言語モデルという用語の正式な定義はないが、大規模コーパスで事前訓練された、数百万から数十億以上のパラメータを持つディープラーニングモデルを指すことが多い。LLMは、特定のタスク(感情分析、固有表現抽出、数学的推論など)のために訓練されたものとは異なり、幅広いタスクに優れた汎用モデルである。LLMがタスクを実行する能力や対応可能な範囲は、ある意味では設計における画期的な進歩には依存せず、LLMに費やされた資源(データ、パラメータサイズ、計算力)の量の関数であるように見える。多数のパラメータを持ったニューラル言語モデルは、文の次の単語を予測するという単純なタスクで十分に訓練することで、人間の言葉の構文や意味の多くを捉えられることがわかった。さらに、大規模な言語モデルは、世の中に関するかなりの一般知識を示し、訓練中に大量の事実を「記憶」することができる。

大規模言語モデル

2023年に行われた調査(メタ分析)によると、多くの研究者や学者が大規模言語モデルに興味を持っています。彼らは、大規模なモデルが新しいアイデアを生み出す可能性に興奮しています。一方で、大きくないモデルではできないような仕事を大規模モデルがうまくやることもあると考える人もいます。

ただし、これに関する議論は、どの基準を使うかによるもので、必ずしも創造性に関連しているわけではないようです。異なる基準を使うと、大規模モデルの創造性が特に優れているという証拠が見られないかもしれません。つまり、大規模モデルの創造性については、状況や基準によって評価が変わる可能性があるということが示唆されているようです。

質の高い証拠とされる2023年のメタ分析によれば、大規模言語モデルの創造性に目を輝かせる研究者はもちろん世界中に存在し、小規模言語モデルにはできないタスクで大規模言語モデルが創造的であると主張する学者もいるが、これは測定基準の選択によるものであり、創造性によるものではないことが示唆されている。異なる測定基準を選択した場合、大規模言語モデルの創造性の優位性は見られない可能性が示唆されている。

大規模言語モデル

特性

事前訓練データセット

大規模言語モデル(LLM)は、いろんな分野や言語に関する大量の文章を使って、最初に学習することがあります。この学習は「事前訓練」と呼ばれています。有名なデータソースとして、Common CrawlやThe Pile、MassiveText、Wikipedia、GitHubなどがあります。ほとんどのオープンソースのLLMは、公開されているデータを使って学びますが、非公開のデータを使うこともあります。

事前訓練データは、いくつかの工程を経て作成されます。たとえば、重複した文章を取り除いたり、害のある文章を排除したり、品質の低いデータを捨てたりする処理が行われます。言語データは年々7%ずつ増えており、2022年10月時点で、高品質なデータが約4兆6,000億語から17兆語ほどあると考えられています。

LLMは、事前訓練データをたくさん使うため、評価用のデータが混ざってしまうと、モデルの性能を測るときに影響を及ぼすことがあります。これを「データ汚染」と呼びます。

大規模言語モデル(LLM)は通常、さまざまな分野や言語にわたる大量のテキストデータで事前訓練が行われる。著名な事前訓練データとしては、Common Crawl、The Pile、MassiveText、Wikipedia、GitHubなどが知られている。大半のオープンソースのLLMは一般公開されているデータを利用しているが、非公開のデータで事前訓練が行われることもある。事前訓練データは、重複排除、毒性が高いシーケンスの除外、低品質データの破棄など、生テキストをさまざまな手順で前処理して作成される。言語データの蓄積は年率7%で増加しており、2022年10月現在、高品質な言語データは4兆6,000億語から17兆語の範囲内にあると推定されている。LLMでは事前訓練データを広範に使用するため、事前訓練データに評価データが混入すると、ベンチマーク評価時のモデル性能に影響を与えるデータ汚染が起こる。

大規模言語モデル

スケーリング則

一般的に、大規模言語モデル(LLM)の性能や特徴は、次の4つの要素で説明されます。それはモデルの大きさ、訓練データセットの大きさ、訓練にかかる費用、そして訓練後の性能です。これらの要素は、実際の数値で定義でき、経験的に「スケーリング則」と呼ばれる単純な統計的法則によって関連していることがわかっています。

ある研究では、自己回帰的な訓練を行ったLLMにおけるスケーリング則を次のように示しています。これは「Chinchillaスケーリング」と呼ばれています。

C = C0 * ND

L = (A / N^α) + (B / D^β) + L0

ここで、各変数の意味は以下の通りです。

  • C: モデルの訓練にかかる費用(計算コスト)
  • N: モデル内のパラメータ数
  • D: 訓練データセット内の単語数(トークン数)
  • L: テストデータでのLLMの性能を表す平均負対数尤度損失(トークン当たりの値)
  • C0: パラメータごとに6 FLOPSのコストがかかる(訓練にかかる計算費用)
  • α: パラメータとトークン数の関連性を示す指数
  • β: トークン数と訓練データの関連性を示す指数
  • A, B, L0: 統計的なパラメータ

これらの式は、大まかに言うと、モデルの訓練や性能に関わる要素がどのように関連しているかを示しています。

一般にLLMは、モデルの大きさ、訓練データセットの大きさ、訓練費用、訓練後の性能という4つのパラメータにより特徴づけられる。これらの4つの変数はそれぞれ実数で正確に定義することができ、経験から「スケーリング則(scaling laws)」と呼ばれている単純な統計的法則によって関係していることがわかっている。

ある研究では、両対数学習率のスケジュールで、1エポック分の自己回帰的な訓練を行ったLLMの場合のスケーリング則(Chinchillaスケーリング)を、次のように表している。

{\displaystyle {\begin{cases}C=C_{0}ND\\L={\frac {A}{N^{\alpha }}}+{\frac {B}{D^{\beta }}}+L_{0}\end{cases}}}

ここで、変数は次のとおりである。

  • C:モデルの訓練に掛かる費用(FLOPS単位)
  • N:モデル内のパラメータ数
  • D:訓練セット内のトークン数
  • L:テストデータセットで訓練されたLLMにより達成される、トークン当たりの平均の負対数尤度損失(ナット/トークン)

統計パラメータは次のとおりである。

  • {\displaystyle C_{0}=6}、すなわち、1つのトークンで訓練するにはパラメータごとに6 FLOPSの費用がかかる。ここで、訓練費用は推論費用よりもはるかに高いことに注意を要する。1つのトークンを推論する費用はパラメータあたり1~2 FLOPSである。
  • {\displaystyle \alpha =0.34,\beta =0.28,A=406.4,B=410.7,L_{0}=1.69}
大規模言語モデル

創発的能力

一般的に、大規模なモデルの性能は、同じタスクを小さなモデルで行った場合の性能を元に予測できることがあります。ただし、時折、大規模モデルが予測通りではなく、予測できない速さで新しい能力を発揮することがあります。これを「創発的能力」と呼びます。これは、以前の研究では予測できなかった特徴です。研究者は、この創発的能力は小さなモデルの性能からは予測できないことがあると言っています。これは、プログラムや設計ではなく、むしろモデルが自然に発見するものであり、時には大規模モデルが一般に公開されて初めてわかることもあります。これまでに、さまざまな創発的能力が報告されており、例えば、多段階の数学問題の解答、大学レベルの試験の解答、単語の意味の理解、連鎖思考、音声記号の解読、パズルの解答、特定の内容を検出する能力などがあります。

一般に、さまざまなタスクに対する大規模モデルの性能は、同様の小規模モデルの性能に基づいて推定することができるが、ときには、下流におけるスケーリング則が「破綻」し、大規模モデルが、小規模モデルとは異なる速度で突然に能力を獲得することがある。これは「創発的能力」(英: emergent abilities)として知られているもので、これまでも多くの研究の対象であった。研究者は、こうした能力は「小規模モデルの性能を外挿することでは予測できない」ことが多いと指摘している。このような能力は、プログラムされたり設計されたりするものではなく、むしろ「発見される」ものであり、場合によっては、LLMが一般公開されて初めて発見されることすらある。これまでに数百もの創発的能力が報告されている。たとえば、多段階の算術、大学レベルの試験、単語の意図する意味の特定、思考の連鎖、国際音声記号の解読、マス埋めパズル、ヒングリッシュ(ヒンディー語と英語の混成語)の段落内の不快な内容の特定、およびスワヒリ語のことわざに相当する英語の生成などがある。

大規模言語モデル

自然言語の問題を解くモデル(例えば、質問に答えるモデルなど)が、試験などのテストで、ある程度の大きさになるまでは、偶然による結果よりも性能が劣っていることがよくあります。しかし、ある一定の時点を超えると、急に性能が向上することがあります。これが「創発的能力」の一例です。モデルの大きさは、訓練するために必要な計算量で測られています。

簡単に言うと、大きなモデルは最初はうまくいかないことがあり、小さいモデルよりも性能が悪いことがあります。でも、ある程度の大きさを超えると、急に性能が飛躍的に向上することがあります。これは、モデルが新しい方法を自分で発見する「創発的能力」の例です。モデルの大きさは、モデルを訓練するのにかかる計算の量で測られます。

質問応答などのタスクを含め、多くの自然言語ベンチマークでは、モデルがある規模に達するまでは偶然によるものよりも性能が劣り、ある時点で性能が急激に向上する。それぞれの図は創発的能力の例を示している。モデル規模は訓練の計算量によって測定されている。

大規模言語モデル

歴史

最初のステップとして、大規模言語モデルの基本的な考え方は、ランダムな重みを持つ単純で繰り返しのアーキテクチャから出発し、大量の文章データを使って訓練することです。初期の試みでは、犬が男性を追いかけるといった簡単な文を使って、ニューラルネットワークを訓練しました。この訓練済みのネットワークは単語をベクトルに変換し、それらのベクトルを似ているもの同士でグループ分けする方法を学習しました。こうすることで、動詞や名詞などの単語の関係性を把握できるようになりました。

次に、言語理解をプログラムする別の方法がありましたが、これは1990年代まで主流でした。しかし、大量のデータを使って自然言語を学習するアイデアは、1950年代に始まりました。商業的な成功例としては、1990年代のIBMの翻訳モデルがありました。

その後、大規模な言語モデルは、長期・短期記憶と呼ばれるアーキテクチャを使って始まりました。画像認識における大規模なモデルの成功(AlexNet)の影響を受け、研究者たちはこれらの大規模モデルを他のタスクにも応用しました。

2014年には、seq2seqモデルと呼ばれるアーキテクチャが提案されました。このモデルは翻訳などのタスクで使われ、さらにアテンション機構が追加され、性能向上が実現されました。

2016年には、GoogleがLSTMとアテンションを組み合わせたモデルで、翻訳の手法を変更し、高い性能を達成しました。

そして、2017年には「Attention is all you need」という論文が発表され、Transformerという新しいアーキテクチャが登場しました。これは、以前のモデルよりも並列に処理ができるため、大規模なモデルを訓練することが可能になりました。

その後、BERTとGPTという大規模モデルが登場し、これらのアーキテクチャが現在の主要なモデルとなっています。

先駆者
大規模言語モデルの基本的な考え方は、単純で反復的なアーキテクチャを持つランダムな重みを持つニューラルネットワークを出発点とし、大規模な言語コーパスで訓練することである。
この最も初期の例のひとつがエルマンネットワークで、「犬が男を追いかける」のような単純な文でリカレントネットワークを訓練した。訓練したネットワークは、各単語をベクトル(内部表現)に変換した。次にこれらのベクトルを接近度によって木構造にクラスタリングした。その結果、ツリーはある構造を示すことがわかった。動詞と名詞はそれぞれ別の大きなクラスターに属していた。名詞のクラスター内には、無生物(inanimates)と生物(animates)の2つの小さなクラスターがある、などである。
別の方法として、自然言語理解を記号プログラムによってコンピュータにプログラムする論理AI(英語版)があった。この方法は1990年代まで主流であった。単純な機構と大規模なコーパスによって自然言語を学習するという着想は1950年代に始まったが、商業的に最初に成功したのは、統計的機械翻訳(英語版)のためのIBMアライメントモデル(英語版)(1990年代)であった。

Transformerフレームワークへの進化
初期の「大規模」言語モデルは、長期・短期記憶(LSTM、1997年)などのリカレントアーキテクチャを使用して構築された。AlexNet(2012年)が画像認識における大規模ニューラルネットワークの有効性を実証した後、研究者は大規模ニューラルネットワークを他のタスクに適用した。2014年には、2つの主要な手法が提案された。
seq2seqモデル(3億8,000万パラメータ)は、2つのLSTMを使用して機械翻訳を行い、単純化されたアーキテクチャ(ゲート付き回帰型ユニット、GRU)で同じ手法が使われた(1億3000万パラメータ)。
アテンション機構は、2つのLSTMの中間に「アテンション機構」を追加してseq2seqモデルを改良されたものとして提案された。これはTransformerのアテンション機構とは異なるが、同様のタスクを実行する。
2016年、Google翻訳はその機構を統計的機械翻訳(英語版)からニューラル機械翻訳(英語版)へと変更した。これは、LSTMとアテンションによるseq2seqである。10年かけて構築された以前のシステムよりも高いレベルの性能に到達するのに9カ月を要したという。
2017年の論文「Attention is all you need」では、アテンション機構を抽象化して、アテンション機構を中心としたTransformerアーキテクチャを構築した。seq2seqモデルは、他のリカレントネットワークと同様、入力シーケンスを一度に1つずつ処理しなければならないのに対し、Transformerアーキテクチャはシーケンス上で並列に実行することができる。これによって、より大規模なモデルを訓練できるようになった。

BERTとGPT
BERT(2018年)は双方向Transformerであり、GPT(2018年)は単方向(自己回帰)Transformerである。これらは2023年時点の主要なアーキテクチャである。

大規模言語モデル

アーキテクチャ

大規模な言語モデルでは、2018年以降、文や文章などの逐次的なデータを処理するために、Transformer(トランスフォーマー)という特別なディープラーニングの方法がよく使われています。この方法は、言葉の意味や文の構造を理解するのに役立ちます。

また、別のアーキテクチャとして、混合エキスパート(Mixture of Experts、MoE)があります。これはGoogleが開発したAIモデルで、複数の専門家(エキスパート)が協力してタスクを解決するアイデアです。このアーキテクチャは、sparsely-gated MoE(2017年)から始まり、Gshard(2021年)、GLaM(2022年)という進化を経て、より高度なモデルが作られています。これらのアーキテクチャは、より複雑なタスクを解決するために使われることがあります。

大規模言語モデルでは、2018年以降、逐次データに対する標準的なディープラーニング手法となったTransformer(トランスフォーマー)アーキテクチャが最もよく使用されている。別のアーキテクチャの系統として、混合エキスパート(英語版)(Mixture of experts、MoE)がある。これはGoogleが開発したAIモデルでしばしば使用されており、sparsely-gated MoE(2017年)に始まり、Gshard(2021年)、GLaM(2022年)へと続いている。

大規模言語モデル

トークン化

トークン化とは、大規模な言語モデル(LLM)がテキストを処理する際に、単語を数字に変換する作業です。

具体的には、LLMは数学的な計算を行うため、テキストを数字のリストに変換する必要があります。そのため、単語を数値に変換する手順が必要です。一般的に、LLMはこれを行うためにトークナイザと呼ばれるツールを使用します。トークナイザは、テキストを小さな部分(トークン)に分割し、それに対応する数値を割り当てます。

トークナイザは、テキストを数字に変換するだけでなく、テキストを圧縮する機能も持っています。たとえば、よく使われる単語やフレーズは、1つのトークンで表現されることで計算の効率が上がります。しかし、珍しい単語は多くのトークンを必要とします。

トークナイザは整数を出力するもので、特定の範囲内の整数(通常は0から語彙のサイズ-1までの整数)を出力します。トークナイザは未知の単語にも対応するため、特別な「未知テキスト」という意味のトークンを使用します。

また、特別なトークンとして「パディング」もあります。これは、テキストの長さを揃えるために使用され、入力データの長さを一定にするためにテキストに追加されることがあります。

LLMは数学的な関数であり、その入力と出力は数字のリストである。したがって、単語は数値に変換しなければならない。

一般に、LLMはこれを行うために固有のトークナイザを使用し、テキストと整数のリストを対応させている。通常、LLMを訓練する前にトークナイザを訓練データセットの全体に適用し、その後は凍結する。トークナイザにはバイト対符号化が選択されるのが一般的である。

トークナイザのもう一つの機能は、計算量を削減するためのテキスト圧縮である。たとえば「where is(どこにありますか)」などの一般的な単語やフレーズは、7文字ではなく1つのトークンでエンコードすることができる。OpenAI GPTシリーズでは、1つのトークンが一般的な英語テキストの約4文字、つまり約0.75語に相当するトークナイザを使用している。珍しい英語のテキストは予測しにくく、そのため圧縮が困難となり、より多くのトークンを必要とする。

トークナイザは、任意の整数を出力することはできない。一般的には {\displaystyle \{0,1,2,...,V-1\}} の範囲の整数に限って出力される。ここで、V は語彙(ごい)サイズと言う。

トークナイザには、任意のテキストを扱えるものと(一般にUnicodeで直接操作する)、そうでないものがある。トークナイザは、エンコード不可能なテキストに遭遇した場合、「未知テキスト(unknown text)」を意味する特別なトークン(多くは0)を出力する。BERT論文にならって、[UNK] と表記されることが多い。

もう一つの特別なトークンは、「パディング」を表す [PAD] (多くは1)である。これは、一度に大量のテキストがLLMに入力されたときに、エンコードされたテキストが同じ長さになるよう調節するのに使用される。LLMでは一般に、入力の長さが一定のシーケンス(ジャグ配列という)であることを要求するため、エンコードした短いテキストを長いテキストにそろえるのにパディングを行う。

大規模言語モデル

出力

出力とは、大規模な言語モデル(LLM)がテキストを処理した結果で、単語の確率分布として表されます。

LLMがテキストを受け取ると、一般的には数値のリストであるベクトル y が生成されます。このベクトル y は、語彙内の各単語に対するスコアを含んでいます。このスコアはソフトマックス関数によって softmax(y) に変換されます。

このプロセスでは、ベクトル y は非正規化ロジットベクトルと呼ばれ、ベクトル softmax(y) は確率ベクトルと呼ばれます。確率ベクトルは語彙内の各単語に対する確率を示し、その合計は1になります。つまり、どの単語が次に来る確率が高いのかを表しています。

ソフトマックス関数は数学的に定義されており、パラメータを持たないことに注意が必要です。したがって、訓練中にソフトマックス関数自体を調整することはありません。ソフトマックス関数は、LLMの出力を確率分布として解釈できるようにするための重要なステップです。

LLMの出力は、その語彙の確率分布である。これは通常、次のように実装される。

  • テキストを受信すると、大半のLLMはベクトル {\displaystyle y\in \mathbb {R} ^{V}} を出力する。ここで、V は語彙サイズ(上述)である。
  • ベクトル y はソフトマックス関数によって {\displaystyle {\text{softmax}}(y)} となる。

このプロセスでは通常、ベクトル y は非正規化ロジットベクトルといい、ベクトル {\displaystyle {\text{softmax}}(y)} は確率ベクトルと呼ばれる。ベクトル {\displaystyle {\text{softmax}}(y)} は V 個のエントリを持ち、すべて非負であり、その合計は1となるので、{\displaystyle \{0,1,2,...,V-1\}}に対する確率分布、つまりLLMの語彙に対する確率分布であると解釈することができる。

ソフトマックス関数は数学的に定義されており、変化するパラメータを持たないことに注意を要する。したがっては訓練は行われない。

大規模言語モデル

ソフトマックス関数

ソフトマックス関数は、ディープラーニングや機械学習の中でよく使われる関数で、数値の集まり(ベクトル)を取り、それぞれの値を0から1の間の確率として表現します。これにより、与えられた集まり内でどの値が最も高い確率で起こるかを示すことができます。

イメージ的には、複数の候補があるとき、それぞれの候補に対して「これが選ばれる確率はどれくらいか」という情報を提供する役割を果たします。

例えば、3つの果物(りんご、バナナ、オレンジ)の美味しさを表す数値があるとしましょう。これらの数値をソフトマックス関数にかけることで、各果物が選ばれる確率を求めることができます。もし、りんごの美味しさが数値で8、バナナが5、オレンジが3だとしたら、ソフトマックス関数を適用すると、りんごの確率が高くなります。それぞれの値を0から1の間に変換することで、合計が1になるように調整され、選択肢間の相対的な関係を捉えることができます。

ソフトマックス関数は、分類問題や確率的な予測を行う際に広く使用される重要なツールです。

コンテキストウィンドウ

コンテキストウィンドウは、大規模言語モデル(LLM)がテキストを理解し、次の単語を予測するために考慮する範囲です。これは、LLMが前後の単語や文脈を理解するための枠組みです。

イメージ的には、テキストを読むときに一度に目に入る範囲と考えることができます。コンテキストウィンドウはその範囲を意味し、その中でどの単語がどのように関連しているかをモデルに示すのに使われます。

たとえば、次の単語を予測する際には、その前後の数語が重要です。例えば「今日はとても晴れていて、外で遊ぶのが楽しいです。」という文があった場合、コンテキストウィンドウが「遊ぶのが楽しいです。」までなら、モデルは「遊ぶ」の次に何が来るかを予測するのに使います。

コンテキストウィンドウの長さはモデルの性能やリソースによって異なりますが、通常は1000から10000の単語程度の範囲が使用されます。例えば、OpenAIのGPT-3.5は、4000から16000単語のコンテキストウィンドウを持つモデルです。このウィンドウ内の情報を基にして、モデルは次の単語を予測する能力を発揮します。

LLMのコンテキストウィンドウは、LLMがトークンを生成するために使用できる最長のトークンシーケンスの長さである。もしLLMがコンテキストウィンドウより長いシーケンスに対してトークンを生成するときは、トークンシーケンスをコンテキストウィンドウまで切り詰めるか、アルゴリズムに一定の変更を加える必要がある。
LLMのコンテキストウィンドウ長は1,000(1k)から10kのオーダーになる傾向がある。特にOpenAIは、2023年6月時点で、4kから16kまでのコンテキストウィンドウを備えたGPT-3.5を提供している。

大規模言語モデル

エンコーダーとデコーダーの用語

エンコーダーとデコーダーは、Transformerと呼ばれるディープラーニングモデルの重要な部分です。Transformerは自然言語処理などのタスクに使用されます。以下にそれぞれの用語の意味を簡単に説明します。

  • エンコーダー: エンコーダーは、入力されたテキストを理解して内部的な表現に変換する役割を担います。これはテキストを単語や文の情報を持つベクトルに変換する作業です。フルエンコーダとは、エンコーダだけで構成されるモデルを指します。
  • デコーダー: デコーダーは、エンコーダーで処理された情報を元に、次の単語を予測する役割を果たします。自然言語生成の場面で使用されます。フルデコーダはデコーダだけで構成されるモデルを指し、自己回帰デコーダとは、自分自身が生成した過去のトークンに注意を払いつつ、新しいトークンを生成するデコーダを指します。
  • エンコーダー – デコーダー: この組み合わせは、通常は翻訳や質問応答などのタスクで使用されます。エンコーダーは入力文を理解し、デコーダーはその情報を元に目標言語や回答を生成します。自己回帰デコーダーとは、デコーダーが生成した過去のトークンに注意を払いながら、新しいトークンを生成するデコーダを指します。

「自己回帰」とは、一つの単語やトークンを作るとき、それに続くすべての単語に注意を向けて生成する方法のことです。これにより、文脈(前後の単語や文脈)を考慮しながら単語を作ることができます。例えば、文章中で「猫が庭で遊んでいる」というとき、次の単語を「遊んでいる」と考える際、前の単語「庭で」や前の文脈「猫が」にも注意を払って生成することができるのです。

アテンションヘッドとは、生成する際にどれだけ他の単語に注意を向けるかを制御する部分です。未来の情報を使用しないようにするために、アテンションヘッドに「マスク」と呼ばれる制限をかけます。これによって、まだ見ていない未来の単語に過剰に影響されることなく、正しい予測を行うことができるようになります。つまり、未来の情報を事前に無視して適切な予測をすることができるのです。

Transformerに基づくLLMでは、Transformerの原著論文で使われている用語とは多少異なる。

  • エンコーダのみ: フルエンコーダ、フルデコーダ
  • エンコーダー – デコーダー: フルエンコーダー、自己回帰デコーダー
  • デコーダのみ: 自己回帰エンコーダ、自己回帰デコーダ

ここでの「自己回帰」とは、「マスク化アテンション」節で説明したように、あるトークンからそれに続くすべてのトークンへのアテンションをゼロにするために、アテンションヘッドにマスクが挿入されることを意味する。

大規模言語モデル

訓練

訓練とは、ディープラーニングモデルを学習させるプロセスのことです。多くの言語生成モデル(LLM)は、あらかじめ用意された大量のテキストデータを使って訓練されます。その訓練データに含まれるトークン(単語や記号などの単位)をモデルが予測する能力を身につけることが目標です。

LLMの訓練にはいくつかの方法があります。一つは「自己回帰モデル」で、与えられたテキストの一部から次に来るトークンを予測する方法です。例えば、「私が食べるのが好きなのは」というテキストが与えられたとき、モデルは「アイスクリーム」のような次のトークンを予測します。もう一つは「マスク済みモデル」で、一部のトークンを隠しておき、そのトークンを予測する方法です。例えば、「私は [MASK] クリームを [MASK] したい」というテキストが与えられたとき、モデルは隠された「アイスを食べる」のようなトークンを予測します。

訓練の過程では、モデルが実際の予測との差(誤差)を測るための指標が使われます。これはトークンごとの平均負対数尤度と呼ばれ、モデルが正しいトークンを予測する確率を最大化するように調整します。訓練データセットの大きさや、モデルの複雑さなどによって、訓練には多くの計算コストがかかります。

また、訓練には正則化損失が使われることもあります。これはモデルの過剰な適合(オーバーフィッティング)を防ぐために導入されるもので、訓練時にのみ考慮されます。

最近の大規模なLLMは、膨大な計算リソースを必要とするため、訓練コストも高くなっています。しかし、技術の進化によって費用は低下しており、多くの企業が高性能なモデルの訓練に投資しています。

ほとんどのLLMは事前訓練されており、テキストトークンの訓練データセットが与えられると、モデルはデータセット内のトークンを予測する。このような事前訓練には一般に2つの形式がある。

  • 自己回帰モデル(GPT型、次単語予測)
    「私が食べるのが好きなのは」のようなテキスト部分が与えられると、モデルは「アイスクリーム」のような「次のトークン」を予測する。
  • マスク済みモデル(BERT型、穴埋め)
    「私は [MASK] クリームを [MASK] したい」 のようなテキスト部分が与えられると、モデルは「アイスを食べる」のような隠されたトークンを予測する。

LLMは、次文予測(Next Sentence Prediction、NSP)のように、データ分布の理解をテストする補助タスクを使用して訓練することもある。この場合は、文の組が提示され、モデルはそれらが訓練コーパス内で連続して出現するかどうかを予測しなければならない。

通常、LLMは特定の損失関数、つまりトークンごとの平均負対数尤度(クロスエントロピー損失とも呼ばれる)を最小化するように訓練する。たとえば、自己回帰モデルで「食べるのが好き」が与えられ、確率分布 {\displaystyle Pr(\cdot |{\text{I like to eat}})} を予測する場合、このトークンに対する負対数尤度損失は {\displaystyle -\log Pr({\text{ice}}|{\text{I like to eat}})} となる。

訓練のとき、訓練を安定させるために正則化損失も使用される。ただし、正則化損失は通常、テストや評価の際には使用されない。また、負対数尤度だけでなく、他にも多くの評価項目がある。詳細については以下の節を参照のこと。

訓練用データセットの大きさ

最初期のLLMは、数十億語の規模のコーパスで訓練が行われた。

OpenAIのGPT(generative pre-trained transformer)シリーズの最初のモデルであるGPT-1は、2018年に、9億8500万語で構成されるBookCorpusで訓練された。同年、BERTはBookCorpusと英語版Wikipediaの組み合わせで訓練され、合計で33億語になった。それ以来、LLMの訓練用コーパスは桁違いに増加し続けており、トークン数は最大で数兆個に達した。

訓練費用

LLMの訓練には計算費用がかかる。2020年の調査では、15億パラメータのモデル(当時の最先端技術より2桁小さい)の訓練にかかる費用は8万ドルから160万ドルと見積もられた。その後、ソフトウェアとハードウェアの進歩により費用は大幅に下がり、2023年の論文では、120億パラメータのモデルを訓練するための費用は72,300 A100-GPU 時間であると報告されている。

TransformerベースのLLMの場合、訓練コストは推論コストよりもはるかに高くなる。1つのトークンを訓練するのに1パラメータあたり6 FLOPSのコストがかかるのに対し、1つのトークンを推論するには1パラメータあたり1~2 FLOPSである。

2020年代の企業は、ますます大規模になるLLMに巨額の投資を行った。GPT-2(15億パラメータ、2019年)の訓練費用に5万ドル、またGoogle PaLM(54億パラメータ、2022年)は800万ドルを要した。

大規模言語モデル

平均負対数尤度

平均負対数尤度は、ディープラーニングのモデルを訓練する際に使用される評価指標の一つです。

尤度は、データが与えられたモデルのもとでどれだけ確率的に説明できるかを示す尺度です。つまり、与えられたデータが実際のモデルにどれだけ合致するかを測る指標です。しかし、対数尤度を用いることで計算がしやすくなります。

負対数尤度は、対数尤度の符号を逆転させたものです。モデルがデータをどれだけ正確に説明できるかを評価する指標で、この値が小さいほどモデルの性能が良いことを示します。

平均負対数尤度は、データセット内のすべてのサンプルに対する負対数尤度の平均値を取ったものです。訓練中には、この値を最小化することが目標となります。最終的には、平均負対数尤度が小さいほど、モデルは与えられたデータに適した予測を行えるようになっていることを示します。

正則化損失

正則化損失は、ディープラーニングモデルの訓練中に使用される一種の補助的な損失関数です。この損失関数は、モデルが訓練データに過剰に適合することを防ぐために導入されます。

ディープラーニングモデルは、訓練データに対して高い性能を発揮するように設計されますが、訓練データに対して過剰に適合すると、新しいデータに対する予測性能が低下する可能性があります。この現象を「過学習」と呼びます。

正則化損失は、過学習を抑制するためにモデルの訓練中に追加される項です。通常はモデルのパラメータに関連して計算され、モデルの複雑さや自由度にペナルティを課す役割を果たします。正則化損失を導入することで、モデルは訓練データだけでなく、新しいデータにも一般化しやすい特徴を学習するよう促されます。

主な正則化手法には、L1正則化(ラッソ)、L2正則化(リッジ)、およびそれらの組み合わせであるElastic Netなどがあります。これらの手法は、異なる方法でパラメータを制約することによってモデルの複雑さを制御します。正則化損失を使用することで、モデルの過学習を防ぎつつ、一般的なパターンを学習できるバランスの取れたモデルを構築することができます。

下流タスクへの適用

2018年から2020年にかけて、言語処理の技術である「大規模言語モデル(LLM)」を特定の自然言語処理タスクに利用する方法が一般的でした。この方法は、モデルを特定のタスクに合わせて調整するために「ファインチューニング」という手法を使うものでした。

しかし、その後、GPT-3といったより強力なLMMが登場し、新しいアプローチが使われるようになりました。これは、モデルに解決すべき問題をテキストで提示する「テキストプロンプト」という方法です。また、類似の問題とその解決策のテキスト例を一緒に与える「プロンプティング技術」も使われます。このようなアプローチを使うことで、モデルが追加の訓練なしにもさまざまなタスクを解決できることが分かってきました。つまり、一つのモデルで複数のタスクに対応できることがわかったということです。

2018年から2020年にかけて、特定の自然言語処理(NLP)タスクでLLMを使用するための標準的な方法は、「タスクに特化」した追加訓練によってモデルをファインチューニングすることであった。その後、GPT-3のような「より強力」なLLMでは、解決すべき問題をテキストプロンプトとしてモデルに提示したり、場合によっては、類似の問題とその解決策のいくつかのテキスト例とともに提示する「プロンプティング技術」を使用して、追加の訓練なしでタスクを解決できることがわかった。

大規模言語モデル

ファインチューニング

ファインチューニング(微調整)とは、あらかじめ訓練された言語モデルを、特定のタスクに合わせて修正する方法です。例えば、感情分析や固有表現識別などのタスクに適用できます。これは転移学習の一種です。一般的に、元の言語モデルの最終層と目的のタスクとをつなぐ新しい重みを使います。元のモデルの重みは変えずに、「凍結」させておき、新しい重みだけが訓練中に調整されるようにします。これにより、元のモデルの知識を保ちつつ、新しいタスクに適した予測を行えるようになります。また、元の重みを少しずつ更新する方法や、凍結された層と一緒に更新する方法もあります。

ファインチューニング(英: fine-tuning、微調整)とは、事前訓練された既存の言語モデルを、特定のタスク(例: 感情分析、固有表現識別、品詞タグ付け(英語版))で(教師ありの)訓練を行うことによって修正する手法である。これは転移学習の一種である。一般的には、言語モデルの最終層と下流タスク(英: downstream tasks)の出力とを接続する新しい重みのセットを導入することになる。言語モデルの元の重みは「凍結」したまま、それらを出力に接続する新しい重み層のみが訓練中に調節されるように構成する。また、元の重みをわずかずつ更新させたり、あるいは以前の凍結された層と一緒に更新されることもある

大規模言語モデル

転移学習

転移学習は、ディープラーニングの概念の一つで、あるタスクで学んだ知識を別のタスクに活用する方法です。

イメージすると、まるで新しいことを学ぶ前に、既に知っていることを活かすようなものです。例えば、自転車に乗る方法を学んだ後、新しくバイクに乗る方法を学ぶとき、自転車でのバランス感覚や操作方法が役立ちます。

ディープラーニングでも同じ考え方が使われます。一つのタスクで大量のデータを使ってモデルを学習すると、そのモデルは特定の特徴や知識を抽出する方法を身につけます。この学習済みのモデルを、新しいタスクに適用することで、新しいタスクにも有用な特徴や知識を使えるようになります。

転移学習を使うことで、新しいタスクに対しても少ないデータで高い性能を達成することができる場合があります。これは、最初からゼロから学習するよりも効率的であり、特にデータが少ない場合や難しいタスクの場合に役立ちます。

プロンプト

GPT-3による新しいアプローチでは、問題を解決するために「プロンプト」と呼ばれる指示を使います。この方法では、解決すべき問題を指示する文章を与えて、モデルにそれを完成させるように促すことで、問題を解決することが試みられます。

例えば、映画の感情分析タスクを考えてみましょう。映画のレビューが与えられたとき、その感情(ポジティブかネガティブか)を予測するタスクです。プロンプトを使う場合、いくつかの例文を提示して問題を伝えます。たとえば、ネガティブな感情の場合は「この映画は気が沈む。」という例を提示し、ポジティブな感情の場合は「この映画は素晴らしい!」という例を提示します。モデルはこれらの例を参考にして、新しいレビューの感情を予測することを試みます。

また、「少数ショットプロンプト」という方法もあります。これは、似たような問題の例を少しだけ提供する方法です。映画の感情分析で言えば、同じような感情に関するレビューの例を少し示し、モデルにそれを元に新しいレビューの感情を予測させます。

そして、「ゼロショットプロンプト」という方法もあります。これは解決例を提供せずに問題を提示する方法です。たとえば、感情分析の場合、モデルに対して「この映画は素晴らしい!」という文章を与えて、それがポジティブな感情を示していることを予測させることです。

このアプローチは、わずかな情報で新しいタスクを解決することができることが示されており、翻訳や質問応答など、多くの自然言語処理のタスクで活用されています。適切なプロンプトを設計することで、モデルの性能を引き出すプロンプトエンジニアリングと呼ばれる技術も存在します。

GPT-3によって普及したプロンプトパラダイムでは、解決すべき問題はテキストプロンプト(回答を促す指示)で定式化され、モデルは(推論して)補完を生成することによってそれを解決しなければならない。「少数ショットプロンプト」の場合、プロンプトには類似した組(問題、解決)の少数の例が含まれる。たとえば、映画レビューに対する感情をラベル付けする感情分析タスクは、次のような例で回答が促される。

レビュー: この映画は気が沈む。

感情: ネガティブ

レビュー: この映画は素晴らしい!

感情:

もしモデルが「ポジティブ」と出力すれば、正しくタスクが解決されたことになる。一方、「ゼロショットプロンプト」の場合、解決例を提供しない。同じ感情分析タスクに対するゼロショットプロンプトの例は、『映画レビューに関連するセンチメントは「この映画は素晴らしい!」』である。

LLMにおける少数ショットの性能は、NLPタスクで競争力のある結果を達成することが示されており、ときには先行する最先端のファインチューニング手法を凌ぐことさえある。このようなNLPタスクの例としては、翻訳、質問応答、穴埋め、マス埋めパズル、文中の新語検出などがある。優れたプロンプトを作成し、最適化することをプロンプトエンジニアリングと呼ぶ。

大規模言語モデル

インストラクション・チューニング

インストラクション・チューニング(命令チューニング)は、より自然で正確なゼロショットプロンプト(問題を提示する文章)を作成し、対話を改善するための方法です。この手法は、既存の言語モデルを特定のタスクに適応させるための一種のファインチューニングです。

言語モデルは、テキストを入力すると、訓練に使用されたデータの傾向に合った補完を生成します。例えば、「ハムレットの主要テーマについてエッセイを書いてください」という指示が与えられた場合、通常のモデルは「3月17日以降に受け取った提出物には、1日あたり10%の遅延損害金が適用されます」といった意図しない補完を出力するかもしれません。

インストラクション・チューニングでは、自然言語で命令として記述されるタスクの例文と、それに適切な回答を用いてモデルを訓練します。具体的には、人が作成した初期の例をモデルが自分で生成する「自己学習」と呼ばれる方法が使われます。これにより、モデルは正しい応答を学び、より適切な結果を出力できるようになります。

インストラクション・チューニングは、より洗練された対話システムを構築するために、言語モデルをタスクに合わせて調整する方法と言えます。

インストラクション・チューニング(命令チューニング)は、より自然で正確なゼロショットプロンプトによる対話を促進するために考案されたファインチューニングの一形態である。テキストが入力されると、事前訓練された言語モデルは、訓練に使用したテキストコーパスの分布に一致するような補完を生成する。たとえば、「ハムレットの主要テーマについてエッセイを書いてください」というプロンプトが与えられたとき、単純な言語モデルは「3月17日以降に受け取った提出物には、1日あたり10%の遅延損害金が適用されます」といった(意図しない)補完を出力するかもしれない。インストラクション・チューニングでは、自然言語による命令として定式化された多くのタスクの例と、適切な応答を用いて言語モデルを訓練する。

インストラクション・チューニングでは、さまざまな手法が実践されている。その一例である「自己学習」は、LLMによって生成された事例(人間が作成した少数の初期事例からブートストラップしたもの)の訓練セットで言語モデルをファインチューニングする。

大規模言語モデル

強化学習によるファインチューニング

OpenAIのInstructGPTプロトコルでは、人間が作成した問いかけとその回答のセットから成るデータセットを用いて、二段階の学習プロセスが行われます。

まず、教師ありファインチューニングという手法を使います。これは、人間が作ったプロンプト(問いかけ)とそれに対する正しい応答の組を使って、モデルを特定のタスクに適応させる方法です。モデルはこれらのデータを参考にして学習し、正しい応答を出力できるように調整されます。

その後、強化学習(RLHF)と呼ばれる手法を用います。ここでは、人間が提供するフィードバックを通じて学習が行われます。具体的には、人間の好みを考慮したデータセットを使って報酬関数を学習します。報酬関数は、モデルがどれだけ適切な応答を生成したかを評価する指標です。

そして、この報酬関数を基に、モデルを訓練する手法である近位方策最適化が行われます。この手法により、モデルはより適切な回答を生成できるように進化していきます。

要するに、InstructGPTプロトコルでは、人間が作成したデータを使ってモデルをタスクに適応させ、その後、人間のフィードバックを通じてモデルを改善していく方法が採用されています。

OpenAIのInstructGPTプロトコルでは、人間が作成したプロンプトと応答の組からなるデータセットによる教師ありファインチューニングと、それに続く、人間のフィードバックによる強化学習(RLHF)を伴っている。この場合、人間の好みを反映したデータセットを用いて報酬関数を教師あり学習し、その後、この報酬モデルを使用した近位方策最適化によってLLM自体を訓練する。

大規模言語モデル

近位方策最適化

近位方策最適化(Proximal Policy Optimization、PPO)は、強化学習と呼ばれる分野で使われるアルゴリズムの一つです。このアルゴリズムは、エージェント(例えば、AIモデル)が特定の環境で行動する方法を学習するために使われます。

イメージすると、ゲーム内でキャラクターを操作して目標を達成するような状況を考えてみましょう。このとき、キャラクターの行動を学習するのがPPOです。

PPOは、複数の試行とエラーを通じて最適な行動方針(ポリシー)を見つける手法です。具体的には、以下のステップで進みます。

  1. 古いポリシーで試す: まず、古いバージョンの行動方針(ポリシー)を使って、エージェントが環境内で行動します。これにより、既存のポリシーがどの程度うまく機能するかがわかります。
  2. 新しいポリシーを生成: 古いポリシーをベースに、少しだけ新しいポリシーを生成します。この新しいポリシーは、前のポリシーから少しだけ逸脱したバリエーションとなります。
  3. 新しいポリシーで試す: 新しいポリシーを使ってエージェントが行動し、結果を評価します。新しいポリシーの性能が良ければ、徐々に古いポリシーに代わっていく可能性があります。
  4. ポリシーの更新: PPOは、新しいポリシーを古いポリシーに比べてどれだけ改善するかを評価し、それに基づいてポリシーを微調整します。ただし、急激な変更は避け、ある程度古いポリシーを保ちながら改善を行います。これにより、学習が安定しやすくなります。

繰り返し行動・評価・更新のステップを複数回繰り返すことで、エージェントは最適な行動方針を見つけることができます。PPOは、安定して良い結果を得るためのアルゴリズムとして広く使用されています。

ツールの使用

言語モデル(LLM)が特定のタスクや問題を解決する際に、自身だけでは難しい場合があります。例えば、数式を解いたり、現在の時刻を知ったりするような特定の情報や計算が必要な場合、LLMはその次のテキストを予測するのが難しいです。

しかし、LLMは他のプログラムを呼び出して助けを求めることができます。例えば、数式の場合、LLMはプログラムコードを生成し、別のプログラムに計算を実行させ、その結果を取得して次のテキストに埋め込むことができます。同様に、現在の時刻を知る場合、LLMはプログラムを呼び出して時刻を取得し、それをテキストに組み込むことができます。

これにより、LLMは問題を解決するために外部のツールやプログラムを利用できます。LLMはプログラムコードを生成し、他のプログラムがそれを実行し、必要な情報を提供します。このプロセスは、LLMが問題を解決する際に非常に便利です。

また、LLMは異なるツールを使用する場合に、それらのツールを正しく呼び出せるように調整する必要があります。ツールの数が固定されている場合、一度の調整で済むかもしれませんが、ツールの数が増える場合、LLMはそれらを正しく呼び出す方法を学習する必要があります。

さらに、文書検索を使用して情報を取得する方法もあります。LLMはクエリを送信し、関連性が高い文書を取得し、その文書を基にテキストを生成します。これにより、情報を検索して取得するタスクにも対応できます。

LLMだけでは解決が難しい、あるいは不可能な問題もある。たとえば、「354 * 139 = 」のような計算式の場合、次のトークンを予測することは困難であり、「What is the time now? It is」(今は何時ですか? 今は)についてはまったく予測できない。しかし、人が計算機を使って計算し、時計を使って時刻を知るように、LLMも他のプログラムを呼び出して次のトークンを予測することができる。LLMは、「What is the time now? It is {system.time()}」(今何時ですか? 今は{system.time()})や、「354 * 139 = {354 * 139}」のようにプログラムコードを生成し、次に別のプログラムインタプリタが生成されたコードを実行してその出力を埋める。この基本的な戦略は、生成されたプログラムを複数回試行したり、別のサンプリング戦略を使用して改良することもできる。
一般的に、LLMにツール(道具)を使わせるためには、ツールを使えるようにファインチューニングする必要がある。ツールの数が有限であれば、ファインチューニングは一度で済むかもしれない。オンラインのAPIサービスのようにツールの数が任意に増えるのであれば、APIの仕様書を読み取ってAPIを正しく呼び出せるようにLLMをファインチューニングすることができる。
より単純なツールの使用形態として、検索拡張生成(Retrieval Augmented Generation)があり、これはLLMを文書検索を使用して拡張するもので、ときにはベクトルデータベース(英語版)を使うこともある。クエリが与えられると、文書検索ツールが呼び出され、もっとも関連性が高い文書が取得される(通常、初めにクエリと文書をベクトルで符号化し、次にクエリベクトルにユークリッドノルムで最も近いベクトルを持つ文書を検索する)。その後、LLMは、クエリと取得した文書の両方に基づいて出力を生成する。

大規模言語モデル

エージェント

言語モデル(LLM)はコンピュータープログラムを作成し、学習し、問題を解決するのに役立つツールとして使うことができます。

  1. ReAct法: ReAct法は、LLMを使ってエージェント(プログラム)を作る方法です。LLMには、周りの状況や目標、可能な行動のリスト、以前の行動や観察などが与えられます。LLMはこれらの情報をもとに行動を考え、それを実行します。これにより、LLMを使ってコンピュータープログラムを作成することができます。
  2. リフレクション法: リフレクション法は、エージェント(プログラム)が学ぶ方法の一つです。LLMは何度かの試行(エピソード)の後、その試行の記録をもとに、次回の試行でうまく行く方法を考えます。これにより、エージェントは経験から学習します。
  3. モンテカルロ木探索: モンテカルロ木探索は、LLMを使って問題を解決する手法です。プログラムが何をするかを考えるのにLLMを使います。LLMは問題を理解し、解決策を考えます。
  4. オープンエンド探索: オープンエンド探索では、LLMを使って「興味深い」ものを見つけます。これを通常のプログラムに報酬として伝え、プログラムを学習させます。また、難易度の異なるタスクを提案してプログラムを訓練することもあります。
  5. スキルと関数の構築: LLMは、個々の行動だけでなく、一連の行動(スキル)を考え、それを保存して後で使うことができます。これにより、プログラムをより高度に設計できます。
  6. 社会的相互作用: LLMを使ったエージェント同士は、過去の出来事を覚えており、お互いにコミュニケーションできます。

圧縮

ニューラルネットワークモデル(LLM)の訓練において、モデルを効率的に管理、性能維持するための技術として「圧縮」と「量子化」があります。

圧縮は、大規模なモデルを効率的に扱うための方法です。LLMの訓練では、通常、浮動小数点数(float32やfloat16)と呼ばれるデータ形式を使用します。しかし、float16は16ビット(2バイト)で表現されるため、10億個の設定(パラメータ)を持つモデルでさえ2ギガバイトのサイズになります。より大規模なモデルでは、これ以上のメモリが必要になり、一般的なコンピュータの制限を超えてしまうことがあります。

量子化は、この問題を解決するための手法です。訓練済みのモデルの性能をほとんど損なわずに、パラメーターの精度を下げることで、モデルのサイズを削減します。最も単純な方法は、すべての数値を特定のビット数に切り捨てることです。しかし、これを層ごとにカスタマイズすることで、より良い結果を得ることができます。また、特定のパラメータに高い精度を保持することも可能です。

最後に、ファインチューニングは、量子化されたモデルを調整するプロセスです。通常、量子化前のモデルと同じ性能を維持しながら、必要に応じて微調整されます。これにより、データの圧縮とモデルの性能を両立させることができます。

通常、LLMの訓練では、全精度または半精度の浮動小数点数(float32とfloat16)が使用される。float16は16ビット(つまり2バイト)なので、たとえば10億個のパラメータは2ギガバイトのサイズとなる。典型的な最大級のモデルは1,000億個のパラメータを持ち、ロードするのに200ギガバイトを必要とするため、ほとんどの一般向けコンピュータの能力を超えたものとなる。訓練後の量子化(英語版)(Post-training quantization)は、訓練済みモデルの性能をほとんど維持したまま、パラメーターの精度を下げることで、必要なサイズを削減することを目的としている。量子化の最も単純な形は、すべての数値を所定のビット数に切り捨てるだけである。これは、層ごとに異なる量子化コードブックを使用することで改善できる。さらに、パラメータごとにさまざまな精度(英語版)を適用し、特に重要なパラメータ(外れ値の重み)にはより高い精度を確保することで、さらなる改善をはかることができる。
量子化モデルは通常は凍結され、量子化前のモデルだけがファインチューニングされるが、量子化モデルも引き続きファインチューニングが可能である。

大規模言語モデル

評価

パープレキシティ

パープレキシティは、言語モデルの性能を評価するための一般的な尺度です。これは、モデルが与えられたテキストデータをどれくらい正確に予測できるかを示す指標です。具体的には、モデルがデータセット内の各単語をどれだけ予測しやすいかを示します。モデルがデータセット内の単語を正確に予測できる場合、パープレキシティは低くなります。

この指標は、数学的には次のように表されます:

log(Perplexity) = -1/N * Σ (log(Pr(token_i | context for token_i)))

ここで、Perplexityはパープレキシティを示し、Nはテキスト内の単語数です。そして、各単語の予測確率(Pr)とその単語の文脈(context)が使われます。

言語モデルは、訓練データに過度に適応する可能性があるため、通常、新しいデータに対する性能を評価するためにテストセット上でパープレキシティが計算されます。大規模な言語モデルの場合、訓練データにテストセットの一部が誤って含まれることがあり、この問題を克服することが重要です。

要するに、パープレキシティは言語モデルの性能を数値化する方法であり、モデルが与えられたテキストデータをどれだけ理解し、予測できるかを評価します。

言語モデルの性能を表す最も一般的な指標は、所与のテキストコーパスにおける言語モデルのパープレキシティである。パープレキシティは、モデルがデータセットの内容をどれだけうまく予測できるかを示す尺度である。モデルがデータセットに割り当てる尤度(ゆうど)が高いほど、パープレキシティは低くなる。数学的には、パープレキシティは、トークンごとの平均負対数尤度の対数として定義される。

{\displaystyle \log({\text{Perplexity}})=-{\frac {1}{N}}\sum _{i=1}^{N}\log(Pr({\text{token}}_{i}|{\text{context for token}}_{i}))}

ここで、N はテキストコーパス内のトークン数であり、「context for token i(トークン i の文脈)」は使用するLLMの種類に依存する。たとえば、LLMが自己回帰型の場合、「context for token i」はトークン i よりも前に現れたテキストの一部である。

言語モデルは訓練データに対して過剰適合する可能性があるため、モデルは通常、未知のデータから構成されるテストセットに対するパープレキシティによって評価される。このことは、大規模な言語モデルを評価する際に、特に重要な課題となる。言語モデルの訓練は、主にウェブから収集された、より大規模なテキストコーパスが使用されるため、モデルの訓練データに特定のテストセットの一部が誤って含まれてしまう可能性がますます高くなる。

大規模言語モデル

タスク固有のデータセットとベンチマーク

タスク固有のデータセットとベンチマークは、言語モデルの性能を測るためのテストや評価用データです。これらは、言語モデルが特定のタスクをどれくらい正確に実行できるかを評価するために使用されます。

例えば、質問応答データセットでは、モデルが与えられた質問に対して正しい答えを出力できるかをテストします。質問応答のタスクは、モデルが文脈を理解し、適切な情報を提供できるかどうかを評価します。質問の例として、「サンノゼ・シャークスはスタンレーカップで優勝しましたか?」という質問が挙げられます。

評価用データセットは、テキストを補完する形式であることもあります。モデルは、与えられたテキストを適切に完成させる単語や文章を選択することを試みます。例えば、文が「アリスはボブと友達だった。アリスは彼女の友人の___を訪ねた。」のような場合、モデルは空白部分を埋める適切な言葉を選ばなければなりません。

さらに、多くの複合ベンチマークも存在し、複数のタスクやデータセットを組み合わせて、言語モデルの総合的な性能を評価します。

一般的には、これらのデータセットを使用して、モデルがタスクをどれだけ理解し、実行できるかを測定し、モデルの性能を向上させるための新しい方法を探求します。ただし、モデルが非常に高い性能を示す場合、新しい、より難しいタスクを作成し、モデルの限界を試すことも行われています。

また、言語モデルがより具体的な下流タスクを実行する能力を評価するために、多くのテスト用データセットやベンチマークが開発されている。テストは、一般的な知識、常識的な推論、数学的な問題解決など、さまざまな能力を評価するために設計することができる。

評価用データセットの大区分の1つに、質問と正解の組で構成される質問応答データセットがある。たとえば、『「サンノゼ・シャークスはスタンレーカップで優勝しましたか?」、「いいえ」 』のような組である。質問回答タスクでは、モデルのプロンプトに期待される答えを導き出せるテキストが含まれる場合、「明白なもの(オープンブック)」とみなされる。たとえば、先の質問には、「2016年、シャークスはスタンレーカップ決勝戦に進出し、ピッツバーグ・ペンギンズに敗れた。」という文を含むテキストが追加される可能性がある。そうでない場合、タスクは「(理解する術がなく)説明できないもの(クローズドブック)」とみなされ、モデルは訓練中に獲得した知識を動員する必要がある。一般的な質問回答データセットの例として、TruthfulQA、Web Questions、TriviaQA、SQuADなどがある。

評価用データセットは、テキスト補完の形式をとることもできる。この場合、モデルは、プロンプトを完成させるために最も可能性の高い単語や文章を選択する。たとえば、「アリスはボブと友達だった。アリスは彼女の友人の___を訪ねた。」のような穴埋め型の設問である。

また、さまざまな評価データセットやタスクを組み合わせた複合ベンチマークも開発されている。たとえば、GLUE、SuperGLUE、MMLU、BIG-bench、HELMなどがある。

かつては、評価用データセットの一部を手元に残し、残りの部分で教師ありファインチューニングを行い、その後に結果を報告するのが一般的であった。現在では、事前訓練されたモデルをプロンプティング技術によって直接評価することが一般的になっている。しかし、特定のタスクに対するプロンプトの作成方法、特にプロンプトに付加される解決済みタスクの事例数(nショットプロンプトのn値)については研究者によって異なる。

逆説的に構成された評価

大規模言語モデルの改良が急速に進んでいるため、評価ベンチマークの寿命は短く、最先端のモデルが既存のベンチマークを急速に「飽和」させ、人間の注釈者の能力をも超えてしまう。そのためベンチマークをより難易度が高いタスクで置き換えたり、強化したりする取り組みが行われている。

中には敵対的に構築されたデータセットもあり、人間と比べて既存の言語モデルの性能が異常に低いと思われる特定の問題に重点が置かれている。その一例がTruthfulQAデータセットで、言語モデルが訓練中に繰り返し触れた虚偽を模倣することで不正確な解答をする可能性がある、817問からなる質問応答データセットである。たとえば、LLMは「Can you teach an old dog new tricks?(年老いた犬に新しい芸を教えられますか?)」という質問に対して、「you can’t teach an old dog new tricks(老犬に新しい芸を仕込むことはできない)」という英語の語法に触れた結果、文字通り真実でないにもかかわらず、「No」と答えるかもしれない。

さらに、AIが多肢選択式テスト(○×式テスト)において、必ずしも実際に訪ねられている設問を理解することなく表面的な問題文の統計的相関を利用して正解を推測し、「カンニング」する「ショートカット学習」と呼ばれるケースもある。

敵対的評価データセットのもう一つの例は、Swagとその後継のHellaSwagである。これは、文章を完成させるためにいくつかの選択肢から一つを選択しなければならない問題を集めたものである。不正解の選択肢は、言語モデルからサンプリングし、一連の分類器でフィルタリングすることで作成された。その結果、人間にとっては些細な問題でも、データセットが作成された当時は、最先端の言語モデルの精度は思わしくなかった。たとえば、次のようなものである。

フィットネスセンターの看板が見える。そして、エクササイズボールに座ったり横たわりながら、カメラに向かって話しかける男性が見える。その男性は、…

a) ボールの上を走ったり降りたりして、運動の効果を効率的にする方法を実演している。

b) すべての腕と脚を動かしてたくさんの筋肉をつけている。

c) 次にボールを投げ、グラフィックや生け垣の刈り込みの実演を見る。

d) ボールの上で腹筋運動をしながら話をしている。

BERTは最も可能性の高い補完としてb)を選択したが、正解はd)である。

大規模言語モデル

解釈

大規模な言語モデル(LLM)は、言語タスクをどのように実行するかが分からない「ブラックボックス」のようなものです。しかし、LLMの動作原理を理解する方法がいくつかあります。

機械的解釈可能性は、LLMが行う推論を理解しようとするアプローチです。これは、LLMの内部で何が起こっているかを、記号的なアルゴリズムで近似しようとするものです。例えば、オセロ-GPTと呼ばれる小さなモデルを使って、オセロの正しい手を予測する方法を学びました。この試みにより、オセロのボードを数学的に表現する方法が見つかり、この表現を変更することで、モデルが出す予測も変わることが分かりました。同様に、別の例では、小さなモデルを使ってモジュラ算術加算を学び、そのモデルをリバースエンジニアリングして、どのように離散フーリエ変換が行われているかを理解しました。

また、Karelプログラムに対して小さなモデルを訓練した別の例もあります。このモデルは、Karelプログラムの意味を理解し、プログラムを生成します。この試みでも、内部の表現が見つかり、それを修正することで、正しいプログラムが生成されることが示されました。

大規模言語モデルは、それ自体が「ブラックボックス」であり、どのようにして言語タスクを実行できるのかは明らかではない。しかし、LLMがどのように機能するかを理解するためのいくつかの方法がある。

機械的解釈可能性 は、LLMによって実行される推論を近似する記号アルゴリズムを発見することにより、LLMをリバースエンジニアリングすることを目的としている。オセロGPT(Othello-GPT)はその一例で、オセロの正当な手を予測するように小規模なTransformerが訓練された。その結果、オセロ盤の線形表現が存在し、この表現を変更することで、予測される正当なオセロの手が正しい方向に変化することがわかった。別の例では、著者はモジュラ算術加算に対して小規模なTransformerを訓練し、得られたモデルをリバースエンジニアリングしたところ、離散フーリエ変換を使用していることがわかった。

別の例では、小規模なTransformerをKarelプログラムに対して訓練している。オセロGPTの例と同様に、Karelプログラムのセマンティクスには線形表現があり、その表現を修正すると出力が正しく変更される。このモデルはまた、訓練セット内のプログラムよりも平均して短く、正しいプログラムを生成した。

大規模言語モデル

理解力と知性

2022年の調査では、未調整の大規模言語モデル(LLM)について、自然言語処理の専門家の間で議論が分かれました。

「LLMは理解力を持つ」という意見の支持者たちは、特定のタスクでLLMが数学的推論などの能力を示すことから、LLMがある程度の「理解」を持つ可能性があると考えています。マイクロソフトのチームは、GPT-4が多岐にわたる難しいタスクを解決できると主張し、それを汎用人工知能システムの初期バージョンとみなすべきだと述べました。彼らは、LLMがソフトウェア工学の試験に合格することができるかという問いを提起しました。さらに、一部の研究者はLLMを「地球外生命の知性」とさえ称賛しています。

一方、「LLMは理解力を欠く」と考える支持者たちは、既存のLLMが実際には既存のテキストを再編集しているだけであると見なしています。また、既存のLLMには依然として予測能力、推論能力、主体性、説明可能性などの欠点があると指摘しています。特に、GPT-4は計画やリアルタイム学習において欠陥があるとされています。また、生成型のLLMは、訓練データにはない情報を自信をもって生成することがあり、これは「幻覚」と呼ばれています。神経科学者の一部は、LLMに関する専門家の意見の相違から、私たちの古い考え方ではLLMの知性を十分に理解できていない可能性があると主張しています。

2022年の調査で、(チューニングされていない)LLMが、「自然言語を何らかの自明でない意味で理解できる(ことがある)か」という問いに対して、自然言語処理研究者の意見は真っ二つに分かれた。「LLMは理解力を持つ」派の支持者は、数学的推論のようないくつかのLLMの能力は、特定の概念を「理解」する能力を意味すると考えている。マイクロソフトのチームは、2023年に、GPT-4は「数学、コーディング、視覚、医学、法律、心理学などにまたがる斬新で難しいタスクを解決できる」とし、GPT-4は「汎用人工知能システムの初期バージョン(しかしまだ未完成)とみなすのが妥当だろう」と主張し、「ソフトウェア工学の受験者の試験に合格するシステムが、本当の意味で知的ではないと言えるだろうか?」と述べた。LLMを「地球外生命の知能」と呼ぶ研究者もいる。たとえば、ConjectureのCEOであるコナー・リーヒーは、チューニングされていないLLMを、まるで得体の知れないエイリアン「ショゴス」のようだと見なし、RLHFチューニングがLLMの内部構造を覆い隠す「見せかけの笑顔」を作り出すと考えている。『あまり無理をしなければ、笑顔のままだ。しかし(予期せぬ)プロンプトを与えると突然、狂気、奇妙な思考過程、そして明らかに人間ではない理解といった巨大な裏の顔を覗かせる』。

対照的に、「LLMは理解力を欠く」派の支持者の中には、既存のLLMは「既存の文章を単に練り直し、組み替えているだけ」であると考えたり、既存のLLMが予測能力、推論能力、主体性、説明可能性において依然として欠点を抱えていることを指摘したりする人もいる。たとえば、GPT-4は計画やリアルタイム学習においてもっともな欠陥がある。生成的LLMは、訓練データでは正当化されないような事実を自信をもって主張することが観察されており、この現象は「幻覚」として知られている。神経科学者のテレンス・セジュノウスキー(Terrence Sejnowski)は、「LLMの知性に関する専門家の意見の相違は、自然の叡智に基づく私たちの古い考え方が十分ではないことを示唆している」と主張している。

大規模言語モデル

より広範囲な影響

2023年、科学雑誌Nature Biomedical Engineeringは、人間が書いたテキストと大規模言語モデルによって生成されたテキストを区別することがほぼ不可能になったと述べ、大規模言語モデルが急速に普及することがほぼ確実で、将来的には多くの業界に影響を与える可能性があると結論しました。

また、ゴールドマン・サックスは2023年に、言語生成AIが次の10年間で世界のGDPを7%増加させ、3億人の雇用を自動化の影響を受ける可能性があると指摘しました。一部の人々は、この技術が誤情報の生成や悪用につながる可能性に懸念を表明しています。たとえば、大規模言語モデルが利用可能になることで、バイオテロの危険性が高まる可能性があるという意見もあります。バイオセキュリティの専門家は、大規模言語モデルの訓練データから病原体の作成や改良に関する情報を除外する提案をしています。

2023年、科学雑誌 Nature Biomedical Engineering(英語版) は、人間が書いたテキストと大規模言語モデルによって作成されたテキストを「正確に区別することはもはや不可能」であり、「汎用大規模言語モデルが急速に普及することはほぼ確実である。いずれは多くの業界を変えてゆくだろう。」と結論づけた。ゴールドマン・サックスは2023年、言語生成AIは今後10年間で世界のGDPを7 %増加させ、全世界で3億人の雇用を自動化にさらす可能性があると示唆した。一部の投稿者は、偶発的または意図的な誤情報の作成や、その他の悪用に対して懸念を表明した。たとえば、大規模言語モデルが利用できるようになると、バイオテロを起こすのに必要な技術レベルを下げる可能性がある。バイオセキュリティの研究者であるケビン・エスフェルトは、LLM開発者は、病原体の作成や改良に関する論文を訓練データから除外すべきだと提案している。

大規模言語モデル

未分類

Posted by Yamada