今日は11月26日なので、毎日1章ずつ読み切ればチャレンジ成功だ。
長男と次男の妨害の中で、それが可能かどうかは分からない。
1. ダミー・トランスフォーマー

GPTモデルを作りながら、PyTorchからトランスフォーマーのダミーブロックを持ってくる箇所を見た。
調べてみると、PyTorch の nn の中にはすでにいくつかのトランスフォーマーモデルが実装されていた。
このトランスフォーマーモデルをダミー(dummy)と呼ぶのは、モデルの構造は同じだが、まだ学習されていないためだ。
2. 正規化
トランスフォーマーブロックに入ってくる値のうち、ある次元だけが大きすぎると、その方向にデータが偏ってしまう。
そのため、平均が0、分散が1になるように値を変換してやる。
そして Feed Forward Network では Linear で次元を拡張したあと、非線形変換を行う。
このとき ReLU や GELU という非線形活性化関数を使う。

ReLU より GELU のほうがより「なめらか」で線形的なので、パラメータがうまく調整されると言われている。
また、各ブロックでは Linear 関数を使って一度次元を増やし、再び減らす。
次元を増やすことで、より豊かな非線形探索が可能になる。
例えば、りんご・オレンジ・にんじんがあるとしたら、それぞれの食材を茹でる、焼く、刻む、混ぜるなど、さまざまな方法で調理してみるようなイメージだ。
そして完成した料理たちをまとめ、エッセンスだけを元の次元にぎゅっと詰め込む、ということになる。

3. ショートカット
学習は損失が発生した場所から起こるので、そこから逆向きにたどっていく。
例えば、2階で水漏れが起きているとしよう。
そうしたら3階、4階、5階へと上りながら、水が漏れている場所を逆方向に探していくことになる。
この過程を逆伝播(バックプロパゲーション)と呼ぶ。

しかし上図のように作られたモデルでは、各線形層を通るたびに勾配の消失が起きてしまう。
勾配が消失するというのは、逆伝播の過程で深い層では実質的に学習が行われないため、多層に積み重ねる意味がなくなってしまう、ということだ。
そこで各線形層で入力値と出力値を足し合わせ、勾配消失を防ぐための迂回経路(ショートカット)を提供する。
これは数学的に理解したほうが分かりやすいと思う。
Residual 과정 : y = x + F(x)
backward 과정 : dL/dx = dL/dy * (1 + dF/dx)
최종 gradient : dL/dy * (1 + dF/dx)バックワードの過程で、各層の勾配に「1」が必ず足されるので、各層の勾配は消失しない。
これにより、効率的な学習プロセスを助けることができる。
4. GPT モデルを作る
こうして作ったダミーモデルに、今度は Attention モデルをつなげる。
最後に、この Attention モデルを何度も繰り返し適用できるようにし、出力されたトークンを再びデコードする過程を通せばよい。

5. 感想
最初は軽い気持ちで始めた内容が、後ろに行けば行くほどきつくなってくる。
コードで見ると難しいが、いざ比喩やイメージを通して学んでみると、それほど難しくもなかった。
今は時代が変わり、内容そのものを暗記するよりも、理解することのほうが重要だ。
暗記しているだけでは新しいものは作れないが、理解していれば、AI の助けを借りて GPT を完成させることができる。
残された時間は多くないが、それでもできる限り理解できるように努力してみようと思う。
댓글을 불러오는 중...