這里直接從課程的第二課開始,其實(shí)視頻里的第一課Andrew(為了方便閱讀和書寫逝嚎,以后都把Andrew Ng簡(jiǎn)稱為Andrew了臭家,沒有不敬的意思呵恢,希望他的粉絲或者讀者勿噴)主要是分享了機(jī)器學(xué)習(xí)的一些故事和應(yīng)用場(chǎng)景,總的來說就是機(jī)器學(xué)習(xí)已經(jīng)貫穿到生活的點(diǎn)點(diǎn)滴滴赊颠,每行每業(yè)格二,會(huì)點(diǎn)機(jī)器學(xué)習(xí)的同志是很高大上的(現(xiàn)在回過頭看Andrew的話,還是很有預(yù)見性的竣蹦,IT工程師不會(huì)點(diǎn)機(jī)器學(xué)習(xí)真不好意思跟人打招呼)
線性回歸
顧名思義顶猜,線性回歸就是用一條線(線性)擬合(回歸)數(shù)據(jù)分布,在最簡(jiǎn)單的2維平面中痘括,這種擬合關(guān)系體現(xiàn)為一元一次方程:
θ0代表截距长窄,θ1代表x1的系數(shù),這個(gè)就是我們接觸到的最早的線性函數(shù)表達(dá)式了纲菌。擴(kuò)展一下挠日,將2維擴(kuò)展到多維(假設(shè)為n維)情況,就成了線性回歸的一般表達(dá)式了:
為了簡(jiǎn)單書寫翰舌,上式最后寫成了和符號(hào)∑形式嚣潜。
損失函數(shù)
線性回歸函數(shù)只是定義了模擬我們數(shù)據(jù)分布的關(guān)系式,那剩下的問題是我們?nèi)绾吻蠼庀禂?shù)(或者可以稱之為權(quán)重)椅贱?大部分童鞋肯定知道一元方程如何求解懂算,只要拿數(shù)據(jù)中的兩個(gè)point值,帶入到方程中解二元一次方程組就能解的θ0和θ1庇麦,但是在線性回歸中有兩個(gè)現(xiàn)實(shí)的問題计技,第一所有點(diǎn)未必真的都乖乖的落在我們擬定的線性路徑上,第二就是回歸本質(zhì)上是一個(gè)預(yù)測(cè)問題山橄,如果按照求解方程組的方式來求解系數(shù)垮媒,會(huì)導(dǎo)致不同的樣本有不同的系數(shù),所以充分考慮問題的本質(zhì)是“擬”和“預(yù)測(cè)”航棱,我們并不是真的要求出某個(gè)樣本的一個(gè)系數(shù)組合睡雇,而是找出一個(gè)能預(yù)測(cè)所有樣本(已知或者未來可能出現(xiàn)的)的函數(shù),故定義了回歸函數(shù)之后饮醇,我們需要一個(gè)叫做【損失函數(shù)】的東東來評(píng)估回歸函數(shù)的訓(xùn)練求解誤差入桂,當(dāng)和樣本的誤差在我們認(rèn)定可接受的范圍內(nèi)的時(shí)候,就可以考慮接受當(dāng)前求解到的一組系數(shù)驳阎。
由于在第一課中Andrew Ng并沒有提到損失函數(shù)的大小好壞的評(píng)判標(biāo)準(zhǔn)抗愁,這里先順帶提一句馁蒂,損失函數(shù)并不是越小越好(>= 0),正如我上面說的蜘腌,損失函數(shù)值越小可能會(huì)帶來的副作用是預(yù)測(cè)能力下降(過擬合問題沫屡,對(duì)樣本描述的越精確,函數(shù)的泛化能力也越弱)
Andrew選擇的損失函數(shù)是Mean Square Loss(Or Mean Square Error):
看到這里撮珠,我相信機(jī)器學(xué)習(xí)初學(xué)者肯定會(huì)有一個(gè)問題沮脖,為什么選擇<差平方的均值>啊芯急?為什么不直接用<差絕對(duì)值的均值>呢勺届,其實(shí)有實(shí)際應(yīng)用中有很多的損失函數(shù),差的平方娶耍,差的絕對(duì)值免姿,logistic損失等等,這個(gè)里面也有很大的學(xué)問榕酒,這里不展開討論胚膊,有時(shí)間再寫一些關(guān)于這方面的筆記,暫且認(rèn)為我們只有一種評(píng)價(jià)損失的函數(shù)想鹰,就是MSE紊婉。
好,看到這里,我們已經(jīng)有一個(gè)很明確的損失函數(shù)方程了,回想下我們的目標(biāo)瑞筐,即“訓(xùn)練出一個(gè)可以擬合當(dāng)前數(shù)據(jù)分布的最優(yōu)函數(shù)”,什么是最優(yōu)肢础?能使得損失函數(shù)最小的分布函數(shù)就是最優(yōu)擬合函數(shù),換言之歌殃,我們本來的目標(biāo)是得到【最優(yōu)線性擬合函數(shù)】乔妈,現(xiàn)在變成了【最小化損失函數(shù)】(其實(shí)這一步可以認(rèn)為是一種問題建模蝙云,將實(shí)際問題轉(zhuǎn)變成可以求解的量化問題)氓皱,即:
梯度下降
有了量化的最小化損失函數(shù),接下來需要找一種方法求解這個(gè)函數(shù)勃刨,這里順帶提醒一句波材,損失函數(shù)是以【參數(shù)θ】為自變量的函數(shù),不是樣本點(diǎn)x身隐,這個(gè)應(yīng)該很好理解廷区,我們最終的目的是求出符合數(shù)據(jù)分布的參數(shù),只要參數(shù)確定了贾铝,方程就確定了隙轻。Andrew給出的解決方案是【梯度下降】埠帕,即先隨便先設(shè)置一組θ值,然后每次迭代朝著梯度下降最大的方向更新θ值(有可能增加也可能減少玖绿,方向是朝著最優(yōu)的方向)敛瓷,直到J(θ)達(dá)到我們?cè)O(shè)置的閾值或者在一定范圍內(nèi)不再變化為止。
為什么【梯度下降最大】的方向就是最優(yōu)解的方向呢(注意一定是下降最大的方向斑匪,設(shè)想空間中的一點(diǎn)呐籽,它的四周都是梯度,而下降最大的梯度方向才是我們要找尋的)蚀瘸?一定能達(dá)到局部最優(yōu)或者是全局最優(yōu)么狡蝶?這里先暫時(shí)不討論這兩個(gè)問題,姑且認(rèn)為這是一種被證明過的求解最優(yōu)化問題的方法贮勃。那么如何求解呢 贪惹?迭代公式如下:
如Andrew視頻中所說,符號(hào)“:=”是賦值更新的含義衙猪,將“:=”右邊的值賦給左邊的變量馍乙,而“=”指的是一種等式變化的斷言,“a=b”表示a就是等于b垫释,或者a可以等值變化成b丝格,α是學(xué)習(xí)率,可以理解為參數(shù)朝著梯度方向的單位步長(zhǎng)棵譬,從公式中可以看出所謂的【梯度下降】方向就是每個(gè)參數(shù)θ的偏導(dǎo)數(shù)方向显蝌,下面具體列出下求導(dǎo)的過程:
公式3.2中,m代表有m個(gè)樣本點(diǎn)订咸,j代表某個(gè)向量的第j個(gè)維度曼尊,對(duì)于θ來說,θj代表第j個(gè)參數(shù)脏嚷,對(duì)于x向量來說骆撇,xj代表第j維的值,從公式中可以得出兩個(gè)信息父叙,一個(gè)是每次迭代神郊,θj是通過對(duì)應(yīng)維度上的x值來作為調(diào)整因子的,另一個(gè)是每次θ更新都要計(jì)算樣本中的所有點(diǎn)趾唱。
Andrew稱上面的梯度下降求解為batch gradient descent涌乳,即每次需要計(jì)算樣本中所有點(diǎn)來迭代更新參數(shù)θ值,為了方便快速的迭代甜癞,可以采用一種稱為stochastic gradient descent【隨機(jī)梯度下降】的方法夕晓,每次選取某一個(gè)點(diǎn)作為參數(shù)更新的輸入,如公式3.3所示:
可見每個(gè)維度θj的迭代只需要計(jì)算某個(gè)點(diǎn)的y值差和相應(yīng)維度的xj乘積悠咱,速度大大提高了蒸辆,那為啥還需要批量梯度下降算法呢征炼,都用隨機(jī)梯度下降不就完了? 這里稍微總結(jié)了下這兩個(gè)算法的主要區(qū)別:
- SGD(隨機(jī)梯度下降)每次結(jié)果不是確定的躬贡,因?yàn)槊看胃露际请S機(jī)挑選一個(gè)點(diǎn)作為更新的依據(jù)柒室,而BGD(批量梯度下降)在初始參數(shù)輸入一定的情況下,運(yùn)行的結(jié)果永遠(yuǎn)都是固定的逗宜。
- BGD往往能找到局部或者全局最優(yōu)解雄右,而SGD很可能在最優(yōu)解附近徘徊震蕩
- SGD由于其隨機(jī)性,往往能避免陷入到局部極值中纺讲,而BGD容易陷入到局部極值中
這里貼兩張Andrew課中的圖來形象化展示BGD和SGD的求解過程:
將3D的模型畫成平面等高線的話如下:
而SGD的等高線應(yīng)該是:
利用矩陣求解參數(shù)(Normal Equation)
在課中擂仍,Andrew最后還介紹了一個(gè)利用矩陣來直接求解參數(shù)的方法(不用迭代),估計(jì)很多人看的云里霧里熬甚,因?yàn)锳ndrew寫了很多定律逢渔,比如矩陣的偏導(dǎo)數(shù)公式,trace的定義乡括,trace矩陣時(shí)的一些特性公式肃廓,這里不再贅述Andrew的求解過程,而是從另外一個(gè)大家都熟知的方法得到Andrew最后給出的參數(shù)結(jié)果等式诲泌,即【最小二乘法】盲赊,什么?7笊ā哀蘑!原來Andrew列了那么多就是最小二乘法啊,且看下面我的求解:
課中最后給出的參數(shù)解:
最小二乘法求解:
經(jīng)典最小二乘法的定義式如下:
對(duì)公式求導(dǎo)得到極值點(diǎn)便是參數(shù)θ的解析解(聯(lián)系我們小時(shí)候?qū)W過的求極值方法葵第,不就是求導(dǎo)么_绘迁,但是注意不是每個(gè)函數(shù)都能求導(dǎo)的哦,這個(gè)就不在這詳細(xì)說了)卒密,詳細(xì)過程如下(這里用手寫的圖片了缀台,大家湊合看吧,順便吐槽下簡(jiǎn)書哮奇,不支持在線編輯latex簡(jiǎn)直是災(zāi)難疤鸥!屏镊!比zybuluo弱爆了R捞邸L等):
帶*號(hào)的那一段等式是矩陣求導(dǎo)的范疇而芥,如果有不懂的可以詳細(xì)去看看矩陣如何求導(dǎo)的,這里舉一個(gè)例子來說明下:
由此膀值,所有證明完畢棍丐,可見通過最小二乘法的矩陣運(yùn)算也能得到和Andrew課中一樣的結(jié)論误辑。