モデルの知識が実際に宿る場所。
SRC·35
Source
称賛されるのはアテンション。でも記憶を抱えているのはこの層。
transformer のブロックには二つの半分がある。アテンション はどこを見るかを決め、栄誉を独り占めする。もう一方のフィードフォワード層 はそのすぐ後ろにあり、モデルが本当に知っている ことの大半を静かに抱えている。レモンが酸っぱい、川が街を貫く——そんな事実はおそらくここに宿る。見ることではなく、覚えていることの中に。
有名なほうが、小さいほう。
attn: 4 d 2 vs FFN: 2 d d f f = 8 d 2 ( d f f = 4 d ) ⇒ 8 d 2 12 d 2 = 2 3 \text{attn: } 4d^2 \quad\text{vs}\quad \text{FFN: } 2\,d\,d_{ff} = 8d^2 \;\;(d_{ff}=4d)\;\Rightarrow\; \frac{8d^2}{12d^2}=\frac{2}{3}
氷山のように: アテンションは水面の上で輝く先端だが、フィードフォワード層は水面下の巨大な塊だ。一つのブロックの大きな重み行列を数えると、その約3分の2 がこの層に集まっている。みんなが研究するのは小さいほうなのだ。しかもアテンションと違い、各単語を単独で 処理する——混ぜず、隣も見ず、ただ一つのトークンが通り抜けるだけ。
まず各単語を、何千ものパターンと照らし合わせる。
h = max ( 0 , x W 1 + b 1 ) ∈ R d f f , d f f = 4 d h = \max(0,\; xW_1 + b_1)\in\mathbb{R}^{d_{ff}}, \qquad d_{ff} = 4d
方位磁針のトレイのように: 磁石をかざすと、向きの合った針だけが振れる。フィードフォワード層は各単語にこれを行う——単語をおよそ4倍 広い空間へ押し広げ、そこに何千もの学習済みパターンが待つ。各パターンは単語との一致度を測り、単純なしきい値が強い反応だけを灯し、残りをゼロにする。
どのパターンも、保存された答えに配線されている。
FFN ( x ) = ∑ i = 1 d f f f ( k i ⊤ x ) v i \text{FFN}(x) = \sum_{i=1}^{d_{ff}} f\!\left(k_i^{\top} x\right)\, v_i
ここに秘密がある——灯ったユニットはどれも、value に結びついた key だ。key は探し求めるパターン、value は書き戻す意味のひとかけら。インクのスタンプ一式のように: 押されたものはみな跡を残し、紙は最後にそのすべてを一度に帯びる。単語の出力とは、発火したすべての value を足し合わせた ものにすぎない。
つまりこれがモデルの記憶——しかも書き換えられる。
x ← x + FFN ( x ) x \;\leftarrow\; x + \text{FFN}(x)
事実が value に配線された key なら、それには住所 がある。しかもこの層は単語を上書きしない——思い出した value を、流れる本流に足し込む のだ。ピアノロールに穴を開けるように: 一つの穴が一つの保存音を鳴らす。だから一つの穴を開け直せば、その音だけが変わり、残りの曲は流れ続ける。正しい value を見つければ、たった一つの事実だけを突き止めて書き換え、ほかはそのままにできることが多い。
最近のモデルは、より賢いゲートを足す。
Swish ( z ) = z σ ( z ) , σ ( z ) = 1 1 + e − z SwiGLU ( x ) = ( Swish ( x W 1 ) ⊗ x W 3 ) W 2 \begin{aligned} \text{Swish}(z) &= z\,\sigma(z), \quad \sigma(z)=\tfrac{1}{1+e^{-z}} \\ \text{SwiGLU}(x) &= \big(\text{Swish}(xW_1)\otimes xW_3\big)\,W_2 \end{aligned}
新しい層は仕事を二つに分ける。一方の枝が中身を提案し、もう一方の枝がゲート となって、チャネルごとにどれだけ通すかを決める——そして二つを掛け合わせる。スプレー塗料にかぶせたステンシルのように: 塗料が中身、ステンシルがどこに乗るかを決める。SwiGLU と呼ばれるこの仕組みは三つ目の行列を足すので、モデルは隠れ層の幅を3分の2に削り、追加コストをゼロにする。
どのブロックも二手——集めて、それから思い出す。
x ← x + Attn ( x ) (gather) x ← x + FFN ( x ) (recall) \begin{aligned} x &\leftarrow x + \text{Attn}(x) && \text{(gather)} \\ x &\leftarrow x + \text{FFN}(x) && \text{(recall)} \end{aligned}
ここでブロック全体が噛み合う。アテンション が文脈を集める——ここで関係があるのは何か? と問う。次にフィードフォワード層 が記憶から答える——それについて私はこう知っている。 バトンの受け渡しのように: 一人の走者が文脈を運び込み、次の走者が知識をゴールへ運ぶ。この対を何十回も積み上げ——あいだに安定化のための正規化を挟めば——エンジンの出来上がりだ。見て、思い出し、見て、思い出す。
🌱 事実を思い出すことは、調べて引くことと違うのか?
知識のありかは分かった——value に配線された key、答えに配線されたパターン。正しい問いがかすめた瞬間に応える図書館だ。だが図書館は、抱えた本を理解して いるわけではない。モデルの知ることのすべてが、key を待つ value にすぎないなら、事実を思い出すことは一種の思考 なのか——それとも、ただとても速い検索にすぎないのか? そしてその配線のどこかで、知ることはいつ理解 へと変わるのだろう?
タップ → ↑スワイプで詳しく ↓スワイプで終了 クリックまたは → で次へ ↑ で詳しく esc で終了