1. 程式人生 > >統計學習二:1.感知機

統計學習二:1.感知機

使用 itl cas erp 如果 所有 存儲 解釋 line

全文引用自《統計學習方法》(李航)

感知機(perceptron) 最早由Rosenblatt於1957年提出,是一種較為簡單的二分類的線性分類模型,其輸入為實例的特征向量,輸出為實例的類別,類別取值為+1或-1。感知機的訓練目標是訓練出一個超平面,能夠將訓練數據進行線性劃分。因此,確定一個基於誤分類的損失函數,並利用梯度下降法等優化方法對損失函數進行極小化訓練,最終可以得出一個可用的感知機模型。感知機學習算法非常簡單且易於實現,是實現神經網絡和支持向量機模型的基礎。
本篇文章通過介紹感知機的模型、學習策略和學習算法三要素,來具體介紹感知機算法。

1.感知機模型

感知機需要學習一個線性模型,能夠對輸入的特征向量,輸出具體的分類屬性。因此其模型由輸入空間向輸出空間的映射函數應為:
\[ f(x)=sign(w\cdot x+b) \]


此模型即為感知機模型。其中,輸入空間(特征空間)為\(X\subseteq R^n\),輸出空間為\(Y=\{+1,-1\}\)。其中,輸入\(x\in X\)表示實例的特征向量,輸出\(y\in Y\)表示實例的類別。\(w\in R^n\)\(b\in R\)為感知機模型的參數,前者叫權值(weight),後者叫偏置(bias),\(w\cdot x\)表示兩者的內積,sign()是符號函數,具體為:
\[ sign(x)=\begin{cases} +1, x\geq 0\-1, x< 0\\end{cases} \]
感知機是一種線性分類模型,其假設空間是輸入的特征空間中所有的線性分類模型,即\(\{f|f(x)=w\cdot x+b\}\)

對於感知機的理解,可以通過二維平面內的線性分類例子作類比。
感知機的線性方程:
\[w\cdot x+b=0\]
對應於特征空間\(R^n\)內的一個超平面\(S\),其中,\(w\)是超平面的法向量,\(b\)是超平面的截距。此超平面將特征空間分為兩個部分,即將空間中的實例分為正負兩類。此時,稱超平\(S\)為分離超平面(separating hyperplane)。
技術分享圖片
對感知機模型的訓練,就是求取合適的\(w\)\(b\),得到最終的分離超平面,最後對新的輸入進行分類。

2.感知機的學習策略

2.1數據集的線性可分性

感知機是二維線性分類器,因此使用的前提條件是,輸入數據集的線性可分。
線性可分(linearly separable)

的定義為:
給定一個數據集
\[ T=\{(x_1,y_1),(x_2,y_2),...,(x_{_N},y_{_N})\}, \]
其中\(x_i\in X=R^n, y_i\in Y=\{+1,-1\}, i=1,2,...,N\),若存在某個超平面S:
\[ w\cdot x+b=0 \]
能夠將數據集的正負實例完全正確的分成兩個部分,則稱數據集T是線性可分的,否則稱T線性不可分。

2.2感知機的學習策略

假定訓練數據集是線性可分的,那麽感知機要學習模型參數\(w,b\)便需要確定一個學習策略,即定義一個模型的經驗損失函數,並對損失函數進行最優化(極小化)訓練。
在感知機模型中,通常選擇利用所有誤分類點到超平面S之間的距離總和來表示模型的損失。
在輸入空間\(R^n\)中,任意一點\(x_0\)到超平面S之間的距離為:
\[ \frac{1}{\|w\|}|w\cdot x_0+b| \]
其中,\(\|w\|\)\(w\)\(L_2\)範數。
對於誤分類的數據\((x_i,y_i)\)來說,
\[ -y_i(w\cdot x_i +b)>0 \]
始終成立,因為點\((x_i,y_i)\)為誤分類點,所以當\(w\cdot x+b>0\)時,\(y_i = -1\),當\(w\cdot x+b<0\)時,\(y_i = +1\),因此,誤分類點\(x_i\)到超平面S的距離為
\[ -\frac{1}{\|w\|}y_i(w\cdot x_i+b) \]
那麽對於所有的誤分類點到超平面S的距離總和為:
\[ -\frac{1}{\|w\|}\sum_{x_i\in M}y_i(w\cdot x_i+b) \]
因為距離總和始終為正,且對分類結果對錯的判斷只與符號相關,因此為方便,不考慮\(\frac{1}{\|w\|}\),則可得到感知機的損失函數。
給定的訓練數據集為:
\[ T=\{(x_1,y_1),(x_2,y_2),...,(x_{_N},y_{_N})\}, \]
其中\(x_i\in X=R^n, y_i\in Y=\{+1,-1\}, i=1,2,...,N\),則感知機\(sign(w\cdot x+b)\)學習的損失函數為:
\[ L(w,b)=-\sum_{x_i\in M}{y_i(w\cdot x_i +b)} \]
其中,M為誤分類點的集合。此函數即為感知機的經驗風險函數。
由上述可知,損失函數\(L(w,b)\)是非負的,若沒有誤分類點,則其值為0。且誤分類點越少,或誤分類點距離超平面越近,損失函數的值就越小。
對於一個特定的樣本點的損失函數,其在誤分類時,是\(w,b\)的線性函數,在正確分類時為0。因此,在給定的訓練數據集T上,損失函數是\(w,b\)的連續可導函數。
綜上,感知機的學習策略就是在特征空間的所有感知機模型中,選擇能夠使損失函數\(L(w,b)\)值最小的\(w,b\)參數的模型,即最優的模型。

3.感知機的學習算法

感知機學習的過程就是求解損失函數的最優化問題的過程,而最優化方法通常采用隨機梯度下降法

3.1感知機學習算法的原始形式

感知機學習算法是針對以下最優化問題的算法:
給定一個訓練數據集為:
\[ T=\{(x_1,y_1),(x_2,y_2),...,(x_{_N},y_{_N})\} \]
其中\(x_i\in X=R^n, y_i\in Y=\{+1,-1\}, i=1,2,...,N\),求解參數\(w,b\),其為極小化損失函數的解:
\[ \min_{w,b}L(w,b)=-\sum_{x_i\in M}{y_i(w\cdot x_i +b)} \]
其中M為誤分類點。
首先,算法選擇一個初始的超平面\(w_0,b_0\),然後利用梯度下降法不斷極小化目標函數。在極小化的過程中,我們不是一次使用M中所有的誤分類點進行梯度下降,而是隨機選擇一個誤分類點進行參數的更新。
假定誤分類點的集合M是固定的,那麽損失函數\(L(w,b)\)的梯度為:
\[ \begin{align} \nabla_wL(w,b)=-\sum_{x_i\in M}y_ix_i\\nabla_bL(w,b)=-\sum_{x_i\in M}y_i\\end{align} \]
那麽隨機選擇一個誤分類點\((x_i,y_i)\),對\(w,b\)進行更新:
\[ \begin{align} w‘=w-\eta\nabla_wL(w,b)=w+\eta y_ix_i\b‘=b-\eta\nabla_bL(w,b)=b+\eta y_i\\end{align} \]
其中\(\eta(0<\eta\leq1)\)是參數更新的步長,又稱為學習率(learning rate)。通過以上步驟,不斷地利用誤分類點進行叠代,使\(L(w,b)\)不斷減小,直到0。
綜上,感知機學習算法的原始形式為:

  • 輸入:訓練數據集\(T=\{(x_1,y_1),(x_2,y_2),...,(x_{_N},y_{_N})\}\),其中\(x_i\in X=R^n, y_i\in Y=\{+1,-1\}, i=1,2,...,N\),學習率\(\eta(0<\eta\leq1)\)
  • 輸出:\(w,b\),感知機模型\(f(x)=sign(w\cdot x+b)\)
  1. 選取初始值\(w_0,b_0\)
  2. 在訓練集中選取數據\((x_i,y_i)\)
  3. 如果\(y_i(w\cdot x_i+b)\leq0\)
    \[ \begin{align} w\leftarrow w+\eta y_ix_i\b\leftarrow b+\eta y_i\\end{align} \]
  4. 轉至2,直到訓練集中沒有誤分類點。

對算法最為直觀的解釋為:當一個實例點被誤分類時,處於超平面的錯誤的一側。此時,調整\(w,b\)的值,使超平面向誤分類點移動,以減少與誤分類點之間的距離,直至誤分類點處於超平面的另一側,此時實例點被正確分類。

3.2感知機學習算法的對偶形式

假定對於一個實例點\((x_i,y_i)\),算法通過
\[ \begin{align} w\leftarrow w+\eta y_ix_i\b\leftarrow b+\eta y_i\\end{align} \]
進行不斷的更新,總計對\(w,b\)修改了\(n_i\)次,若\(w,b\)初始值均為0,此時可以得出:
\[ \begin{align} w=\sum_{i=1}^{N}n_i\eta y_ix_i\b=\sum_{i=1}^{N}n_i\eta y_i\\end{align} \]
\(n_i\)越大時,我們可以認為該實例點對參數進行更新的次數更多,即其被誤分類的次數更多,那麽就意味著它更接近超平面,因為只有接近超平面的點,在超平面稍微移動時,才會有很大的分類差別。此時意味著這個點就越難以進行分類,它對學習結果的影響也就最大。
將上述公式帶入感知機算法的原始形式可得感知機模型為:
\[ f(x)=sign(w\cdot x+b)=sign(\sum_{j=1}^{N}n_j\eta y_jx_j\cdot x+\sum_{j=1}^{N}n_j\eta y_j) \]
此時,學習的目標不再是求出\(w,b\),而是求出\(n_i,i=1,2,\cdots,N\)
綜上,感知機學習算法的對偶形式為:

  • 輸入:訓練數據集\(T=\{(x_1,y_1),(x_2,y_2),...,(x_{_N},y_{_N})\}\),其中\(x_i\in X=R^n, y_i\in Y=\{+1,-1\}, i=1,2,...,N\),學習率\(\eta(0<\eta\leq1)\)
  • 輸出:\(w,b\),感知機模型\(f(x)=sign(w\cdot x+b)\)
  1. 選取初始值\(\forall n_i = 0\)
  2. 在訓練集中選取數據\((x_i,y_i)\)
  3. 如果\(y_i(\sum_{j=1}^{N}n_j\eta y_jx_j\cdot x+\sum_{j=1}^{N}n_j\eta y_j)\leq0\),更新\(n_i=n_i+1\)
  4. 轉至2,直到訓練集中沒有誤分類點。

由此可以看出,感知機學習算法的對偶形式與原始形式並沒有本質的區別,那其意義是什麽?
在對偶形式的訓練中,我們可以看出,訓練的實例僅僅以內積的形式出現,我們實際訓練的是\(n_i\),當訓練數據的維度很高時,使用感知機學習算法的原始形式,會需要極大的計算量,因為每一次更新都需要計算\(x_i\)\(w\)的內積。而采用對偶形式,可以提前算出實例之間的所有內積,並以矩陣的形式存儲下來,即所謂的Gram矩陣
\[ G=[x_i,x_j]_{_{N\times N}} \]
這樣,在進行訓練時,就可以直接從矩陣中取出所需值,可以極大降低算法的復雜度。

統計學習二:1.感知機