我原本昨天寫好發完的...結果今天被通知段賽...不知道甚麼問題
昨天我們把神經元堆疊成多層,終於組出了一個能處理更複雜問題的「冒險隊伍」。
但是光有隊伍還不夠,訓練過程中會遇到數值不穩、學習卡住的狀況。
今天我們就要學習兩個超實用的技巧 —— 小批次訓練 和 正規化,幫模型維持戰鬥狀態!
一、為什麼需要這些技巧?
在訓練神經網路時,有兩個經典問題:
梯度爆炸:數值在層與層之間越傳越大,最後失控。
梯度消失:數值一層層傳遞後幾乎變成 0,模型完全學不起來。
這就像冒險者在打怪時,如果沒有補血補藍,不是血量爆掉就是空藍打不出招。
二、小批次訓練(Mini-Batch Training)
在更新權重時,有三種方式:
整批訓練 (Batch Gradient Descent)
一次用所有資料更新權重
穩定,但太慢、太吃記憶體
單筆訓練 (Stochastic Gradient Descent, SGD)
每次只用一筆資料更新
噪音大,結果很抖動
小批次訓練 (Mini-Batch SGD)
每次用一小部分資料(例如 32、64 筆)
結合穩定與效率,是現在的主流做法
三、正規化(Normalization)
就算用了小批次,數值還是可能因為層數過深而不穩定。這時候就需要 正規化 來幫忙。
對每個 小批次的輸入 做標準化(均值為 0,方差為 1)
讓不同批次的數據分佈更穩定
好處:加速收斂、減少過擬合
對每一層的神經元 做標準化
特別適合序列模型(RNN、Transformer)