您好,登錄后才能下訂單哦!
這篇“Dropout正則化對抗及過擬合是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Dropout正則化對抗及過擬合是什么”文章吧。
過擬合是我們大多數人在訓練和使用機器學習模型時已經或最終會遇到的常見挑戰。自機器學習誕生以來,研究人員一直在努力對抗過擬合。他們提出的一種技術是 dropout 正則化,其中模型中的神經元被隨機移除。
過擬合是指模型在其訓練數據上過度訓練,導致它在新數據上表現不佳。從本質上講,在模型力求盡可能準確的過程中,它過分關注訓練數據集中的細節和噪聲。這些屬性通常不存在于真實世界的數據中,因此模型往往表現不佳。當模型的參數相對于數據量而言太多時,就會發生過擬合。這可能導致模型過度關注與模型必須開發的一般模式無關的較小細節。例如,假設訓練了一個復雜模型(許多參數)來識別圖片中是否有馬。在這種情況下,它可能會開始關注天空或環境的細節,而不是馬本身。這可能發生在:
該模型太復雜(具有太多參數)而不利于其自身。
模型訓練時間過長。
訓練模型的數據集太小。
該模型在相同的數據上進行訓練和測試。
訓練模型的數據集具有重復的特征,使其容易過擬合。
過擬合不僅僅是一個簡單的煩惱——它會破壞整個模型。它給人一種模型表現良好的錯覺,即使它無法對所提供的數據進行適當的概括。
過擬合會產生極其嚴重的后果,尤其是在人工智能越來越普及的醫療保健等領域。由于過擬合而未經過適當訓練或測試的 AI 可能導致錯誤診斷。
Dropout 是一種正則化技術
理想情況下,對抗過擬合的最佳方法是在同一數據集上訓練大量不同架構的模型,然后對它們的輸出進行平均。這種方法的問題在于它非常耗費資源和時間。雖然相對較小的模型可能負擔得起,但可能需要大量時間來訓練的大型模型很容易壓垮任何人的資源。
Dropout 的工作原理是從輸入層或隱藏層中“丟棄”一個神經元。多個神經元從網絡中移除,這意味著它們實際上不存在——它們的傳入和傳出連接也被破壞。這人為地創建了許多更小、更不復雜的網絡。這迫使模型不再完全依賴于一個神經元,這意味著它必須使其方法多樣化并開發多種方法來實現相同的結果。例如,回到馬的例子,如果一個神經元主要負責馬的樹部分,它的被丟棄將迫使模型更多地關注圖像的其他特征。 Dropout 也可以直接應用于輸入神經元,這意味著整個特征都從模型中消失了。
將 Dropout 應用于神經網絡
通過在每一層(包括輸入層)中隨機丟棄神經元,將 Dropout 應用于神經網絡。預定義的丟棄率決定了每個神經元被丟棄的機會。例如,dropout rate 為 0.25 意味著神經元有 25% 的幾率被丟棄。在模型訓練期間的每個時期都會應用 Dropout。
讓我們從一個可能容易過擬合的數據集開始:
# Columns: has tail, has face, has green grass, tree in background, has blue sky, 3 columns of noise | is a horse image (1) or not (0) survey = np.array([ [1, 1, 1, 1, 1, 1], # tail, face, green grass, tree, blue sky | is a horse image [1, 1, 1, 1, 1, 1], # tail, face, green grass, tree blue sky | is a horse image [0, 0, 0, 0, 0, 0], # no tail, no face, no green grass, no tree, no blue sky | is not a horse image [0, 0, 0, 0, 0, 0], # no tail, no face, no green grass, no tree, no blue sky | is not a horse image ])
此數據與我們的馬及其環境示例相關。我們將圖像的特性抽象為一種易于理解的簡單格式。可以清楚地看到,數據并不理想,因為其中有馬的圖像也恰好包含樹木、綠草或藍天——它們可能在同一張照片中,但一個不影響另一個。
讓我們使用 Keras 快速創建一個簡單的 MLP:
# Imports from keras.models import Sequential from keras.layers import Dense, Dropout import numpy as np # Columns: has tail, has face, has green grass, tree in background, has blue sky, 3 columns of noise | is a horse image (1) or not (0) survey = np.array([ [1, 1, 1, 1, 1, 1], # tail, face, green grass, tree, blue sky | is a horse image [1, 1, 1, 1, 1, 1], # tail, face, green grass, tree blue sky | is a horse image [0, 0, 0, 0, 0, 0], # no tail, no face, no green grass, no tree, no blue sky | is not a horse image [0, 0, 0, 0, 0, 0], # no tail, no face, no green grass, no tree, no blue sky | is not a horse image ]) # Define the model model = Sequential([ Dense(16, input_dim=5, activation='relu'), Dense(8, activation='relu'), Dense(1, activation='sigmoid') ]) # Compile the model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) # Train the model X = survey[:, :-1] y = survey[:, -1] model.fit(X, y, epochs=1000, batch_size=1) # Test the model on a new example test_example = np.array([[1, 1, 0, 0, 0]]) prediction = model.predict(test_example) print(prediction)
我強烈建議使用 Python notebook(例如 Jupyter Notebook)來組織代碼,這樣您就可以快速重新運行單元而無需重新訓練模型。沿每個注釋拆分代碼。
讓我們進一步分析我們正在測試模型的數據:
test_example = np.array([[1, 1, 0, 0, 0]])
本質上,我們有一張包含馬的所有屬性的圖像,但沒有包含在數據中的任何環境因素(綠草、藍天、樹木等)。模型輸出:
0.02694458
即使模型有臉和尾巴——我們用它來識別馬——也只有 2.7% 的概率確定圖像是馬。
Keras 使實施 dropout 以及其他防止過擬合的方法變得非常簡單。我們只需要返回到包含模型層的列表:
# Define the model model = Sequential([ Dense(16, input_dim=5, activation='relu'), Dense(8, activation='relu'), Dense(1, activation='sigmoid') ])
并添加一些 dropout 層!
# Define the model model = Sequential([ Dense(16, input_dim=5, activation='relu'), Dropout(0.5), Dense(8, activation='relu'), Dropout(0.5), Dense(1, activation='sigmoid') ])
現在模型輸出:
0.98883545
馬圖像即使不包含環境變量,也有 99% 的把握是馬!
Dropout(0.5) 表示上層中的任何神經元都有 50% 的機會被“丟棄”或從存在中移除。通過實施 dropout,我們基本上以資源高效的方式在數百個模型上訓練了 MLP。
為你的模型找到理想的 Dropout 率的最好方法是通過反復試驗——沒有萬能的方法。從 0.1 或 0.2 左右的低丟失率開始,然后慢慢增加,直到達到所需的精度。使用我們的馬 MLP,0.05 的 dropout 導致模型有 16.5% 的置信度圖像是馬的圖像。另一方面,0.95 的 dropout 只是丟棄了太多神經元以使模型無法運行——但仍然達到了 54.1% 的置信度。這些值不適用于此模型,但這確實意味著它們可能適合其他模型。
以上就是關于“Dropout正則化對抗及過擬合是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。