從為什么梯度方向是函數(shù)變化率最快方向詳談梯度下降算法
梯度下降法是機(jī)器學(xué)習(xí)中常用的參數(shù)優(yōu)化算法,使用起來也是十分方便!很多人都知道梯度方向便是函數(shù)值變化最快的方向,但是有認(rèn)真的思考過梯度方向是什么方向,梯度方向?yàn)槭裁词呛瘮?shù)值變化最快的方向的這些問題嘛?
本文便以解釋為什么梯度方向是函數(shù)值變化最快方向?yàn)橐右鰧?duì)梯度下降算法的研究,后面也將通過線性回歸詳細(xì)介紹梯度下降算法以及算法調(diào)優(yōu)方式及其變種。
一、證明梯度方向是函數(shù)變化率最快方向
1、由導(dǎo)數(shù)看梯度
在很多梯度下降法教程中,都有提到梯度這個(gè)概念。從微積分角度,對(duì)多元函數(shù)的參數(shù)求偏導(dǎo),將各參數(shù)偏導(dǎo)數(shù)以向量的形式展示出來便是梯度向量。如二元函數(shù)f(x,y)的梯度向量便是:

記作gradf(x,y)?或??f(x,y),同理如果是三元函數(shù),則梯度向量便是:

梯度方向是函數(shù)變化最快的方向,沿著梯度向量方向更易找到函的最大值;反之沿著梯度向量相反的方向,梯度減少最快,更易找到函數(shù)的最小值。相信有挺多人都會(huì)有疑問,為什么梯度方向是函數(shù)變化最快的方向?下面我們便從函數(shù)導(dǎo)數(shù)的角度講解為什么,知其然知其所以然,探尋梯度本質(zhì)。
(1) 先從單變量導(dǎo)數(shù)看起:
對(duì)于單變量函數(shù)f(x),在x0處導(dǎo)數(shù)定義為:

公式含義如下圖所示:

從幾何意義上說,導(dǎo)數(shù)代表了函數(shù)在該點(diǎn)出切線斜率,表示此點(diǎn)處的變化率,因此單變量函數(shù)只有一個(gè)變量x在變動(dòng),所以便只有這一個(gè)方向上的變化率。因此對(duì)于多元函數(shù)來說便存在偏導(dǎo)數(shù)、方向?qū)?shù),表示多個(gè)方向上的變化率。
(2) 偏導(dǎo)數(shù)到方向?qū)?shù)
我們以二元函數(shù)f(x,y)偏導(dǎo)數(shù)為例,偏導(dǎo)數(shù)指的是二元函數(shù)沿坐標(biāo)軸的變化率:
fx(x,y)?指y方向固定不變時(shí),函數(shù)值沿x軸的變化率;
fy(x,y)?指x方向固定不變時(shí),函數(shù)值沿y軸的變化率
顯然偏導(dǎo)數(shù)只是給出了函數(shù)值沿著坐標(biāo)軸的變化率,這自然是完全不夠的,如下圖:

將上圖二元函數(shù)看成一個(gè)山峰,當(dāng)一個(gè)人處于黑色十字位置處想要盡快下山時(shí),我們需有沿著任意方向的變化率才能夠判斷沿著哪個(gè)方向走才能夠最快的下山。
當(dāng)前我們已經(jīng)有了沿著坐標(biāo)軸x軸和y軸方向的變化率,接下來我們將推出該平面沿著任意方向的變化率,然后找出下降最快的變化率方向(可類比于已知平面的兩個(gè)基向量然后表示平面內(nèi)任意向量),看下圖:

為了解決人如何沿著山峰變化率最快的方向走到山谷,我們先抽象問題作出幾個(gè)假設(shè):
<1> 假設(shè)山峰表面是一個(gè)二維曲面z = f(x,y)
<2> 人在山峰表面的初始點(diǎn)假設(shè)是M0點(diǎn)(x,y)
<3> 假設(shè)M0點(diǎn)處下山變化率最快的方向?yàn)長(zhǎng)向量方向
<4> M1點(diǎn)(x + x,y +y)是L向量方向上離M0點(diǎn)很近的點(diǎn)
<5>角度φ是L向量與x軸的夾角,ρ表示M0點(diǎn)和M1 點(diǎn)之間距離:

則函數(shù)沿任意方向L向量方向的方向?qū)?shù)定義為:

二維平面z = f(x,y)在M0點(diǎn)是可微分的,根據(jù)函數(shù)的增量有下式:

上式兩邊除以ρ可得:

其中可知:


因此有:

這里我們便推出了一個(gè)重要表達(dá)式,二維山峰平面上任意導(dǎo)數(shù)變化率方向可表示成:

別忘了我們最初的問題,我們最終的目的是要求的是變化率最快的方向,在得出任意變化率方向的表達(dá)式后,我們繼續(xù)向下看,這里令:

則有任意梯度方向:

于是我們也可得出要想讓? f/?L最大,則β,即任意變化率向量方向L和A同方向,請(qǐng)注意啦,這里A的方向是什么,大家仔細(xì)看:

這不正是我們上面說的二元函數(shù)的梯度方向嘛。因此我們便二元函數(shù)的偏導(dǎo)數(shù)組成的向量:

即定義為函數(shù)的梯度方向,也就是函數(shù)變化率最快的方向。
二、線性回歸理解梯度下降法
首先我們應(yīng)該明白,梯度下降法是無約束優(yōu)化算法。當(dāng)對(duì)某個(gè)函數(shù)求最值時(shí)便并且該函數(shù)可微時(shí)便可以使用梯度下降算法進(jìn)行求解最值。下面我們先從形象上認(rèn)識(shí)一下梯度下降算法:

假設(shè)我們站在山峰的某個(gè)位置,現(xiàn)在要一步一步下山,為了最快的到達(dá)山谷,我們走每一步時(shí)先計(jì)算時(shí)當(dāng)前位置的負(fù)梯度方向,沿著負(fù)梯度方向向下走,這樣我們便可以盡快的到達(dá)山谷,這邊是梯度下降算法的思想。
當(dāng)然從上圖中我們可以看出,梯度下降算法不一定會(huì)找到全局最優(yōu)解,可能是局部最優(yōu)解。下面我們用線性回歸問題實(shí)際應(yīng)用一下梯度下降算法。
這里先介紹幾個(gè)梯度下降法的概念,方便后續(xù)內(nèi)容理解:
(1) 學(xué)習(xí)率:表示為 α,控制步長(zhǎng)大小,即參數(shù)到達(dá)最優(yōu)值的快慢
(2) 步長(zhǎng):即是梯度下降算法每一步沿負(fù)梯度方向前進(jìn)的距離,表示為:

(3) 特征: 表示為xi(i = 0,1,2,…,n),即樣本的維度
(4) 假設(shè)函數(shù): 表示為h~θ( x ),即模型的預(yù)測(cè)輸出值
(5) 損失函數(shù): 表示為J( θ ) 即定義預(yù)測(cè)輸出值和真實(shí)輸出值之間的差距,本文下面例子中便利用了最小二乘法定義損失函數(shù)
這里理解一個(gè)數(shù)據(jù)的例子來理解線性回歸,房屋銷售的數(shù)據(jù),數(shù)據(jù)描述的是房屋的特征和房屋銷售價(jià)格的關(guān)系。其中房屋特征包括:面積、房間數(shù)量、地段、朝向等,對(duì)應(yīng)的該房屋的銷售價(jià)格。對(duì)于這批數(shù)據(jù)我們做出以下假設(shè):
m:表示數(shù)據(jù)的銷售數(shù)量
x:數(shù)據(jù)的特征,假設(shè)共有n個(gè)特征,xi(i = 0,1,2,…,n) 表示數(shù)據(jù)的n個(gè)特征
y:輸出變量,也就是房屋的價(jià)格 (xj,yj):表示第j個(gè)訓(xùn)練樣本,(j = 1,2,…,m) 共有m個(gè)數(shù)據(jù)
(xij, yij):表示第j個(gè)數(shù)據(jù)的第i個(gè)特征,i =0,1,2,…,n數(shù)據(jù)共n個(gè)特征
針對(duì)上述數(shù)據(jù),我們希望建立一個(gè)模型來描述房屋特征和房屋售價(jià)之間的關(guān)系,并通過梯度下降法求出最優(yōu)的模型。
梯度下降算法有代數(shù)法和矩陣法兩種描述形式,下面將分別從代數(shù)法和矩陣法給出上述問題的解決方案:
1、 梯度下降法代數(shù)法推導(dǎo)過程
我們假設(shè)房屋的銷售價(jià)格和房屋特征是線性關(guān)系,于是我們定義假設(shè)函數(shù)為,其中θi(i= 0,1,2,…,n)?為模型參數(shù),xi(i =0,1,2,…,n)?表示每個(gè)樣本的n個(gè)特征:

損失函數(shù)-利用最小二乘法可得模型的損失函數(shù)為,其中m表示共有m個(gè)樣本(這里請(qǐng)區(qū)分n表示的是每個(gè)樣本的n個(gè)特征,m表示的則是樣本數(shù)量):

接下來通過梯度下降法J( θ),通過不斷優(yōu)化參數(shù)θ得出最優(yōu)解:
第一步求解損失函數(shù)的梯度,其中θ是向量:

已知函數(shù)梯度便可以通過梯度迭代參數(shù),其中α是學(xué)習(xí)率:

上式參數(shù)何時(shí)達(dá)到最優(yōu)?因?yàn)樵诿看窝刂荻鹊姆较蜻M(jìn)行迭代時(shí),參數(shù)減去步長(zhǎng),當(dāng)不斷接近局部最小值時(shí),步子會(huì)越來越小,梯度也會(huì)逐漸趨向0。下面給出參數(shù)迭代收斂條件:
(1) 兩次迭代的值變化很小時(shí);
(2) 迭代的過程中需要最小化的那個(gè)值不再變小時(shí)迭代收斂
2、 梯度下降法矩陣法推導(dǎo)過程
矩陣法和代數(shù)法解決問題的思路是一致的,不同的是數(shù)據(jù)的表示形式。首先我們?nèi)耘f給出模型的假設(shè)函數(shù)和損失函數(shù)。首先我們令:

m*n維矩陣為數(shù)據(jù)輸入,m表示共m個(gè)樣本,n表示每個(gè)樣本共n個(gè)特征,其中x0?= 1?是為了數(shù)據(jù)整齊而假設(shè)的多出一維的特征,無實(shí)際含義

因此假設(shè)函數(shù)為:

利用最小二乘法定義損失函數(shù)為:

其中Y為m*1維向量,表示m個(gè)數(shù)據(jù)實(shí)際放假值,接下來仍舊使用梯度下降法最優(yōu)化對(duì)模型參數(shù)進(jìn)行調(diào)優(yōu),第一步求損失函數(shù)梯度為:

于是得到參數(shù)θ的迭代公式:

上述求梯度是用到了矩陣求導(dǎo),這里給出上述用到的矩陣求導(dǎo)的兩個(gè)公式:

迭代收斂條件和代數(shù)法中描述的相同
三、梯度下降法調(diào)優(yōu)及變種
1 、梯度下降算法可優(yōu)化主要有以下三點(diǎn):
(1) 步長(zhǎng):?由學(xué)習(xí)率來控制,步長(zhǎng)過小則迭代緩慢,步長(zhǎng)過大則錯(cuò)過最優(yōu)解,步長(zhǎng)公式表示為:

(2) 參數(shù)初始值:?初始值的選擇不同得到的解可能不同,這就是梯度下降算法出現(xiàn)局部最優(yōu)解的原因,可以通過多次選取初始值得到全局最優(yōu)解,參數(shù)向量表示為:

(3) 歸一化:?因?yàn)檩斎霐?shù)據(jù)特征的取值范圍不一樣,可能使得迭代緩慢。因此我們可以對(duì)數(shù)據(jù)特征進(jìn)行歸一化操作,即求出特征的期望和標(biāo)準(zhǔn)差,利用下式進(jìn)行歸一化處理:

2、梯度下降算法的可以有以下變種:
<1>按照每次迭代處理數(shù)據(jù)量的多少可分為:
(1) 批量梯度下降法:上述推導(dǎo)式使用的公式便是批量梯度下降法,即每次迭代都會(huì)使用全部的樣本進(jìn)行更新,好處是準(zhǔn)確,但每次迭代都需計(jì)算全部樣本,參數(shù)迭代公式為:

(2) 隨機(jī)梯度下降法:原理和批量梯度類似,只是每次迭代只使用一個(gè)樣本進(jìn)行參數(shù)迭代,好處是每次迭代速度快,但缺點(diǎn)便是解可能不是最優(yōu),不能很快收斂到最優(yōu)解,公式為:

(3) 小批量梯度下降法:是批量梯度下降法和隨機(jī)梯度下降法的這種,每次選取一部分樣本進(jìn)行迭代,參數(shù)迭代公式為:

<2>按照梯度迭代的方向可分為:
(1)梯度下降法:既是上面一直討論的,是沿著負(fù)梯度方向求函數(shù)最小值,即每次迭代是減去學(xué)習(xí)率乘以梯度
(2)梯度上升法:和梯度下降法想法,梯度上升法每次迭代是沿著正梯度方向,是求函數(shù)極大值使用,參數(shù)迭代公式為:

學(xué)姐還有很多干貨等著你來看呢!關(guān)注【學(xué)姐帶你玩AI】領(lǐng)取百份人工智能資料。
