神經網絡調參學習筆記

前言

在訓練神經網絡時,調參佔了很大一部分工做比例,下面主要介紹在學習cs231n過程當中作assignment1的調參經驗。
主要涉及的參數有隱藏層大小hidden_size,學習率learn_rate以及訓練時的batch_size.網絡

理論部分

首先介紹一下講義上關於以上三個參數的可視化分析。

上圖是learn_rate對最終loss的影響,能夠從圖中看到低的learn_rate曲線會趨近於線性(藍線),而太高的learn_rate曲線會趨近於指數(綠線)。
高的學習率會使得曲線迅速降低,可是可能會在一個很差的結果下收斂。太高的學習率甚至會使得結果往差的方向發展(黃線)。比較合理的學習率應該體現出入紅色線所示的形狀。學習


實際中學習曲線可能不是平滑的,而是如圖上所示有不少的噪聲,曲線的震幅反映了batch_size選擇的合理程度,通常batch_size大的話曲線會變得更加平滑,也就是說訓練的參數和實際的參數擬合度更高。
極端狀況是batch_size的大小和dataset的大小同樣,那麼曲線極可能就是平滑的。3d


藍色的曲線顯示出驗證準確率和訓練準確率差異較大,說明可能出現過擬合現象,這種狀況能夠經過增長正則化項的懲罰係數,或者增長訓練樣本大小。
綠色曲線顯示出驗證準確率和訓練準確率差異較小,說明可能訓練模型太小,能夠適當增長網絡的參數。調試

實踐部分

下面是根據以上的理論進行調參的過程。
首先是原始的參數
hidden_size = 50 batch_size=200 learning_rate=1e-4 learning_rate_decay=0.95
獲得的曲線以下所示

準確率爲28%,從分析圖像開始,上圖的第二部分訓練集合驗證集曲線並無一個合理的gap說明訓練模型可能太小,因此咱們需增長hidden_size,或者增長batch_size的大小。
上圖的第一部分的曲線形狀也不太對,在最初的迭代過程當中loss並無降低,可能learn_rate太低或者learning_rate_decay不明顯。
因此首先提升learn_rate
hidden_size = 50 batch_size=200 learning_rate=1e-3 learning_rate_decay=0.9
運行以後獲得的結果是準確率到了47%

這個修改出乎意料的有效,可是上圖的曲線振幅較大,咱們適當增長batch_size來平滑準確率曲線。code

hidden_size = 50 batch_size=300 learning_rate=1e-3 learning_rate_decay=0.9
運行以後獲得的結果是46%

出現了過擬合現象。並且圖的上部分曲線後期震盪過大了,說明learning_rate_decay可能仍是不夠明顯blog

hidden_size =100 batch_size=300 learning_rate=1e-3 learning_rate_decay=0.8
識別率依然是46%

結果不明顯,可是過擬合現象有所緩解。可視化




最後神經網絡

hidden_size =100 batch_size=400 learning_rate=5e-4 learning_rate_decay=0.95
識別率是48%

應該仍是有點過擬合im

總結

第一次調參,確實很難調試。先到這裏吧。d3

相關文章
相關標籤/搜索