iPAS 備考專區 登入

iPAS AI 應用規劃師 中級 科目三 機器學習技術與應用・114 年第二次・L23・第 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。

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

一句話總結

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

情境

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

「深智 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,確保期望值不變

舊方法

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

  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。

新方法

逐行識別 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。

錯選項

為什麼其他選項是錯的

AL1 正則化

字面在說什麼

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

為什麼不對

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

誰會選錯

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

BL2 正則化

字面在說什麼

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

為什麼不對

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

誰會選錯

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

DBatch Normalization

字面在說什麼

這段程式碼實現的是 Batch Normalization(批次正規化)。

為什麼不對

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

誰會選錯

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

變形題

同個考點下次怎麼變形

延伸

想再往下看,這 5 個

答案、題目或解析有問題?回報這題

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

看官方原文 PDF

原題 © 經濟部產業發展署,AITerms.tw 僅作教學解析使用,本站解析以 CC BY-NC-SA 4.0 授權。