啟用函式 損失函式 優化器
均方差損失函式+Sigmoid的反向傳播演算法中,每一層向前遞推都要乘以σ′(z)(啟用函式的導數),得到梯度變化值。Sigmoid的這個曲線意味著在大多數時候,我們的梯度變化值很小,導致我們的W,b更新到極值的速度較慢,也就是我們的演算法收斂速度較慢。
使用交叉熵損失函式,得到的梯度表示式沒有了σ′(z),梯度為預測值和真實值的差距,這樣求得的Wl,bl的梯度也不包含σ′(z),因此避免了反向傳播收斂速度慢的問題。
如果我們使用了sigmoid啟用函式,交叉熵損失函式肯定比均方差損失函式好用。
對於用於分類的softmax啟用函式,對應的損失函式一般都是用對數似然函式,即:
對於梯度爆炸,則一般可以通過調整我們DNN模型中的初始化引數得以解決。
對於無法完美解決的梯度消失問題,目前有很多研究,一個可能部分解決梯度消失問題的辦法是使用ReLU(Rectified Linear Unit)啟用函式。
http://www.cnblogs.com/pinard/p/6437495.html
Cross Entropy損失函式常用於分類問題中,但是為什麼它會在分類問題中這麼有效呢?
其中:
- M——類別的數量;
- y——指示變數(0或1),如果該類別和樣本的類別相同就是1,否則是0;
- p——對於觀測樣本屬於類別c的預測概率。
由於交叉熵涉及到計算每個類別的概率,所以交叉熵幾乎每次都和softmax函式一起出現。
交叉熵損失函式是凸函式,求導時能夠得到全域性最優值。
使用交叉熵損失函式,不僅可以很好的衡量模型的效果,又可以很容易的的進行求導計算。
Mean Squared Error (均方誤差)
邏輯迴歸配合MSE損失函式時,採用梯度下降法進行學習時,會出現模型一開始訓練時,學習速率非常慢的情況
https://zhuanlan.zhihu.com/p/35709485
損失函式的選擇往往也是結合啟用函式來的:
sigmoid系之外的啟用函式 + MSE
sigmoid + Cross Entropy
Softmax + Cross Entropy
https://blog.csdn.net/u012193416/article/details/79520862
梯度消逝和損失函式關係不大。
https://www.zhihu.com/question/265823997
z4 = w41*o1+w42*o2+w43*o3
z5 = w51*o1+w52*o2+w53*o3
z6 = w61*o1+w62*o2+w63*o3
交叉熵函式形式如下:
為了形式化說明,我這裡認為訓練資料的真實輸出為第j個為1,其它均為0!
那麼形式變為
https://zhuanlan.zhihu.com/p/25723112
Batch gradient descent(BGD)
在一次更新中,就對整個資料集計算梯度,所以計算起來非常慢,遇到很大量的資料集也會非常棘手
Stochastic gradient descent(SGD)
和 BGD 的一次用所有資料計算梯度相比,SGD 每次更新時對每個樣本進行梯度更新。
SGD 一次只進行一次更新,就沒有冗餘,而且比較快,並且可以新增樣本。
但是 SGD 因為更新比較頻繁,會造成 cost function 有嚴重的震盪。
隨機也就是說我們用樣本中的一個例子來近似我所有的樣本,來調整θ
在深度學習中,用的比較多的是mini-batch梯度下降。
https://www.zhihu.com/question/264189719
Mini-batch gradient descent(MBGD)
MBGD 每一次利用一小批樣本,即 n 個樣本進行計算。
和 SGD 的區別是每一次迴圈不是作用於每個樣本,而是具有 n 個樣本的批次。
超引數設定值:
n 一般取值在 50~256
Mini-batch gradient descent 不能保證很好的收斂性,learning rate 如果選擇的太小,收斂速度會很慢,如果太大,loss function 就會在極小值處不停地震盪甚至偏離。
SGD 雖然能達到極小值,但是比其它演算法用的時間長,而且可能會被困在鞍點。
如果資料是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。
整體來講,Adam 是最好的選擇。
https://blog.csdn.net/aliceyangxi1987/article/details/73210204
一個不是區域性極值點的駐點(駐點就是一階導數為 0 的點)稱為鞍點。
https://blog.csdn.net/jningwei/article/details/79801699