多層神經元-神經網絡網絡
如下的神經網絡,具備一個隱含層,一個輸出層函數
其中輸入依舊是x1,x2,x3,1(一個數據的3個維度加一個泛化1)學習
隱含層有4個神經元,輸出層有一個神經元,他們的計算公式和上節課介紹的邏輯斯蒂迴歸模型同樣優化
神經網絡正向計算3d
多層的神經網絡,須要從低到高,一層一層的計算出最後的結果,固然這些計算是能夠並行計算的(經過矩陣乘法)cdn
神經網絡的訓練blog
在回顧一下上節課講的神經網絡的訓練,是用損失函數對每個參數求偏導,在用這個偏導乘以一個學習率α,再用這個結果去更新全部的參數,一步一步的迭代,最終獲得一個比較好的神經網絡內存
神經網絡的訓練-反向傳播it
在多層神經網絡中,咱們如何給每個參數去計算他的偏導數。io
首先先看h21-h的這一層全部的參數的導數是如何計算的,假設這裏仍是使用的sigmiod激活函數,使用平方差的損失函數
這裏的w3存在於h21,h22,h23和h的連線上,X就是h21,h22,h23的輸出和+1
w2存在於h11,h12,h13和h21,h22,h23的各類連線中,也能夠說,存在h21,h22,h23的表達式中
w1同理
至關於說w1,w2都是以複合函數的形式參與到損失函數的計算中來,對於這種複合函數的求導使用的是鏈式法則
鏈式法則
神經網絡訓練優化
上面這種訓練的缺點:
優化方案
隨機梯度降低
去掉每次使用整個數據集的假設,每次只使用一個樣本。這樣會有一個問題,就是說一個樣本其實並不能反映整個數據集的一個方向,因此會致使他的收斂速度比較慢
(收斂速度:模型從開始訓練到結束訓練,開始很是快,後來比較慢,慢慢達到一個穩定的值,當達到一個比較穩定的值,咱們稱之爲收斂)
mini-batch梯度降低
mini-batch這樣的梯度降低的其餘問題
梯度降低存在震盪的問題,一個樣本是不可以反映所有數據集的方向的,mini-batch中的數據雖然是隨機採樣出來的,可是由於隨機採樣的數據量不夠多,因此仍然會致使梯度降低存在一個震盪的問題,這個震盪的問題在單個樣本上反映的更明顯,對於mini-batch來講,size越大越不明顯
局部極值問題
一個函數不必定是個凸函數(凸函數:只有一個極小值的函數),不必定只有一個最優解,以下右圖。
這樣的一個函數會致使,當我到了一個局部最優解的時候,無論個人梯度計算方向在哪,只要個人learning rate不是那麼大,都會致使他往回去學,因此running rate是一個比較重要的參數,若是learning rate設置的過小,會致使整個的參數停在局部極值點的位置
saddle point
某一個點的導數爲0,若是導數爲0,無論α多大,全部參數的更新都是0,致使參數不能獲得更新而停在這裏,這個無論用mini-batch仍是隨機梯度降低都會遇到的問題
上面問題的解決方案
動量梯度降低
vt能夠看作是前t-1步的梯度積累值的均值和當前梯度的和,由於每次計算vt的時候,vt-1都乘以了一個係數,這個係數能夠控制以前積累的梯度其的做用的大小。
對於梯度方向來講,因爲他是有方向的,所以當前梯度和積累值的加法,不光體如今大小上,還體如今方向上。若是momentum step和gradient step這兩個向量他的方向差距比較大的時候,他們加在一塊兒的值就會比較小,這樣就能夠防止震盪;而當他們兩個方向差距比較小(或者和在一塊兒)的時候,他們矢量相加的結果抵消的就會比較少,他們的和就會比較大,那麼他們加完以後,就會比原來大不少
這樣就能夠,在模型剛開始的時候,他的梯度方向是比較穩定的,這個時候因爲梯度是有積累的,就可使得個人梯度模型變的很是大
動量梯度降低的特色