優(yōu)勢(shì)解析:為何超越CNN與RNN)
1. Transformer 為什么能吊打 CNN 和 RNN2017年谷歌那篇《Attention Is All You Need》論文扔出Transformer架構(gòu)時(shí)可能連作者自己都沒想到它會(huì)成為改變AI格局的核彈。現(xiàn)在回頭看Transformer不僅干翻了CNN在圖像領(lǐng)域的統(tǒng)治地位還把RNN在序列建模領(lǐng)域的王座給掀了。這玩意兒到底強(qiáng)在哪咱們今天就用工程師的視角掰開揉碎看個(gè)明白。先看幾個(gè)硬核數(shù)據(jù)在機(jī)器翻譯任務(wù)上Transformer比傳統(tǒng)RNN快4倍以上在ImageNet分類任務(wù)中Vision TransformerViT用1/4的訓(xùn)練計(jì)算量就達(dá)到了CNN的精度最新的Swin Transformer在COCO目標(biāo)檢測(cè)上刷出58.7 AP把CNN的紀(jì)錄提高了3個(gè)點(diǎn)。這些數(shù)字背后是架構(gòu)設(shè)計(jì)上的三個(gè)降維打擊2. 核心架構(gòu)對(duì)比從局部感知到全局關(guān)聯(lián)2.1 CNN的卷積困境CNN的卷積核就像個(gè)近視眼每次只能看到像素點(diǎn)周圍的小窗口典型3x3或5x5。雖然通過堆疊多層能擴(kuò)大感受野但有兩個(gè)致命傷遠(yuǎn)距離特征關(guān)聯(lián)需要深度堆疊像ResNet要堆到152層固定尺寸的卷積核對(duì)不規(guī)則模式如長(zhǎng)尾分布捕捉乏力舉個(gè)例子當(dāng)識(shí)別狗的時(shí)候CNN需要逐層組合邊緣-紋理-局部器官-整體而Transformer可以直接建立尾巴和頭部的遠(yuǎn)程關(guān)聯(lián)。2.2 RNN的序列詛咒RNN處理序列是一個(gè)個(gè)啃的蝸牛必須嚴(yán)格按時(shí)間步串行計(jì)算。更要命的是當(dāng)序列長(zhǎng)度超過50步時(shí)梯度消失/爆炸問題就會(huì)讓模型失憶。LSTM/GRU雖然緩解了這個(gè)問題但在處理中國(guó)足球隊(duì)從來就沒讓我失望過這種長(zhǎng)距離語義依賴時(shí)沒和失望的關(guān)聯(lián)表現(xiàn)依然捉襟見肘。2.3 Transformer的注意力革命Transformer的self-attention機(jī)制就像給模型裝了雷達(dá)系統(tǒng)每處理一個(gè)token時(shí)計(jì)算該token與序列所有其他token的關(guān)聯(lián)度attention score根據(jù)關(guān)聯(lián)度動(dòng)態(tài)分配注意力權(quán)重加權(quán)求和生成新表征這個(gè)過程用矩陣運(yùn)算可表示為Attention(Q,K,V) softmax(QK^T/√d_k)V其中Q(Query)、K(Key)、V(Value)都是輸入序列的線性變換d_k是縮放因子。這種設(shè)計(jì)帶來三個(gè)碾壓優(yōu)勢(shì)任意兩個(gè)token的直接交互無論距離多遠(yuǎn)O(1)的梯度傳播路徑徹底解決長(zhǎng)程依賴并行計(jì)算所有位置的attention3. 工程實(shí)現(xiàn)上的關(guān)鍵突破3.1 多頭注意力機(jī)制就像人類會(huì)從不同角度觀察事物Transformer用8個(gè)獨(dú)立的attention head并行工作。實(shí)驗(yàn)表明某些head專注局部模式類似CNN另一些head捕捉長(zhǎng)程關(guān)系還有head專門盯住特殊token如句號(hào)這種分而治之的策略讓模型容量大幅提升在WMT2014英德翻譯任務(wù)上8頭比單頭BLEU值高出2.3。3.2 位置編碼的魔法由于attention本身沒有位置概念Transformer發(fā)明了正弦位置編碼PE(pos,2i) sin(pos/10000^(2i/d_model)) PE(pos,2i1) cos(pos/10000^(2i/d_model))這種編碼能表示絕對(duì)和相對(duì)位置可擴(kuò)展到訓(xùn)練未見過的序列長(zhǎng)度與詞向量相加后不影響原始語義對(duì)比RNN的隱狀態(tài)傳遞和CNN的局部卷積這種顯式位置建模更靈活高效。3.3 殘差連接與層歸一化每個(gè)子層attention/FFN都采用LayerNorm(x Sublayer(x))這種設(shè)計(jì)緩解了梯度消失Transformer可輕松堆到12-24層加速訓(xùn)練收斂比普通深度網(wǎng)絡(luò)快3倍以上穩(wěn)定了數(shù)值計(jì)算4. 實(shí)戰(zhàn)性能對(duì)比4.1 計(jì)算效率在序列長(zhǎng)度N512時(shí)RNN的時(shí)間復(fù)雜度O(N)≈512CNN通過空洞卷積優(yōu)化后約O(NlogN)≈4608Transformer的O(N2)≈262144看起來Transformer吃虧實(shí)際上并行計(jì)算讓實(shí)際耗時(shí)遠(yuǎn)低于RNN更短的訓(xùn)練步數(shù)典型情況Transformer 100k步 vs RNN 500k步現(xiàn)代GPU對(duì)矩陣乘法有專門優(yōu)化實(shí)測(cè)在V100顯卡上Transformer的吞吐量是LSTM的8倍。4.2 內(nèi)存占用對(duì)比模型類型參數(shù)量?jī)?nèi)存占用LSTM128M1.9GBCNN95M1.4GBTransformer110M1.7GB雖然Transformer參數(shù)不少但通過梯度檢查點(diǎn)技術(shù)訓(xùn)練時(shí)可節(jié)省40%顯存。4.3 任務(wù)適應(yīng)性任務(wù)類型CNNRNNTransformer圖像分類優(yōu)差優(yōu)機(jī)器翻譯中良優(yōu)語音識(shí)別良優(yōu)優(yōu)時(shí)序預(yù)測(cè)差良優(yōu)Transformer的通用性來自其內(nèi)容尋址的本質(zhì)不像CNN/RNN受限于預(yù)設(shè)的歸納偏置。5. 為什么你的Transformer訓(xùn)練不出效果5.1 學(xué)習(xí)率預(yù)熱Transformer對(duì)學(xué)習(xí)率極其敏感必須用warmup策略lr d_model^-0.5 * min(step_num^-0.5, step_num*warmup_steps^-1.5)典型設(shè)置前4000步線性增長(zhǎng)峰值學(xué)習(xí)率3e-4之后按步數(shù)平方根衰減5.2 注意力掩碼技巧處理變長(zhǎng)序列時(shí)三種mask必須正確設(shè)置填充mask忽略pad位置因果mask解碼器防信息泄漏內(nèi)存mask跨批次處理一個(gè)典型實(shí)現(xiàn)def create_mask(src, tgt): src_mask (src ! pad_id).unsqueeze(1) tgt_mask (tgt ! pad_id).unsqueeze(1) subsequent_mask(tgt.size(-1)) return src_mask, tgt_mask5.3 梯度裁剪閾值Transformer的梯度范數(shù)波動(dòng)劇烈建議初始閾值設(shè)為1.0根據(jù)訓(xùn)練曲線動(dòng)態(tài)調(diào)整配合Adam的beta20.98效果更佳6. 前沿變體與選擇建議6.1 視覺TransformerViT將圖像切為16x16 patches作為序列Swin Transformer引入局部窗口和層級(jí)下采樣PVT金字塔結(jié)構(gòu)保持多尺度特征6.2 高效TransformerReformer局部敏感哈希降低attention復(fù)雜度Linformer低秩投影壓縮KV矩陣Performer隨機(jī)投影近似attention6.3 選型決策樹是否需要處理圖像 ├─是 → 選擇Swin/PVT └─否 → 序列長(zhǎng)度1024 ├─是 → 選擇Longformer/Performer └─否 → 標(biāo)準(zhǔn)Transformer7. 從理論到實(shí)踐的關(guān)鍵洞見當(dāng)數(shù)據(jù)量1M時(shí)CNN/RNN可能更優(yōu)歸納偏置的威力超過100層的Transformer需要改用Post-LN結(jié)構(gòu)混合架構(gòu)如ConvAttention在小數(shù)據(jù)集表現(xiàn)驚艷8頭注意力不是金科玉律頭數(shù)應(yīng)與d_model成正比d_model/h64最佳我在復(fù)現(xiàn)ALBERT時(shí)發(fā)現(xiàn)共享注意力參數(shù)能使模型在1/10參數(shù)量下保持90%性能。這暗示了Transformer的參數(shù)效率仍有巨大優(yōu)化空間。