梯度下降是機器學(xué)習(xí)中用來求最小值的算法,它被廣泛應(yīng)用于像邏輯回歸、線性回歸和神經(jīng)網(wǎng)絡(luò)的模型中吗坚。
一菇晃、全局誤差函數(shù)
要了解為什么使用“梯度下降法”去求最小值册倒,必須先知道機器學(xué)習(xí)求得模型的方式。比如現(xiàn)在有一份線性數(shù)據(jù)的關(guān)系磺送,假設(shè)他的模型為線性驻子,w為權(quán)值(隨機)灿意,b為偏置,e為假設(shè)的“誤差”:
我們把這個方程做一下變換拴孤,得到關(guān)于真實值和模型擬合值的誤差
上面只是關(guān)于一個數(shù)據(jù)的誤差脾歧,接下來對所有數(shù)據(jù)的誤差進行一次加和,然后再平方演熟。得到一個所有真實值與擬合值誤差的平方函數(shù)鞭执,將其定義為“全局性誤差函數(shù)”loss
我們回過頭去想,機器學(xué)習(xí)的目的就是擬合出一個可以準確描述這組數(shù)據(jù)的模型芒粹。按照上面的公式來看兄纺,如果令“Loss=0”,也就是令所有真實值與擬合值誤差的平方為零化漆,就等于說這個模型是可以準確描述真實世界數(shù)據(jù)的估脆。而讓Loss為零時的w與b,就是描述這個模型的參數(shù)
至于為什么要進行平方處理座云,是應(yīng)用了最小二乘的思想疙赠。我們本來是想找到一個合適的模型,對此構(gòu)建了一個真實值與擬合值的“平方差模型”朦拖,找到了這個平方差模型的解圃阳,也就等于是找到了我們需要的“擬合模型”
本質(zhì)上,我們是通過上面的方式璧帝,把一個求模型的問題捍岳,轉(zhuǎn)換成了一個函數(shù)求解“最小值”的數(shù)學(xué)問題。那么問題來了睬隶,如何找到這個函數(shù)中的最小值锣夹,就是“梯度下降”所解決的問題。
二苏潜、梯度下降法
問題變成了求解一個函數(shù)模型的最小值問題银萍,要用到高等數(shù)學(xué)里關(guān)于“導(dǎo)數(shù)”的一系列概念和知識作為鋪墊。想理解何為梯度恤左,梯度是如何一步一步如何求得這個函數(shù)的最小值砖顷,就必須從他開始
2.1梯度的定義
·導(dǎo)數(shù)
導(dǎo)數(shù)反映在下圖,是曲線上的某個點沿x軸正方向的變化率(即切線)赃梧。
·偏導(dǎo)數(shù)
偏導(dǎo)數(shù)本質(zhì)上與導(dǎo)數(shù)一樣滤蝠,都是當自變量變化的時候,函數(shù)值的變化量與自變量變化值的比值(即某個點沿x軸正方向的變化率)授嘀。不同在于導(dǎo)數(shù)描述的一元函數(shù)物咳,而偏導(dǎo)描述的是多元函數(shù)
·方向?qū)?shù)
方向?qū)?shù)與導(dǎo)數(shù)和偏導(dǎo)不同在于,它描述的是一個多元函數(shù)蹄皱,在任意方向上的變化率览闰。方向?qū)?shù)既有數(shù)值芯肤,也有方向(不再僅僅是正方向一個方向)。
·梯度
那么問題來了压鉴,你想不想知道在這個點的n多個方向?qū)?shù)中崖咨,哪個是下降的方向變化是最大的,哪個是上升的方向變化最大的油吭。這就引出了對“梯度”的定義:
梯度击蹲,即函數(shù)在某個點的一個向量,它的方向與取得最大方向?qū)?shù)的方向一致婉宰,模為該方向?qū)?shù)的最大值歌豺。
梯度與方向?qū)?shù)的關(guān)系,可以理解為它是方向?qū)?shù)中兩個極端的“子集”心包,因為方向?qū)?shù)可以說有無數(shù)個方向类咧,而梯度就是兩個上升和下降變化率最大的兩個方向
2.2梯度下降法
(1)核心思想
理解了全局性誤差函數(shù)模型和對梯度的定義,讓我們來看看梯度下降是怎么找到函數(shù)最小值的蟹腾。
梯度下降的核心思想為:當你在一個模型中隨機選取了一個點并求得該點的Loss痕惋,此時你的目的是找到讓Loss等于或最接近零的點,你為了讓loss減小娃殖,就要尋找下一個能讓這個loss下降最多的點血巍。但如果對所有的方向依次試一遍,那工作量實在是太大了珊随!這時候就可以引入“梯度”來解決這個問題
我們已經(jīng)知道梯度是某個點的“最大方向?qū)?shù)”,如果沿著“梯度負方向”柿隙,也就是沿著這個點在模型中“下降最多方向”的方向?qū)?shù)叶洞,就最有可能以最快的速度找個“最小值”點。
可以借著上面的圖禀崖,想象自己在一個山上的點衩辟,你想要下山的話,環(huán)顧一下四周波附,沿著一個最最陡峭的方向挪一下艺晴,又到了一個點,繼續(xù)環(huán)顧四周掸屡,找到當前最陡峭的方向封寞,繼續(xù)挪......梯度下降就是這樣一個過程
(2)局部最優(yōu)
當然,即時是沿著“負向”梯度方向仅财,也不一定能保證所到達的點一定是全局最優(yōu)解狈究。目前幾乎所有的實用算法,都不能像上帝視角一樣保證每次都能找到全局最優(yōu)解盏求。不過即使是“局部最優(yōu)”抖锥,也能解決很大問題了亿眠。
(3)梯度下降公式
梯度下降算法的公式如下:
公式依次代表為“下次迭代的點”、“目前所在的點”磅废、“學(xué)習(xí)率”和“最大負向梯度”纳像。按照這個公式,每次迭代都會根據(jù)上次的步長減去學(xué)習(xí)率乘以“梯度”的值拯勉,去一步一步更新竟趾,這樣能可以每次迭代都朝著最大負方向去迭代。
(4)學(xué)習(xí)率
讓我們來看看學(xué)習(xí)率a代表什么谜喊。它直接決定著每次更新的挪動大小潭兽。
如果a太小,那么每次挪動的距離只會一點一點挪動斗遏,這樣就需要很多步才能到達最低點山卦。
如果a太大,那么梯度下降法可能會越過最低點诵次,甚至可能“無法收斂”都不一定哦账蓉。因為你每次挪動的距離都很大,這次越過了一個最低點逾一,下次又越過了一次最低點铸本,直到越過所有“最低點”,那么你就永遠都找不到“局部最優(yōu)解”了遵堵,也就發(fā)散了
(5)自動減小幅度值
梯度下降法還有一個優(yōu)勢箱玷,就是越接近最小值的時候,梯度下降法會自動調(diào)整更新的幅度陌宿,這是因它的公式本身而決定的锡足,以下圖為例,假設(shè)我最開始在取值在函數(shù)中的最高點(粉紅色)壳坪,那么很顯然每次下降之后的點舶得,梯度都會變得越來越小。
當你接近局部最優(yōu)解的時候爽蝴,很顯然在局部最低時導(dǎo)數(shù)等于零沐批,當接近局部最優(yōu)解時,導(dǎo)數(shù)值(即公式的最后一部分)會變得越來越小蝎亚,所以梯度下降將自動采取較小的幅度九孩。很神奇有木有,你都不用刻意去調(diào)整學(xué)習(xí)率a的值发框,梯度下降法會自動保證不越過最低點