1. 程式人生 > >李巨集毅老師機器學習課程筆記_ML Lecture 3-1: Gradient Descent

李巨集毅老師機器學習課程筆記_ML Lecture 3-1: Gradient Descent

####引言: 這個系列的筆記是臺大李巨集毅老師機器學習的課程筆記 視訊連結(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/