モデルの知識が実際に宿る場所。

SRC·35 Source
称賛されるのはアテンション。でも記憶を抱えているのはこの層。

称賛されるのはアテンション。でも記憶を抱えているのはこの層。

transformer のブロックには二つの半分がある。アテンションはどこを見るかを決め、栄誉を独り占めする。もう一方のフィードフォワード層はそのすぐ後ろにあり、モデルが本当に知っていることの大半を静かに抱えている。レモンが酸っぱい、川が街を貫く——そんな事実はおそらくここに宿る。見ることではなく、覚えていることの中に。
有名なほうが、小さいほう。

有名なほうが、小さいほう。

attn: 4d2vsFFN: 2ddff=8d2    (dff=4d)    8d212d2=23\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,  xW1+b1)Rdff,dff=4dh = \max(0,\; xW_1 + b_1)\in\mathbb{R}^{d_{ff}}, \qquad d_{ff} = 4d
方位磁針のトレイのように:磁石をかざすと、向きの合った針だけが振れる。フィードフォワード層は各単語にこれを行う——単語をおよそ4倍広い空間へ押し広げ、そこに何千もの学習済みパターンが待つ。各パターンは単語との一致度を測り、単純なしきい値が強い反応だけを灯し、残りをゼロにする。
どのパターンも、保存された答えに配線されている。

どのパターンも、保存された答えに配線されている。

FFN(x)=i=1dfff ⁣(kix)vi\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)=11+ezSwiGLU(x)=(Swish(xW1)xW3)W2\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に削り、追加コストをゼロにする。
どのブロックも二手——集めて、それから思い出す。

どのブロックも二手——集めて、それから思い出す。

xx+Attn(x)(gather)xx+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 にすぎないなら、事実を思い出すことは一種の思考なのか——それとも、ただとても速い検索にすぎないのか? そしてその配線のどこかで、知ることはいつ理解へと変わるのだろう?
タップ →↑スワイプで詳しく↓スワイプで終了