Dropout?正則化對(duì)抗?過擬合
1. 簡(jiǎn)介
過擬合是我們大多數(shù)人在訓(xùn)練和使用機(jī)器學(xué)習(xí)模型時(shí)已經(jīng)或最終會(huì)遇到的常見挑戰(zhàn)。自機(jī)器學(xué)習(xí)誕生以來,研究人員一直在努力對(duì)抗過擬合。他們提出的一種技術(shù)是 dropout 正則化,其中模型中的神經(jīng)元被隨機(jī)移除。在本文中,我們將探討 dropout 正則化的工作原理、如何在您自己的模型中實(shí)施它,以及與其他方法相比它的優(yōu)缺點(diǎn)。
1.1. 什么是過擬合
過擬合是指模型在其訓(xùn)練數(shù)據(jù)上過度訓(xùn)練,導(dǎo)致它在新數(shù)據(jù)上表現(xiàn)不佳。從本質(zhì)上講,在模型力求盡可能準(zhǔn)確的過程中,它過分關(guān)注訓(xùn)練數(shù)據(jù)集中的細(xì)節(jié)和噪聲。這些屬性通常不存在于真實(shí)世界的數(shù)據(jù)中,因此模型往往表現(xiàn)不佳。當(dāng)模型的參數(shù)相對(duì)于數(shù)據(jù)量而言太多時(shí),就會(huì)發(fā)生過擬合。這可能導(dǎo)致模型過度關(guān)注與模型必須開發(fā)的一般模式無關(guān)的較小細(xì)節(jié)。例如,假設(shè)訓(xùn)練了一個(gè)復(fù)雜模型(許多參數(shù))來識(shí)別圖片中是否有馬。在這種情況下,它可能會(huì)開始關(guān)注天空或環(huán)境的細(xì)節(jié),而不是馬本身。這可能發(fā)生在:
- 該模型太復(fù)雜(具有太多參數(shù))而不利于其自身。
- 模型訓(xùn)練時(shí)間過長(zhǎng)。
- 訓(xùn)練模型的數(shù)據(jù)集太小。
- 該模型在相同的數(shù)據(jù)上進(jìn)行訓(xùn)練和測(cè)試。
- 訓(xùn)練模型的數(shù)據(jù)集具有重復(fù)的特征,使其容易過擬合。
1.2. 重要性
過擬合不僅僅是一個(gè)簡(jiǎn)單的煩惱——它會(huì)破壞整個(gè)模型。它給人一種模型表現(xiàn)良好的錯(cuò)覺,即使它無法對(duì)所提供的數(shù)據(jù)進(jìn)行適當(dāng)?shù)母爬ā?/p>
過擬合會(huì)產(chǎn)生極其嚴(yán)重的后果,尤其是在人工智能越來越普及的醫(yī)療保健等領(lǐng)域。由于過擬合而未經(jīng)過適當(dāng)訓(xùn)練或測(cè)試的 AI 可能導(dǎo)致錯(cuò)誤診斷。
2. 什么是Dropout
- Dropout 是一種正則化技術(shù)
理想情況下,對(duì)抗過擬合的最佳方法是在同一數(shù)據(jù)集上訓(xùn)練大量不同架構(gòu)的模型,然后對(duì)它們的輸出進(jìn)行平均。這種方法的問題在于它非常耗費(fèi)資源和時(shí)間。雖然相對(duì)較小的模型可能負(fù)擔(dān)得起,但可能需要大量時(shí)間來訓(xùn)練的大型模型很容易壓垮任何人的資源。
Dropout 的工作原理是從輸入層或隱藏層中“丟棄”一個(gè)神經(jīng)元。多個(gè)神經(jīng)元從網(wǎng)絡(luò)中移除,這意味著它們實(shí)際上不存在——它們的傳入和傳出連接也被破壞。這人為地創(chuàng)建了許多更小、更不復(fù)雜的網(wǎng)絡(luò)。這迫使模型不再完全依賴于一個(gè)神經(jīng)元,這意味著它必須使其方法多樣化并開發(fā)多種方法來實(shí)現(xiàn)相同的結(jié)果。例如,回到馬的例子,如果一個(gè)神經(jīng)元主要負(fù)責(zé)馬的樹部分,它的被丟棄將迫使模型更多地關(guān)注圖像的其他特征。 Dropout 也可以直接應(yīng)用于輸入神經(jīng)元,這意味著整個(gè)特征都從模型中消失了。
- 將 Dropout 應(yīng)用于神經(jīng)網(wǎng)絡(luò)
通過在每一層(包括輸入層)中隨機(jī)丟棄神經(jīng)元,將 Dropout 應(yīng)用于神經(jīng)網(wǎng)絡(luò)。預(yù)定義的丟棄率決定了每個(gè)神經(jīng)元被丟棄的機(jī)會(huì)。例如,dropout rate 為 0.25 意味著神經(jīng)元有 25% 的幾率被丟棄。在模型訓(xùn)練期間的每個(gè)時(shí)期都會(huì)應(yīng)用 Dropout。
3. 應(yīng)用
3.1. 數(shù)據(jù)集
讓我們從一個(gè)可能容易過擬合的數(shù)據(jù)集開始:
# 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 ])
此數(shù)據(jù)與我們的馬及其環(huán)境示例相關(guān)。我們將圖像的特性抽象為一種易于理解的簡(jiǎn)單格式??梢郧宄乜吹?,數(shù)據(jù)并不理想,因?yàn)槠渲杏旭R的圖像也恰好包含樹木、綠草或藍(lán)天——它們可能在同一張照片中,但一個(gè)不影響另一個(gè)。
3.2. 模型
讓我們使用 Keras 快速創(chuàng)建一個(gè)簡(jiǎn)單的 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)
我強(qiáng)烈建議使用 Python notebook(例如 Jupyter Notebook)來組織代碼,這樣您就可以快速重新運(yùn)行單元而無需重新訓(xùn)練模型。沿每個(gè)注釋拆分代碼。
讓我們進(jìn)一步分析我們正在測(cè)試模型的數(shù)據(jù):
test_example = np.array([[1, 1, 0, 0, 0]])
本質(zhì)上,我們有一張包含馬的所有屬性的圖像,但沒有包含在數(shù)據(jù)中的任何環(huán)境因素(綠草、藍(lán)天、樹木等)。模型輸出:
0.02694458
即使模型有臉和尾巴——我們用它來識(shí)別馬——也只有 2.7% 的概率確定圖像是馬。
3.3. Dropout
Keras 使實(shí)施 dropout 以及其他防止過擬合的方法變得非常簡(jiǎn)單。我們只需要返回到包含模型層的列表:
# 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') ])
現(xiàn)在模型輸出:
0.98883545
馬圖像即使不包含環(huán)境變量,也有 99% 的把握是馬!
Dropout(0.5) 表示上層中的任何神經(jīng)元都有 50% 的機(jī)會(huì)被“丟棄”或從存在中移除。通過實(shí)施 dropout,我們基本上以資源高效的方式在數(shù)百個(gè)模型上訓(xùn)練了 MLP。
3.4. Dropout Rate
為你的模型找到理想的 Dropout 率的最好方法是通過反復(fù)試驗(yàn)——沒有萬能的方法。從 0.1 或 0.2 左右的低丟失率開始,然后慢慢增加,直到達(dá)到所需的精度。使用我們的馬 MLP,0.05 的 dropout 導(dǎo)致模型有 16.5% 的置信度圖像是馬的圖像。另一方面,0.95 的 dropout 只是丟棄了太多神經(jīng)元以使模型無法運(yùn)行——但仍然達(dá)到了 54.1% 的置信度。這些值不適用于此模型,但這確實(shí)意味著它們可能適合其他模型。
4. 總結(jié)
dropout 是機(jī)器學(xué)習(xí)中用于防止過擬合和整體提高模型性能的一種強(qiáng)大技術(shù)。它通過從輸入層和隱藏層的模型中隨機(jī)“丟棄”神經(jīng)元來實(shí)現(xiàn)這一點(diǎn)。這允許分類器在一次訓(xùn)練中訓(xùn)練成百上千個(gè)獨(dú)特的模型,防止它過度關(guān)注某些特征。
以上就是 Dropout 正則化對(duì)抗 過擬合的詳細(xì)內(nèi)容,更多關(guān)于 Dropout 正則化對(duì)抗 過擬合的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python3.7在anaconda里面使用IDLE編譯器的步驟詳解
這篇文章主要介紹了Python3.7在anaconda里面使用IDLE編譯器的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-04-04對(duì)pandas replace函數(shù)的使用方法小結(jié)
今天小編就為大家分享一篇對(duì)pandas replace函數(shù)的使用方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05python實(shí)現(xiàn)打開手機(jī)app并點(diǎn)擊操作
這篇文章主要介紹了python實(shí)現(xiàn)打開手機(jī)app并點(diǎn)擊操作,本文分為兩部分一部分是打開應(yīng)用,第二部分是調(diào)式手機(jī)連接電腦,需要的朋友可以參考下2022-04-04PYTHON如何讀取和寫入EXCEL里面的數(shù)據(jù)
這篇文章主要介紹了PYTHON如何讀取和寫入EXCEL里面的數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Python自動(dòng)化測(cè)試之登錄腳本的實(shí)現(xiàn)
本文主要介紹了Python自動(dòng)化測(cè)試之登錄腳本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02