HanLP — 感知機(Perceptron)

感知機(Perceptron)是一個二類分類的線性分類模型,屬於監督式學習算法。最終目的: 將不同的樣本分類
感知機飲食了多個權重參數,輸入的特徵向量先是和對應的權重相乘,再加得到的積相加,然後將加權後的特徵值送入激活函數,最後得到輸出
image
激活函數的前面部分,是線性方程 wx+b

線性方程輸出的是連續的值,但對於分類來說,最終需要的類別信息是離散的值,這時候,激活函數就派上用場了,激活函數的存在,是將連續迴歸值,轉變成1 -1 這樣的離散值,從而實現類別劃分

激活函數

激活函數有很多種,在深度學習中,有着非常重要的作用,在感知機中使用的激活函數是 sin(),
image

假如輸入到模型中的是一個二維的特徵向量(x1,x2),則整個過程可以表示爲如下:
image
輸入的特徵向量(x1,x2)先分別和權重(w1,w2)相乘,再將兩者相加,最後加上偏置 b ,最終得到的值,和閾值 0 做比較,如果值大於0 則輸出1,否則則輸出 -1

這樣一來,就會劃分到了線性方程 wx+b=0 兩側的樣本,就分成了正、負兩類,用感知機進行二分類,需要先找到能夠將正、負樣本完全區分開的決策函數 wx+b=0,如下圖
image

因此就需要確定一個學習策略,也就是定義一個損失函數,再通過訓練樣本,通過減小損失值,不斷迭代模型參數,最終找到最優參數 w 和 b ,
損失函數的作用: 用來衡量模型的輸出結果,和真實結果之間的偏差,然後根據偏差,修正模型,

迴歸任務
image
在迴歸任務中,標籤和模型輸出都是連續的數值,很容易就能衡量出二者之間的差異。

可對於感知機的分類問題來說,我們又該如何衡量差異呢?一個直觀的想法,就是去統計誤分類樣本的個數作爲損失值,誤分類的樣本個數越多,說明這個該樣本空間下的表現越差,但是這樣的函數是非連續的,對 w 和 b 不可導,所以我們無法使用這樣的損失函數來更新 w 和 b.
爲了得到連續可導的損失函數,感知機選擇用誤分類樣本到決策函數的距離,來衡量偏差
image
這裏是單個樣本點到決策函數的距離公式
\(\frac {1}{||w||} |w*x_0+b|\)

其中 \(x_0\) 表示樣本點的輸入 \(||w||\)等於權重向量 \(w\) 的模長 \(||w|| = \sqrt{(w_1^2 + w_2^2 + ... + w_n^2)}\)
對於感知機分類問題來說,可以用 \(-y_0(w*x_0+b)\) 來代替 \(|w*x_0+b|\)
\(y_0\) 表示樣本點 \(x_0\) 對應的標籤值。

爲什麼可以這樣代替呢?
image

假設有兩個誤分類樣本
樣本1 \((x_1,y_1)\) 樣本2 $(x_2,y_2) \(, 樣本1 的真實類別爲正樣本,即:\)y_1 = 1$,但是在模型中,樣本1 卻被誤分類爲了負樣本,也就是計算得到的 \(wx1+b \leq 0\),那麼 \(-y_1(w*x_1+b)=-1(w*x_1+b)\) 最終的結果變成了正值,大小等於 \(|w*x_1+b|\)
樣本2 的真實類別爲負樣本,\(y_2=-1\) 即在模型中被誤分類爲了正樣本。也就是計算得到的 \(w*x_2+b > 0\),那麼 \(-y_2(w*x_2+b)\) 就等於 \(1(w*x_2+b)\) ,結果仍爲正值,大小等於 \(|w*x_2+b|\)

因此:所有誤分類的樣本到決策函數的距離和就可以表示爲如下
image

感知機所關心的,是怎麼能將兩類樣本正確地區分開,對樣本點到決策函數距離的大小並不關心,如下圖,紅線和綠線都能將兩類樣本正確地區分開,所以對感知機來說,這兩條線的分類效果是一樣的
image
因此,可以把\(\frac {1}{||w||}\) 去掉
image
最終,感知機的函數就是 $$ L(w,b) = - \sum_{x_i{\in}M}y_i(w*x_i+b) $$
image

感知機適用於樣本特徵簡單,且線性可分的二分類問題,因爲運算簡單,所以計算效率高。
不過在複雜的場景中,感知機往往不能勝任,所以我們在感知機的基礎上,又誕生了多層感知機和神經網絡

https://www.bilibili.com/video/BV19h4y1w7WL

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章