iT邦幫忙

2025 iThome 鐵人賽

0

Dropout 是一種在深度學習中廣泛使用的正則化(Regularization)技術,其核心目的是為了解決過擬合(Overfitting)問題。過擬合發生在模型在訓練數據上表現極佳,但在未見過的測試數據上性能卻大幅下降的情況。Dropout 通過在訓練過程中隨機“丟棄”(即暫時忽略)神經元,有效地防止了神經網絡對訓練數據的過度依賴和協同適應性,從而提高了模型的泛化能力。

什麼是 Dropout?

Dropout 的名字直譯為“丟棄”,顧名思義,它在每次訓練迭代時,會以一定的概率 p 隨機地將隱藏層(Hidden Layers)或可學習層中的部分神經元及其連接暫時移除。

Dropout 的原理與機制

  1. 核心機制:隨機暫停神經元
    在訓練階段,Dropout 以概率 p 暫停或“丟棄”神經元,使得這些神經元在當前的前向傳播和反向傳播中不參與計算。這可以被視為在每次訓練迭代中訓練了一個“稀疏”且結構不同的子網絡(Sub-network)。
  2. 等效集成:防止過度依賴
    Dropout 的效果類似於訓練了一個大型的集成模型(Ensemble of models)。因為每次迭代都會使用不同的子網絡,神經元無法確定其鄰近神經元的存在,迫使每個神經元不能過度依賴於特定的其他神經元輸出,必須具備更強大的魯棒性和泛化能力。這從根本上打破了神經元之間的協同適應性(Co-adaptation),從而抑制了過擬合。
  3. 測試階段:保留所有神經元與縮放
    與訓練階段不同,在測試或推理階段(Testing/Inference),所有的神經元都會被保留。

然而,為了保持期望輸出的尺度(Scale)一致性,需要對神經元的輸出進行縮放(Scaling)。如果訓練時使用的丟棄概率是 p,那麼在測試時,所有神經元的權重或輸出需要乘以 (1−p) 來進行調整,以補償訓練時部分神經元的缺失。

總結

Dropout 是一種簡單而高效的正則化技術,通過在訓練時隨機丟棄神經元,迫使網絡學習更分散、更魯棒的特徵表示,從而顯著提高模型的泛化能力並抑制過擬合。在深度學習,特別是大型且複雜的模型中,Dropout 已經成為一個不可或缺的標準組件。

import tensorflow as tf
# 定義一個線性運算與 Dropout 層的網路
def MakeNN(inputs, in_size, out_size, keep_prob, activation_function=None):
    # 權重 W:in_size * out_size 的矩陣,使用標準差為 0.1 的隨機正態分佈初始化
    Weights = tf.Variable(tf.random.normal([in_size, out_size], stddev=0.1))
    # 偏置 b:1 * out_size 的向量,初始化為 0.1
    biases = tf.Variable(tf.zeros([1, out_size]) + 0.1)
    
    # 線性運算:W*X + b
    # tf.matmul(inputs, Weights) 執行矩陣乘法 W*X (程式碼中為 X*W)
    Wx_plus_b = tf.matmul(inputs, Weights) + biases
    # 應用 dropout
    Wx_plus_b = tf.nn.dropout(Wx_plus_b, keep_prob)
    # 判斷是否有激活函數
    if activation_function is None:
        # 如果沒有設置激活函數,則直接把帶有 dropout 的線性運算結果傳出去
        outputs = Wx_plus_b
    else:
        # 如果設置了激活函數,則由此激活函數對信號進行傳遞
        outputs = activation_function(Wx_plus_b)
        
    return outputs
# 模擬輸入 X:(1, 784) 的向量,使用正態分佈隨機生成
X = tf.random.normal([1, 784])
# 調用 MakeNN 函數
ModelOut = MakeNN(X, 784, 10, 0.5, tf.nn.relu)
print(ModelOut)

隨機產生的數值,其中一些會是 0
https://ithelp.ithome.com.tw/upload/images/20250926/20168366lCmZPXzXtk.png


上一篇
設定模型層數
系列文
深度學習Tensorflow 2.X27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言