前言
人工神經網路(Artificial neural networks,ANNs)被廣泛認為誕生于 20 世紀四五十年代,其核心理論可以追溯到 19 世紀初 Adrien-Marie Legendre 發明的最小二乘法,而在今天,經過了半個世紀互聯網和計算機技術的迅猛發展,這片耕耘良久的沃土重新掀起了機器學習的研究熱潮,
本文主要介紹感知器演算法、多層神經網路及其后向傳播演算法,推導程序主要參考自胡浩基教授的機器學習公開課程,
文章面向有一定基礎的讀者,至少要對二分類問題和線性分類有一定了解,如果是零基礎的讀者,建議先閱讀上一篇關于支持向量機的文章,
初識人工神經網路
神經元是神經系統功能的基本單位,大量的神經元構成了我們的大腦,電化學信號在這些神經元之間傳遞,賦予了我們思考的能力,人類為了在計算機上重現生物神經元的功能,對其進行數學建模,然后這些 人工神經元(Artificial neuron)被組合起來,形成人工神經網路,用以處理復雜問題,
和上一篇文章介紹的支持向量機一樣,我們將大量的訓練樣本輸入到人工神經網路中,每個人工神經元中的權重值將在訓練程序中被不斷修正,最終使人工神經網路具備對樣本的判別能力,這就像是人類的學習程序,先根據自己的判斷得出答案,再參考正確答案,對比差異,調整解題思路,經過大量訓練后,解題能力將得到提升,
人工神經元
下圖展示的是生物多極神經元的結構,圖中可以看到,多個信號從樹突(Dendrite)輸入,在胞體(Soma)進行匯總處理,經由軸突(Axon),最后在軸突末梢輸出信號,
1943年,Warren McCulloch 和 Walter Pitts 基于生物神經元的生理特征,建立了單個生物神經元的數學模型,如下圖:
多個信號 $x$ 乘以其相應的權重 $\omega$ 之后進行求和,最后傳入激活函式 $\varphi$ 得到輸出結果,激活函式是一個非線性函式,這是模擬了胞體處理電化學信號的程序,也即當胞體的電勢達到一定閾值時,才會向軸突傳遞信號脈沖,這個程序記作:
$y_{k}=\varphi\left(\sum \limits ^{m}_{i=0} \omega_{ki}x_{i}+b_{k}\right)$
事實上,這個數學模型并沒有太多生物方面的依據,是否準確描述了生物神經元的作業程序,我們無從知曉,
但從數學角度來分析,非線性的特點讓激活函式能更好地擬合訓練樣本,在上一篇文章介紹 SVM 處理非線性樣本時,我們深刻地認識到線性函式的局限性,ANN 雖然不如 SVM 那么優雅,但非線性函式的優勢讓它可以應對更復雜的場景,
人工神經網路的結構
人工神經網路(接下來簡稱為 ANN)由多個人工神經元組成,下圖是一個簡單的三層 ANN 示例:
ANN 的結構可以劃分為輸入層、隱藏層和輸出層,根據不同的任務場景,需要適當調整隱藏層的層數以及各層的神經元個數,如上圖展示的就是一個 3 層 ANN,輸入層一般不計入層數,
ANN 的訓練程序與 SVM 異曲同工,區別是 SVM 每次需要輸入所有樣本,而 ANN 則是將訓練樣本逐一輸入,通過優化調整隱藏層中的 $\omega$ 和 $b$,使輸出結果和訓練樣本標簽之間的差異不斷縮小,
如果你了解過 SVM 的話,應該知道 SVM 的作業原理是通過線性函式來區分兩種樣本,那 ANN 又是如何作業的呢?
一個應用例子
這是吳恩達在公開課上舉的一個例子,它非常通俗易懂地展現了 ANN 的作業原理,
網購衣服時會發現,只要輸入身高和體重,就可以得到推薦尺碼,假設某服裝廠即將推出一款新品,現需知道 M 碼適合哪種身高體重的消費者,在經過試驗性地投放和調研后,得到了一批 M 碼購買者的資料,繪制到一個二維特征空間中如下圖:
我們仍然使用上一小節的三層 ANN 來解決廠家的需求,為了幫助理解,我們暫時忽略激活函式 $\varphi$,假設該 ANN 經過這些樣本的訓練,得到模型如下圖:
可以看到,上圖三條直線兩兩相交,將 M 碼的樣本包圍在一個三角形區域內,顯然,這三條直線分別代表著該 ANN 第一層中三個神經元各自的決策邊界,決策邊界是不同樣本之間的分界線,如果顧客輸入的身高體重落在三角形區域內,那么該 ANN 模型將會認為這個顧客適合購買 M 碼,反之亦然,同時也可以進一步推出,如果我們增加神經元的數量,或者非線性激活函式,最終將圍出一個更加精細、更加擬合訓練樣本的區域,
在這個例子中,ANN 的作業程序可以總結為:顧客輸入身高體重后,第一層的三個神經元各自判斷資料落在自身決策邊界的哪一側,然后三個判斷結果傳遞給第二層,第二層的神經元再進一步判斷資料是否落在三角區域內,如果在三角區域內則推薦顧客購買 M 碼,否則輸出不推薦,
感知機
在正式介紹多層神經網路前,我們先來了解一下 感知機(Perceptron),
感知機由 Frank Rosenblatt 在 1957 年提出,這是最早嘗試用線性函式解決二分類問題的演算法,后來出現的 SVM 可以看作是它的加強版,
感知機使用的線性函式如下:
$f\left(X\right)=\omega^{T}X+b$
$X$ 是輸入的特征向量;$\omega$ 是權重,它的維度和 $X$ 相同;$b$ 是偏置,和 SVM 一樣,通常定義 $f\left(X\right)=0$ 作為決策邊界(暫且認為是一條直線),被這條直線分割開的兩側,分別代表不同的類別,
對于二分類問題,樣本標簽還是設為 $y_{i} \in \left\{+1,-1\right\}$,$N$ 個訓練樣本集合記作:
$\left\{ \left( X_{i},y_{i}\right)\right\} _{i=1}^{N}$
訓練目標是使所有訓練樣本被正確分類,可以用不等式表示:
$y_{i}f\left(X_{i}\right)\ge 0\ \left(i=1,2,\cdots,N\right)$
訓練演算法
感知機的訓練演算法被稱為 感知機學習演算法(Perceptron Learning Algorithm,PLA),
訓練程序很簡單,其實就是不斷調整這條直線的斜率(調整 $\omega$)以及對直線進行平移(調整 $b$),直到直線準確分隔開兩種訓練樣本,具體程序如下:
PLA 與 SVM 最大的區別是,PLA 每輪迭代只輸入一個 $X_{i}$,而 SVM 每輪迭代所有 $X_{i}$ 都會參與運算,
收斂證明
在證明演算法收斂前,為了方便推導,我們重新對 $\omega$ 和 $X$ 進行定義,改用增廣向量的形式來表示:
$\vec{X}_{i}=\begin{bmatrix}y_{i}X_{i}\\ y_{i}\end{bmatrix}$
$\vec{\omega}=\begin{bmatrix}\omega \\ b \end{bmatrix}$
訓練程序的書寫方式可以簡化為:
在上一篇文章推導 SVM 時就已經提到,對線性方程進行縮放并不會改變它的性質:
$\vec{\omega}^{T}\vec{X}_{i} = 0$
$\Updownarrow$
$\alpha\vec{\omega}^{T}\vec{X}_{i} = 0$
當然,這里的 $\alpha$ 要取大于零的實數($\alpha \in R^{+}$),如果小于零會違背前面定義的優化目標 $\vec{\omega}^{T}\vec{X}_{i} \ge 0$,
了解了以上前提后,接下來開始證明收斂,當然,以下推導的前提是訓練樣本線性可分,
假設存在 $\vec{\omega}_{opt}$,使 $\vec{\omega}_{opt}^{T}\vec{X}_{i} \ge 0\ \left(i=1,2,\cdots,N\right)$ 成立,那么 $\vec{\omega}_{opt}$ 同樣可以進行 $\alpha$ 倍的縮放:
$\vec{\omega}_{opt}^{T}\vec{X}_{i} = 0$
$\Updownarrow$
$\alpha\vec{\omega}_{opt}^{T}\vec{X}_{i} = 0$
假設在第 $k$ 輪迭代,仍然有 $X_{i}$ 使 $\vec{\omega}_{k}^{T}\vec{X}_{i} < 0$,又根據前面訓練程序可知,兩次相鄰迭代存在如下關系:
可以進一步推出,當 $\alpha$ 足夠大時,存在:
$\left\|\vec{X}_{i}\right\|^{2}+2\vec{\omega}_{k}^{T}\vec{X}_{i}-2\alpha\vec{\omega}_{opt}\vec{X}_{i}<0$
于是可以得到:
$\left \| \vec{\omega}_{k+1}-\alpha\vec{\omega}_{opt} \right \|^{2}<\left \| \vec{\omega}_{k}-\alpha\vec{\omega}_{opt} \right \|^{2}$
上面的不等式可以看出,隨著迭代次數的增加,$\omega_{k}$ 逐漸趨近于 $\alpha\omega_{opt}$,但這不足以證明 $\omega_{k}$ 收斂,因為在逼近 $\alpha\omega_{opt}$ 的程序中,收斂速度也可能逐漸變小直到忽略不計,所以接下來我們要做的是去定量分析其收斂速度,
設:
$\beta=\max \limits_{i=1,2,\cdots,N} \left\{\|\vec{X}_{i}\|\right\}$
$\gamma=\min \limits_{i=1,2,\cdots,N} \left\{\vec{\omega}_{opt}^{T}\vec{X}_{i}\right\}$
取:
$\alpha=\frac{\beta^{2}+1}{2\gamma}$
可得:
則:
$\left \| \vec{\omega}_{k+1}-\alpha\vec{\omega}_{opt} \right \|^{2}<\left \| \vec{\omega}_{k}-\alpha\vec{\omega}_{opt} \right \|^{2} - 1$
設 $D=\left \| \vec{\omega}_{0}-\alpha\vec{\omega}_{opt} \right \|$,根據上面的不等式可知,當 $\alpha=\frac{\beta^{2}+1}{2\gamma}$ 時,最多經過 $D^{2}$ 輪迭代,$\vec{\omega}$ 收斂至 $\alpha\vec{\omega}_{opt}$,
另一種收斂證明
這個證明思路參考自康奈爾大學的公開課程,原文見鏈接,
與上一種證明方法取指定的 $\alpha$ 值類似,首先是取:
$\left \| \vec{\omega}_{opt} \right \|=1$
$0<\left \| \vec{X}_{i} \right \| \le 1$
$\vec{\omega}_{opt}$ 和 $\vec{X}_{i}$ 是向量,所以他們的模可以隨意取值,
然后,我們在所有樣本向量中,選一個到決策邊界距離最小的樣本,該樣本向量到決策邊界的距離使用 $\gamma$ 來表示:
接下來分別分析 $\vec{\omega}^{T}\vec{\omega}_{opt}$、$\vec{\omega}^{T}\vec{\omega}$ 與 $\gamma$ 的關系,
先來分析 $\vec{\omega}^{T}\vec{\omega}_{opt}$:
顯然,在經過 $M$ 輪迭代后,有:
$\vec{\omega}_{M+1}^{T}\vec{\omega}_{opt} \ge M\gamma$
接著來分析 $\vec{\omega}^{T}\vec{\omega}$:
同理,在經過 $M$ 輪迭代后,有:
$\vec{\omega}_{M+1}^{T}\vec{\omega}_{M+1} \le M$
再來看一下 $\vec{\omega}^{T}\vec{\omega}_{opt}$ 和 $\vec{\omega}^{T}\vec{\omega}$ 之間的關系:
$\vec{\omega}_{M+1}^{T}\vec{\omega}_{opt}=\|\vec{\omega}_{M+1}\|\cos \theta\le\|\vec{\omega}_{M+1}\|=\sqrt{\vec{\omega}_{M+1}^{T}\vec{\omega}_{M+1}}$
這里的 $\theta$ 是 $\vec{\omega}_{M+1}$ 和 $\vec{\omega}_{opt}$ 之間的角度,
聯立以上所有條件可以得到結論:
由上面不等式可知,當 $\left \| \vec{\omega}_{opt} \right \|=1$ 且 $0<\left \| \vec{X}_{i} \right \| \le 1$ 時,最多經過 $\frac{1}{\gamma^{2}}$ 輪迭代,$\vec{\omega}$ 收斂至 $\vec{\omega}_{opt}$,
多層感知機
顧名思義,多層感知機(Multi-Layer Perception,MLP)由多層神經元的疊加組成,上一層神經元的輸出做為輸入傳遞給下一層神經元,MLP 一般是指擁有至少一個隱藏層的全連接 ANN 模型,且各層使用的激活函式都相同,相較于單層感知機,MLP 必須加入非線性激活函式,否則增加再多的層數也和單層的效果是相同的,
前面我們淺析了 ANN 的結構和作業原理,相信各位讀者已經有了基本的概念,MLP 在嚴格定義上屬于 ANN 的一種,但在很多語境下都使用 ANN 指代 MLP,下面借助一個簡單的 3 層 MLP 來理解其作業原理:
最終目標是使 MLP 模型盡可能地擬合訓練樣本,可以量化為下面的目標函式:
最小化:$E=\frac{1}{2}\left\|y-Y\right\|^{2}$
$y$ 代表輸出層輸出的向量;$Y$ 代表訓練樣本的標簽,顯然,MLP 的輸出 $y$ 和樣本標簽 $Y$ 越接近越好,我們將兩者相減,最終要使 $E$ 取得最小值,科學家們構造了各種各樣的目標函式,但為減少計算難度,一般都是易于求導的函式,
訓練演算法
接下來介紹的訓練演算法,將解答 ANN 如何調整 $\omega$ 和 $b$ 來使 $E$ 的值達到最小,
反向傳播演算法
我們常用 反向傳播演算法(Backpropagation,BP)訓練 ANN,它也是一種啟發式演算法,顧名思義,該演算法從輸出層開始,將計算結果一層層地由后往前反向傳遞,
不同于 PLA 演算法簡單粗暴地進行加減操作,BP 演算法的本質是 梯度下降法(Gradient Descent),梯度下降法用于求函式的極值點,例如求某函式 $f\left(\omega\right)$ 的極小值點,首先是賦予 $\omega$ 一個初始值,然后通過下面的計算得到新的 $\omega$,重復此程序,直到 $\omega$ 不再變化或變化極小為止,此時的 $\omega$ 即可認為是極小值點,迭代程序記作:
$\omega_{k+1}=\omega_{k}-\left.\eta\ \frac{\mathrm{d} f\left(\omega\right)}{\mathrm{d} \omega}\right|_{\omega_{k}}$
這里的 $\eta$ 是一個大于零的自定義值,稱為 學習率(Learning Rate),代表梯度下降的步長,其取值將影響收斂的效率,它可以是一個固定值,但如果取值太大可能會導致無法收斂,為避免這種情況發生,可以隨著迭代次數的增加不斷減小 $\eta$ 的值,
接著來分析梯度下降的收斂原理,
我們知道,從微分角度分析一個函式可以得到如下關系:
將 $\omega_{k+1}$ 代入上面的公式可得:
可以看到,隨著迭代次數的增加,$f\left(\cdot\right)$ 的值將越來越小,如果函式連續可導且存在極值點,理論上經過有限次迭代后可求得極值點,
讓我們重新回歸本節的重點,BP 演算法,
確切來說,BP 演算法分為兩個階段,初始化 $\omega$ 和 $b$ 后,第一階段是前向傳遞,也即計算出最后的輸出值,第二階段才是反向傳遞,從輸出層開始往反方向計算調整各層的權重 $\omega$ 和偏置 $b$,這兩個階段重復多次后,$\omega$ 和 $b$ 將收斂至一個合適的區間,
第二階段使用梯度下降法對 MLP 各個節點進行求導時,在鏈式法則的作用下,我們不得不從后往前計算各層的節點,并且計算產生的值在層與層之間傳遞,所以才被稱為“反向傳播”或“后向傳播”,
下面拆解 MLP 網路的一部分來做分析,以達到見微知著的效果:
現在只關注圖中深色的節點,
結合上圖,BP 演算法使用梯度下降對每個 $b$ 和 $\omega$ 進行更新的程序,可以記作:
根據鏈式法則,分別對 $b^{(m)}_{i}$ 和 $\omega^{(m)}_{ij}$ 進行求偏導:
令:
綜上所述,可得:
最終,BP 演算法每輪迭代的每個分量更新程序可以記作:
可以看到,求任意一個權重時,都需要依賴后一層的計算結果,這就導致了 BP 演算法需要從輸出層開始,由后往前進行計算,
前向前向傳播演算法
深度學習領域的著名學者 Geoffrey Hinton,于 2022 年提出了一種新的神經網路學習演算法,前向前向傳播演算法(Forward-Forward Algorithm),詳細見此論文,相關實作參考該git專案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555465.html
標籤:其他
上一篇:不要錯過!限時免費分享最新AIGC資料報告(精選版)!
下一篇:返回列表
