iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用

這段隨機遮罩程式碼實現的是哪種正則化?

原題 39

附圖程式碼實現的是哪一種正則化技術?

def forward(x, p, training=True):
    if training:
        mask = np.random.binomial(1, p, size=x.shape)
        return x * mask / p
    else:
        return x

白話

這段程式碼在訓練時(training=True)用隨機二元遮罩(0 或 1)乘以輸入,讓部分神經元的輸出隨機變成 0;推論時直接傳回原始輸入 x。

問你:這種「訓練時隨機讓部分神經元失效」的技術,實現的是哪一種正則化方法?

點選你的答案。

01 總結

一句話總結

這段程式碼實現的是 Dropout:訓練時隨機把部分神經元的輸出設為零(用二元遮罩),推論時還原全部神經元,並用 / p 做比例補償,讓期望值在兩階段保持一致

02 情境

先感受問題:訓練時故意「關掉」部分神經元

「深智 AI」的工程師林子軒在訓練一個大型神經網路,發現訓練集準確率很高但驗證集準確率遠低,典型的過擬合症狀。他決定加入 Dropout。

Dropout 的邏輯很像「讓團隊在訓練時隨機缺席幾個人」:

訓練時:每一個 batch,隨機讓 p×100% 的神經元「正常工作」,(1-p)×100% 的神經元「今天休息」(輸出設為 0)
推論時:所有神經元都工作,不再隨機關掉任何人

這段程式碼:

np.random.binomial(1, p, size=x.shape):生成一個 0/1 遮罩,每個元素以機率 p 為 1(保留),以 1-p 為 0(丟棄)
x * mask:把遮罩覆蓋到輸入上,mask=0 的位置輸出變 0
/ p:「倒置 Dropout」補償,讓留下的神經元輸出除以 p,確保期望值不變
03 對照

其他三種正則化的程式碼長什麼樣?

  1. L1 正則化的程式碼特徵:出現在損失函數中,形如 loss += lambda * sum(abs(weights)),對權重的絕對值加懲罰。完全不涉及「遮罩」或「訓練/推論模式切換」。
  2. L2 正則化的程式碼特徵:出現在損失函數中,形如 loss += lambda * sum(weights ** 2),對權重的平方加懲罰。同樣不涉及遮罩,也不區分訓練/推論模式。
  3. Batch Normalization 的程式碼特徵:計算 batch 的均值和標準差,對輸入做標準化((x - mean) / std),再乘以可學習的 gamma 和加上 beta。程式碼包含 running_mean 和 running_var 的更新,訓練和推論模式的差別是用 batch 統計量還是全局統計量。沒有隨機遮罩。
  4. Dropout 的識別特徵:隨機遮罩(random.binomial 或 bernoulli 採樣)+ training 模式切換 + / p 的縮放補償,這三個特徵同時出現只有 Dropout。
  5. / p 這個除法的意義:這是「Inverted Dropout(倒置 Dropout)」的標誌。訓練時把神經元輸出除以保留機率 p,讓期望值保持不變(期望值 = p × (x/p) + (1-p) × 0 = x),推論時就不需要做任何縮放,直接 return x。
04 解法

逐行識別 Dropout 的三個標誌

林子軒逐行分析這段程式碼:

訓練/推論模式切換:if training / else → 這是所有「行為在訓練和推論時不同」的技術的特徵,Dropout 和 BN 都有,但 L1/L2 沒有

np.random.binomial(1, p, size=x.shape) → 隨機生成 0/1 遮罩,這是 Dropout 的核心識別標誌,BN 沒有隨機遮罩

x * mask → 把輸出隨機置零,這是 Dropout 的功能定義

/ p → Inverted Dropout 的縮放補償,這是 Dropout 的第三個識別標誌

三個標誌:隨機遮罩 + 模式切換 + / p,確認這就是 Dropout。

這就是選項 C 講的:Dropout

技術版:Inverted Dropout 的期望值分析與訓練/推論的一致性

中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。

Step 1 純故事版

想像一個由 100 個人組成的委員會每次開會,但每次隨機讓其中 20 個人缺席(不參與投票)。因為每次缺席的是不同的人,委員會學會了「不依賴任何特定的人」,整體判斷更穩健。最終考試時,100 人全部出席,但為了確保決策的「力道」和平時練習一樣,把每個人的影響力縮小到 80%(除以 p=0.8)。這就是 Inverted Dropout 的邏輯。

Step 2 數學期望值分析
操作說明
訓練時輸出x * mask / p(mask=1 機率為 p,mask=0 機率為 1-p)
訓練時期望值E[x * mask / p] = x × p × (1/p) + x × 0 × (1-p) = x
推論時輸出直接 return x
一致性訓練時期望值 = x = 推論時輸出,無需推論時縮放
Step 3 符號角色表
x
當前層的輸入張量
p
保留機率(keep probability),每個神經元被保留的機率,丟棄機率為 1-p
mask
二元遮罩,每個元素獨立以機率 p 為 1、機率 1-p 為 0
x * mask
隨機置零操作,mask=0 的位置輸出為 0
/ p
Inverted Dropout 補償:讓期望值在訓練和推論時一致,推論時不需要任何縮放
Step 4 計算範例
輸入 x = [1.0, 2.0, 3.0, 4.0, 5.0],保留機率 p = 0.8

某次訓練的 mask = [1, 0, 1, 1, 0]
(2 個神經元本次被丟棄,3 個保留)

x * mask = [1.0, 0.0, 3.0, 4.0, 0.0]
x * mask / p = [1.25, 0.0, 3.75, 5.0, 0.0]

期望驗證:
保留的元素 (x/p):1/0.8=1.25, 3/0.8=3.75, 4/0.8=5.0
E[輸出] = 0.8×(x/0.8) + 0.2×0 = x ✓

推論時:直接輸出 [1.0, 2.0, 3.0, 4.0, 5.0],期望值不變
Step 5 自我複述
  1. 為什麼 Dropout 推論時不加遮罩?如果加了會怎樣?
  2. 如果不做 / p 的補償,推論時需要做什麼縮放?
  3. Dropout 的保留機率 p 一般設多少?設太高或太低各有什麼問題?
  4. Dropout 和 Batch Normalization 都有訓練/推論模式的差異,各自差在哪?
  5. Dropout 為什麼能防止過擬合?它如何讓神經網路更「穩健」?
05 陷阱

為什麼其他選項是錯的

選項 A L1 正則化

字面在說什麼:這段程式碼實現的是 L1 正則化(在損失函數中對權重絕對值加懲罰)。

為什麼不對:L1 正則化修改的是損失函數,在損失中加 λ × Σ|w|,不會出現「遮罩」、「training 模式」或「/ p」的操作。這段程式碼完全沒有接觸到權重(weights),只操作輸入 x。L1 在前向傳播中沒有任何特殊操作。

誰會選錯:看到「正則化技術」就想到 L1,沒有去分析程式碼的具體操作的人。

選項 B L2 正則化

字面在說什麼:這段程式碼實現的是 L2 正則化(在損失函數中對權重平方加懲罰)。

為什麼不對:同 L1,L2 正則化作用在損失函數上(加 λ × Σw²),不在前向傳播中有特殊操作,不會有遮罩或模式切換。L2 防止過擬合的機制是約束權重大小,而非隨機置零神經元輸出。

誰會選錯:和選 A 同類型的錯誤,記憶層面的混淆而非分析程式碼的能力。

選項 D Batch Normalization

字面在說什麼:這段程式碼實現的是 Batch Normalization(批次正規化)。

為什麼不對:Batch Normalization 也有 if training 的模式切換,但其操作是「計算 batch 的均值和標準差,對輸入做標準化」,程式碼會看到 mean()、std()、gamma、beta 等操作。這段程式碼的操作是「隨機遮罩 + 置零 + / p 縮放」,完全沒有統計量計算,不可能是 BN。

誰會選錯:知道「BN 也有訓練/推論模式切換」,看到 if training 就想到 BN,忽略了 BN 和 Dropout 的程式碼特徵完全不同的人。

06 變形

同個考點下次怎麼變形

變形 1 邊界

直覺:如果把程式碼的 / p 移到推論時,而不是訓練時做,效果一樣嗎?

答案:效果一樣,這叫「Standard Dropout」(傳統版):訓練時直接 x * mask(不除以 p),推論時把輸出乘以 p(縮小神經元影響力,補回訓練時的期望值)。兩種方案在數學上等價,但 Inverted Dropout(除以 p 在訓練時做)在實作上更方便,推論代碼不需要修改,現代框架(PyTorch、TF)普遍採用。

變形 2 反例

直覺:Dropout 用在 CNN 卷積層和全連接層,效果一樣嗎?

答案:不一樣。在全連接層,Dropout 隨機置零每個神經元(單個值)。在 CNN 的特徵圖(feature map)上,普通 Dropout 置零單個像素效果不佳(相鄰像素相關性很高),通常改用 Spatial Dropout(置零整個 channel / feature map),這樣才能真正讓某個特徵完全不可見,增加正則效果。

變形 3 升級版

直覺:Dropout 和 Batch Normalization 搭配使用時,應該注意什麼?

答案:BN 和 Dropout 在某些情況下會相互干擾。BN 在訓練時用 batch 統計量(均值/方差),Dropout 改變了每個 batch 的輸入分布(部分輸出為 0),可能讓 BN 的統計量不穩定。一般建議:如果用 BN,可以減少或取消 Dropout;如果同時用,Dropout 通常放在 BN 之後,且丟棄率設低一些。

變形 4 跨領域

直覺:Dropout 在 Transformer / Attention 架構中有什麼特殊應用?

答案:在 Transformer 中,Dropout 被用在:(1)注意力權重上(Attention Dropout):隨機置零部分注意力連接,讓模型不過度依賴特定 token;(2)殘差連接的輸出上(Residual Dropout):對每個子層的輸出加 Dropout 再加入殘差;(3)Embedding Dropout:隨機置零某些 token 的嵌入向量。BERT、GPT 等模型都用了這些 Dropout 策略。

變形 5 評估指標

直覺:怎麼知道加了 Dropout 之後過擬合真的改善了?

答案:看訓練集和驗證集損失的差距:加 Dropout 前,訓練損失低但驗證損失高(差距大);加後,差距縮小,驗證損失接近訓練損失。驗證集上的最終 Loss 或 Accuracy 是否有提升。如果加 Dropout 後訓練變慢(訓練損失下降得更慢),這是正常的,代表模型學習變困難了,需要更多 epoch 訓練。

07 延伸

想再往下看,這 5 個

  • Dropout(隨機丟棄)本題核心:訓練時隨機讓部分神經元失效,讓網路學會冗餘表示,是深度學習中最廣泛使用的正則化技術。
  • 批次正規化(Batch Normalization)另一個有訓練/推論模式差異的技術,操作對象是每層輸入的分布而非隨機置零,常與 Dropout 比較。
  • 正則化(Regularization)Dropout、L1、L2 都屬於正則化技術的上層概念,目標都是防止過擬合、提升泛化能力。
  • 過擬合(Overfitting)Dropout 要解決的根本問題:模型記住了訓練資料的雜訊,在新資料上表現差。
  • 神經網路(Neural Network)Dropout 的應用場景:深度神經網路中每一層之間都可以插入 Dropout,是大型模型的標準訓練技巧。
出處

iPAS 經濟部產業人才能力鑑定 ・ 114 年第二梯次 iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用 第 39 題

查看官方原文 PDF