1. 程式人生 > >從0到1:神經網路實現影象識別(上)

從0到1:神經網路實現影象識別(上)

紙上得來終覺淺,絕知此事要躬行。

“神經網路”是“機器學習”的利器之一,常用演算法在TensorFlow、MXNet計算框架上,有很好的支援。

為了更好的理解與使用這件利器,我們可以不借助計算框架,從零開始,一步步構建模型,實現學習演算法,並在一個影象識別資料集上,訓練這個模型,再驗證模型預測的準確率。

首先,我們來了解一個簡潔的分類模型-感知機(perceptron)模型,感知機是1957年由Rosenblatt提出的線性二類分類模型,也是人工神經網路方法的理論基石。

By the study of systems such as the perceptron, it is hoped that those fundamental laws of organization which are common to all information handling systems, machines and men inclued,may eventually understood.(探究感知機這類體系,我們有望最終理解那些基本法則,那些將”資訊認知“,賦能於機器和人類的基本法則。)

- Frank [email protected] Aeronautical Laboratory

 

感知機模型

想像D維空間裡分佈著個線性可分的例項點 x_{i} ,當D=3時,這個空間即是一個便於理解的三維空間,其上的任意例項點x_{i},都三個特徵 x_i^{(1)} 、 x_i^{(2)} 和 x_i^{(3)} ;例項點看作是3維實數向量 \vec x=(x^{(1)} ,  x^{(2)},x^{(3)})^T ,三個特徵決定了例項點x_{i}的二分類類別 y_i= \{+1,-1 \} 。

由輸入例項點x_{i}特徵,到輸出類別 y_i 的對映,可表示為如下感知機函式: f(x) = sign(\vec w\cdot \vec x +  b)

其中“·”表示兩個向量的內積(inner product) 運算, \vec w

 稱為權值向量(weight vector), b稱為偏置(bias)

sign(自變數)是符號函式,將自變數,進一步對映到yi的輸出類別{+1,-1}上。

接下來定義D維空間裡超平面,用線性方程表示: \vec w\cdot \vec x +  b = 0

這個超平面按照輸出類別yi={+1,-1}將例項點 \vec x_i 劃分在平面兩側,

對正例項點 y_i=+1 有 \vec w\cdot \vec x_i +  b > 0

對負例項點 y_i=-1 有 \vec w\cdot \vec x_i +  b < 0

根據平面點法式方程的定義,\vec w是超平面的法向量,需要回顧的話,可以通過以下步驟反證:

1、由於平面上任意兩個不同例項點, \vec x_i 和 \vec {x_{i+n}} 都滿足 \vec w\cdot (\vec x_i-\vec x_{i+n}) = \vec w\cdot \overrightarrow  {( x_{i+n}- x_i )}=0

2、而內積的幾何意義,是一個向量在另一個向量方向上的投影長度,與另一個向量長度的乘積。

可知\vec w是與分離超平面上任意切向量正交的法向量。

通過某種學習策略找到權值向量(法向量)\vec w和偏置(截距)b這兩個引數,確定劃分正負例項點的超平面,就可以對輸入的D維空間上散佈的線性可分例項點x_{i},做二類分類預測。

 

學習策略

為了找到合適的權值向量\vec w和偏置b,首先定義連續可導的損失函式(loss function),再將損失函式極小化,以找到所有可能的分離超平面中,較優的一個;如果損失函式是凸函式,還可以用數值方法,得到全域性最優解,學習策略就成為求解最優化問題:

\displaystyle \min \limits_{f \in F} \frac{1}{N} \sum \limits_{i=1}^N L(y_i , f(x_i))

是所有能劃分輸入樣本點的感知機模型f的集合,N是(訓練)樣本容量,L是模型f的損失函式。

損失函式僅僅是一次預測的好壞度量,然而根據大數定理,當樣本容量N足夠大時,樣本點集合上,由損失函式得到的平均損失,趨近於總體分佈在分類模型上的期望損失,從而可以用數理統計方法得到理想概率模型的近似解。

損失函式有多種經典選擇,對二類分類問題,可以選擇造成模型損失的誤分類點,到分離超平面的總距離,來度量損失:

對任意一個樣本點\vec x_i,我們可以根據點到平面的距離公式,得出它到超平面 \vec w\cdot \vec x +  b = 0 的距離: \displaystyle \frac {\vert {\vec w \cdot \vec x_i + b}\vert}{ \sqrt { \sum \limits_{j=1}^{D} w_j^2}}

其中, { \sqrt { \sum \limits_{j=1}^{D} w_j^2}} 是法向量\vec w到D維空間原點的歐式距離,也稱為\vec wL2範數 ,記作||w||,

同時,根據超平面的定義,一個誤分類的例項點 x_{err} , 有:

- y_i ( w \cdot x_{err} + b ) >0

得到所有誤分類例項點到超平面的總距離為: - \displaystyle \frac {\sum  y_{err} (\vec w \cdot \vec x_{err} + b)}{ \sqrt { \sum \limits_{j=1}^{D} w_j^2}} = -  \displaystyle \frac {\sum  y_{err} (\vec w \cdot \vec x_{err} + b)}{ \Vert w \Vert}

在優化損失函式使損失極小時,函式取值的數值縮放正倍數不影響優化方法,所以損失函式可以進一步寫為:

L( \vec w , b ) =- \sum  y_{err} (\vec w \cdot \vec x_{err} + b)

直觀理解,損失越小,誤分類點距離超平面越近,直到所有樣本點都被正確分類,損失為0,可知 L( \vec w , b ) 是 \vec w , b 的連續可導函式。

\min \limits_{f \in F} \frac{1}{N} \sum \limits_{i=1}^N L(y_i , f(x_i))

求解最優化問題:

\min  \limits_{\vec w ,b} L( \vec w , b ) = - \sum  y_{err} (\vec w \cdot \vec x_{err} + b)

變成了損失函式極小時,引數 \vec w,b 的求解:

\min  \limits_{\vec w ,b} L( \vec w , b ) = - \sum  y_{err} (\vec w \cdot \vec x_{err} + b)

 

學習演算法

一種求解演算法是 隨機梯度下降(stochastic gradient descent),先為\vec w,b 設定初始值如 0 ,然後用梯度下降法,讓引數不斷更新梯度 \nabla \vec w 和 \nabla b ,來極小化損失函式。 \displaystyle \nabla _w Loss = \frac { \partial [- \sum  y_{err} ( \vec w \cdot \vec x_{err} + b)]}{ \partial \vec  w} = - \sum y_{err}x_{err}

同樣:

\displaystyle \nabla _b Loss = \frac { \partial [- \sum  y_{err} ( \vec w \cdot \vec x_{err} + b)]}{ \partial b } = - \sum y_{err}

為便於靈活調整每次梯度下降的尺度,引入引數“步長” 或“學習率” η,根據隨機選出的誤分類點,來更新引數:

w = w + \eta  \space x_{err} \space y_{err}

b = b + \eta  \space  y_{err}

可以證明,這個演算法線上性可分資料集上是收斂的;通過不斷隨機選取誤分類點,更新和 , 通過有限次迭代,能找到一個可以把線性可分正負例項點劃分在兩側的分離超平面。

至此,我們看到感知機解決了D維空間內,N個線性可分例項點的二分類問題;那麼這個方法是否能處理多類分類問題, 比如之前介紹的,MNIST資料集上的10類分類問題呢?

 

答案是肯定的。

 

下一次,我們把感知機模型改進推廣到分類類別 K>2 的情況,並根據改進後策略和學習演算法,在MNIST手寫數字識別資料集上,訓練模型引數,初步得到一個識別率尚可(>90%)的結果。

(上篇完)

 

參考

[1] 李航 .統計學習方法. 北京:清華大學出版社,2012

[2] Rosenblatt, F. The perceptron: A probabilistic model for information storage and organization in the brain. Psychological Review.1958,65(6), 386-408