解決過擬合的方法:
1.正則化,但是它為什麼可以解決過擬合問題呢?首先它是在代價函式中加入了一項函式,如下公式:
你們可以看到加入的是w的範數,可能有的人有疑問,為什麼不加入b範數,其中也是可以的,主要是w是個高危向量,b是個單純的數值,所以我們在這裡為了簡單,暫時忽略它。為什麼正則化有利於消除過擬合呢,直觀理解就是
增加到足夠大,
會接近於0,實際上是不會發生這種情況的,我們嘗試消除或至少減少許多隱藏單元的影響,最終這個網路會變得更簡單,這個神經網路越來越接近邏輯回歸,我們直覺上認為大量隱藏單元被完全消除了,其實不然,實際上是該神經網路的所有隱藏單元依然存在,但是它們的影響變得更小了。神經網路變得更簡單了,貌似這樣更不容易發生過擬合,因此我不確定這個直覺經驗是否有用,不過在程式設計中執行正則化時,你實際看到一些方差減少的結果。
2.dropout
(隨機失活)
這個你在執行程式時,會看到這個函式,你知道這個是怎麼做到的嗎?
首先要定義向量
,表示乙個三層的dropout向量:
d3 = np.random.rand(a3.shape[0],a3.shape[1])
然後看它是否小於某數,我們稱之為keep-prob,keep-prob是乙個具體數字,上個示例中它是0.5,而本例中它是0.8,它表示保留某個隱藏單元的概率,此處keep-prob等於0.8,它意味著消除任意乙個隱藏單元的概率是0.2,它的作用就是生成隨機矩陣,如果對
進行因子分解,效果也是一樣的。
是乙個矩陣,每個樣本和每個隱藏單元,其中
中的對應值為1的概率都是0.8,對應為0的概率是0.2,隨機數字小於0.8。它等於1的概率是0.8,等於0的概率是0.2。
接下來要做的就是從第三層中獲取啟用函式,這裡我們叫它
,含有要計算的啟用函式,
等於上面的
乘以,a3 =np.multiply(a3,d3)
,這裡是元素相乘,也可寫為
,它的作用就是讓
中所有等於0的元素(輸出),而各個元素等於0的概率只有20%,乘法運算最終把
中相應元素輸出,即讓
中0元素與
中相對元素歸零。
其實說白了就是d3產生隨機數,這個隨機數和keep-prob比較,如果大於我們keep-prob值時為零,小於為1,然後這個和啟用函式相乘即可。和零相乘的那個函式是不是為零即被去除了。神經元就減少了。
3.資料擴增
這個方法就是增加訓練資料,有時候訓練資料很難獲取,你可以通過對現有的進行裁剪,編輯,水平翻轉等增加資料集。
4.early stopping
這裡主要參考了吳恩達老師講的課已經上面位址寫的筆記。
機器學習訓練過擬合的解決辦法
過擬合 通俗一點地來說過擬合就是模型把資料學習的太徹底,以至於把雜訊資料的特徵也學習到了,這樣就會導致在後期測試的時候不能夠很好地識別資料,即不能正確的分類,模型泛化能力太差。例如下面的例子。上面左圖表示size和prize的關係,我們學習到的模型曲線如右圖所示,雖然在訓練的時候模型可以很好地匹配資...
深度網路的訓練過程與方法
這一步是網路引數初始化得過程,區別於傳統神經網路初值隨機初始化,深度學習模型通過無監督學習輸入資料進行初始化,因此這個初值更接近全域性最優,從而能夠取得更好的效果。逐層構建單層神經元,每層採用wake sleep演算法進行調優,每次僅調整一層,逐層調整 這個過程看作是乙個feature learni...
的訓練過程 模型訓練過程中累計auc
在平時計算auc的時候,大都是使用 sklearn.metrics.roc auc score 來計算。一般操作是將每個batch 出來的結果 拼接起來,然後扔到該函式中計算。但是如果測試集量級過大 比如 10億量級 每個樣本的 結果拼接起來之後至少需要 3g記憶體。這個開銷顯然不是我們想要的。有什...