我嘗試同過炸醬面的例子,讓所有人都能理解Transformer的核心Self-Attention。你在做老北京炸醬面的醬,食譜包括一系列步驟:準備食材(干黃醬、甜面醬、豬肉、蔥姜等)、洗菜、切菜(蔥姜蒜等)、炒肉,調和干黃醬、甜面醬、涼水、醬油后,加入鍋中,慢燉成醬。我們將從FNN開始講起,最終講到Self-Attention,每個算法將以不同的方式處理這個食譜,從簡單的單步處理到復雜的全局優化,模擬從新手到大師級廚師的進化。
炸醬面版
新廚子:處理獨立、靜態輸入的FNN
FNN全稱是Feedforward Neural Network,前饋申請網絡。FNN是最簡單的神經網絡,像一個完全新手的廚子,只看當前的步驟,沒有前后的步驟的記憶和關聯。一個新手廚子第一次拿到菜譜后,就開始按照菜譜做飯,看一一步做一步,每一步都是獨立的,比如看到了“切蔥”的步驟,就只看到切蔥的輸入粗細,長短等,輸出就是切成小段的細蔥絲。但是他并不管前面的步驟,也不管后面的步驟。如果前面一步洗蔥,如果并沒有洗就切蔥了,蔥上如果有泥。如果后面的步驟是200度熱油炒香蔥絲,那么如果蔥絲切的很細,下鍋就糊了。這就如同一個手忙腳亂的新廚師,只能按照每一步指令干活,只顧眼前。這樣的優點就是每一個步驟都簡單,適合獨立步驟的任務。但是由于忽略的步驟的連續性,如果食譜是“1. 洗蔥;2. 切蔥;3. 炒肉”,FNN把每步當獨立任務,可能導致錯誤:沒洗就切,蔥不干凈;或切得太細,下鍋一炒就糊了。那么這炒醬的工作是一個連續性的工作,FNN無法處理好這種有序列性的工作,就像新手不懂整體流程。需要能記住前因后果的模型,引出RNN。
<