李巨集毅老師機器學習課程筆記_ML Lecture 3-1: Gradient Descent
阿新 • • 發佈:2020-04-01
####引言:
這個系列的筆記是臺大李巨集毅老師機器學習的課程筆記
視訊連結(bilibili):[李巨集毅機器學習(2017)](https://www.bilibili.com/video/av10590361?from=search&seid=4930602846193099298)
另外已經有有心的同學做了速記並更新在github上:[李巨集毅機器學習筆記(LeeML-Notes)](https://datawhalechina.github.io/leeml-notes/#/?id=%e6%9d%8e%e5%ae%8f%e6%af%85%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0leeml-notes)
很久都沒有用高數及線性代數的知識,很多都生疏了,這節課有很多的數學公式及概念,建議先看一下簡書上的這篇介紹梯度及梯度下降法的文章[深入淺出--梯度下降法及其實現](https://www.jianshu.com/p/c7e642877b0e),真的是深入淺出,好評如潮。
這裡需要知道的是:
- 什麼是梯度?
- 為什麼要用梯度下降法?
####一、什麼是梯度
梯度是微積分中一個很重要的概念,梯度的意義在於:
- 在單變數的函式中,梯度其實就是函式的微分,代表著函式在某個給定點的切線的斜率
- 在多變數函式中,梯度是一個向量,向量有方向,梯度的方向就指出了函式在給定點的上升最快的方向
####二、為什麼要用梯度下降法?
機器學習的目的是根據現有資料集,預測未知資料的解。首先制定預測函式f*, 其次根據預測函式制定出合理的損失函式,損失函式的意義在於如果它的值取得最小值,那麼認為原來的預測函式擬合訓練集資料擬合的最好。所以求出損失函式的最小值就很關鍵。而根據上面梯度的概念,梯度的負方向是函式值下降的方向,沿著梯度下降的方向就可以找到損失函式取最小值的解。
####三、學習率的設定
![圖1](https://upload-images.jianshu.io/upload_images/2844213-edb2b05f5a925216.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
學習率設定分以下幾種情況:
- 非常大:導致損失突然變得非常大,無法收斂
- 較大:損失收斂在比較的值上
- 較小:損失雖然一直在減小,但速度很慢
- 正好:損失逐漸減小,最終收斂在一個比較小的值上
調節學習率的一般思想:
- 在一開始學習率取較大值,這樣便於更加快速到達最低點
- 慢慢地學習率取值逐漸縮小,這樣會避免學習率取值過大從而錯過最低點
自適應調節學習率的方法:
- Adagrad
####四、Stochastic gradient decent(SGD)隨機梯度下降
相比梯度下降法遍歷所有資料,SGD可以隨機選取某一個樣本計算損失後然後更新梯度,提高訓練速度,但不一定可以得到全域性最優解。
部落格園上一篇文章寫得比較清楚 [[Machine Learning] 梯度下降法的三種形式BGD、SGD以及MBGD](https://www.cnblogs.com/maybe2030/p/5089753.html)
####五、Feature scaling 特徵縮放/歸一化
為什麼要進行特徵縮放?
如果樣本的取值範圍過大,在應用梯度下降演算法尋找全域性最小值的時候,損失函式需要花費巨大的代價。進行縮放後,多維特徵將具有相近的尺度,這將幫助梯度下降演算法更快地收斂。
很多文章都拿吳恩達的課程中圖來舉例:
圖2 歸一化之前的等高線圖
圖3 歸一化之後的等高線圖
![圖2](https://upload-images.jianshu.io/upload_images/2844213-8109ec3e83e6ab2b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![圖3](https://upload-images.jianshu.io/upload_images/2844213-7f812d490d492102.png?imageMogr2/auto-orient/strip%7CimageView2/2/