這系列文章不是為了去研究那些數(shù)學(xué)公式怎么推導(dǎo),而是為了能將機器學(xué)習(xí)的思想快速用代碼實現(xiàn)。最主要是梳理一下自己的想法。

感知機

感知機,就是接受每個感知元(神經(jīng)元)傳輸過來的數(shù)據(jù),當(dāng)數(shù)據(jù)到達某個閥值的時候就會產(chǎn)生對應(yīng)的行為
如下圖,對應(yīng)每個感知元有一個對應(yīng)的權(quán)重,當(dāng)數(shù)據(jù)到達閥值u的時候就會執(zhí)行對應(yīng)的行為。 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

u = w0 + w1x1 + w2x2 +......wnxn

對應(yīng)到垃圾郵件處理上,當(dāng)u > 0時就是正常郵件。相反則為垃圾郵件 
對于這樣的模型就可以稱之為簡單的感知機。也就是一個神經(jīng)網(wǎng)絡(luò)的基本單位。

權(quán)重向量的更新 
上面所提到的w1,w2等就是就是對應(yīng)每個是否是垃圾郵件的衡量標(biāo)準(zhǔn),而x1,x2...就是郵件中被監(jiān)測的詞組的數(shù)目
比如x1和x2相同的時候,w1和w2的絕對值較大的一方對結(jié)果,也就是u的影響更大。所以,我們也把w1,w2....稱之為x1,x2..的權(quán)重值
向量大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)即為權(quán)重向量

根據(jù)訓(xùn)練數(shù)據(jù)中的期待結(jié)果和預(yù)測結(jié)果不斷的修改權(quán)重即可。那么具體到項目中應(yīng)該怎么修改w呢

1. 隨機為w1,w2,...wn設(shè)置一個值
2. 不斷重復(fù)以下步驟 
  * 輸入訓(xùn)練數(shù)據(jù),如果結(jié)果不正確就進行修改
  * 當(dāng)所有的訓(xùn)練數(shù)據(jù)的結(jié)果都正確時就結(jié)束運算
思想很簡單,那么[不正確就修改]這一句話,在簡單的感知機中能夠很簡單的修改,那么在深度神經(jīng)網(wǎng)絡(luò)中的時候該怎么計算呢

梯度下降法
首先介紹一個定義[誤差函數(shù)(即損失函數(shù))]E,即輸出結(jié)果和期待結(jié)果的差值
為了方便以后的計算這個定義又可以改為變化根據(jù)向量w的變化誤差函數(shù)是否在朝著最小變化的方向遞進
w和誤差函數(shù)的關(guān)系如下圖所示 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
曲線最下方的w的值即為一次計算所期望的值,如果仔細分析我們可以知道這種計算就是微分計算
而這種變化趨勢就是微分計算的值 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
那么wi的變化過程即為 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
簡單的理解就是當(dāng)變化趨勢為負時wi朝正直方向移動,反之亦然.但是當(dāng)變化趨勢很大的時候wi的變化就會很大,
而變化趨勢很小的時候wi的變化就又會很小。這樣的計算會讓整個過程很難收斂,因此我們會設(shè)置一個比較小的正數(shù)參數(shù)
來參與計算。 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

在上面的表達之中p就是學(xué)習(xí)速率。一般會設(shè)置一個比1小的正數(shù)。但是如果太小的話同樣會讓計算量大大增加。
這種通過不斷的微分修正權(quán)重的方法就是_梯度下降法_。如果想要知道更多關(guān)于梯度下降的細節(jié)可以參考我之前的[一篇文章]

然后就是誤差函數(shù)的具體表達形式了。

簡單感知機的誤差函數(shù)
對于一個感知機,我們使用以下的公式來表達他的誤差函數(shù)

E = max(0,-twx)

max(a,b)就是選取a,b中較大值的運算函數(shù)。t就是正確與否的標(biāo)志 
t = 1(正常郵件),t=-1(垃圾郵件) 
這里有個細節(jié)就是垃圾郵件的判斷是-1而不是0. 
那么為什么要誤差函數(shù)要采用max(0,-twx)形式呢。

考慮以下x1,x2的二次元方程。 
對于算式wx(w0 + w1x1 + w2x2)的值。在直線wx=0上面的所有值毫無疑問就是0,而在直線上方的就是正值
在直線下方的就是負值。當(dāng)t=1的所有點都在正值區(qū)域,而-1的點都在負值區(qū)域的時候訓(xùn)練就結(jié)束。
類似于下圖。 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

這種就是學(xué)習(xí)還沒有結(jié)束的情況,B和D的區(qū)分暫時處于一個錯誤的區(qū)域。


可以著重看一下A的情況 :
A是一個垃圾郵件,而現(xiàn)在的分類情況也是正確的,那么wx>0。也就是t=1。

所以我們可以看到-twx = -wx<0。因此E = max(0,-twx) = 0,誤差函數(shù)的結(jié)果為0。

因此對于誤差函數(shù),當(dāng)點x被正確分類成功的時候可以得到誤差值0,相反則是|wx|。

那么|wx|到底代表著什么呢?簡單的理解就是這個點和直線wx=0的距離。沒記錯的話這個距離計算應(yīng)該是高中知識。

 

感知機算法的實現(xiàn)
根據(jù)上文介紹的權(quán)重的更新的函數(shù) 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
對于誤差函數(shù)E = max(0,-twx),當(dāng)誤差不為0 的時候就返回-twx。我們來簡單推算以下。 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
因此可以得到更新后的運算公式: 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
權(quán)重整體來表達的時候如下: 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

根據(jù)以上的推論我們可以得到一個感知機的偽代碼如下:

* 為w1,w2....wn設(shè)置隨機值
* 輸入每一個訓(xùn)練數(shù)據(jù)
  * 輸入的訓(xùn)練數(shù)據(jù)所得到的結(jié)果與期望值是否一致

    * 一致,進行下一組運算
    * 不一致,按照大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)來進行運算
* 在上一組循環(huán)運算中w的值是否發(fā)生了改變
  * 被改變了,那么再重復(fù)一此上述的循環(huán)
  * 沒有改變(所有的值都是期望值),訓(xùn)練結(jié)束

這個偽代碼的我用python實現(xiàn)了。如果需要可以參考[這里]

閥值
_提示,這節(jié)對于這篇文章沒有太多幫助,主要為了下一篇文章,多層感知機做鋪墊_
對于每一個感知機都是一個激活閥值,當(dāng)參數(shù)到達了該閥值的時候被能執(zhí)行某個行為。那么如何確定這個閥值呢?
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
決定輸出值的閥值又被稱為激活參數(shù)。簡單來說激活參數(shù)的表達式如下f(u)=u。
類似于垃圾郵件分類我們可以有如下表達式: 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
用圖表示的時候如下: 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)
換成我們上面使用的-1和1 的形式 
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團訓(xùn)

 

以上,如果有疑問歡迎討論。

分類: 機器學(xué)習(xí)