梯度下降TIP1:調(diào)整你的學習率
下圖左側(cè)為loss曲線和選取學習率對應的情況来候,紅色為選的剛好,藍色選的比較小称杨,所以需要很長時間來找到最低點始苇,綠色較大導致在一定范圍內(nèi)震蕩砌烁,黃色太大導致loss反而增大
當然參數(shù)不一定是一個維度的,如果是高維度就不能單純的把所有參數(shù)用可視曲線分析催式,我們這里就把每個參數(shù)和loss的影響做一個曲線函喉,同樣可以看出關系
我們可以為了找到最小值點,同時又為了保證一定的效率荣月,可以梯度下降迭代的同時改變學習率管呵,比如將學習率和第t次迭代掛鉤,,當然調(diào)整學習率不能對于所有參數(shù)都設置一個學習率哺窄,需要對不同參數(shù)設置不同學習率
Adagrad
還記得我們上次課程代碼段將代碼調(diào)整捐下,這種方法就是Adagrad账锹,其每次迭代過程見圖,除了使用學習率和偏微分外坷襟,還是用了,其實過去所有迭代梯度參數(shù)的均方差
具體實現(xiàn)可以參照下圖
其實學習率和
都有
,可以消去,就成了下圖的最終寫法
我們?yōu)槭裁催@么定制學習率的變化呢啤握,其實是adagrad為了造成反差的效果
以最簡單的二次函數(shù)為例晶框,我們知道最小點是,如果我們是圖中
位置授段,當然我們最好的一步就是
,所以其實最好的一步是一階導的絕對值/二階導
當然我們adagrad下面是平方和開根號侵贵,并不是二次導,這里是因為二階導當參數(shù)量大的時候往往是我們不能接受的窍育,所以我們采用計算量小的來近似,比如下面2個曲線漱抓,當我們迭代次數(shù)多的時候表锻,就會發(fā)現(xiàn)二階導大的其一階導往往也比較大
梯度下降TIP2 ?Stochastic Gradient Descent隨機梯度下降
我們一般的梯度下降是考慮樣本所有誤差的平方和,而隨機梯度下降呢乞娄,是每個樣本單獨計算梯度瞬逊,然后執(zhí)行樣本數(shù)量,聽起來好像很怪仪或,有什么用呢
下圖左側(cè)為一般梯度下降确镊,右側(cè)為隨機梯度下降,以20個樣本為例范删,左側(cè)執(zhí)行一次梯度下降時蕾域,右側(cè)執(zhí)行了20次,雖然右側(cè)第一個樣本步很小到旦,而且方向往往不會和左側(cè)一致束铭,但是執(zhí)行了20次后,下降的速度往往比較快
梯度下降TIP3 ?Feature Scaling特征處理
比如處理2個特征的輸入時厢绝,x2的分布范圍比x1的寬契沫,我們就把x2的范圍處理成和x1一致,如果x1分布比較大昔汉,那w1與w2相同時懈万,x1,x2相同的改變拴清,w1x1影響y的會比較大
處理的方法很多,下圖的方法是將特征標準化
我們都知道梯度下降的迭代過程中会通,loss函數(shù)不一定是嚴格意義每次都變小
如求下圖從開始迭代口予,我們可以嘗試在一個半徑d的范圍內(nèi)求出損失函數(shù)最小值點
這里應用到了泰勒展開式,損失函數(shù)用了a,b點的一階偏微分
求最小值就是當與u,v向量反向時的值沪停,我們可以得到他們之間是
的關系,當然我們學習率
越小裳涛,偏微分計算出的下一點才最準確木张,所以學習率
不合適可能導致下一點損失函數(shù)不一定最小,如果我們引入二階導(牛頓迭代法)端三,當然模型會更接近舷礼,但是計算量往往太大,我們做深度學習的時候承受不了郊闯,所以梯度下降還是我們比較主流的做法妻献。
梯度下降的限制
我們知道沿著損失函數(shù)梯度下降可能我們會找到一個局部最小點,也可能停留在一個平穩(wěn)點团赁,甚至是一個較高的位置育拨,比如我們程序設定迭代多少次就<10-6,但是損失函數(shù)本身分布就比較低,可能扔不是一個可以停止迭代的位置