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