Machine-Learning

為什麼轉換器使用層範數而不是批量範數?

  • June 28, 2020

批範數和層範數都是神經網絡訓練的常用歸一化技術。

我想知道為什麼變壓器主要使用層規範。

在 CV 任務中使用 batchnorm 和在 NLP 任務中使用 layernorm 似乎已經成為標準。最初的Attention is All you Need論文只測試了 NLP 任務,因此使用了 layernorm。看起來即使變壓器在 CV 應用程序中的興起,layernorm 仍然是最標準使用的,所以我不能完全確定它們的優缺點。但我確實有一些個人直覺——我承認這不是基於理論的,但我仍然會在下面嘗試詳細說明。

回想一下,在 batchnorm 中,用於歸一化的均值和方差統計量是針對批次中所有實例的所有元素獨立計算的。對於 NLP 任務,“元素”和“實例”分別指“單詞”和“句子”,對於 CV 任務,我指的是“像素”和“圖像”。另一方面,對於 layernorm,統計數據是跨特徵維度計算的,對於每個元素和實例都是獨立的(來源)。在轉換器中,它是針對每個實例獨立地計算所有特徵和所有元素的。最近這篇文章中的這張插圖傳達了 batchnorm 和 layernorm 之間的區別:

描述

(在變壓器的情況下,標準化統計數據是在每個實例的所有特徵和所有元素上獨立計算的,在圖像中對應於藍色立方體的左面。)

現在討論為什麼 batchnorm 不太適合 NLP 任務的原因。在 NLP 任務中,句子長度經常變化——因此,如果使用 batchnorm,將不確定要使用的適當歸一化常數(歸一化期間要除以的元素總數)是什麼。不同的批次會有不同的歸一化常數,這會導致訓練過程中的不穩定。根據提供上面鏈接圖像的論文,“整個批次維度的 NLP 數據統計在整個訓練過程中表現出很大的波動。如果 BN 被天真地實施,這會導致不穩定。” (這篇論文關注的是對用於他們稱為 PowerNorm 的轉換器的 batchnorm 的改進,與 batchnorm 或 layernorm 相比,它提高了 NLP 任務的性能。)

另一個直覺是,在過去(在 Transformers 之前),RNN 架構是常態。在循環層中,如何計算歸一化統計數據仍然不清楚。(您是否應該考慮通過循環層的先前單詞?)因此,在同一個句子中獨立於其他單詞對每個單詞進行歸一化要簡單得多。當然,這個原因不適用於轉換器,因為轉換器中的單詞計算與之前的單詞沒有時間依賴性,因此您也可以跨句子維度進行歸一化(在上圖中,這將對應於整個左臉立方體被染成藍色)。

也可能值得檢查instance normalizationgroup normalization,我不是這方面的專家,但顯然每個都有其優點。

引用自:https://stats.stackexchange.com/questions/474440

comments powered by Disqus