人工智慧-Dropout 解決擬合過度(Overfitting)

Overfitting 也被稱為過度學習,過度擬合。它是機器學習中常見的問題。舉個Classification(分類)的例子。
                                                                                          

                                                                                                                                                           圖1 Classification

圖中黑色曲線是正常模型,綠色曲線就是overfitting模型。儘管綠色曲線很精確的區分了所有的訓練數據,但是並沒有描述數據的整體特徵,對新測試數據的適應性較差。
                                                                                      
                                                                                                                                                                 
圖2 Regression (回歸)

舉個Regression (回歸)的例子,我們的data points是一條曲線,在最左邊的這條是underfitting他沒有成功的表達這條曲線,那中間的這種曲線呢?他就是機器學習當中已經很好的囊括了我的所有對他的特徵。但是最右的是overfitting,這條曲線經過每一個data Point,但是,如果新增加兩個綠色的點,他不能成功的預測這兩個點,所以這就是一個overfitting的問題了,儘管它經過了所有的訓練點,但是不能很好的反應數據的趨勢,預測能力嚴重不足。 TensorFlow提供了強大的dropout方法來解決overfitting問題。

建立 dropout 層:

說明:

    Dropout的目的也是用來減少overfitting(過擬合)。而和L1,L2 Regularization不同的是,Dropout不是針對cost函式,而是改變神經網路本身的結構。

對於Dropout為什麼可以減少overfitting的原因如下:

一般情況下,對於同一組訓練資料,利用不同的神經網路訓練之後,求其輸出的平均值可以減少overfitting。Dropout就是利用這個原理,每次丟掉一半的一隱藏層神經元,相當於在不同的神經網路上進行訓練,這樣就減少了神經元之間的依賴性。即每個神經元不能依賴於某幾個其他的神經元(指層與層之間相連線的神經元)使神經網路更加能學習到與其他神經元之間的更加健壯robust的特徵

例子:

本次內容需要使用一下 sklearn 數據庫當中的數據, 沒有安裝 sklearn 的同學可以參考一下這個教程 安裝一下. 然後 import 以下模塊.
                                                                                                                              
                                                                                                                                                                    圖3 import 模組

這裡的keep_prob是保留概率,即我們要保留的結果所佔比例,它作為一個placeholder,在run時傳入, 當keep_prob=1的時候,相當於100%保留,也就是dropout沒有起作用。下面我們分析一下程序結構,首先準備數據,
                                                                                                                              

                                                                                                                                                                圖4 keep_prob 保留率

其中X_train是訓練數據, X_test是測試數據。然後添加隱含層和輸出層
                                                                                                                       


                                                                                                                                                                 圖5 資料定義

loss函數(即最優化目標函數)選用交叉熵函數。交叉熵用來衡量預測值和真實值的相似程度,如果完全相同,交叉熵就等於零。

                                                                                                           
                                                                                                                                                                 圖6 loss函數

train方法(最优化算法)采用梯度下降法。
                                                                                                           

                                                                                                                                                                 圖7 train函數

訓練中keep_prob=1時,就可以暴露出overfitting問題。我們可以兩種參數分別運行程序,對比一下結果。 當keep_prob=1時,模型對訓練數據的適應性優於測試數據,存在overfitting,輸出如下: 紅線是train 的誤差,藍線是 test 的誤差。
                                                                                                   

                                                                                                                                                                                  圖8 keep_prob=1

                                                                                                   

                                                                                                                                                                               圖8 keep_prob=0.5

當keep_prob=0.5時效果好了很多,keep_prob=0.5時,dropout就發揮了作用。

 


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論