iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
AI & Data

實戰派 AI 工程師帶你 0->1系列 第 12

Day12: BatchNorm & LayerNorm

  • 分享至 

  • xImage
  •  

前情提要

昨天終於把 FFN 的部分講完也實作完了,雖然只是小小一個 block 但內部其實包含了很多觀念。

參考文章&圖片來源: https://www.cnblogs.com/rossiXYZ/p/18774865

今天把前面的坑補一下,先來介紹常見的三種 Norm,分別是 batchnorm, layernrom, rmsnorm

0. 高中複習

標準差核心觀念: 描述數據的分散程度
在高中統計的單元,你一定算過平均和標準差或變異數,如果想複習一下標準差,建議可以看以下兩個高中影片,回味一下。
https://www.youtube.com/watch?v=aeB5ftpf0ak
https://www.youtube.com/watch?v=0X9yGwP2jX4

這裡變異數公式: 離差平方和/n, 離差 = 各點與平均值之間的差值,可以透過公式來衡量數據的分散程度。

1. Batchnorm

步驟:

  1. 準備: mean and variance
  2. 歸一化: normalize
  3. 還原: scale and shift (β、γ 是參數在訓練中學習)

底下是論文的流程圖可以當參考
  https://ithelp.ithome.com.tw/upload/images/20250906/20168446z3DDmmYFiY.jpg
可以想像原始是 x 分布,經過歸一化讓他落在平均值0(左右剛好抵銷), 標準差 1,最後再透過 scale 和 shift 還原回去
  https://ithelp.ithome.com.tw/upload/images/20250906/20168446Vu1USbuL3Y.jpg

batchnorm 提出是在2015年的時候,當初其實還比較少 LM 的相關研究,基本上是以圖像為主,那圖像通常是固定的 size,所以會像下圖上半這樣,可能維度3表示一個"固定"特徵,所以當初論文加了 batchnrom 大幅提高精準度以及減少訓練難度。
但後來有 LLM 跟 ASR 更多研究,序列長度都不一定一樣,一樣看下圖下半,當中的["大", "香", "網", pad, "杯"],把這五個本來就沒什麼關係的特徵去歸一化,可想而知沒有太大意義,也就導致 batchnrom 效果不好,因此除了CV領域外漸漸被後續 layernrom 跟 rmsnorm 取代掉。
  https://ithelp.ithome.com.tw/upload/images/20250906/20168446d8WO9znUgD.jpg

2. LayerNorm

核心觀念: 著重在單個句子(token) → 不受序列長度影響
一樣以上圖做講解,在處理 NLP 的部分,基本上 batch 當中的每筆資料(每句話)不見得有關係,所以將整個 batch 就歸一化就沒有意義,所以轉換成每筆資料(每句話)自行做歸一化,那可以想像在一句話當中找一個"語義中心",所有詞都聚集在語義中心周圍。
註: 上述表達跟實際應用上有出入,實際應用在 NLP 當中是針對"單一" token 的所有 features 做標準化,而不是對單一句子(搭配下圖)。

基本上步驟跟 batchnrom 一模一樣,只算在算 mean and variance 針對不同維度(藍色區域),但應用在 CNN 跟 transformer 的 LayerNorm 用法又不一樣
https://ithelp.ithome.com.tw/upload/images/20250906/20168446XcwbqAv9Xi.png
圖片來源: https://openaccess.thecvf.com/content/ICCV2021W/NeurArch/papers/Yao_Leveraging_Batch_Normalization_for_Vision_Transformers_ICCVW_2021_paper.pdf

實際應用在 NLP 的 LayerNorm 會像下圖這樣,是針對"單一" token (比如說"開")的 features 進行歸一化,所以就不會受到 batch 跟序列長度影響。
https://ithelp.ithome.com.tw/upload/images/20250906/20168446PTJNmLU48n.jpg

老樣子一樣來個 QA

Question

  1. 為什麼只針對"單一" token,而不是整句話呢?

Ans

讓我們分幾個層次來探討看看

  • 如果整句話那就會包含 padding token 或者其他特殊的 token,特殊 token 也一起做歸一化可能會影響到原本的分布,舉個更誇張的例子,假設有一句 padding toekn 大於一半的長度(就跟班上很多人考 0 分然後你要算平均),那是不是就沒有意義了。
  • 假設整句話一起歸一化,代表當下這個 token 會受到其他的 token 影響,如果這樣設計是不是會跟 attention 衝突,因為 attention 已經考慮單詞在不同位置的語義和依賴關係。

所以 LN 在 NLP 的設計初衷比較會偏向,希望讓每個 toekn 各自獨立歸一化,讓這個 token 的 hidden state 在不同 feature 維度上的分布更穩定。

3. 小總結

看了上面兩個 normalization,應該可以知道它的功用,主要有三點:

  1. 穩定訓練過程
  2. 加速收斂
  3. 提高模型能力

會有上面三點,主要是因為歸一化把範圍固定住了,固定在標準分布,然後也有把一部分不重要的複雜訊息過濾掉(比如說極端值,做完 Batchnrom 會變比較緩和),所以使得數據的分布穩定下來,這樣可以減少 over-fitting 的問題,加速模型的收斂。

今天就先到這裡囉,明天繼續講 rmsnrom 跟實作。


上一篇
Day11: FFN (下)
下一篇
Day13: RMSNorm & 實作
系列文
實戰派 AI 工程師帶你 0->113
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言