摘要:梯度下降算法梯度是個(gè)啥我想最開始接觸梯度的各位是在方向?qū)?shù)那一章接觸這一概念的,如果老師沒怎么講的話可能有些人還不知道梯度是個(gè)向量。在二維條件下,因?yàn)橛辛藘蓚€(gè)偏導(dǎo)數(shù),所以這個(gè)向量能表示一圈。
講你肯定能懂的機(jī)器學(xué)習(xí)多維極值求解
事先說(shuō)明
本文面向?qū)W習(xí)過(guò)高等數(shù)學(xué)統(tǒng)計(jì)學(xué)和線性代數(shù)基礎(chǔ)知識(shí)的本科生,并假設(shè)讀者擁有基本的矩陣運(yùn)算和求導(dǎo)運(yùn)算的相關(guān)知識(shí),類似梯度,方向?qū)?shù)、Hessian Matrix這些東西不懂也沒關(guān)系,我會(huì)用盡可能通俗的語(yǔ)言說(shuō)明運(yùn)算中的意義。
那么從最簡(jiǎn)單的開始。
梯度下降算法
梯度是個(gè)啥?我想最開始接觸梯度的各位是在方向?qū)?shù)那一章接觸這一概念的,如果老師沒怎么講的話可能有些人還不知道梯度是個(gè)向量。當(dāng)你學(xué)梯度的時(shí)候,所有的概念全都是在二元函數(shù)下的,well,也寫想象力不是很豐富的同學(xué)可能不知道這是個(gè)啥。來(lái),我們降維先。
多維條件下是曲面對(duì)函數(shù)的一階偏導(dǎo)數(shù)向量,那么在一維條件下梯度會(huì)是什么的?顯然就木有偏導(dǎo)數(shù)了,只有一個(gè)東西,當(dāng)然你也可以把它寫成向量的形式,就是一個(gè)導(dǎo)數(shù),只不過(guò)現(xiàn)在變成一維的了,所以方向只有倆,向左和向右。值為正的時(shí)候向右,值為負(fù)的時(shí)候向左,值大值小不影響方向只影響距離。
在二維條件下,因?yàn)橛辛藘蓚€(gè)偏導(dǎo)數(shù),所以這個(gè)向量能表示一圈。如果你以前看過(guò)些文章或者視頻或者什么ppt之類的東西,大概你會(huì)聽說(shuō)一種說(shuō)法:“梯度是曲面中最陡峭的方向,這個(gè)方向是下降最快的方向?!睂?shí)際上這種說(shuō)法是不準(zhǔn)確的,從一維的角度來(lái)看,“梯度”其實(shí)是上升最快的方向,比如
處的導(dǎo)數(shù)是1,方向向右,這個(gè)方向函數(shù)是增長(zhǎng)的。同樣二維也是如此。只不過(guò)大部分迭代公式中在梯度的前面會(huì)加一個(gè)負(fù)號(hào),比如這個(gè)
。所以也就直接認(rèn)為它代表了下降最快的方向了。
直觀上,你可以理解為,梯度就是一個(gè)和曲面等高線垂直的法線,沖著增高的那邊。就像下圖:
那么它相反的方向就是下降的方向啦,函數(shù)的極值點(diǎn)導(dǎo)數(shù)都是0的,也就是說(shuō),你沿著梯度方向一直走,如果最終收斂到一個(gè)點(diǎn),那肯定就是一個(gè)極值點(diǎn),如果不收斂,說(shuō)明可能不存在極值點(diǎn)哈(這里因?yàn)橛胁介L(zhǎng)的涉及,在求解的時(shí)候會(huì)遇到明明有極值點(diǎn)卻沒有收斂的問(wèn)題,后面會(huì)提到)。
舉個(gè)例子,在一維下用梯度下降算法求解極值點(diǎn)的問(wèn)題。這里我先舉一個(gè)方便驗(yàn)算的例子,方便大家理解。
,這里 就是步長(zhǎng),用來(lái)調(diào)節(jié)每一次移動(dòng)的距離,你也可能聽過(guò)一些 不能過(guò)大也不能過(guò)小的看起來(lái)只能靠經(jīng)驗(yàn)的廢話。如果你是剛剛?cè)腴T,可能寫點(diǎn)程序,然后不斷試,但是實(shí)際上 較優(yōu)的也是可以算的,只不過(guò)那又是另一門帶有好多論文的學(xué)科了。
不同的 得到不一樣的迭代效果,收斂或者震蕩收斂,周期震蕩或者直接發(fā)散,但是有的時(shí)候,算一遍
很費(fèi)勁啊!這里例子簡(jiǎn)單,要是碰到TB級(jí)的數(shù)據(jù)那真的是要死了。這還能去試?這里簡(jiǎn)單的說(shuō)一下怎么設(shè)置 ,首先你要確定x是收斂的。所以公式
實(shí)際上如果 控制在0到1/2之間會(huì)收斂更快,因?yàn)檎鹗幨諗靠倳?huì)造成一些重復(fù)計(jì)算。
二維上的梯度下降能干啥呢?
還是舉一個(gè)簡(jiǎn)單的例子,這里直接連數(shù)據(jù)都是最簡(jiǎn)單的。你有兩個(gè)點(diǎn)(4,4),(6,5),你想畫一條線使得線和兩個(gè)點(diǎn)之間的距離平方和最小,當(dāng)然你也可以口算出來(lái),但是我們依然是為了看一下作用,直接寫公式對(duì)于一些人來(lái)說(shuō)真的會(huì)蒙。
內(nèi)不會(huì)震蕩,梯度計(jì)算方向在二維曲面震蕩起來(lái)長(zhǎng)啥樣啊。來(lái)來(lái)來(lái)畫個(gè)圖。開始震蕩的部分我想我得給他個(gè)特寫。
不過(guò)癮?來(lái)看這個(gè)
大致知道啥意思就行了哈。
在不震蕩的情況下就顯得特別簡(jiǎn)潔了。一條線走回去。
當(dāng)然教科書上數(shù)學(xué)書上肯定不會(huì)這么寫例子,為了公式的簡(jiǎn)潔,最后改為:
了, 則表示所有參數(shù)的集合。咦?公式多了個(gè)1/2是哪來(lái)的?在這里實(shí)際上這個(gè)值是多少都無(wú)所謂,因?yàn)閮蓚€(gè)偏導(dǎo)數(shù)都帶著這個(gè)1/2不影響梯度方向,只影響步長(zhǎng),而步長(zhǎng)又可以由調(diào)節(jié),我們可以理解為,加了它,導(dǎo)數(shù)寫起來(lái)好看^_^。就像下面這樣。
一個(gè)列向量。
更多維的原理都一樣,梯度下降就講到這。
牛頓法
提到牛頓法的時(shí)候,你可能在小的時(shí)候聽說(shuō)過(guò),一個(gè)用來(lái)迭代求零點(diǎn)的方法,稍微提一下。
,然后不斷的試值,唔~~還是來(lái)畫圖吧。
你也可以看到他們的迭代過(guò)程,當(dāng)然這個(gè)不叫牛頓法,這個(gè)叫二分法,比較low哈,看到?jīng)],震蕩了,震蕩收斂慢。
當(dāng)趨近于0的時(shí)候他倆才近似。而牛頓法就是用切線來(lái)快速逼近零點(diǎn)的,不會(huì)震蕩呦,畫圖吧先。
看起來(lái)兩步就收斂了啊,好厲害,怎么做到不震蕩的呢它?
因?yàn)槊恳徊降苿?dòng)切線與x軸交叉點(diǎn)的距離
沒錯(cuò)就是這么簡(jiǎn)單。
這里順帶一提,對(duì)于不同的方程起始點(diǎn)的選擇也會(huì)影響迭代次數(shù),如果有興趣的話可以讀一下 這篇文章 ,看一下神奇的0x5f375a86,2次迭代求解,這里讀兩次不讀二次^_^
那牛頓法和極值求解有關(guān)系?看起來(lái)牛頓法只能求零點(diǎn)啊? Naive~~,一階導(dǎo)零點(diǎn)不就是函數(shù)的極值或者駐點(diǎn)?
這個(gè)矩陣就是傳說(shuō)中的Hessian矩陣,不是什么拼音的簡(jiǎn)寫。
還是以上面的例子解,對(duì)就是只有兩個(gè)點(diǎn)求直線的那個(gè),這次我們把目標(biāo)函數(shù)1/2的加上。
來(lái)看一下效果,看起來(lái)直接一步到位啊!!!所以牛頓法求解你們也應(yīng)該知道多厲害了。
難道是我初始點(diǎn)選的就比較接近答案?換一個(gè)大一點(diǎn)的(100,100),依然非???
這么快的原因,可能跟方程有關(guān),換了其他方程也許就不這樣了。當(dāng)然你讀到這里也許會(huì)迫不及待的去找些自己想分析的數(shù)據(jù),計(jì)算些參數(shù),如果數(shù)據(jù)量少,幾百個(gè),沒問(wèn)題,幾萬(wàn)個(gè),還撐得住,要是直接從統(tǒng)計(jì)局或者人口普查中進(jìn)行分析的話,算一個(gè)
可能都很慢,而且數(shù)超大。
簡(jiǎn)單的解決辦法,有一種叫做批迭代的方法,不管是在梯度計(jì)算極值還是在牛頓計(jì)算極值上都是可行的,就是假設(shè)失去大部分點(diǎn)對(duì)準(zhǔn)確度沒有太大的影響,比如說(shuō)3個(gè)在一條直線上的點(diǎn),去掉一個(gè)也沒什么關(guān)系,最后反正還是會(huì)擬合成同一個(gè)參數(shù)。批迭代就是在眾多的點(diǎn)中隨機(jī)抽取一些,進(jìn)行迭代計(jì)算,再隨機(jī)抽取一些再進(jìn)行迭代。迭代的路徑可能不完美,但是最終還是會(huì)找到我們想要的答案。
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/4394.html
摘要:人工智能概述簡(jiǎn)史應(yīng)用領(lǐng)域安防實(shí)時(shí)從視頻中檢測(cè)出行人和車輛。通過(guò)多張醫(yī)療影像重建出人體內(nèi)器官的三維模型,幫助醫(yī)生設(shè)計(jì)手術(shù),確保手術(shù)為我們每個(gè)人提供康建議和疾病風(fēng)險(xiǎn)預(yù)警,從而讓我們生活得更加健康。 showImg(https://segmentfault.com/img/remote/1460000015971504); 0 引言 本文是《人工智能基礎(chǔ)(高中版)》的讀書筆記,這本書的配圖非...
摘要:人工智能概述簡(jiǎn)史應(yīng)用領(lǐng)域安防實(shí)時(shí)從視頻中檢測(cè)出行人和車輛。通過(guò)多張醫(yī)療影像重建出人體內(nèi)器官的三維模型,幫助醫(yī)生設(shè)計(jì)手術(shù),確保手術(shù)為我們每個(gè)人提供康建議和疾病風(fēng)險(xiǎn)預(yù)警,從而讓我們生活得更加健康。 showImg(https://segmentfault.com/img/remote/1460000015971504); 0 引言 本文是《人工智能基礎(chǔ)(高中版)》的讀書筆記,這本書的配圖非...
摘要:與此類似,理所當(dāng)然的,我們程序員也會(huì)有自己的圣經(jīng)。這便是程序員的圣經(jīng)三個(gè)原則我認(rèn)為做為一個(gè)程序員,最神圣的就是三個(gè)原則,它幾乎能完整無(wú)誤的定義做為一個(gè)程序員應(yīng)該如何去編碼。 ...
閱讀 2022·2021-09-30 09:46
閱讀 1428·2019-08-30 15:43
閱讀 1200·2019-08-29 13:28
閱讀 1984·2019-08-29 11:24
閱讀 1776·2019-08-26 13:22
閱讀 4097·2019-08-26 12:01
閱讀 1881·2019-08-26 11:33
閱讀 3293·2019-08-23 15:34