序列模型與Transformer
前饋塊(feed-forward block)
/ feed-FOR-werd blok /
前饋塊,是每個 Transformer 層的後半段,是注意力那位沉默的搭檔。在注意力讓各詞元彼此分享過資訊之後,前饋塊把每個詞元單獨拿出來——各自為政、不許左顧右盼——推它過一個小小的兩層神經網路。如果說注意力是詞元交談的那部分,那麼前饋塊就是每個詞元獨自坐下、私下琢磨它剛才聽到了什麼的那部分。
它的形狀簡單卻刻意:擴張、激活、收縮。詞元的向量先被投影到大得多的寬度(常是四倍大),過一道非線性激活,讓它能表示更精巧的函數,再投影回原來的尺寸。對每個位置施加的,都是同一個這樣的小網路,因此它有時被稱作「逐位置的」。看著樸素,這個塊卻佔了模型全部參數中驚人的一大份——常在三分之二上下。
為何要在意這麼個不起眼的部件?因為有證據表明,模型學到的大量知識,其實就住在這些前饋塊裡。注意力把資訊搬來搬去;前饋層則似乎在存儲與變換資訊,多少像一大套學出來的查找規則。這也是為何混合專家設計恰恰瞄準這個塊——它們用許多更小、更專精的網路替換掉一個大前饋網路,每個詞元只激活其中少數幾個,從而在不成比例地增加計算量的前提下,獲得更多容量。
在一個寬度為 512 的層裡,前饋塊把每個詞元擴張到 2048 維,施加一道激活,再擠回 512 維。同一個網路在每個詞元上分別運行——在這個塊內,第 5 個詞元絕看不到第 6 個。
擴張、激活、收縮——分別施加於每個詞元。
很容易以為注意力包攬了所有真活兒,但前饋塊佔了 Transformer 大多數參數,也似乎存著它學到的大部分知識。注意力負責路由資訊;而大量資訊實際被存放的地方,是前饋層。
又稱
另見