UMICH CV Linear Classifiers
在上一篇博文中,我們討論了利用損失函式來判斷一個權重矩陣的好壞,在這節中我們將討論如何去找到最優的權重矩陣
想象我們要下到一個峽谷的底部,我們自然會選擇下降最快的斜坡,換成我們這個問題就是要求權重矩陣相對於損失函式的梯度函式,最簡單的方法就是使用定義法:
我們也可以使用解析梯度,這裡需要用到矩陣對向量,矩陣對標量求導的一些知識,在後面我們也會採用反向傳播的方法,因為自己手算微積分畢竟比較容易出錯,尤其是涉及到很多層神經網路的時候。
在作業assignment2 的第一個線性分類器的實現中,我們會使用兩張種損失函式,分別是svm與softmax函式,需要我們使用解析梯度來計算,這裡推薦兩篇博文的推導過程,因為我這邊基礎也不是很好,需要再深入學習一下?
svm:http://giantpandacv.com/academic/演算法科普/深度學習基礎/SVM Loss以及梯度推導/
softmax:https://blog.csdn.net/qq_27261889/article/details/82915598
計算得到梯度函式之後,我們就可以讓loss沿著梯度的方向下降:
這裡有三個超引數,是我們自己手動設定的,分別是權重矩陣初始化的策略,迭代步驟與學習率
但是對所有的樣本都進行梯度下降,顯然是非常耗時的一件事,所以我們一般採用sgd方法,也就是隨機梯度下降:
這裡又多了batch size與抽樣方法兩個超引數
但是SGD的缺點在於會導致梯度劇烈波動,有的地方下降很快有的地方下降很慢,同時也面臨著陷入區域性最優解的困境,所以出現了SGD + Momentum
加入一個速度變數這樣在下降快的時候可以抑制梯度的下降,起到一個平衡作用
Momentum也有變體 Nesterov Momentum,與Momentum唯一區別就是,計算梯度的不同。Nesterov動量中,先用當前的速 v臨時更新一遍引數,在用更新的臨時引數計算梯度,就是一種向前看的思想:
另一類進行最佳化的方法採用dw的平方
Adagrad 與 Rmsprop
由於adagrad會導致下降的過快,因為有平方的存在,所以又提出了RMSProp,加入decay_rate來放緩下降速度
最常用的最佳化方法就是adam
注意這裡要加入偏差修正項防止起始的時候誤差太大
這裡有一篇知乎的回答可供參考:https://www.zhihu.com/question/323747423
上面的方法都是採用一階導數:
有時候我們也可以採用二階導數
但是二階導的計算可想而知的複雜,所以我們一般很少採用二階導進行最佳化
最後是一些二階導的討論:
本次assignment A2 的第一個線性分類器 主要內容就是分別採用svm與softmax損失函式進行最佳化計算,也沒有用到後面複雜的最佳化方法,就是最簡單的學習率乘以dw,比較複雜的就是解析梯度的推導,可參考上面的兩篇博文