<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

聊一聊Transformer中的FFN

深度學習自然語言處理 ? 來源:青稞AI ? 2024-03-13 11:41 ? 次閱讀

作者:潘梓正,莫納什大學博士生

最近看到有些問題[1]說為什么Transformer中的FFN一直沒有大的改動。21年剛入學做ViT的時候就想這個問題,現在讀博生涯也快結束了,剛好看到這個問題,打算稍微寫寫, 也算是對這個地方做一個小總結吧。

1. Transformer與FFN

Transformer的基本單位就是一層block這里,一個block包含 MSA + FFN,目前公認的說法是,

?Attention作為token-mixer做spatial interaction。

?FFN(又稱MLP)在后面作為channel-mixer進一步增強representation。

從2017至今,過去絕大部分Transformer優化,尤其是針對NLP tasks的Efficient Transformer都是在Attention上的,因為文本有顯著的long sequence問題。安利一個很好的總結Efficient Transformers: A Survey [2], 來自大佬Yi Tay[3]。到了ViT上又有一堆attention[4]改進,這個repo一直在更新,總結的有點多,可以當輔助資料查閱。

而FFN這里,自從Transformer提出基本就是一個 Linear Proj + Activation + Linear Proj的結構,整體改動十分incremental。

94eb8810-e05c-11ee-a297-92fbcf53809c.jpg

Transformer Block示意圖 + FFN內部

2. Activation Function

經歷了ReLU, GeLU,Swish, SwiGLU等等,基本都是empirical observations,但都是為了給representation加上非線性變換做增強。

?ReLU對pruning挺有幫助,尤其是過去對CNN做pruning的工作,激活值為0大致意味著某個channel不重要,可以去掉。相關工作可查這個repo[5]。即便如此,ReLU造成dead neurons,因此在Transformer上逐漸被拋棄。

?GeLU在過去一段時間占比相當大,直到現在ViT上使用十分廣泛,當然也有用Swish的,如MobileViT[6]。

?Gated Linear Units目前在LLM上非常流行,其效果和分析來源于GLU Variants Improve Transformer[7]。如PaLM和LLaMA都采用了SwiGLU, 谷歌的Gemma使用GeGLU。

不過,從個人經驗上來看(偏CV),改變FFN中間的activation function,基本不會有極大的性能差距,總體的性能提升會顯得incremental。NLP上估計會幫助reduce overfitting, improve generalization,但是與其花時間改這個地方不如好好clean data。。。目前來說

3. Linear Projections

說白了就是一個matrix multiplication, 已經幾乎是GPU上的大部分人改model的時候遇到的最小基本單位。dense matrix multiplication的加速很難,目前基本靠GPU更新迭代。

不過有一個例外:小矩陣乘法可以結合軟硬件同時加速,比如instant-ngp的tiny cuda nn, 64 x 64這種級別的matrix multiplication可以使得網絡權重直接放到register, 激活值放到shared memory, 這樣運算極快。

94f66ed8-e05c-11ee-a297-92fbcf53809c.jpg

Source: https://github.com/nvlabs/tiny-cuda-nn

但是這對今天的LLM和ViT來講不現實,最小的ViT-Tiny中,FFN也是個192 x (4 x 192)這種級別,更不用說LLM這種能> 10000的。

那為什么Linear Projection在Transformer里就需要這么大?

常見的說法是Knowledge Neurons。tokens在前一層attention做global interaction之后,通過FFN的參數中存放著大量training過程中學習到的比較抽象的knowledge來進一步update。目前有些studies是說明這件事的,如

?Transformer Feed-Forward Layers Are Key-Value Memories[8]

?Knowledge Neurons in Pretrained Transformers[9]

?...

問題來了,如果FFN存儲著Transformer的knowledge,那么注定了這個地方不好做壓縮加速:

?FFN變小意味著model capacity也變小,大概率會讓整體performance變得很差。我自己也有過一些ViT上的實驗 (相信其他人也做過),兩個FC中間會有個hidden dimension的expansion ratio,一般設置為4。把這個地方調小會發現怎么都不如大點好。當然太大也不行,因為FFN這里的expansion ratio決定了整個Transformer 在推理時的peak memory consumption,有可能造成out-of-memory (OOM) error,所以大部分我們看到的expansion ration也就在4倍,一個比較合適的performance-memory trade-off.

?FFN中的activations非低秩。過去convnet上大家又發現activations有明顯的低秩特性,所以可以通過low rank做加速,如Kaiming的這篇文章[10],如下圖所示。但是FFN中間的outputs很難看出低秩的特性,實際做網絡壓縮的時候會發現pruning FFN的trade-off明顯不如convnets,而unstructured pruning又對硬件不友好。

94fa9f9e-e05c-11ee-a297-92fbcf53809c.jpg

Source: Zhang et.al, Accelerating Very Deep Convolutional Networks for Classification and Detection

4. 所以FFN真的改不動了嗎?

當然不是。

我們想改動一個model or module的時候,無非是兩個動機:1)Performance。2)Efficiency。

性能上,目前在NLP上可以做Gated MLP[11], 如Mamba[12]的block中,或者DeepMind的新結構Griffin[13]。

95031dfe-e05c-11ee-a297-92fbcf53809c.jpg

Source: Griffin: Mixing Gated Linear Recurrences with Local Attention for Efficient Language Models

但是難說這個地方的性能提升是不是來自于更多的參數量和模型復雜度。

在CV上,有個心照不宣的trick,那就是加depthwise convolution引入locality,試過的朋友都知道這個地方的提升在CV任務上有多明顯,例如CIFAR100上,DeiT-Ti可以漲接近10個點這樣子。。。

但是呢,鑒于最原始的FFN依然是目前采用最廣泛的,并且conv引入了inductive bias,破壞了原先permutation invariant的sequence(因為卷積要求規整的shape,width x height)。大規模ViT訓練依然沒有采用depthwise conv,如CLIP, DINOv2, SAM, etc。

效率上,目前最promising是改成 **Mixture-of-Expert (MoE)**,但其實。。。GPT4和Mixtral 8x7B沒出來之前基本是Google在solo,沒人關注。當然現在時代變了,Mixtral 8x7B讓MoE起死回生。最近這個地方的paper相當多,簡單列幾個自己感興趣的:

?Soft MoE: From Sparse to Soft Mixtures of Experts[14]

?LoRA MoE: Alleviate World Knowledge Forgetting in Large Language Models via MoE-Style Plugin[15]

?DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models[16]

5. 達到AGI需要什么結構?

目前這個階段,沒人知道一周以后會有什么大新聞,就像Sora悄無聲息放出來,一夜之間干掉U-Net,我也沒法說什么結構是最有效的。

總體上,目前沒有任何結構能真的完全beat Transformer,Mamba 目前 也不行,如這篇[17]發現 copy and paste不太行,scaling和in-context能力也有待查看。

考慮到未來擴展,優秀的結構應該滿足這么幾個東西,個人按重要性排序:

?Scaling Law。如果model很難通過scale up提升性能,意義不大(針對AGI來講)。但是建議大家不要針對這個地方過度攻擊學術界paper,學術界很難有資源進行這種實驗,路都是一步一步踩出來的,提出一個新architecture需要勇氣和信心,給一些寬容。嗯,說的就是Mamba。

?In-Context Learning能力。這個能力需要強大的retrieval能力和足夠的capacity,而對于Transformer來講,retrieval靠Attention,capacity靠FFN。scaling帶來的是兩者協同提升,進而涌現強大的in-context learning能力。

?Better Efficiency。說到底這也是為什么我們想換掉Transformer。做過的朋友都知道Transformer訓練太耗卡了,無論是NLP還是CV上。部署的時候又不像CNN可以做bn conv融合,inference memory大,low-bit quantization效果上也不如CNN,大概率是attention這個地方low-bit損失大。在滿足1,2的情況下,如果一個新結構能在speed, memory上展現出優勢那非常有潛力。Mamba能火有很大一部分原因是引入hardware-aware的實現,極大提升了原先SSM的計算效率。

?Life-long learning。知識是不斷更新的,訓練一個LLM需要海量tokens,強如OpenAI也不可能每次Common Crawl[18]放出新data就從頭訓一遍,目前比較實際的方案是持續訓練,但依然很耗資源。未來的結構需要更高效且持久地學習新知識。

Hallucination問題我反倒覺得不是大問題,畢竟人也有幻覺,比如對于不知道的,或自以為是的東西很自信的胡說一通,強推Hinton懟Gary Marcus這個視頻[19]。我現在寫的東西再過幾年回來看,說不定也是個Hallucination。。。

總結: FFN因為結構最簡單但是最有效,被大家沿用至今。相比之下,Transformer改進的大部分精力都在Attention這個更明顯的bottleneck上,有機會再寫個文章聊一聊這里。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • gpu
    gpu
    +關注

    關注

    27

    文章

    4417

    瀏覽量

    126683
  • Transformer
    +關注

    關注

    0

    文章

    130

    瀏覽量

    5898
  • nlp
    nlp
    +關注

    關注

    1

    文章

    463

    瀏覽量

    21820

原文標題:聊一聊Transformer中的FFN

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    我專幫人解決洗衣機程控板的問題?有的話請系我,我QQ649866336

    我專幫人解決洗衣機程控板的問題?有的話請系我,我QQ649866336
    發表于 10-05 19:46

    為什么正在QQ時,系統消息提示“已被迫下線”?

    為什么正在QQ時,系統消息提示“已被迫下線”?如果您正在使用QQ聊天時,QQ突然意外離線,并提示如下信息:則說明您的QQ此時已經在其他計算機上成功登錄。如果您本人沒有在其他計算機上登錄這個QQ帳號
    發表于 02-05 11:24

    電子工程師之家QQ群150628376,線上線下交朋友,談工作,...

    電子工程師之家150628376,線上線下交朋友,談工作,人生。。喜歡的頂起。
    發表于 09-27 16:24

    Linux 下用UDP實現群聊單

    Linux 下用UDP實現群聊單,能夠實現單和群聊。程序不長,可以作為學習網絡的檢測。
    發表于 07-19 23:37

    下阻抗匹配

    下阻抗匹配,電路加個阻抗匹配網絡,搞成和負載樣的阻抗,這樣豈不是多了個假負載?不是損耗了效率嗎?而事實上剛好相反,哪個壇友分析下緣故
    發表于 10-31 17:55

    tws芯片的問題

    `tws般指真無線耳塞,算是徹底擺脫了線材的束縛其實tws很早就有廠家在做了,但是不如蘋果的原因是tws所需要的藍牙芯片比方說現在的大部分tws塞子,都是左耳或者右耳是藍牙主機,用來連接手機另
    發表于 12-27 14:52

    AltiumFill,Polygon Pour,Plane的區別和用法

    Fill會造成短路,為什么還用它呢?來AltiumFill,Polygon Pour,Plane的區別和用法
    發表于 04-25 06:29

    你知道的和不知道的電流鏡

    這期來點輕松的,你知道的和不知道的電流鏡。電流源可算是模擬集成電路中最基礎的內容,也是有很多花樣的基本單元。電流源是籠統的叫法,具體會根據電流的流向,分別叫做電流源(Current
    發表于 06-24 06:56

    stm32的低功耗調試

    前言:物聯網的大部分設備都是電池供電的,設備本身低功耗對延長設備使用至關重要,今天就實際調試總結stm32的低功耗調試。1、stm32在運行狀態下的功耗上圖截圖自stm32l15x手冊
    發表于 08-11 08:18

    7系列FPGA的供電部分

    前幾篇咱們說了FPGA內部邏輯,本篇咱們再聊7系列FPGA的供電部分。首先咱們說spartan7系列,通常咱們需要使用以下電源軌:1,VCCINTFPGA內部核心電壓。其不損壞FPGA器件的范圍
    發表于 11-11 09:27

    下GS的波形

    對于咱們電源工程師來講,我們很多時候都在看波形,看輸入波形,MOS開關波形,電流波形,輸出二極管波形,芯片波形,MOS管的GS波形,我們拿開關GS波形為例來下GS的波形。我們測試MOS管GS波形
    發表于 11-16 09:15

    平衡小車代碼的實現

    前言今天代碼,只有直立功能的代碼。代碼總體思路給定個目標值,單片機通過IIC和mpu6050通信,得知數據后,根據角度環計算出個P
    發表于 01-14 08:29

    下涂鴉智能植物生長機的嵌入式部分

    篇文章我們分享了DIY個涂鴉智能植物生長機需要的硬件以及結構件的物料,接下來我們這篇文章我們主要來下嵌入式部分。1、產品創建進入智能涂鴉IoT平臺,點擊創建產品。選擇小家電-
    發表于 02-17 06:56

    串口環形隊列常用的幾種方法

    1、串口常用的幾種方式查詢方式可靠性很高,要考慮下個數據包覆蓋上個數據包的問題,小數據量,在10個字節以內,可以這樣考慮, 很簡單,很方便,很可靠。但是在數據量大的時候,程序阻
    發表于 07-21 15:17

    基于視覺transformer的高效時空特征學習算法

    Transformer block中,包含Self-Attention和FFN,通過堆疊Transformer block的方式達到學習圖像特征的目的。
    的頭像 發表于 12-12 15:01 ?1083次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>