見出し画像

ChatGPTの仕組み超解説:ChatGPTの裏側大解剖

話題のAIチャットについて、その裏側を分かりやすくご紹介します。

はじめに

本記事では、ChatGPTを動かしている機械学習モデルをわかりやすく紹介していきます。大規模言語モデルの導入から始まり、GPT-3の学習を可能にした革新的な自己学習メカニズムに触れ、ChatGPTを特別なものにした新しい手法:人間のフィードバックによる強化学習について掘り下げていきます。

大規模言語モデル(LLM: Large Language Model)

ChatGPTは、大規模言語モデルLLM: Large Language Model)と呼ばれる機械学習の自然言語処理モデルの一種を発展させたものです。LLMは、膨大な量のテキストデータを収集し、文章中のキーワードの関係を推論します。このモデルは、ここ数年の計算能力の向上とともに成長してきました。LLMは、インプットデータの量とその変数が増えれば増えるほど、その能力を発揮できます。

言語モデルの最も基本的な学習方法は、一連の単語の中からある単語を予測することです。最も一般的な学習方法は、次の単語を予測する方法 (next-token-prediction) と隠された単語を予測する方法 (masked-language-modeling) です。

next-token-prediction(左)とmasked-language-modeling(右)の例

この基本的な処理手法は、LSTM(Long-Short-Term-Memory)モデルによって開発されることが多く、モデルは周囲の文脈から統計的に最も可能性の高い単語で空白を埋めていくことになります。この一連のモデルでは、2つの大きな限界があります。

一つは、周囲の単語を他の単語より重みづけすることができないことです。上記の例では、「読書」は「嫌い」と最もよく結びつきますが、データベースでは「サム」は熱心な読書家なので、モデルは「読書」よりも「サム」に比重を置き、「嫌い」ではなく「好き」を選択すべきかもしれません。

入力データは全体的に処理されるのではなく、個別に順次処理されます。つまり、LSTM が学習されるとき、文脈の幅は固定され、個別の入力を超えて数段階にわたってのみ拡張されることになります。このため、単語間の関係や導き出される意味の複雑さに限界があります。

この問題に対し、2017年、Google Brainのチームが transformers を導入しました。LSTMとは異なり、 transformersではすべての入力データを同時に処理することができます。自己注意メカニズムを用いて、このモデルは、言語配列の任意の位置に関連して、入力データの異なる部分にさまざまな比重を置くことができます。この機能により、LLMへの概念の埋め込みが大幅に改善され、非常に大規模なデータセットの処理が可能になりました。

GPTと自己認識

Generative Pre-training Transformer(GPT)モデルは、2018年にGPT-1としてopenAIによって初めて発表されました。モデルは2019年にGPT-2、2020年にGPT-3、そして最近では2022年にInstructGPTとChatGPTと進化を続けています。人間のフィードバックをシステムに統合する前に、GPTモデルの進化における最大の進歩は、計算能力の向上によるもので、GPT-3はGPT-2よりも大幅に多くのデータで学習することができ、より多様な知識基盤と幅広いタスクを実行する能力が実現されました。

GPT-2(左)とGPT-3(右)の比較

すべてのGPTモデルは、入力文を処理するエンコーダと出力文を生成するデコーダを持ち、翻訳機アーキテクチャを利用しています。

エンコーダーとデコーダーの両方は、モデルが意味と文脈を推測するために入力配列の一部に異なる重み付けをすることを可能にする Multi-head self-attention メカニズムを備えています。また、エンコーダはマスク言語モデリングを活用し、単語間の関係を理解し、より理解しやすい応答を生成します。

GPTを駆動するセルフ・アテンション・メカニズムは、トークン(単語、文、その他のグループからなるテキストの断片)を、入力文字列におけるトークンの重要度を表す係数(ベクター)に変換することで機能する。これを行うために、モデルは

  1. 入力文字列の各トークンに対して、質問、キー、および値のベクトルを作成する。

  2. ステップ1の質問事項の要素と他のトークンの重要度の要素との間の類似度を、2つの要素の要素間の差分として計算する。

  3. ステップ2の出力を softmax 関数に入力し、標準化された比重を生成する。

  4. 手順3で生成された重みに各トークンの値ベクトルを掛け合わせ、列内のトークンの重要度を表す最終ベクトルを生成する。

GPTが採用している'multi-head' attention mechanismは、self-attentionを発展させたものである。ステップ1~4を1回行うのではなく、並行してこのメカニズムを数回繰り返し、その度に質問、キー、および値ベクトルの新しい線形予測を生成するモデルで す。このように自意識を拡張することで、モデルは入力データ中の細かい意味やより複雑な関係を把握できるようになります。

GPT-3は自然言語処理において目覚ましい進歩を遂げた一方で、ユーザーの意図に沿うという点では限界がある。例えば、GPT-3は以下のような出力をすることがあります。

  • ユーザの明示的な指示に従わないという意味での "親切さ "に欠ける。

  • 存在しない、あるいは誤った事実を反映した現実逃避的な出力が含まれる。

  • モデルがどのように特定の決定や予測に至ったかを人間が理解することが困難。

  • 有害または不快な、誤った情報を広めるような有害または偏ったコンテンツが含まれている。

ChatGPTでは、このような標準的なLLMに内在する問題を解決するために、革新的な学習方法を導入しています。

ChatGPT

ChatGPTはInstructGPTの発展系で、人間のフィードバックを学習プロセスに取り入れることで、モデルの出力をよりユーザーの意図に近づけるという新しいアプローチを導入しています。人間のフィードバックからの強化学習(RLHF)については、OpenAIの2022年の論文 Training language models to follow instructions with human feedback で詳しく説明されていますが、以下はその簡略版です。

ステップ 1: 教師あり学習モデル(SFT)

最初の開発では、40人の契約社員を雇い、教師ありトレーニングデータセットを作成することで、GPT-3モデルの微調整を行いました。入力(プロンプト)は、実際にユーザーがOpen APIに入力した内容から収集したもので、その内容をラベリングする。ラベル付け担当者はプロンプトに対して適切なレスポンスを記述し、各入力に対して最適な出力を生成します。その後、この新しい教師ありのデータセットを用いてGPT-3モデルを微調整し、GPT-3.5(SFTモデルとも呼ばれる)を作成した。

プロンプトデータセットの多様性を最大化するために,任意のユーザ ID からは 200 個のプロンプトしか生成できず,長い共通接頭辞を持つプロンプトはすべて削除さ れました.最後に、個人を特定できる情報 (PII) を含むすべてのプロンプトが削除されました。

OpenAI API からプロンプトを収集した後、ラベル付け担当者は、最小限の実際のサンプルデータしかないカテゴリを埋めるために、サンプルプロンプトを作成するよう求められたこともありました。対象となったカテゴリは以下の通りです。

  • 平易なプロンプト:任意の質問。

  • 少数意見: 複数の質問と応答のペアを含む指示。

  • ユーザーベースのプロンプト:OpenAI APIに要求された特定のユースケースに対応する。

レスポンスを生成する際、ラベル付け担当者は、ユーザーからの指示が何であるかを極力推測するよう求められました。この論文では、プロンプトが情報を求める主な3つの方法について説明しています。

  • ダイレクト:〜について教えてください

  • 少数意見(Few-shot):この2つのストーリーの例があったら、同じトピックについてもう1つストーリーを書いてください。

  • 続行:物語の始まりがあったら、それを完成させる。

OpenAI APIからのプロンプトとラベル付け担当者による手書きのプロンプトを集計した結果、教師ありモデルに活用できる入出力サンプルは13,000件になりました。

画像は、Training language models to follow instructions with human feedback OpenAI et al, 2022 https://arxiv.org/pdf/2203.02155.pdf から挿入したもの。赤色で追加した文脈(右)は筆者によるもの

ステップ 2: リワード(報酬)モデル

ステップ 1 で SFT モデルを学習した後、このモデルはユーザーのプロンプトに対 して、より適切な応答を生成します。このモデルでは、一連のプロンプトと応答がモデル入力となり、出力はリワードと呼ばれる得点となります。このモデルは、報酬を最大化する出力を生成するように学習する強化学習(ステップ3参照)を利用するために必要です。

報酬モデルを学習するために、ラベル付け担当者には、1つの入力プロンプトに対する4~9個のSFTモデル出力が与えられます。ラベル付け担当者は、これらの出力をベストからワーストにランク付けするよう求められ、以下のような出力ランクの組み合わせを作成します。

レスポンスランキングの組み合わせ例

各組み合わせを個別のデータ項目としてモデルに含めると、超過適合してしまいます。これを解決するために、各順位グループを1つの一括データポイントとして活用したモデルを構築しました。

画像は、Training language models to follow instructions with human feedback OpenAI et al, 2022 https://arxiv.org/pdf/2203.02155.pdf  から挿入したもの。赤色で追加した文脈(右)は筆者によるもの。

ステップ3:強化学習モデル

最終段階では,モデルにランダムなプロンプトが提示され,応答が返されます.このレスポンスは、ステップ2で学習した「方針」を用いて生成される。方針とは、機械が目標を達成するために学習した戦略であり、この場合、報酬を最大化することです。ステップ2で開発された報酬モデルに基づいて、プロンプトとレスポンスのペアのための拡張された報酬の値が決定される。その後、報酬はモデルにフィードバックを行い、方針を進化させることができます。

2017年、Schulmanらは、各レスポンスが生成されるたびにモデルの方針を更新する際に使用される手法であるProximal Policy Optimization(PPO)を発表しました。PPOは、SFTモデルからトークンごとのKullback-Leibler(KL)ペナルティを組み込んでいます。KL divergence は、2 つの分布関数の類似性を測定し、極端な距離にはペナルティを課します。この場合、KL ペナルティを使用すると、ステップ 1 で学習した SFT モデル出力から応答が離れ、報酬モデルが最適化されすぎて人間の意図データセットから極端に逸脱するのを避けることができます。

画像は、Training language models to follow instructions with human feedback OpenAI et al, 2022 https://arxiv.org/pdf/2203.02155.pdf  から挿入したもの。赤色で追加した文脈(右)は筆者によるもの。

ステップ2とステップ3は、繰り返し行うことができますが、実際にはあまり行われていません。

モデルの評価

モデルの評価は、学習中にモデルが見たことのないテストセットを用意することで行われます。テストセットでは、モデルが前モデルのGPT-3よりも整合性が取れているかどうかを判断するために、一連の評価が行われる。

有用性:ユーザの指示を推測し、それに従うモデルの能力。ラベル付け担当者は,GPT-3 よりも InstructGPT の出力を 85±3% 好んで使用しました.

正当性:モデルの誤認識の傾向.PPOモデルは,TruthfulQAデータセットを用いて評価した場合、正確さと情報量においてわずかな増加を示すアウトプットを生成しました。

無害性:不適切な内容、軽蔑的な内容、誹謗中傷の内容を避けるためのモデルの能力。有害性のテストは、RealToxicityPromptsデータセットを用いて行われました。テストは3つの条件下で行われました。

  1. 敬語を使うように指示:有害反応の著しい減少をもたらした。

  2. 敬語の設定なしで回答を出すように指示:有害な回答には顕著な変化が見られなかった。

  3. 有害な応答をするよう指示:レスポンスは実際、GPT-3モデルよりも著しく有害であった。

ChatGPTとInstructGPTの作成に用いた手法の詳細については、OpenAIが公開した原著論文をご覧ください!Training language models to follow instructions with human feedback, 2022 https://arxiv.org/pdf/2203.02155.pdf 

最後に

いかがだったでしょうか?これからも継続的に ChatGPT/AI 関連の情報について発信していきますので、フォロー (@ctgptlb)よろしくお願いします。この革命的なテクノロジーの最前線に立つ機会をお見逃しなく!


ChatGPTが無料で使えるChatGPT研究所公式LINEボットはこちら:

この記事が参加している募集

AIとやってみた

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!