ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
引言
機器學習欄目記錄我在學習Machine Learning過程的一些心得筆記,涵蓋線性回歸、邏輯回歸、Softmax回歸、神經網絡和SVM等等,主要學習資料來自網上的免費課程和一些經典書籍,免費課程例如Standford Andrew Ng老師在Coursera的教程以及UFLDL Tutorial,經典書籍例如《統計學習方法》等,同時也參考了大量網上的相關資料(在后面列出)。
前言
機器學習中的大部分問題都是優化問題,而絕大部分優化問題都可以使用梯度下降法處理,那么搞懂什么是梯度,什么是梯度下降法就非常重要!這是基礎中的基礎,也是必須掌握的概念!
提到梯度,就必須從導數(derivative)、偏導數(partial derivative)和方向導數(directional derivative)講起,弄清楚這些概念,才能夠正確理解為什么在優化問題中使用梯度下降法來優化目標函數,并熟練掌握梯度下降法(Gradient Descent)。
本文主要記錄我在學習機器學習過程中對梯度概念復習的筆記,主要參考《高等數學》《簡明微積分》以及維基百科上的資料為主,文章小節安排如下:
1)導數
2)導數和偏導數
3)導數與方向導數
4)導數與梯度
5)梯度下降法
6)參考資料
7)結語
導數
一張圖讀懂導數與微分:
這是高數中的一張經典圖,如果忘記了導數微分的概念,基本看著這張圖就能全部想起來。
導數定義如下:
反映的是函數y=f(x)在某一點處沿x軸正方向的變化率。再強調一遍,是函數f(x)在x軸上某一點處沿著x軸正方向的變化率/變化趨勢。直觀地看,也就是在x軸上某一點處,如果f’(x)>0,說明f(x)的函數值在x點沿x軸正方向是趨于增加的;如果f’(x)<0,說明f(x)的函數值在x點沿x軸正方向是趨于減少的。
這里補充上圖中的Δy、dy等符號的意義及關系如下:
Δx:x的變化量;
dx:x的變化量Δx趨于0時,則記作微元dx;
Δy:Δy=f(x0+Δx)-f(x0),是函數的增量;
dy:dy=f’(x0)dx,是切線的增量;
當Δx→0時,dy與Δy都是無窮小,dy是Δy的主部,即Δy=dy+o(Δx).
導數和偏導數
偏導數的定義如下:
可以看到,導數與偏導數本質是一致的,都是當自變量的變化量趨于0時,函數值的變化量與自變量變化量比值的極限。直觀地說,偏導數也就是函數在某一點上沿坐標軸正方向的的變化率。
區別在于:
導數,指的是一元函數中,函數y=f(x)在某一點處沿x軸正方向的變化率;
偏導數,指的是多元函數中,函數y=f(x1,x2,…,xn)在某一點處沿某一坐標軸(x1,x2,…,xn)正方向的變化率。
導數與方向導數:
方向導數的定義如下:
在前面導數和偏導數的定義中,均是沿坐標軸正方向討論函數的變化率。那么當我們討論函數沿任意方向的變化率時,也就引出了方向導數的定義,即:某一點在某一趨近方向上的導數值。
通俗的解釋是:
我們不僅要知道函數在坐標軸正方向上的變化率(即偏導數),而且還要設法求得函數在其他特定方向上的變化率。而方向導數就是函數在其他特定方向上的變化率。
導數與梯度
梯度的定義如下:
梯度的提出只為回答一個問題:
函數在變量空間的某一點處,沿著哪一個方向有最大的變化率?
梯度定義如下:
函數在某一點的梯度是這樣一個向量,它的方向與取得最大方向導數的方向一致,而它的模為方向導數的最大值。
這里注意三點:
1)梯度是一個向量,即有方向有大小;
2)梯度的方向是最大方向導數的方向;
3)梯度的值是最大方向導數的值。
導數與向量
提問:導數與偏導數與方向導數是向量么?
向量的定義是有方向(direction)有大小(magnitude)的量。
從前面的定義可以這樣看出,偏導數和方向導數表達的是函數在某一點沿某一方向的變化率,也是具有方向和大小的。因此從這個角度來理解,我們也可以把偏導數和方向導數看作是一個向量,向量的方向就是變化率的方向,向量的模,就是變化率的大小。
那么沿著這樣一種思路,就可以如下理解梯度:
梯度即函數在某一點最大的方向導數,函數沿梯度方向函數有最大的變化率。
梯度下降法
既然在變量空間的某一點處,函數沿梯度方向具有最大的變化率,那么在優化目標函數的時候,自然是沿著負梯度方向去減小函數值,以此達到我們的優化目標。
如何沿著負梯度方向減小函數值呢?既然梯度是偏導數的集合,如下:
同時梯度和偏導數都是向量,那么參考向量運算法則,我們在每個變量軸上減小對應變量值即可,梯度下降法可以描述如下:
以上就是梯度下降法的由來,大部分的機器學習任務,都可以利用Gradient Descent來進行優化。
?
總結
以上是生活随笔為你收集整理的ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DCT算法的原理及实现简介
- 下一篇: VC++实现任务管理器功能