見出し画像

GPT内部 - 大規模言語モデルの謎を解く • アラン・スミス • GOTO 2024

ようこそ。私の名前はアラン・スミスです。大規模言語モデルの謎を解き明かすことについてお話しします。GPT言語モデルの魔法の背後にある数学について少しお話しします。
私自身についてですが、アーキテクチャやプロジェクト管理、営業などに移行する誘惑を断ち切り、コードを書くことに専念してきました。1995年にキャリアをスタートして以来、ずっとコードを書くことに集中してきました。私はMicrosoft AIのMicrosoft MVPで、人工知能の分野で2005年からこのタイトルを保持しています。コミュニティでも多くの活動をしており、カンファレンスの運営やコーダ道場のサポートに携わってきました。コロナ禍の間は、YouTubeでかなりの活動をしていました。
GPT対スタークラフトについて講演する予定でしたが、残念ながらこれらの言語モデルのランダムな性質により、人々の前に立つと自宅でのようにデモがうまくいきませんでした。ただ、それらの内容は全てYouTubeチャンネルにアップロードしていますので、ご興味があればチェックしてみてください。うまくいかなかった部分は編集で取り除いています。
まず、これらの言語モデルの仕組みを理解する上で素晴らしい仕事をしてくれた他のYouTuberやコミュニティの人々に感謝したいと思います。皆さんの中にも、それらのチャンネルをご覧になった方がいるかもしれません。特に、Three Blue One Brownが最近、トランスフォーマーモデルの背後にある数学に関するシリーズを2本制作しており、それは見る価値が十分にあります。強くお勧めします。
GPTに質問をすると、例えばチーズの作り方を聞くと、実際にチーズの作り方についての回答を吐き出します。時々人間のように感じたり、同情したり、間違いを犯すと怒ったりしますが、実際には裏側で行われているのは単なる数学です。その数学がどのように機能するかについて、少し説明できればと思います。
これらのモデル、GPTモデルや多くの大規模言語モデルが行う唯一のことは、トークンの連続が与えられた場合に、各トークンが次のトークンである確率を予測することだけです。それだけです。それが唯一行うことで、それを機能させるためにたくさんのコードやその他のものを組み込んでいます。
席が足りない方は、前方や散らばっている席がありますので、そちらをご利用ください。
「猫が」と入力すると、GPTは基本的にこれらの予測を出力します。「4」が7.64%の確率で最も可能性の高いトークンだとします。そこでそれを末尾に追加し、その連続をGPTに再度送信すると、今度は「,」が26.14%の確率で出てきます。そこでコンマを追加し、再び送信すると「and」が出てきます。そういうわけで、GPTが予測を行う際に、単語やトークンのストリームが現れるのを見ることができます。
これらは可変長の連続予測が可能です。「猫が座った」や「ロックンロールの王様はエルビス」など、異なる長さの連続を扱えます。また、「training_data.txtをリストに読み込み、最初の10行を表示する」といった指示に対しては、それを実行するためのPythonコードを生成します。
順序も重要です。「映画は悪くなかった、実際とてもよかった」と「映画は良くなかった、実際とてもひどかった」を比較すると、2つの単語の位置を入れ替えただけで文全体の感情が完全に逆転しています。そのため、位置と順序は非常に重要です。
また、長期的な依存関係も重要です。「猫が床に座った。それは清掃されたばかりだった」という文では、「それ」は床を指します。一方、「猫が床に座った。それは餌を与えられたばかりだった」では、「それ」は猫を指します。言語モデルはこれらの単語が実際に何を指しているかを理解する必要があり、これはトランスフォーマーモデル内の注意メカニズムで行われます。
プロンプトエンジニアリングも質問応答をより良くするために使用します。モデルに何をすべきか、何をすべきでないかを伝え、そしてユーザーの質問を提供します。モデルが行っているのは、この連続における次のトークンを一度に一つずつ予測することだけです。
また、検索エンジンからの情報を典型的に追加する検索拡張生成も行えます。しかし、これもまた単にその連続における次のトークンを予測しているだけです。
チャット履歴も扱います。「オランダの首都は何ですか?」と尋ねる場合、これらのモデルには状態がないので、質問をするたびに、そのチャットの全履歴を送信して、何が起こっているかを理解できるようにしています。これらのモデルが4,000トークンや16,000トークンを扱えるという話を聞くことがありますが、これは検索拡張生成オプションを使用する際に、どれだけの履歴とデータを入力できるかを指しています。
私はGPT-2を使って作業をしています。今朝のジョディのセッションは素晴らしかったですね。彼女もGPT-2について少し触れていました。私がGPT-2を使っている理由は、バックパックに入れて持ち運べるコンピュータで実行できるからです。これは他の言語モデルでは不可能です。また、オープンソースなので、ソースコードをダウンロードしてブレークポイントを設定し、どのように動作するかを確認できます。
このファイルをスタートアップファイルとして設定し、Ctrl+F5を押すと...あれ、画面が消えてしまいました。私はチャットGPT-2、フレンドリーなチャットボットです。どのようにお手伝いできますか?ストップします。なぜ...OK、それを試してみましょう。はい、重複です。モデルの読み込みに時間がかかります。私はチャットGPT-2、フレンドリーなチャットボットです。どのようにお手伝いできますか?オランダの首都は何ですか?オランダの首都はアムステルダムです。そこは素敵ですか?はい、そこは素敵です。アムステルダムで何ができますか?アムステルダムでは何でもできます。そうですね、その通りです。
これは、データサイエンティストがこの技術に本当に興奮した瞬間です。「ワオ、実際にテキストを生成でき、文法的に正しい」と思いました。しかし、一般の人々は、これがチャットボットとして利用可能だったとしても、興奮しないでしょう。4歳児と会話をしているようなものです。クレイジーな答えが返ってくるでしょう。しかし、データサイエンティストは、データを投入し、パラメータを追加し、多くのGPUを投入すれば、はるかに良いパフォーマンスを発揮するものが得られると認識しました。
はい、シーケンス予測についてのもう一つの簡単なデモを見てみましょう。このファイルをスタートアップファイルとして設定すると、実際の予測がどのように行われているかについて、他の例を見ることができます。私のノートブックでデモを行います。ここで実際に行っていることを示すことができると思います。
ここで行っていることは、ライブラリをインポートしています。PyTorchのものとTransformersをインポートしています。GPTトークナイザーとGPT2LMHeadModelをHugging Faceからインポートしています。そして、グラフを描画するためにPlotlyもインポートしています。
次に、トークナイザーを作成し、モデルを読み込みます。これがそのコードです。このラップトップには大きなGPUがないので、GPUに置くことはできませんが、通常はそのコードがそれを行います。
次に、モデルに供給できるテキスト文字列をいくつか定義し、それらを出力しています。そして、モデルを使用して実際のシーケンスの次のトークン、正確には次の単語ではなく次のトークンを予測できます。
テキスト0、「猫が座った」を使ってみましょう。それを実行すると、このテンソルが出力されます。これは1x5x50257のテンソルです。これを理解するために、ソフトマックス演算を行って実際の確率を取得できます。「猫が座った」に対して、「床」が7.64%の確率で出てきます。
他にもできることがあります。「ロックンロールの王様」と入力すると...このデモに切り替えます。これは円グラフを使用しているので、視覚的に示すのに役立ちます。Ctrl+F5を押して、デバッグなしで開始します。再度、モデルの読み込みに数秒かかります。あ、違いました。すみません、こちらです。デバッグなしで開始します。
これが行うことは、テキストのシーケンスをいくつか取り、それらをトークンに変換し、GPT-2モデルに送り込み、実際の確率分布を示すことです。「猫が座った」について、これらのさまざまな分布が得られます。約50,000のトークンすべての確率があります。
これは、遊園地にある大きな車輪のようなものを想像してください。大賞は小さな扇形で、車輪を回すと(車輪が重みづけされていないと仮定して)どこかに落ちます。それは一種の確率のようなものです。この円グラフが車輪だったとしたら...
先週、ヘルシンキでこれを行いました。ヘルシンキはフィンランドの首都で、42.76%の確率です。「ロックンロールの王様」は、これらはトークンであって単語ではないことを覚えておいてください。「プレスリー」はトークンではないので、「プレ」になります。また、これらは通常スペースで始まるため、スペースも含まれています。そして、エルビス・コステロが2.76%の確率で出ています。おそらくそれになるかもしれません。
「ロックンロールの王様はエルビス・プレ」と言うと、次のトークンが「スリー」である確率が非常に高くなります。それは本当に、確率の分布に依存しています。例えば、「私の好きな動物は」と言うと、そこにはさまざまなバリエーションがあります。本当に、次のトークンがどうなるかの確率を予測しているだけです。
スライドに戻りましょう。質問をこの言語モデルに送り込んでいます。そこにアーキテクチャが見えますが、ニューラルネットワークは実際にはテキストを扱いません。テキストを数字のシーケンスに変換する方法を考える必要があります。これはトークン化またはトークナイゼーションと呼ばれるプロセスで行われます。
このテキストはOpenAIのトークン化サイトから来ています。私はこのテキストが好きです。ウェブサイトでは別のテキストに置き換えられていますが、ここに3つの重要なポイントがあります。トークンはテキストに見られる一般的な文字のシーケンスです。このトークン化プロセスは言語訓練モデルとは別のものです。実際のトレーニングデータセットを取り、それに数学を適用し、約50,000のトークンの語彙を持つことを決定し、50,000の文字の組み合わせでこのテキストを表現する最も効率的な方法を見つけ出します。
トレーニングデータの大部分は英語なので、トークン化は英語でより効率的です。モデルはこれらのトークン間の統計的関係を理解します。私の意見では、言語モデルはテキストを理解しているのではなく、トークン間の統計的関係を理解しているだけだと言えます。彼らは次のトークンを予測します。トークンは音符を表すこともでき、その場合は次の音符のシーケンスを予測します。行っているのは、トークンの確率分布に関する数学だけです。
コードでは、モデルをトークンに変換し、整数だけをモデルに送り込んでいます。テキストをモデルに送り込むわけではありません。そのため、モデルは実際にはテキストを理解していないと私は主張します。しかし、トークンのシーケンスにおける次のトークンを生成することに非常に長けています。実際には、次のトークンを生成しているわけではなく、50,000のトークン全ての確率分布を予測しています。テキストをどれだけクリエイティブにしたいかによって、最も確率の高いものを選ぶかどうかが決まります。
テキストを理解していないことと、混乱する可能性があることの良い例をお見せします。「時計を巻くという意味の"wind"を使った有名な歌詞を教えてください」と尋ねると、ボブ・ディランの「Blowin' in the Wind」が出てきました。「風が吹くという意味ではなく、時計を巻くという意味の"wind"が欲しかったんだ」と言うと、「申し訳ありません。誤解していました」と言って、ボブ・シーガーの「Against the Wind」を出してきました。これは本当に興味深いです。「Listen to the winds blow, watch the sun rise」というのが出てきましたが、これは"wind"も"watch"も間違った意味で使われています。
ここで混乱が見られます。これらを単語としてではなく、トークンとして扱っているのです。"wind"のトークンや"watch"のトークンID番号は、意味が異なっていても同じです。同じ文字の並びなので同じトークンとなり、言語モデルを混乱させています。
トークン化は英語でより効率的です。英語のテキストを45トークンに分割すると、"the"という単語が異なる表現をされていることがわかります。また、前述したように、これらはすべてスペースが前に付いています。スペースをトークンとして使用すると、トークン数が約2倍になるので、単語の先頭にスペースを含めるのが理にかなっています。実際、これらの英単語はすべてトークンです。
プログラマーの皆さんにとって、11と13とカンマとピリオドの意味は何でしょうか?そうですね、最初の256トークンはASCII文字です。これにより、任意のテキストを表現できます。これらのASCII文字が出てくるのを見ることができます。
スウェーデン語を使うと、トレーニングデータにスウェーデン語のデータがあまりないため、より断片化されます。ここでは83トークンになっています。オランダ語だと71トークンです。フィンランド語は、ヨーロッパ言語の中で私が見つけた中で最も非効率的です。トゥゴ語は247文字しかないのに622トークンになります。
これは異なる言語でのトークン化の効率性を示しています。これはGPT-4とGPT-3の言語理解を比較したものです。MLLUという、ジョディが言及した言語テストの一つを使用しています。GPT-4は英語での性能が他の言語よりもはるかに優れていることがわかります。しかし、GPT-4の他言語での性能は、通常、英語でのGPT-3.5の性能よりも優れています。これが実際の統計です。このグラフをプロットすると、トークン化の効率と言語理解の間にある程度の相関関係があることがわかりますが、完全な直線ではありません。下の方にトゥゴ語があり、ここでもトゥゴ語がリストされている言語の中で最も非効率的であることがわかります。
英語が新しいプログラミング言語だと言われることがあります。これは単に私がイギリス出身で英語を話すからそう言っているわけではありません。プロンプトを英語で書くよう努力すべきです。いくつかの理由があります。GPTモデルは英語で最も正確です。なぜなら、英語で最も多くのトレーニングデータがあるからです。正確性のグラフを見ても、英語での正確性が最も高いことがわかります。
課金はトークン数に基づいています。スウェーデン語やフィンランド語、トゥゴ語を使用すると、同じ意味を言語モデルに送るのにより多くのコストがかかります。スループットはトークンごとの処理速度に基づいています。そのため、英語の処理が最も速くなります。また、使用できるトークン数に基づいてクォータが設定されています。モデルには入力トークンの最大数も決まっています。
私たちは開発者です。何かを20%から30%速く、20%から30%正確に実行でき、コストを20%から30%削減できるなら、そうするでしょう。たとえあなたのモデルがRAGソリューションで、母国語のテキストを扱い、母国語で出力を生成し、ユーザーが母国語で質問に答えているとしても、プロンプトを英語で書くことは依然として機能します。それをお勧めします。
テストとして、トゥゴ語でチーズの作り方を尋ねてみました。答えはこのようなもので、主な材料としてチーズパウダーを使うことを推奨していました。そして途中で諦めて英語に切り替え、詩や物語を生成することを提案し、その後本当に奇妙になって、あなたが要求した秋の未知の土地にいるフローズンのキャラクターの画像を生成しました。チーズの作り方を尋ねただけなのに、明らかに理解に混乱がありました。
これは極端な例です。多くのテストを行いましたが、これは本当にクレイジーな結果が出た一例です。言語理解と実際に得られる回答の質の間には相関関係があることがわかります。
しかし、ニューラルネットワークは整数を扱いません。浮動小数点数を扱います。そのため、これらのトークンを浮動小数点数に変換する別の段階が必要です。これにより、実際に数学を始めることができます。これは埋め込みまたはベクトル化として知られています。ジョディも、テキストの感情を取得するためにテキストをベクトル化またはテキスト埋め込みを行う方法について言及していました。
「チーズ」という単語を取り、GPT-2では768個の浮動小数点数があり、これが「チーズ」という単語の埋め込みまたはベクトル化を表します。人間は768次元で考えることはできません。3次元がやっとで、開発者なので、ウェブページを作成した経験があり、赤、緑、青の色について理解しています。例えば、アズールは0、127、255というベクトルを持ちます。データサイエンティストは常に0から1の間の浮動小数点数で作業するので、これは0、0.5、1.0となります。
多くの色を取り、3D空間に配置すると、似た色が互いに近い位置にあることがわかります。距離の測定には2つの方法があります。2点間の実際の距離を測るユークリッド距離を使用するか、コサイン類似度を使用します。コサイン類似度は基本的に、同じ角度に沿っているかどうかを示します。暗いアズールはここら辺のどこかにあり、その色の実際の角度や比率により、この線に沿ったすべての色が似ており、同じコサイン類似度を持つことになります。
単語でも同じことができます。Word2Vecには、このデータベースがあります。これは埋め込みプロジェクターで、ここには10,000語があります。それぞれが200次元で表現されています。768ではなく200ですが、最近傍検索を行い、これらの200次元を3次元に圧縮して、人間の脳が理解できるようにすることができます。そうすると、似た単語が似た位置にあることがわかるはずです。
より速いラップトップが必要ですね。しかし最終的にはこのようになります。このWord2Vecデータベースは、ジョディが言及したように、自然言語処理の研究のタイムラインの一部でした。
さて、この単語の塊ができました。似た単語が同じ場所にあることがわかるはずです。ここを見てみましょう。いくつかあります。ああ、これらはクラシック音楽に関連しているようです。こちらにもいくつかあります。病気、エイズ、これは医学に関するものですね。こちらにはギリシャ文字もあります。5、70、10、100万、100、これらはすべて数字です。
このような雲を使用し、このようなベクトル化を使用することで、感情を見つけ出し、どの単語が他の単語と似ているかを知る方法となります。言語モデルは、「good」「good」「great」「fantastic」が似たような感情や意味を持つ単語であることを理解したいからです。
次に、トランスフォーマーアーキテクチャを見て、これらの言語モデルで何が起こっているのか、注意メカニズムがどのように機能するのか、これらの計算がどのように答えを得るのかを見ていきましょう。
これは「Attention Is All You Need」という論文からのものです。この論文は本来、翻訳に関するものでした。ジョディが今朝言及したように、翻訳だけでなく、このトランスフォーマーアーキテクチャをGPTで使用しているのは、シーケンス予測のためです。この部分を忘れて、デコーダーに焦点を当て、データを取り込み、埋め込みと位置エンコーディングを取得し(位置も単語と同様に重要であることを覚えておいてください)、それがネットワークをどのように通過するかを見ていくことができます。
その部分に焦点を当てると、トークン化がどのように機能するかがわかります。「猫が座った」は、トークン化語彙でルックアップされ、それらのトークンIDとなる整数を取得します。次に埋め込みを実行します。モデルのトレーニングプロセス中に、埋め込みテーブルと呼ばれるものを作成します。これはモデル内に存在し、その次元は768です。各トークンには、768次元空間でそれを記述する768個の浮動小数点数があるからです。そして、トークン語彙のサイズである50,256があります。
私たちが行うのは、基本的にルックアップです。464、3797、3332、319、262の番号を調べ、それによってこれら5つのトークンの実際の埋め込みベクトルを取得します。これがモデルに供給されるもので、これが実際の埋め込みベクトルです。これは基本的にトークン数×768となります。これが埋め込みベクトルを与えます。
次に取得するのは位置ベクトルです。位置ルックアップテーブルもあり、位置ルックアップテーブルに供給するのは、トークンの実際の位置です。これは基本的に0、1、2、3、4となり、それらのルックアップを実行します。位置ベクトルは、位置の意味を与えます。依然として768次元ですが、実際のトレーニングデータからではなく、正弦と余弦、自然数を使用して作成されます。そのため、この位置が特定のトークンと関連することを示す何らかの指標を与えます。
位置情報があり、これら2つを加算して、実際のモデルに供給するエンコーダー入力値を得ます。
先ほど述べたように、ソースコードが利用可能であることの利点は、ブレークポイントを設定できることです。次のトークン予測に移ると、これをスタートアップファイルとして設定しました。入力テキストをこれに変更し、F5を押します。Ctrl+F5ではなく、ブレークポイントが必要なのでF5です。これはモデルをメモリにロードします。
Enterを押すと、テキストを入力する代わりに「猫が座った」と言いますが、ブレークポイントにヒットします。ウォッチウィンドウに入ると、Pythonを使用しているので、このselfは私がどのクラスにいるかを教えてくれます。GPT2LMHeadModelのコンストラクタにいます。次のブレークポイントまで実行します。テキストの入力を求められるので、Enterを押します。
そして今、GPT2LMHeadModelにいて、入力IDがあります。これらは実際にモデルに渡されるトークンIDです。ここを見ると、トークナイザーがモデル自体とは別のものであることがわかります。コードでトークン化を行い、テキストを渡してトークンIDを取得し、それらをモデルに渡します。
モデル内のブレークポイントに到達すると、それらのトークンがあります。F5を押すと、位置IDが0、1、2、3、4となっていることがわかります。実際のトークンの位置IDです。
埋め込みを取得しています。モデル内に埋め込みテーブルがあると言いましたが、これはWTEで、埋め込みテーブルです。これらのIDを供給し、これら2行のコードをステップオーバーすると、ここに入力埋め込みがあります。入力埋め込みのサイズを見ると、1×5×768であることがわかります。
ほとんどすべてのニューラルネットワークは、実際のトレーニングプロセスでバッチを使用してトレーニングできます。1は単に1つのシーケンスを送信していることを意味します。推論を行う際、つまりこれを実際に行う際には、通常1つのテキストストリームだけを送信しますが、モデルは必要に応じてより多くを送信することをサポートしています。そのため、これはほぼ常に1になります。そして5つのトークン、768次元があり、これが実際の埋め込みです。
位置埋め込みでも同じことを行います。それをステップオーバーすると、位置埋め込みがあります。これも1×5×768です。そして、エンコーダー入力値を計算します。これは隠れ状態で、入力埋め込みに位置埋め込みを加えるだけです。そのコードをステップオーバーすると、スライドデッキにあった計算を行ったことになります。
次に行うのは、実際の注意計算がどのように行われるかを見ることです。これがその式です。クエリ、キー、バリューがあり、これらはネットワークの浮動小数点レイヤーを使用して計算または抽出されます。そして、この行列代数でソフトマックス演算を行います。
多くの行列計算があります。ゲーム業界と、子供たちや大人たちが膨大な金額を費やして大きなゲーミングGPUを購入していることの良い点は、3Dゲームで行われている計算が、これらのモデルを行列代数を使用してトレーニングする際に行っていることとほぼ同じだということです。これが、これらのモデルの台頭を推進しているものです。NVIDIAは現在、世界で最も価値のある企業になっていると思います。まだそうでしょうか?これらのGPUを製造しているため、Microsoftを追い越したというニュースがありました。
さて、エンコーダー入力値を取ります。これは1×5×768です。畳み込み層を使用して、注意メカニズムのための入力値ベクトルの異なる表現を生成します。これは1×5×2304になり、それを3つのセクションに分割します。これはクエリ、キー、バリューとして知られています。後でそれらについて詳しく説明します。
マルチヘッド注意機構であり、GPT-2では各層に12の注意ヘッドがあり、12層あります。そのため、1×5×768は、ヘッド数に基づいて分割され、1×12×5×64になります。768次元を12で分割し、64の12のインスタンスを得ています。つまり、1つのバッチ、12の注意ヘッド、5つのトークン、各注意のクエリ、キー、実際の値に64の浮動小数点数があります。
クエリ、キー、バリューは、単語同士がどのように関連しているかという注意を得るために使用されます。私は通常このような種類の会議では話しません。通常AzureやAI会議に参加します。私がクエリになれます。私はここに来ました。そして、部屋にいる皆さんの一人一人がキーになります。そして、バリューはキーがクエリにどのような接続を持っているかということです。
私たちが行っているのは、入力トークンのすべての単語、またはシーケンス内のすべての実際のトークンを見て、この単語がその特定の単語とどのように関連しているかを言い、実際の感情を理解しようと計算を行うことです。これらの単語のベクトルは、単語の感情を描写しているということを覚えておいてください。似た単語は実際のベクトル空間でより近くにあります。
したがって、「猫が床に座った。それは掃除されたばかりだった」という場合、「それ」が猫に接続を持つことを理解できるようになります。この行列演算内で行っているのは、クエリを取り、キーを転置し、それを掛け合わせ、64の平方根(ここにある数)で割ることです。これは、オイラー数学がより良く機能すると彼らが発見したものです。そして、このソフトマックス演算を実行します。後でソフトマックスについて詳しく説明しますが、PyTorchやTensorFlowを使ったことがあれば、ソフトマックスが何をするかおそらく知っているでしょう。浮動小数点数の列から確率分布を生成します。これは温度の計算を行う際に重要です。
これらの数学をすべて行うと、実際の注意が得られます。ベクトル化または埋め込みは意味を与え、位置ベクトルと位置ルックアップは位置を与えますが、注意メカニズムが行っているのは、単語が他の単語とどのように関連しているか、他のすべての単語との接続と長期的な依存関係を計算することです。これが本当に魔法を行っているもので、これらのモデルが予測を行うことを可能にしています。
コードに戻ると、その数学が行われているのが見えるはずです。隠れ状態があります。隠れ状態は、トークンの位置ベクトルと埋め込みベクトルを加算した結果で、1×5×768でした。そして、画面上にあった実際の数学を行います。注意を取り、注意を入れ、それを実際の次元で分割します。
それをステップオーバーすると、キー、クエリ、バリューが得られます。ただし、ここではキー、クエリ、バリューはすべての12のものです。キーの形状を見ると、1×5×768であることがわかります。次に、ヘッド数に基づいて分割します。このモデルには基本的に12のヘッドがあります。それをステップオーバーすると、キー、クエリ、バリューが1×12×5×768の次元になっています。これが、そのネットワークを通して動作するものです。
ネットワークには12の層があるため、実際に結果を得る前に、これを12回行います。GPT-2、3、4の主な違いは、より多くの層、より多くのパラメータ、より多くの注意ヘッドを持っていることです。単に大きくて大規模になっているだけです。最終的に、処理して意味を理解し始めることができる実際の出力を得ることになります。
スライドに戻りましょう。ここで「it」という単語があいまいです。「それは掃除されたばかりだった」と言いますが、掃除されたばかりなのは猫なのか床なのかわかりません。注意メカニズムが行っているのは、「it」という単語を取り、これらの2つの単語の違いを見ています。「それは掃除されたばかりだった」に焦点を当てると、「it」は「floor」とより強い接続を持ち、「cleaned」ともより強い接続を持ちます。なぜなら「floor」は「cleaned」とより強い接続を持つからです。
基本的に、その高次元空間でベクトルをシフトして、「it」が床を指し、これらの単語がどのように相互に関連しているかを理解します。
モデルは基本的にこのようになります。12のヘッドがあり、正規化やフィードフォワードなどを行うための他のいくつかの層があります。そして、これがGPT-2モデルでは12回繰り返され、それらの実際の予測を得ます。
以上です。次のトークンを予測できます。素晴らしいですね。これで実際にテキストの生成を開始できます。次のトークン予測に戻って、何か予測しやすいもの、例えば「ロックンロールの王様はエルビス」を入力してみましょう。Ctrl+F5を押します。これらのブレークポイントにすべてヒットしたくないので、Enterを押します。「ロックンロールの王様はエルビス」と入力すると、「プレ」が64.98%の確率で出てきます。それを追加すると、「スリー」が99.976%の確率で出ます。次に句点が来ます。「彼はロックスターだ」「彼はロックスターだ」「彼はロックスターだ」となります。
パーティーに行って、毎回最も予測可能なことだけを言い続けると、本当に退屈になり、誰も話しかけてこなくなるでしょう。これがここで見ているものです。テキスト生成には、次のテキストを予測するだけでなく、他にもたくさんのことがあります。ここにあるこれらの他のものを予測したいかもしれません。
「彼」を取り、「でした」を追加し、3を落とし、他のいくつかのトークンを追加し、そして適当なものをいくつか落とします。これらのプロンプトに少し確率論的なものや、ランダム性や変動を加えると、「彼はロックスターだ」「彼はロックスターだ」「彼はロックスターだ」「彼はロックスターだ」というのではなく、より面白いものを生成し始めます。
これらのモデルを扱う際に本当に重要なパラメータがいくつかあります。その一つは、人々がいつ使用するかをある程度理解しているもので、それは温度です。通常、温度は0から1の間で変化し、これはネットワークのランダム性や創造性に影響します。0のような値を使用すると非常に予測可能になり、1は非常に予測不可能になります。
しかし、通常は2まで上がります。ポータルやAzure OpenAI Studioで作業している場合、スライダーは1までしか上がりません。なぜなら、GPT-3を使用している場合、2まで上げるとものごとが非常に予測不可能になり、ガベージを生成し始める可能性があるからです。これらのランダムなものの1つを選ぶ傾向があるからです。
温度は生成されるものに影響を与えます。先ほど私の小さなデモを実行したときに言及しなかったのは、「猫が座った」というテキストがあり、「猫が座った」を使用しているということです。そして、この実際の確率分布が出てきます。「猫が座った」の「床」が7.64%の確率です。
ここに温度の公式があります。次のトークンのロジットを取得していますが、これは一連の浮動小数点数で、確率分布ではなく、単に浮動小数点値です。より確率の高いトークンに対してはより高く、より確率の低いトークンに対してはより低くなります。これを温度で割り、このソフトマックス演算を実行します。ソフトマックスが行うのは、基本的にそれらの数字をすべて取り、それらに数学を適用して、合計が1になるようにすることです。
どこかのスライドにソフトマックスの公式があったと思います。これがそれです。対数が含まれているので非線形ですが、基本的には一連の浮動小数点数を取り、それらを実際の確率分布に変換しているだけです。
温度が1の場合、それらを1で割るだけで、通常の値を取ります。しかし、温度が0の場合はどうなるでしょうか?悪いことが起こります。これはゼロによる除算操作だからです。この実装では、温度を非常に低い値にすることができ、「床」が100%の確率を持つことがわかります。温度を0.5に下げると、「床」が24%の確率を持つことがわかります。これは確率分布をシフトしているのです。1を超えて温度を2にすると、これらのトップ10のすべてがかなり低い確率を持ち、他のトークンが選ばれる可能性が高くなっていることがわかります。
これをもう少し視覚的にするために...まず、top_pについて説明してから、実際のアニメーションをお見せします。
これが温度の動作です。top_pは基本的に、選択されるトークンに対してハードカットオフを設定します。top_pを0.1に設定すると、「床」か「ベッド」しか選択できず、「床」を選択する可能性が最も高くなります。「ソファー」や「地面」などを選択する可能性はゼロです。top_pは基本的に、その実際のスライスからどれだけ選択できるかを変更します。
これらのアプリケーションを開発する際には、温度が何をするのか、top_pが何をするのか、そしてこれらのさまざまなオプションをどのように組み合わせることができるかを理解することが重要だと思います。大規模言語モデルについて話している人々を見てきましたが、top_pが何をするのか、どのように機能するのかを本当に理解していない人もいます。
そこで、これらのアニメーションを作成しました。確率分布がどのように影響するのか本当に興味があったからです。「猫が座った」を入力して、ここに温度があります。最初は1で、top_pもあります。温度とtop_pに同じ値を使用しています。実際の確率分布がどのように変化しているかがわかります。
より低い値になると興味深くなり始めます。なぜなら、top_pでは、これらのものが実際の確率分布から消え始めるのが見えるからです。以前のものはすべて消えてしまいました。ここでは選択されることはありません。ここでは選択される可能性はありますが、選択される確率はかなり低くなっています。
温度を1に戻し、top_pを1にすると、制限を設けないので、ここに落ちる可能性はわずかにあります。「猫が木の上に座った」や「猫が完全に不適切な何かの上に座った」と言う可能性があります。
スライドで言及したように、ポータルではtop_pを0.95と指定しています。これは基本的に、選択したくない可能性の高いトークンの5%をカットしているだけです。そして、実際の温度を変更しています。
ガイドラインでは、温度かtop_pを変更するが、両方は変更しないと言っています。これが行っているのは、温度を変更できますが、温度が1.0でも本当に予測不可能なものは生成されません。なぜなら、top_pがフィルタリングしているからです。
アニメーションに戻ると、確率分布のこの端に向かうにつれて、それらが消えていくのがわかります。ここら辺に来ると、top_pが0.135の場合、「床」と「ベッド」しか選択できなくなります。しかし、温度では「床」「ベッド」「ソファー」「地面」などすべてがあります。すべてに確率分布がありますが、ほとんどが本当に小さいです。
温度がどのように影響するかを見るために、「温度理論」というデモに戻ります。これをスタートアップファイルとして設定し、Ctrl+F5を押します。これは異なる温度を循環させ、異なる出力を生成します。入力を削除してしまったようですね。このファイルをスタートアップファイルとして設定し...いいえ、違います。温度理論のファイルです。はい、これをコメントアウトします。
いつもセッションの最後にこのデモをやります。観客が笑い転げて、腹を抱えて笑うのですが、なぜかわかりません。ランダムな性質があるため、あるいはデータサイエンティストが言うところの確率的なものであるため、予測不可能な結果を生成することがあります。不適切な結果を生成する可能性もあるので、そうなった場合は事前にお詫びします。
温度が0の場合、これはGPT-2ですが、「とてもいい犬です」「とてもいい犬です」「とてもいい犬です」と言い続けます。お気に入りの動物は常に犬です。なぜなら、それが最も確率の高いトークンだからです。しかし、温度を上げ始めると、異なる予測をし始めるのがわかります。ほとんどの場合「犬」を選びますが、時々「黒クマ」に切り替わります。
温度を上げていくと...「ラット」「ウサギ」「猫」「ウサギ」「ウサギ」...温度0.04では「犬」がありません。そして、温度を上げるにつれてより創造的になる傾向があります。
GPTソリューションを構築する際には、温度を変更することを強くお勧めします。これらのテストを自動化する方法はありますか?RAGベースのソリューションの構築に焦点を当てる場合、1つの質問だけに焦点を当てて、温度を0.6に設定するとこの特定の質問に対して良い答えが得られるというだけではいけません。それはすべての質問に影響を与えます。
次回のカンファレンスで行う次のセッションでは、これらのモデルのテストと分析をどのように行うか、プロンプトや温度がどれだけうまく機能しているかを分析する方法について見ていく予定です。答えが出てきたときに緑、悪い答えが出てきたときに赤というような単純なテストはできません。統計やその他のことについて考える必要があります。
また、温度を変更して修正すると、ここで生成される実際の言語がより創造的になっていくのがわかります。これはGPT-2を使用していることを覚えておいてください。そのため、答えは通常よりも少し予測不可能になります。
スライドに戻りましょう。温度の他にも、実際の出力に影響を与えるパラメータがあります。温度とtop_pが主要なもので、モデルから何が出力されるかを基本的に決定します。nは、各入力メッセージに対して生成する完了の選択肢の数です。
私が示したのは、次のトークンの実際の予測がどのように行われるかだけです。答えをより良く、より人間が読みやすくするために行われているのは、ビーム検索と呼ばれるものも使用しています。「猫が床の上に座った」で、「床」を選択した場合、これらの4つか5つの他のトークンを選択できます。それらの1つを選択すると、これらの他のトークンを選択できます。これは、各メッセージに対して複数の完了を生成できるかどうかを見ています。
また、停止シーケンスもあります。いつ話すのをやめるかです。質問と回答を行っている場合、ピリオドが表示されたら出力を停止するように指定できます。停止して他のトークンを生成しない様々なシーケンスを指定できます。
チャット完了で生成するトークンの最大数も指定できます。本当に長い答えを生成したくない場合もあるでしょう。短い答えを生成したい場合もあるでしょう。また、これらのトークンすべてに対して支払いが発生し、トークンの生成には時間がかかります。
存在ペナルティと頻度ペナルティもあります。「彼はロックスターだ」「彼はロックスターだ」「彼はロックスターだ」「彼はロックスターだ」と言い続けたくない場合、それは頻度ペナルティに関係します。同じフレーズや単語を繰り返したくありません。
ただし、子供向けの物語や詩、歌の歌詞を生成する場合は、繰り返しが良いかもしれません。同じようなフレーズや単語、歌の歌詞の中のスタンザを繰り返したいかもしれません。例えば、コーラス部分などです。しかし、より科学的なテキストでは、そのような繰り返しは望ましくないかもしれません。
コードを生成する場合も、多くの繰り返しがあります。コードを書く際、3行上で使用したのと同じシーケンスを使用しないようにすると、すべてが本当にカオスになってしまう可能性があります。
また、完了において特定のトークンが出現する可能性を修正することもできます。ブロックリストを設定して、特定のトークンがそのシーケンスに出現しないようにすることもできます。
以上が私が言いたかったことです。再度、コミュニティ内の他の人々に感謝したいと思います。これらのモデルがどのように機能するかを理解し説明するために多くのエネルギーを注いでくれました。特に、Three Blue One Brownのトランスフォーマーに関する2つの動画を強くお勧めします。深層学習シリーズの第5章と第6章としてマークされていると思いますが、最初のものを見る必要はありません。私が話してきたことを基に、アニメーションを使ってこれらのトランスフォーマーモデルがどのように機能するかを示しています。
質問の時間が2、3分あると思います。聴衆からの質問を受け付けましょう。

この記事が気に入ったらサポートをしてみませんか?