[上級編]LLMへ至る道~ChatGPTって結局なんなんだろう?~[23日目]

2023.12.23

みなさんこんにちは!クルトンです。

前日のブログは、GPT-3に関してでした。巨大な規模になっているGPT-3でしたが、まだ改善の余地ありという内容でした。

本日はChatGPTの中で使われているモデルについてご紹介していきます!いよいよここまできましたね。ChatGPTとはどういうものなのか、その中身を見ていきましょう!

ChatGPTって中身どうなっているの?

公式ブログにて、ChatGPTに関する内容が書かれています。

InstructGPTというものの兄弟であると書かれています。兄弟モデルであると書かれている理由としては以下の理由があります。

ChatGPTの中で使われているモデルはGPT-3.5(パラメータ数が3550億個)ですが、InstructGPTではベースとしてGPT-3を使用しています。使用しているベースのモデルは異なりますが、同じ Reinforcement Learning from Human Feedbackという手法を使っています。

上記内容のため、ChatGPTの中身について知るにはInstructGPTについて知ると理解しやすいです。

したがってInstructGPTについてチェックしていきましょう!

InstructGPTってどう作られてるの?

論文を確認するにはまず公式サイトにアクセスします。

公式サイトの"Read paper"と書かれているリンクをクリックすると、InstructGPTの論文『Training language models to follow instructions with human feedback』を確認できるサイトに飛びます。

こちらの論文もGPT-3の時と同じように大ボリュームの68ページです……!

InstructGPTはGPT-3をベースにしているものの、以下の点でGPT-3と大きく異なります。

  1. 指示チューニング
  2. 人間のフィードバックからの強化学習(Reinforcement Learning form Human Feedback, 以下ではRLHFと呼称)
    • 報酬モデル
    • 強化学習

図にすると下のイメージ図になります。

road-to-llm-advent-calendar-2023-23-01

InstructGPTに繋がるモデルに関しては、濃いめの青の矢印を引いています。

それでは、それぞれの用語を見ていきましょう!

指示チューニング

指示チューニングとは、fine-tuningの一種です。 学習済みのGPT-3に対して、人間が作ったプロンプトと、プロンプトから出力して欲しい出力文のセットをGPT-3に与える事で学習をさせます。

ここで、人手の入ったデータを使う事で不適切な表現などをしないようにモデルの修正を行なっているイメージですね。

次にRLHFについてです。人間のフィードバックを受けながら学習をしていくものです。

RLHF(報酬モデル)

まずは報酬モデルについてです。

指示チューニングしたモデル(今回だとGPT-3)へプロンプトを与えて、出力をさせます。次に出力させた複数(4~9個)の文に対して人がランキング形式で良し悪しを判断し、どういった出力をすると良いのかを人から学びます。

つまり、出力する文の優劣の判断を与えるイメージですね。

road-to-llm-advent-calendar-2023-23-02 (InstructGPTの論文から実際の画面を引用いたしました。)

なお、複数の文と比較(ランキングづけ)したものをセットで数十万件以上データを用意したようです。ラベルつける人はすごく大変そうだ……!

上記内容で学習をした結果、プロンプトと出力文を用意すると、人にとって好ましい文なのかを判定できる機械学習モデルが出来上がります!

ちなみに損失関数としては以下のものを使っています。

loss ( θ ) = - 1 ( K 2 ) E x , y w , y l D [ log ( σ ( r θ ( x , y w ) - r θ ( x , y l ) ) ) ]

σは活性化関数としてシグモイド関数を使っているそうです。

r θ ( x , y )

と書いているものが報酬モデルがプロンプトxとその回答yを与えた時の評価です。 yの隣にwとlと書かれていますが、これは選択肢を比較した時に良いとされたものがwで、いまいちと判断されたものがlの方です。(wはwinでlはloseです。) つまりは、この数式は評価の差をシグモイド関数で数値の範囲を整えつつ評価しているものですね。

他の部分についても解説します。

  • E
    • 期待値(平均)のこと。
  • Kの部分
    • K個の出力に対して、それぞれ2つを選び取る時の個数です。
    • 例えば出力が4個[A,B,C,D]の時には、[A,B][A,C][A,D][B,C][B,D][C,D]の6つの組み合わせがあります。
  • D
    • 人間が作ったデータセット、の意味です。

ここでの損失関数を日本語にすると、人間が良し悪しを判断したデータセットを使って、 良いと判断したものと悪いと判断したものの差を見て良いとは何かを学ぶ、です。

ここまでの内容を知ると、なぜChatGPTの無料版で出力した文に対して「イイね」ボタンがあったりするのか、質問した文を学習に使いますよーと言っているのかが分かりますね。 (実際に、論文中ではAPIを通して使われたプロンプトを学習に使っていると書かれています。なお、顧客には学習に使う事を定期的に通知していたようです。)

RLHF(そしてInstructGPTへ)

指示チューニング済みのGPT-3モデルにプロンプトを与えて出力させます。出力した文を報酬モデルに渡して採点してもらいます。採点結果として、良い文章が出れば、そちらを出力するようにします……というようにモデル同士が会話するようにして学習していきます。

InstructGPTの出力について

人手を通したデータから学んだことで、人にとって好ましい出力がされるようになっています。例えば、危険物の作り方について聞いた場合でも以前のモデルだと作り方を教えていたのですが、InstructGPTだと「すみませんがそれには答えられません」などのような回答を返すようになっています。(ChatGPTも実際にそういう振る舞いだと思います。)

1750億個のパラメータを持つGPT-3に対して、InstructGPTではパラメータ13億個とかなり少ないパラメータ数にも関わらず、人間が好むような返答ができるようになりました。

ただし、自然言語処理のテストで結果が悪くなっているものもあります。以下の、論文から引用してきた図をご覧ください。

road-to-llm-advent-calendar-2023-23-03

横軸はパラメータ数です。パラメータが増えるほどに、スケール則の通り縦軸の正答率は伸びています。それぞれの折れ線はモデルを表しています。

上の色から順番にどういったモデルか書くと次のようになります。

  • 赤がデータを微調整したRLHF後のGPT-3(これがInstructGPTと呼ばれるモデル)
  • 水色がGPT-3
  • 黄色がデータの調整なしのRLHF後のGPT-3
  • 指示チューニングしたGPT-3です。

データの調整というのは、指示チューニングしてRLHFで学習したモデルに対して、大量のデータを使って学習した直後のGPT-3の結果と混ぜ合わせた出力をするようにした、という事みたいです。

つまりは、GPT-3の精度の高い出力と、人間にとって良いと思う出力をするRLHFF後のGPT-3を掛け合わせたものがInstructGPTです。

図を確認してみると、データ微調整をしない場合はGPT-3よりもむしろ結果が悪くなっています。人間にとって好ましいと思う出力に寄り添った結果、テストの結果が悪くなるのでそこからさらに工夫が必要だったようです。

結論としては、InstructGPTはGPT-3よりも良い成績を取っているものもありますし、GPT-3の時よりもさらに人が使うのにありがたい機械学習モデルになっていますね。

終わりに

本日はChatGPTの中身について迫ってみました。ChatGPTと近しいモデルであるInstructGPTについて理解できると、ChatGPTの内容について理解できそうだというお話でした。

明日はGPTシリーズの最後として、GPT-4についてご紹介していく予定です。

本日はここまで。よければ明日もご覧ください!