LLM アーキテクチャーの成功を支えたもの2 −− Self-Supervised Learning
LLM アーキテクチャーの成功を支えたもの 2 −− Self-Supervised Learning
このセッションでは、LLM アーキテクチャーの成功を支えた技術として Self-Supervised Learning を取り上げます。
この技術は、インターネット上にある大量のテキストデータ、それには何のラベルも持たず何の構造もないように見えるのですが、そこから、語の意味ベクトル = embedding を効率的に抽出することを可能にしました。
「教師 = Supervisor 」がAIを鍛える
ニューラル・ネットワークの訓練・学習のプロセスで「教師 = Supervisor 」というのは、訓練・学習が達成すべき正しい目標を知っていて、それをニューラル・ネットワークに教えようとする役割を持つもののことを言います。
機械の考えと教師のしめす正しい答えとの間にズレが生まれることは、機械にとってはとても重要です。なぜなら、機械のニューラル・ネットワークは、「バック・プロパゲーション」といメカニズムで、教師の教えにしたがって自分の間違いを正そうとするからです。
例えば、画像認識のニューラル・ネットワークの訓練では、猫の画像を示して、「これは猫だよ」と教えるのが「教師」の役割です。機械は、そうした認識ができるように、自分の身体を修正・改造していきます。
機械は、とても、素直なものです。
Supervised Learning
人間やロボットの教師が機械の側に実際にいなくても、画像認識の例でしたら、猫の画像に「猫」というラベルがついていれば、そのラベルが「教師」の役割を果たすことができます。
猫のラベルがついた多数の猫の画像を繰り返し学習すれば、今度は、ラベルがなくてもニューラル・ネットワークは猫の認識ができるようになります。こうした学習のスタイルを 「 Supervised Learning = 教師あり学習」と言います。
Supervised Learningの弱点は、学習のために ラベル付きの大量のデータを用意しなければいけないことです。
Non-Supervised Learning
2012年 Googleはラベル付けされていないイメージだけから、顔の認識が可能であることを示して衝撃を与えます。
「 我々は、ラベル付けされていないデータだけから、高レベルの、クラスに固有の特徴を検出することが出来るかという問題を考察した。... 広く受け入れられているように見える直観に反して、我々の実験結果は、顔であるかそうでないかのラベルをイメージにつける必要なしに顔の検出が可能であることを明らかにした。」
この「Googleの猫」と言われる Non-Supervised Learning の登場は、2012年の「Deep Learning 革命」を構成する重要な出来事でした。
ChatGPTでの人間の教師の採用
こうした流れと一見すると逆の流れになるのですが、ChatGPTでは、システムの訓練の一部に、実際の人間を教師として採用しました。
「人間のフィードバックからの強化学習」 ”Reinforcement Learning from Human Feedback (RLHF)” と呼ばれる手法です。この訓練手法は、AIの新時代を拓いたChatGPTの能力に大きな影響を与えました。
機械をどのように教育・訓練するかについて、これからも新しい試みがなされるのかもしれません。
Self-Supervised Learning
Self-Supervised Learning = 自己教師付き学習というのは、学習データの一部をラベルとして利用する学習のスタイルです。
データにわざわざラベルを外付けする手間はいらないという点では、先に見た Non-Supervised Learningに似ていますが、ラベルに当たるものは存在しますので、Supervised Learning の一種です。
そのラベルが、データ自身に含まれているので、Self-Supervised Learningと言われることになります。
LLMは、大量のテキスト・データを読み込みますが、そのどこにラベルがあるのでしょう?
【 LLM自身を訓練するステージ 】
LLMのembeddingの生成に、 Self-Supervised Learning という学習スタイルが使われていて、それがLLMアーキテクチャーの成功の要因の一つだというのが今回のセッションのテーマです。
そのことを説明する前に、一つ注意してもらいたいことがあります。
それは、我々がLLMを利用する時、そのLLMはすでに訓練済みであるということです。訓練済みだということは、文字列トークンに対応するembeddingも、すでにLLMに準備されているということです。そこでは、embeddingの生成をユーザーは意識する必要はありません。
今回の話は、我々のLLMの利用以前の、LLMの訓練時代が舞台です。
訓練途中のLLMは、すこし想像しにくいとおもいます。それは、よちよち歩きのLLMで、思ったようには動いてくれません。トークンをembeddingに変換する能力も、 embeddingをトークンに変換する能力も育っておらず、出鱈目な言葉を返します。
Next Token Predictionとembeddingの生成
ただ、LLMとしてそのシステムは、 Next Token Predictionを実行しようとします。
a1 , a2 , a3 , a4 , ⋯
というトークンの並びが入力に与えられているとして、
x2 , x3 , x4 ⋯
というトークンの並びをNext Token Prediction で返したとします。
入力 a1 , a2 , a3 , a4 , ⋯
出力 x2 , x3 , x4 , ⋯
x2が出力された時、正解のラベルはa2とします。
x3が出力された時、正解のラベルはa3とします。
x4が出力された時、正解のラベルはa4とします。
⋯
ラベル a2, a3, a4 ⋯があたえられることで、 Next Token Predictionを実行しているLLMのパラメーターは、バック・プロぱゲーションで修正されていきます。
重要なことは、この修正されるパラメーターの中に、embeddingのパラメーターも含まれているということです。
こうしたステップを膨大な入力テキストごとに繰り返すことを通じて、LLMの内部に、入力された敵スチの意味を反映したembeddingが生成されていきます。
これは、なかなかスマートなアイデアです。
Embedding Layer
LLMには、この Self-Supervised Learningを利用して、大量のテキストデータを読み込んで、embeddingを生成するコンポネントが組み込まれています。それが Embedding Layer です。
Embedding Layer は、LLMの最も重要なコンポーネントの一つです。
ただ、LLMのアーキテクチャーの図をみても、 Embedding Layer は、意外と小さくしか示されていないように思います。またLLMのユーザーも、このEmbedding Layer の働きを意識することは少ないように思います。
それには、いくつか理由があります。
一つには、先のセッションでも見たように、我々はLLMを「文字列トークンの並びから次の文字列トークンを一つ予測する」ものとして文字列トークン中心に考える方が、LLMの振る舞いを理解しやすいのです。あまりembeddingには目が行きません。
それは残念なことです。
もう一つは、先のセクションで見たように、我々は、すでに完成した形でembeddingを受け取っているので、その生成メカニズムを意識することが少ないからです。
embedding Layerは、文字列トークンから対応するembeddingを引き出す単純なLookup Tableに見えます。
Lookup テーブルとしてのEmbedding Layer
訓練済みのLLMでは、Embedding Layerはルックアップ・テーブルとして機能します。Embedding Layerの重み行列からトークンIDに対応する埋め込みベクトルを取得します。
例えば、トークンID 5の埋め込みベクトルは、埋め込み層の重み行列の6行目となります(Pythonは0からカウントを始めるため、5行目ではなく6行目となります)。
Embedding Layerは、巨大なコンポネント
図では、embeddingベクトルは 3次元のベクトルとして、また、Embedding Layerの重み行列は、6個のエントリーをもつものとして表現されています。
ただ、実際のLLMは、小さ目のGPT-2 でも、embeddingの次数は 768次元で、テーブルのエントリー数(IDを持つトークンの数)は、50,257個もあります。
Embedding Layerは、巨大なコンポネントなのです。
LLM訓練 = embedding生成のコスト
“Build a Large Language Model (From Scratch)” で、著者は、次のようなLLM訓練のコスト、それはembedding生成のコストと考えていいのですが、について、次のような資産を行なっています。
「70億パラメータのLlama 2モデルの学習を例に挙げます。このモデルは、高価なA100 GPU上で184,320 GPU時間(2兆トークンを処理)を要しました。
執筆時点において、AWS上で8基のA100クラウドサーバーを稼働させる場合、1時間あたり約30ドルの費用がかかります。
このような大規模言語モデルの総トレーニングコストは、おおよそ69万ドルと概算されます(184,320時間を8で割り、30ドルを乗じた計算値です)。」









コメント
コメントを投稿