神經(jīng)網(wǎng)絡基礎之線性運算模型

1.線性運算模型

當我們說模型時,我們實際上在談論根據(jù)輸入x預測輸出y的算法。比如,x可以是一個人的工作年限,y可以是他的月薪,我們可以用某種算法來根據(jù)一個人的工作年限來預測他的收入。比如y:

y = f(x) = w?x+b

函數(shù)f(x)叫做假設,而w、b是它的參數(shù)。我們假設參數(shù)w=1000,參數(shù)b=200,如果某人的工作年限是5年的話,我們的模型會預測他的月薪為:

y=f(x)=1000?5+500=5500(元)

公司如果按照這個模型決定薪酬,我目前工作9年,那么我的工資應該為9500元,這個根本難以覆蓋我在北京的生活成本。所以很明顯這個模型是一個人工智障。

作為一個薪酬模型,我們考慮的因素太少了,僅僅包含了工作年限一個特征。正常影響薪酬的因素有很多,比如所處的城市、行業(yè)、公司、職務等等,如果把這些因素都考慮進去,模型就會更加靠譜。我們把工作年限、城市、行業(yè)、公司、職務這些信息,稱之為特征。對于一個在北京IT行業(yè)工作了10年,目前在互聯(lián)網(wǎng)公司做產(chǎn)品總監(jiān)的一位員工,我們可以用這樣的一個特征向量來表示:

x=(北京,IT,10,互聯(lián)網(wǎng),總監(jiān))

輸入x變成了一個具備5個特征的向量,相對應的,僅僅一個參數(shù)w就不夠用了,我們應該使用5個參數(shù),每個特征對應一個(因為每個特征對薪酬的影響程度不同,所以權重參數(shù)不同)。這樣,我們的模型就變成:

y=f(x)=w_1?x_1+w_2?x_2+w_3?x_3+w_4?x_4+w_5*x_5+b

為了書寫和計算方便,偏移量b可以按照如下表示:

b=w_0?x_0其中x_0=1

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

y=h(x)=w_1?x_1+w_2?x_2+w_3?x_3+w_4?x_4+w_5*x_5+w_0?x_0

設x向量為:x=(x_0,x_1,x_2,x_3,x_4,x_5) w向量為:w=(w_0,w_1,w_2,w_3,w_4,w_5);

則上式寫成向量的形式為(T:矩陣轉置):

y=f(x)=w^Tx

以上模型就叫做線性模型,因為輸出y就是輸入特征向量x的線性組合。

2.目標函數(shù)

在監(jiān)督學習下,對于一個樣本,我們知道它的特征 x ,以及標記 y 。同時,我們還可以根據(jù)模型f(x)計算得到輸出 \overline{y} 。注意這里面我們用y表示訓練樣本里面的標記,也就是實際值;用帶上劃線的 \overline{y} 表示模型計算的出來的預測值。我們當然希望模型計算出來的 \overline{y}和y越接近越好。數(shù)學上有很多方法來表示兩者的接近程度,比如我們可以用兩者的的差的平方的1/2來表示它們的接近程度(乘1/2,是為了后面計算方便)。

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

我們把E叫做單個樣本誤差。

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

e = e_1+e_2+e_3+...+e_n

上式的e_1表示第一個樣本的誤差,e_2表示第二個樣本的誤差......。

$$ 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 $$

其中

y_i為樣本中的目標值 \\ \overline{y_i} =f(x_i) = w^Tx_i

x_i表示第i個訓練樣本的特征

y_i表示第個i樣本的標記,我們也可以用元組(x_i,y_i)表示第i個訓練樣本。

\overline{y_i}則是模型對第i個樣本的預測值,通過算法計算得出。

對于模型來說,誤差最小越好,也就是E的值越小越好。對于特定的訓練數(shù)據(jù)集來說,(x_i,y_i)的值都是已知的,所以E其實是參數(shù)w的函數(shù)。

$$

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

$$

由此可見,模型的訓練,實際上就是求取到合適的w,使E取得最小值。這在數(shù)學上稱作優(yōu)化問題,而E(w)就是我們優(yōu)化的目標,稱之為目標函數(shù)。

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

求函數(shù)的極值或者最小值,是一個很簡單的數(shù)學概念。函數(shù)y=f(x)的極值點,就是它的導數(shù)f′(x)=0的那個點。因此我們可以通過解方程f′(x)=0,求得函數(shù)的極值點(x0,y0)。

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

image.png

(https://cuijiahua.com)

首先,我們隨便選擇一個點開始,比如上圖的x0點。接下來,每次迭代修改x的為x1,x2,x3,...,經(jīng)過數(shù)次迭代后最終達到函數(shù)最小值點。

你可能要問了,為啥每次修改的值,都能往函數(shù)最小值那個方向前進呢?這里的奧秘在于,我們每次都是向函數(shù)y=f(x)的梯度相反方向來修改x。什么是梯度呢?翻開大學高數(shù)課的課本,我們會發(fā)現(xiàn)梯度是一個向量,它指向函數(shù)值上升最快的方向。顯然,梯度的反方向當然就是函數(shù)值下降最快的方向了。我們每次沿著梯度相反方向去修改x的值,當然就能走到函數(shù)的最小值附近。之所以是最小值附近而不是最小值那個點,是因為我們每次移動的步長不會那么恰到好處,有可能最后一次迭代走遠了越過了最小值那個點。步長的選擇是門手藝,如果選擇小了,那么就會迭代很多輪才能走到最小值附近;如果選擇大了,那可能就會越過最小值很遠,收斂不到一個好的點上。

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

x_{new} = x_{old} ?η?f(x)

其中,?是梯度算子,?f(x)就是指f(x)的梯度。η是步長,也稱作學習速率。

梯度下降算法可以寫成

w_{new}=w_{old}?η?E(w)

如果要求目標函數(shù)的最大值,那么我們就應該用梯度上升算法,它的參數(shù)修改規(guī)則是

w_{new}=w_{old}+η?E(w)

有了上面這個式子,我們就可以根據(jù)它來寫出訓練線性單元的代碼了。不斷優(yōu)化到最優(yōu)值附近,把W權重存起來,就是一個訓練好的模型。有新的x數(shù)據(jù),通過w就能預測比較準的y值。

4.小結

事實上,一個人工智能算法其實只有兩部分

  • 模型從輸入特征x預測輸入y的那個函數(shù)f(x)

  • 目標函數(shù) 目標函數(shù)取最小(最大)值時所對應的參數(shù)值,就是模型的參數(shù)的最優(yōu)值。很多時候我們只能獲得目標函數(shù)的局部最小(最大)值,因此也只能得到模型參數(shù)的局部最優(yōu)值

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

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

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容