今日は12月14日だ。
実はチャレンジ期間はすでに2週間も過ぎてしまったが、だからといってレビューを書くのをあきらめることはできなかった。
こうして残しておくTILが、あとで自分の血となり肉となるからだ。
コードそのものよりも、その意味に集中して書いてみようと思う。

1. モデルの損失計算
GPTモデルを作ったあとに、どんな方法で損失を計算するのかという内容だ。
GPTは入力されたトークンをもとに、次に出力するトークンの確率を計算する。
こうして得られた確率のうち、最上位の確率を持ついくつかのトークンを残し、ログ化・正数化などを経てクロスエントロピー損失を求める。

クロスエントロピー損失は、正解をどれくらい確信したかをそのまま負の値で測ったものなので、平均対数確率が0に近づくほど損失は減少する。
ここで気になったのは、ロジット、確率、ターゲットトークン確率、対数確率、平均対数確率、負の平均対数確率を経るのに、なぜモデルの精度が上がるのかという点だった。
これでどうやって正解の確率を高めることができるのだろうか?

実は自分がロジット関数が何なのかをよく分かっていなかったことに気づいた。
簡単に言えば、モデルは実数ベクトルであるロジット(logits)を出力し、softmaxを通してこのスコアの相対的な差を強調し、確率分布へと変換する。
この過程で、大きなスコアはより大きな確率を、小さなスコアはほとんど0に近い確率を持つようになる。
そして確率は0〜1の値であり、log1 = 0 なので、対数確率が0に近いほど正解に近いトークンを選択することになる。
したがって、損失(loss)は、正解トークンの対数確率が0に近づくようにモデルパラメータを更新させるシグナルである。
2. LLMの訓練とデコーディング戦略

ここまでやってきたすべての過程を通して損失を評価し、重みを更新することを繰り返せば、LLMを訓練することができる。
このとき、正解に近いトークンを推論するための2つの戦略が印象的だった。
もしモデルがトークンを選ぶ際に、グリーディデコーディングで確率の高いトークンだけを選択するなら、応答の多様性が失われてしまう。
そこで、各ロジットを数値(温度)で割ることで、応答に多様性を持たせる。
これを温度スケーリングという。
もう一つはトップkサンプリングで、確率が高いk個のトークンを選んだあと、その中から応答を出力するようにする方法だ。
3. 感想
コードを見ると、PyTorchと一緒に数学的な概念も身につけなければならず目が回りそうだったが、理解してみるとそれほど難しくはなかった。
以前習った損失の公式と、LLMでの損失計算のやり方が少し違っていて、学ぶのに苦労したりもした。
それでも本当に深く理解できたので、子どもたちに一度教えてみる価値はありそうだと感じた。
子どもたちにも、公式そのものよりは、理解を深められるように伝えられたらいいと思う。
댓글을 불러오는 중...