零基礎(chǔ)入門深度學(xué)習(xí)(2) - 線性單元和梯度下降

由于簡書不支持數(shù)學(xué)公式,請移步零基礎(chǔ)入門深度學(xué)習(xí)(2) - 線性單元和梯度下降。為了保證最佳閱讀效果,請盡量在電腦上閱讀。

往期回顧

在上一篇文章中,我們已經(jīng)學(xué)會了編寫一個簡單的感知器,并用它來實現(xiàn)一個線性分類器乔外。你應(yīng)該還記得用來訓(xùn)練感知器的『感知器規(guī)則』。然而一罩,我們并沒有關(guān)心這個規(guī)則是怎么得到的杨幼。本文通過介紹另外一種『感知器』,也就是『線性單元』聂渊,來說明關(guān)于機器學(xué)習(xí)一些基本的概念差购,比如模型、目標函數(shù)歧沪、優(yōu)化算法等等歹撒。這些概念對于所有的機器學(xué)習(xí)算法來說都是通用的,掌握了這些概念诊胞,就掌握了機器學(xué)習(xí)的基本套路暖夭。

線性單元是啥

感知器有一個問題,當(dāng)面對的數(shù)據(jù)集不是線性可分的時候撵孤,『感知器規(guī)則』可能無法收斂迈着,這意味著我們永遠也無法完成一個感知器的訓(xùn)練。為了解決這個問題邪码,我們使用一個可導(dǎo)線性函數(shù)來替代感知器的階躍函數(shù)裕菠,這種感知器就叫做線性單元。線性單元在面對線性不可分的數(shù)據(jù)集時闭专,會收斂到一個最佳的近似上奴潘。

為了簡單起見,我們可以設(shè)置線性單元的激活函數(shù)f

f(x)=x

這樣的線性單元如下圖所示

對比此前我們講過的感知器

這樣替換了激活函數(shù)f之后影钉,線性單元將返回一個實數(shù)值而不是0,1分類画髓。因此線性單元用來解決回歸問題而不是分類問題。

線性單元的模型

當(dāng)我們說模型時平委,我們實際上在談?wù)摳鶕?jù)輸入x預(yù)測輸出y算法奈虾。比如,x可以是一個人的工作年限,y可以是他的月薪肉微,我們可以用某種算法來根據(jù)一個人的工作年限來預(yù)測他的收入匾鸥。比如:

y=h(x)=w*x+b

函數(shù)h(x)叫做假設(shè),而w碉纳、b是它的參數(shù)勿负。我們假設(shè)參數(shù)w=1000,參數(shù)b=500劳曹,如果一個人的工作年限是5年的話笆环,我們的模型會預(yù)測他的月薪為

y=h(x)=1000*5+500=5500(元)

你也許會說,這個模型太不靠譜了厚者。是這樣的,因為我們考慮的因素太少了迫吐,僅僅包含了工作年限库菲。如果考慮更多的因素,比如所處的行業(yè)志膀、公司熙宇、職級等等,可能預(yù)測就會靠譜的多溉浙。我們把工作年限烫止、行業(yè)、公司戳稽、職級這些信息馆蠕,稱之為特征。對于一個工作了5年惊奇,在IT行業(yè)互躬,百度工作,職級T6這樣的人颂郎,我們可以用這樣的一個特征向量來表示他

\mathrm{x} = (5, IT, 百度, T6)吼渡。

既然輸入\mathrm{x}變成了一個具備四個特征的向量,相對應(yīng)的乓序,僅僅一個參數(shù)w就不夠用了寺酪,我們應(yīng)該使用4個參數(shù)w_1,w_2,w_3,w_4,每個特征對應(yīng)一個替劈。這樣寄雀,我們的模型就變成

y=h(x)=w_1*x_1+w_2*x_2+w_3*x_3+w_4*x_4+b

其中,x_1對應(yīng)工作年限抬纸,x_2對應(yīng)行業(yè)咙俩,x_3對應(yīng)公司,x_4對應(yīng)職級。

為了書寫和計算方便阿趁,我們可以令w_0等于b膜蛔,同時令w_0對應(yīng)于特征x_0。由于x_0其實并不存在脖阵,我們可以令它的值永遠為1皂股。也就是說

b = w_0 * x_0\qquad其中x_0=1

這樣上面的式子就可以寫成

\begin{align} y=h(x)&=w_1*x_1+w_2*x_2+w_3*x_3+w_4*x_4+b\\ &=w_0*x_0+w_1*x_1+w_2*x_2+w_3*x_3+w_4*x_4 \end{align}

我們還可以把上式寫成向量的形式

y=h(x)=\mathrm{w}^T\mathrm{x}\qquad\qquad(式1)

長成這種樣子模型就叫做線性模型,因為輸出y就是輸入特征x_1,x_2,x_3,...線性組合命黔。

監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)

接下來呜呐,我們需要關(guān)心的是這個模型如何訓(xùn)練,也就是參數(shù)\mathrm{w}取什么值最合適悍募。

機器學(xué)習(xí)有一類學(xué)習(xí)方法叫做監(jiān)督學(xué)習(xí)蘑辑,它是說為了訓(xùn)練一個模型,我們要提供這樣一堆訓(xùn)練樣本:每個訓(xùn)練樣本既包括輸入特征\mathrm{x}坠宴,也包括對應(yīng)的輸出y(y也叫做標記洋魂,label)。也就是說喜鼓,我們要找到很多人副砍,我們既知道他們的特征(工作年限,行業(yè)...)庄岖,也知道他們的收入豁翎。我們用這樣的樣本去訓(xùn)練模型,讓模型既看到我們提出的每個問題(輸入特征\mathrm{x})隅忿,也看到對應(yīng)問題的答案(標記y)心剥。當(dāng)模型看到足夠多的樣本之后,它就能總結(jié)出其中的一些規(guī)律硼控。然后刘陶,就可以預(yù)測那些它沒看過的輸入所對應(yīng)的答案了。

另外一類學(xué)習(xí)方法叫做無監(jiān)督學(xué)習(xí)牢撼,這種方法的訓(xùn)練樣本中只有\mathrm{x}而沒有y匙隔。模型可以總結(jié)出特征\mathrm{x}的一些規(guī)律,但是無法知道其對應(yīng)的答案y熏版。

很多時候纷责,既有\mathrm{x}又有y的訓(xùn)練樣本是很少的,大部分樣本都只有\mathrm{x}撼短。比如在語音到文本(STT)的識別任務(wù)中再膳,\mathrm{x}是語音,y是這段語音對應(yīng)的文本曲横。我們很容易獲取大量的語音錄音喂柒,然而把語音一段一段切分好并標注上對應(yīng)文字則是非常費力氣的事情不瓶。這種情況下,為了彌補帶標注樣本的不足灾杰,我們可以用無監(jiān)督學(xué)習(xí)方法先做一些聚類蚊丐,讓模型總結(jié)出哪些音節(jié)是相似的,然后再用少量的帶標注的訓(xùn)練樣本艳吠,告訴模型其中一些音節(jié)對應(yīng)的文字麦备。這樣模型就可以把相似的音節(jié)都對應(yīng)到相應(yīng)文字上,完成模型的訓(xùn)練昭娩。

線性單元的目標函數(shù)

現(xiàn)在凛篙,讓我們只考慮監(jiān)督學(xué)習(xí)

在監(jiān)督學(xué)習(xí)下栏渺,對于一個樣本呛梆,我們知道它的特征\mathrm{x},以及標記y磕诊。同時削彬,我們還可以根據(jù)模型h(x)計算得到輸出\overline{y}。注意這里面我們用y表示訓(xùn)練樣本里面的標記秀仲,也就是實際值;用帶上劃線的\overline{y}表示模型計算的出來的預(yù)測值壶笼。我們當(dāng)然希望模型計算出來的\overline{y}y越接近越好神僵。

數(shù)學(xué)上有很多方法來表示的\overline{y}y的接近程度,比如我們可以用\overline{y}y的差的平方的\frac{1}{2}來表示它們的接近程度

e=\frac{1}{2}(y-\overline{y})^2

我們把e叫做單個樣本誤差覆劈。至于為什么前面要乘\frac{1}{2}保礼,是為了后面計算方便。

訓(xùn)練數(shù)據(jù)中會有很多樣本责语,比如N個炮障,我們可以用訓(xùn)練數(shù)據(jù)中所有樣本的誤差的,來表示模型的誤差E坤候,也就是

E=e^{(1)}+e^{(2)}+e^{(3)}+...+e^{(n)}

上式的e^{(1)}表示第一個樣本的誤差胁赢,e^{(2)}表示第二個樣本的誤差......。

我們還可以把上面的式子寫成和式的形式白筹。使用和式智末,不光書寫起來簡單,逼格也跟著暴漲徒河,一舉兩得系馆。所以一定要寫成下面這樣

\begin{align} E&=e^{(1)}+e^{(2)}+e^{(3)}+...+e^{(n)}\\ &=\sum_{i=1}^{n}e^{(i)}\\ &=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})^2\qquad\qquad(式2) \end{align}

其中

\begin{align} \overline{y}^{(i)}&=h(\mathrm{x}^{(i)})\\ &=\mathrm{w}^T\mathrm{x^{(i)}} \end{align}

(式2)中,x^{(i)}表示第i個訓(xùn)練樣本的特征顽照,y^{(i)}表示第i個樣本的標記由蘑,我們也可以用元組(x^{(i)},y^{(i)})表示第i訓(xùn)練樣本\overline{y}^{(i)}則是模型對第i個樣本的預(yù)測值

我們當(dāng)然希望對于一個訓(xùn)練數(shù)據(jù)集來說尼酿,誤差最小越好爷狈,也就是(式2)的值越小越好。對于特定的訓(xùn)練數(shù)據(jù)集來說谓媒,(x^{(i)},y^{(i)})的值都是已知的淆院,所以(式2)其實是參數(shù)\mathrm{w}的函數(shù)。

\begin{align} E(\mathrm{w})&=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})^2\\ &=\frac{1}{2}\sum_{i=1}^{n}(\mathrm{y^{(i)}-\mathrm{w}^Tx^{(i)}})^2 \end{align}

由此可見句惯,模型的訓(xùn)練土辩,實際上就是求取到合適的\mathrm{w},使(式2)取得最小值抢野。這在數(shù)學(xué)上稱作優(yōu)化問題拷淘,而E(\mathrm{w})就是我們優(yōu)化的目標,稱之為目標函數(shù)指孤。

梯度下降優(yōu)化算法

大學(xué)時我們學(xué)過怎樣求函數(shù)的極值启涯。函數(shù)y=f(x)的極值點,就是它的導(dǎo)數(shù)f'(x)=0的那個點恃轩。因此我們可以通過解方程f'(x)=0结洼,求得函數(shù)的極值點(x_0,y_0)

不過對于計算機來說叉跛,它可不會解方程松忍。但是它可以憑借強大的計算能力,一步一步的去把函數(shù)的極值點『試』出來筷厘。如下圖所示:

首先鸣峭,我們隨便選擇一個點開始,比如上圖的x_0點酥艳。接下來摊溶,每次迭代修改x的為x_1,x_2,x_3,...,經(jīng)過數(shù)次迭代后最終達到函數(shù)最小值點充石。

你可能要問了莫换,為啥每次修改x的值,都能往函數(shù)最小值那個方向前進呢骤铃?這里的奧秘在于浓镜,我們每次都是向函數(shù)y=f(x)梯度相反方向來修改x。什么是梯度呢劲厌?翻開大學(xué)高數(shù)課的課本膛薛,我們會發(fā)現(xiàn)梯度是一個向量,它指向函數(shù)值上升最快的方向补鼻。顯然哄啄,梯度的反方向當(dāng)然就是函數(shù)值下降最快的方向了雅任。我們每次沿著梯度相反方向去修改x的值,當(dāng)然就能走到函數(shù)的最小值附近咨跌。之所以是最小值附近而不是最小值那個點沪么,是因為我們每次移動的步長不會那么恰到好處,有可能最后一次迭代走遠了越過了最小值那個點锌半。步長的選擇是門手藝禽车,如果選擇小了,那么就會迭代很多輪才能走到最小值附近刊殉;如果選擇大了殉摔,那可能就會越過最小值很遠,收斂不到一個好的點上记焊。

按照上面的討論逸月,我們就可以寫出梯度下降算法的公式

\mathrm{x}_{new}=\mathrm{x}_{old}-\eta\nabla{f(x)}

其中,\nabla梯度算子遍膜,\nabla{f(x)}就是指f(x)的梯度碗硬。\eta是步長,也稱作學(xué)習(xí)速率瓢颅。

對于上一節(jié)列出的目標函數(shù)(式2)

E(\mathrm{w})=\frac{1}{2}\sum_{i=1}^{n}(\mathrm{y^{(i)}-\overline{y}^{(i)}})^2

梯度下降算法可以寫成

\mathrm{w}_{new}=\mathrm{w}_{old}-\eta\nabla{E(\mathrm{w})}

聰明的你應(yīng)該能想到恩尾,如果要求目標函數(shù)的最大值,那么我們就應(yīng)該用梯度上升算法挽懦,它的參數(shù)修改規(guī)則是

\mathrm{w}_{new}=\mathrm{w}_{old}+\eta\nabla{E(\mathrm{w})}

下面特笋,請先做幾次深呼吸,讓你的大腦補充足夠的新鮮的氧氣巾兆,我們要來求取\nabla{E}(\mathrm{w}),然后帶入上式虎囚,就能得到線性單元的參數(shù)修改規(guī)則角塑。

關(guān)于\nabla{E(\mathrm{w})}的推導(dǎo)過程,我單獨把它們放到一節(jié)中淘讥。您既可以選擇慢慢看圃伶,也可以選擇無視。在這里蒲列,您只需要知道窒朋,經(jīng)過一大串推導(dǎo),目標函數(shù)E(w)的梯度是

\nabla{E(\mathrm{w})}=-\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})\mathrm{x}^{(i)}

因此蝗岖,線性單元的參數(shù)修改規(guī)則最后是這個樣子

\mathrm{w}_{new}=\mathrm{w}_{old}+\eta\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})\mathrm{x}^{(i)}\qquad\qquad(式3)

有了上面這個式子侥猩,我們就可以根據(jù)它來寫出訓(xùn)練線性單元的代碼了。

需要說明的是抵赢,如果每個樣本有M個特征欺劳,則上式中的\mathrm{x},\mathrm{w}都是M+1維向量(因為我們加上了一個恒為1的虛擬特征x_0唧取,參考前面的內(nèi)容),而y標量划提。用高逼格的數(shù)學(xué)符號表示枫弟,就是

\mathrm{x},\mathrm{w}\in\Re^{(M+1)}\\ y\in\Re^1

為了讓您看明白說的是啥,我吐血寫下下面這個解釋(寫這種公式可累可累了)鹏往。因為\mathrm{w},\mathrm{x}是M+1維列向量淡诗,所以(式3)可以寫成

\begin{bmatrix} w_0 \\ w_1 \\ w_2 \\ ... \\ w_m \\ \end{bmatrix}_{new}= \begin{bmatrix} w_0 \\ w_1 \\ w_2 \\ ... \\ w_m \\ \end{bmatrix}_{old}+\eta\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)}) \begin{bmatrix} 1 \\ x_1^{(i)} \\ x_2^{(i)} \\ ... \\ x_m^{(i)} \\ \end{bmatrix}

如果您還是沒看明白,建議您也吐血再看一下大學(xué)時學(xué)過的《線性代數(shù)》吧伊履。

\nabla{E}(\mathrm{w})的推導(dǎo)

這一節(jié)你盡可以跳過它韩容,并不太會影響到全文的理解。當(dāng)然如果你非要弄明白每個細節(jié)湾碎,那恭喜你騷年宙攻,機器學(xué)習(xí)的未來一定是屬于你的。

首先介褥,我們先做一個簡單的前戲座掘。我們知道函數(shù)的梯度的定義就是它相對于各個變量的偏導(dǎo)數(shù),所以我們寫下下面的式子

\begin{align} \nabla{E(\mathrm{w})}&=\frac{\partial}{\partial\mathrm{w}}E(\mathrm{w})\\ &=\frac{\partial}{\partial\mathrm{w}}\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})^2\\ \end{align}

可接下來怎么辦呢柔滔?我們知道和的導(dǎo)數(shù)等于導(dǎo)數(shù)的和溢陪,所以我們可以先把求和符號\sum里面的導(dǎo)數(shù)求出來,然后再把它們加在一起就行了睛廊,也就是

\begin{align} &\frac{\partial}{\partial\mathrm{w}}\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})^2\\ =&\frac{1}{2}\sum_{i=1}^{n}\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\overline{y}^{(i)})^2\\ \end{align}

現(xiàn)在我們可以不管高大上的\sum了形真,先專心把里面的導(dǎo)數(shù)求出來。

\begin{align} &\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\overline{y}^{(i)})^2\\ =&\frac{\partial}{\partial\mathrm{w}}(y^{(i)2}-2\overline{y}^{(i)}y^{(i)}+\overline{y}^{(i)2})\\ \end{align}

我們知道超全,y是與\mathrm{w}無關(guān)的常數(shù)咆霜,而\overline{y}=\mathrm{w}^T\mathrm{x},下面我們根據(jù)鏈式求導(dǎo)法則來求導(dǎo)(上大學(xué)時好像叫復(fù)合函數(shù)求導(dǎo)法則)

\frac{\partial{E(\mathrm{w})}}{\partial\mathrm{w}}=\frac{\partial{E(\overline{y})}}{\partial\overline{y}}\frac{\partial{\overline{y}}}{\partial\mathrm{w}}

我們分別計算上式等號右邊的兩個偏導(dǎo)數(shù)

\begin{align} \frac{\partial{E(\mathrm{w})}}{\partial\overline{y}}= &\frac{\partial}{\partial\overline{y}}(y^{(i)2}-2\overline{y}^{(i)}y^{(i)}+\overline{y}^{(i)2})\\ =&-2y^{(i)}+2\overline{y}^{(i)}\\\\ \frac{\partial{\overline{y}}}{\partial\mathrm{w}}= &\frac{\partial}{\partial\mathrm{w}}\mathrm{w}^T\mathrm{x}\\ =&\mathrm{x} \end{align}

代入嘶朱,我們求得\sum里面的偏導(dǎo)數(shù)是

\begin{align} &\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\overline{y}^{(i)})^2\\ =&2(-y^{(i)}+\overline{y}^{(i)})\mathrm{x} \end{align}

最后代入\nabla{E}(\mathrm{w})蛾坯,求得

\begin{align} \nabla{E(\mathrm{w})}&=\frac{1}{2}\sum_{i=1}^{n}\frac{\partial}{\partial\mathrm{w}}(y^{(i)}-\overline{y}^{(i)})^2\\ &=\frac{1}{2}\sum_{i=1}^{n}2(-y^{(i)}+\overline{y}^{(i)})\mathrm{x}\\ &=-\sum_{i=1}^{n}(y^{(i)}-\overline{y}^{(i)})\mathrm{x} \end{align}

至此,大功告成疏遏。

隨機梯度下降算法(Stochastic Gradient Descent, SGD)

如果我們根據(jù)(式3)來訓(xùn)練模型脉课,那么我們每次更新\mathrm{w}的迭代,要遍歷訓(xùn)練數(shù)據(jù)中所有的樣本進行計算财异,我們稱這種算法叫做批梯度下降(Batch Gradient Descent)倘零。如果我們的樣本非常大,比如數(shù)百萬到數(shù)億戳寸,那么計算量異常巨大呈驶。因此,實用的算法是SGD算法疫鹊。在SGD算法中俐东,每次更新\mathrm{w}的迭代跌穗,只計算一個樣本。這樣對于一個具有數(shù)百萬樣本的訓(xùn)練數(shù)據(jù)虏辫,完成一次遍歷就會對\mathrm{w}更新數(shù)百萬次蚌吸,效率大大提升。由于樣本的噪音和隨機性砌庄,每次更新\mathrm{w}并不一定按照減少E的方向羹唠。然而,雖然存在一定隨機性娄昆,大量的更新總體上沿著減少E的方向前進的佩微,因此最后也能收斂到最小值附近。下圖展示了SGD和BGD的區(qū)別

如上圖萌焰,橢圓表示的是函數(shù)值的等高線哺眯,橢圓中心是函數(shù)的最小值點。紅色是BGD的逼近曲線扒俯,而紫色是SGD的逼近曲線奶卓。我們可以看到BGD是一直向著最低點前進的,而SGD明顯躁動了許多撼玄,但總體上仍然是向最低點逼近的夺姑。

最后需要說明的是,SGD不僅僅效率高掌猛,而且隨機性有時候反而是好事盏浙。今天的目標函數(shù)是一個『凸函數(shù)』,沿著梯度反方向就能找到全局唯一的最小值荔茬。然而對于非凸函數(shù)來說废膘,存在許多局部最小值。隨機性有助于我們逃離某些很糟糕的局部最小值慕蔚,從而獲得一個更好的模型丐黄。

實現(xiàn)線性單元

接下來,讓我們擼一把代碼坊萝。

因為我們已經(jīng)寫了感知器的代碼,因此我們先比較一下感知器模型和線性單元模型许起,看看哪些代碼能夠復(fù)用十偶。

算法 感知器 線性單元
模型h(x) y=f(\mathrm{w}^T\mathrm{x})\\f(z)=\begin{equation}\begin{cases}1\qquad z>0\\0\qquad otherwise\end{cases}\end{equation} y=f(\mathrm{w}^T\mathrm{x})\\f(z)=z
訓(xùn)練規(guī)則 \mathrm{w}\gets\mathrm{w}+\eta(y-\overline{y})\mathrm{x} \mathrm{w}\gets\mathrm{w}+\eta(y-\overline{y})\mathrm{x}

比較的結(jié)果令人震驚,原來除了激活函數(shù)f不同之外园细,兩者的模型和訓(xùn)練規(guī)則是一樣的(在上表中惦积,線性單元的優(yōu)化算法是SGD算法)。那么猛频,我們只需要把感知器的激活函數(shù)進行替換即可狮崩。感知器的代碼請參考上一篇文章零基礎(chǔ)入門深度學(xué)習(xí)(1) - 感知器蛛勉,這里就不再重復(fù)了。對于一個養(yǎng)成良好習(xí)慣的程序員來說睦柴,重復(fù)代碼是不可忍受的诽凌。大家應(yīng)該把代碼保存在一個代碼庫中(比如git)。

from perceptron import Perceptron

#定義激活函數(shù)f
f = lambda x: x

class LinearUnit(Perceptron):
    def __init__(self, input_num):
        '''初始化線性單元坦敌,設(shè)置輸入?yún)?shù)的個數(shù)'''
        Perceptron.__init__(self, input_num, f)

通過繼承Perceptron,我們僅用幾行代碼就實現(xiàn)了線性單元。這再次證明了面向?qū)ο缶幊谭妒降膹姶蟆?/p>

接下來凉夯,我們用簡單的數(shù)據(jù)進行一下測試裁僧。

def get_training_dataset():
    '''
    捏造5個人的收入數(shù)據(jù)
    '''
    # 構(gòu)建訓(xùn)練數(shù)據(jù)
    # 輸入向量列表,每一項是工作年限
    input_vecs = [[5], [3], [8], [1.4], [10.1]]
    # 期望的輸出列表蘸炸,月薪躬络,注意要與輸入一一對應(yīng)
    labels = [5500, 2300, 7600, 1800, 11400]
    return input_vecs, labels    


def train_linear_unit():
    '''
    使用數(shù)據(jù)訓(xùn)練線性單元
    '''
    # 創(chuàng)建感知器,輸入?yún)?shù)的特征數(shù)為1(工作年限)
    lu = LinearUnit(1)
    # 訓(xùn)練搭儒,迭代10輪, 學(xué)習(xí)速率為0.01
    input_vecs, labels = get_training_dataset()
    lu.train(input_vecs, labels, 10, 0.01)
    #返回訓(xùn)練好的線性單元
    return lu


if __name__ == '__main__': 
    '''訓(xùn)練線性單元'''
    linear_unit = train_linear_unit()
    # 打印訓(xùn)練獲得的權(quán)重
    print linear_unit
    # 測試
    print 'Work 3.4 years, monthly salary = %.2f' % linear_unit.predict([3.4])
    print 'Work 15 years, monthly salary = %.2f' % linear_unit.predict([15])
    print 'Work 1.5 years, monthly salary = %.2f' % linear_unit.predict([1.5])
    print 'Work 6.3 years, monthly salary = %.2f' % linear_unit.predict([6.3])

程序運行結(jié)果如下圖

擬合的直線如下圖

小結(jié)

事實上穷当,一個機器學(xué)習(xí)算法其實只有兩部分

  • 模型 從輸入特征\mathrm{x}預(yù)測輸入y的那個函數(shù)h(x)
  • 目標函數(shù) 目標函數(shù)取最小(最大)值時所對應(yīng)的參數(shù)值,就是模型的參數(shù)的最優(yōu)值仗嗦。很多時候我們只能獲得目標函數(shù)的局部最小(最大)值膘滨,因此也只能得到模型參數(shù)的局部最優(yōu)值

因此稀拐,如果你想最簡潔的介紹一個算法火邓,列出這兩個函數(shù)就行了。

接下來德撬,你會用優(yōu)化算法去求取目標函數(shù)的最小(最大)值铲咨。[隨機]梯度{下降|上升}算法就是一個優(yōu)化算法。針對同一個目標函數(shù)蜓洪,不同的優(yōu)化算法會推導(dǎo)出不同的訓(xùn)練規(guī)則纤勒。我們后面還會講其它的優(yōu)化算法。

其實在機器學(xué)習(xí)中隆檀,算法往往并不是關(guān)鍵摇天,真正的關(guān)鍵之處在于選取特征。選取特征需要我們?nèi)祟悓栴}的深刻理解恐仑,經(jīng)驗泉坐、以及思考。而神經(jīng)網(wǎng)絡(luò)算法的一個優(yōu)勢裳仆,就在于它能夠自動學(xué)習(xí)到應(yīng)該提取什么特征腕让,從而使算法不再那么依賴人類,而這也是神經(jīng)網(wǎng)絡(luò)之所以吸引人的一個方面歧斟。

現(xiàn)在纯丸,經(jīng)過漫長的燒腦偏形,你已經(jīng)具備了學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的必備知識。下一篇文章觉鼻,我們將介紹本系列文章的主角:神經(jīng)網(wǎng)絡(luò)俊扭,以及用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)的大名鼎鼎的算法:反向傳播算法。至于現(xiàn)在滑凉,我們應(yīng)該暫時忘記一切统扳,盡情獎勵自己一下吧。

參考資料

  1. Tom M. Mitchell, "機器學(xué)習(xí)", 曾華軍等譯, 機械工業(yè)出版社

相關(guān)文章

零基礎(chǔ)入門深度學(xué)習(xí)(1) - 感知器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畅姊,一起剝皮案震驚了整個濱河市咒钟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌若未,老刑警劉巖朱嘴,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粗合,居然都是意外死亡萍嬉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門隙疚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壤追,“玉大人,你說我怎么就攤上這事供屉⌒斜” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵伶丐,是天一觀的道長悼做。 經(jīng)常有香客問我,道長哗魂,這世上最難降的妖魔是什么肛走? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮录别,結(jié)果婚禮上朽色,老公的妹妹穿的比我還像新娘。我一直安慰自己组题,他們只是感情好葫男,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著往踢,像睡著了一般腾誉。 火紅的嫁衣襯著肌膚如雪徘层。 梳的紋絲不亂的頭發(fā)上峻呕,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天利职,我揣著相機與錄音,去河邊找鬼瘦癌。 笑死猪贪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讯私。 我是一名探鬼主播热押,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斤寇!你這毒婦竟也來了桶癣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娘锁,失蹤者是張志新(化名)和其女友劉穎牙寞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體莫秆,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡间雀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镊屎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惹挟。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缝驳,靈堂內(nèi)的尸體忽然破棺而出连锯,到底是詐尸還是另有隱情,我是刑警寧澤党巾,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布萎庭,位于F島的核電站,受9級特大地震影響齿拂,放射性物質(zhì)發(fā)生泄漏驳规。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一署海、第九天 我趴在偏房一處隱蔽的房頂上張望吗购。 院中可真熱鬧,春花似錦砸狞、人聲如沸捻勉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踱启。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埠偿,已是汗流浹背透罢。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠蒋,地道東北人羽圃。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像抖剿,于是被迫代替她去往敵國和親朽寞。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容