【深度學習之美12】感知機是如何工作的?

【深度學習之美12】感知機是如何工作的?

來自專欄深度學習之美5 人贊了文章

7.5 感知機的負反饋糾偏機制

中國有句古話:

「知錯能改,善莫大焉。」

說的就是,犯了錯誤而能改正,沒有比這更好的事了。

放到機器學習領域,這句話顯然屬於「監督學習」的範疇。因為「知錯」,就表明事先已有了事物的評判標準,如果你的行為不符合(或說偏離)這些標準,那麼就要根據「偏離的程度」,來「改善」自己的行為。

下面,我們就根據這個思想來制訂感知機的學習規則。

從前面的討論中,我們已經知道,感知機學習屬於「有監督學習」(即分類演算法)。感知機有明確的結果導向性。

這有點類似於「不管白貓黑貓,抓住老鼠就是好貓」的說法,不管是什麼樣的學習規則,能達到良好的分類目的,就是好的學習規則。

我們知道,對象本身的特徵值,一旦訓練樣本確定下來就不會變化,可視為常數

因此,所謂的神經網路的學習規則,就是調整神經元之間的連接權值和神經元內部閾值的規則(這個結論對於深度學習而言,依然是適用的)

假設我們的規則是這樣的:

egin{array}{l} {w_{new}} leftarrow {w_{old}} + varepsilon \ {	heta _{new}} leftarrow {	heta _{old}} + varepsilon \ end{array} (7-2)

其中,為期望輸出,是實際輸出。也就是說,是二者的「落差」。在後面,讀者可以看到,這個「落差」就是整個網路中權值和閾值的調整動力。很顯然,如果為0,即沒有誤差可言,那麼新、舊權值和閾值都是一樣的,網路就穩定可用了!

下面,我們就用上面的學習規則來模擬感知機的學習過程。假設w1和w2的初始值隨機分配為1和-1(注意,已經不再是前面提到的1和1了!),閾值依然為0(事實上為其他初值也是可行的,這裡僅為說明問題而做了簡化),那麼我們遵循如下步驟,即可完成判定西瓜的學習。

(1)計算判定西瓜的輸出值f

egin{array}{l} f = {x_1}{w_1} + {x_2}{w_2} - 	heta \ {
m{ }} = 1 	imes 1 + 1 	imes ( - 1) - 0 \ {
m{ = }}0 \ end{array}

將這個輸出值帶入如下圖(b)所示的階躍函數中,可得實際輸出y』=f=0。

(2)顯然,針對西瓜,我們期望輸出的正確判定是:y=1,而現在實際輸出的值=0,也就是說,實際輸出有誤。這個時候,就需要糾偏。而糾偏,就需要利用公式(7-2)所示的學習規則。於是,我們需要計算出誤差。

(3)計算誤差:

egin{array}{l} varepsilon = y - y \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} = 1 - 0 \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {
m{ = 1}} \ end{array}

現在,把的值帶入公式(7-2)所示的規則中,更新網路的權值和閾值,即:

egin{array}{l} {w_{1new}} = {w_{1old}} + varepsilon \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} = {
m{1 + 1}} \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} = 2 \ end{array}

egin{array}{l} {w_{2new}} = {w_{2old}} + varepsilon \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {
m{ }} = ( - {
m{1) + 1}} \ {
m{ }}{kern 1pt} {kern 1pt} {
m{ }} = 0 \ {	heta _{new}} = {	heta _{old}} + varepsilon \ {
m{ = 0 + 1}} \ {
m{ = 1}} \ end{array}

那麼,在新一輪的網路參數(即權值、閾值)重新學習後,我們再次輸入西瓜的屬性值,測試一下,看看它能否正確判定:

egin{array}{l} f = {x_1}{w_1} + {x_2}{w_2} - 	heta \ {
m{ }}{kern 1pt} {kern 1pt} {
m{ }} = 1 	imes 2 + 1 	imes 0 - 1 \ {kern 1pt} {kern 1pt} {
m{ = }}1 \ end{array}

再經過激活函數(階躍函數)處理後,這次很好,實際輸出結果f=y』=1,判定正確!

我們知道,一個對象的類別判定正確,不能算好。於是,在判定西瓜正確後,我們還要嘗試在這樣的網路參數下,看看香蕉的判定是否也是正確的:

egin{array}{l} f = {x_1}{w_1} + {x_2}{w_2} - 	heta \ {
m{ }}{kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} {kern 1pt} = ( - 1) 	imes 2 + ( - 1) 	imes 0 - 1 \ {
m{ }}{kern 1pt} {kern 1pt} {
m{ = }} - 3 \ end{array}

類似的,經過激活函數(階躍函數)處理後,實際輸出結果y』=f=0,判定也正確!誤差為0。

在這個示例里,僅僅經過一輪「試錯法」,我們就搞定了參數的訓練,但你可別高興太早,誰叫這是一個「Hello World」版本的神經網路呢!

事實上,在有監督的學習規則中,我們需要根據輸出與期望值的「落差」,經過多輪重試,反覆調整神經網路的權值,直至這個「落差」收斂到能夠忍受的範圍之內,訓練才告結束。

7.6 感知機的幾何意義

下面我們來分析一下感知機的幾何意義。由感知機的功能函數定義可知,它是由兩個函數複合而成:內部為神經元的輸出彙集函數,外部為激活函數,將彙集函數的輸出,作為激活函數的輸入。如果識別對象xn個特徵,內部函數就是如下公式所示的輸入彙集。

圖7-8 感知機的超平面

若令其等於零,即,該方程可視為一個在n維空間的超平面P。那麼感知機以向量的模式寫出來就是:(如圖7-6所示),這裡,「」表示輸入向量x和權值向量w的內積。

這樣一來的話,對於超平面一側的實例,它表示點落在超平面的正半空間,此時激活函數,即感知機輸出為1(判定為正類),而對於超平面的另外一側實例,表示點落在超平面的負半空間,此時激活函數,即感知機輸出為0(判定為負類)。

於是,感知機可看做一個由超平面劃分的空間位置的識別器。

當特徵n為兩三個維度時,人們尚可利用它的幾何空間來直觀解釋這個分類器,但當n更大時,人們很難再用它的幾何意義來研究神經網路。

本文部分節選自《深度學習之美:AI時代的數據處理與最佳實踐》(張玉宏著,電子工業出版社,2018年7月出版)。更多理論推導及實戰環節,請參閱該書。

(連載待續)

推薦閱讀:

TAG:深度學習DeepLearning | TensorFlow | 神經網路 |