既然我們希望網路的輸出盡可能的接近真正想要**的值。那麼就可以通過比較當前網路的**值和我們真正想要的目標值,再根據兩者的差異情況來更新每一層的權重矩陣(比如,如果網路的**值高了,就調整權重讓它**低一些,不斷調整,直到能夠**出目標值)。因此就需要先定義「如何比較**值和目標值的差異」,這便是損失函式或目標函式(loss function or objective function),用於衡量**值和目標值的差異的方程。loss function的輸出值(loss)越高表示差異性越大。那神經網路的訓練就變成了盡可能的縮小loss的過程。
所用的方法是梯度下降(gradient descent):通過使loss值向當前點對應梯度的反方向不斷移動,來降低loss。一次移動多少是由學習速率(learning rate)來控制的。
然而使用梯度下降訓練神經網路擁有兩個主要難題。
梯度下降尋找的是loss function的區域性極小值,而我們想要全域性最小值。如下圖所示,我們希望loss值可以降低到右側深藍色的最低點,但loss有可能「卡」在左側的區域性極小值中。
試**決「卡在區域性極小值」問題的方法分兩大類:
機器學習所處理的資料都是高維資料,該如何快速計算梯度、而不是以年來計算。
其次如何更新隱藏層的權重?
解決方法是:計算圖:反向傳播演算法
這裡的解釋留給非常棒的computational graphs: backpropagation
需要知道的是,反向傳播演算法是求梯度的一種方法。如同快速傅利葉變換(fft)的貢獻。
而計算圖的概念又使梯度的計算更加合理方便。
下面就結合圖簡單瀏覽一下訓練和識別過程,並描述各個部分的作用。要結合**閱讀以下內容。但手機顯示的圖過小,最好用電腦開啟。
神經網路訓練
學習了bp神經網路演算法,剛開始最終要的一點不明白的就是前一層和後一層 這裡指的只有三層,輸入層,隱藏層,輸出層 的權重,其實神經網路演算法中,前一層的每乙個節點和後一層的每乙個節點都有連線權重,初始權重是隨機的。而更新權重是通過輸出層的值來反向更新的。基本過程如下 1.輸入第乙個訓練樣本 對應的就...
神經網路訓練技巧
1 學習速率。首先設學習速率為乙個較大的值,確保training cost在不斷下降。當accuracyy在n個epoch內不再增加時,使得學習速率減小一半。重複迭代,直到學習速率變成原來的1 1024。2 學習速率要根據訓練cost調。但是網路層數和神經元數目,mini batch size要根據...
訓練最優神經網路
在談論改善模型之前,首先一點是要考慮資料問題。在資料ok的情況下,我們按照吳恩達老師的建議來改善模型。如果誤差過高,我們首先可以考慮把我們現有的神經網路深度加深,以及新增更多的神經元,或許能夠改善學習效果。我們也可以考慮迭代更多的epoch,我們也可以對學習率做出調整,往往更小的學習率能有更好的效果...