神經網絡與機器學習
第3章感知機與學習規則
§3.1 感知機的學習規則
上一節中,區分橘子和蘋果,是我們人為地划分一個決策邊界,即一個平面,感知器的權矩陣和偏置向量也是事先給定,這非常地不"智能"。我們能否找到一種根據輸入數據自動調整權矩陣和偏置向量的學習算法?如何設定學習規則?這樣的學習規則肯定能找到一個決策邊界嗎?
感知機給我們提供了一個數學上可解析的,非常易於人們理解的一類重要神經網絡模型。感知機和現在發展和應用的很多網絡相比那是非常簡單,功能有限,但是在歷史發展中卻不容忽視。
F. Rosenblatt , "The perceptron: A probabilistic model for information storage and organization in the brain,"Psychological Review, 65: 386-408, 1958.
Rosenblatt在1958年引入了一種學習規則,用來訓練感知機完成模式識別問題,隨機地選擇權系數初值,將訓練樣本集合輸入到感知機,那么網絡根據目標和實際輸出的差值自動地學習,他證明只要最優權矩陣存在,那么學習規則肯定能夠收斂到最優值,學習速度快速可靠。
學習規則:就是更新網絡權系數和偏置向量的方法,也稱為訓練算法。學習規則的分類:
有監督學習(有教師學習)
事先具有一個訓練集合
$\{(p_1,t_1),(p_2,t_2),\cdots,(p_N,t_N)\}$
$p_n$表示的是網絡輸入,$t_n$是正確的目標(target),有時候分類里稱為"標簽"。學習規則不斷地調節網絡權系數和偏置向量,使得網絡輸出和目標越來越接近。感知機的學習是有監督學習。
(2)無監督學習
沒有可參考的目標,僅僅依賴網絡輸出調節網絡權系數和偏置向量。無監督學習的核心,往往是希望發現數據內部潛在的結構和規律,為我們進行下一步決斷提供參考。典型的無監督學習就是希望能夠利用數據特征來把數據分組,也就是"聚類"。 通常情況下,無監督學習能夠挖掘出數據內部的結構,而這些結構可能會比我們提供的數據特征更能抓住數據的本質聯系。因此,監督學習中往往也需要無監督學習來進行輔助。
(3)強化學習
強調基於環境而行動,以取得最大化的預期利益。其靈感來源於心理學中的行為主義理論,即如何在環境給予的獎勵或懲罰的刺激下,逐步形成對刺激的預期,產生能獲得最大利益的習慣性行為。沒有監督標簽,只會對當前狀態進行獎懲和打分,評價有延遲,往往需要過一段時間才知道當時選擇是好是壞。每次行為都不是獨立的數據,每一步都會影響下一步。目標也是如何優化一系列的動作序列以得到更好的結果。應用場景往往是連續決策問題。強化學習方法可以是在線學習思想的一種實現。
感知機學習規則是有監督學習,我們看一個簡單的例子,從中總結學習規則。已經知道一組訓練數據集合為
\[\left \{ (p_1=\begin{bmatrix} 1\\ 2 \end{bmatrix},t_1=1),(p_2=\begin{bmatrix} -1\\ 2 \end{bmatrix},t_2=0),(p_3=\begin{bmatrix} 0\\ -1 \end{bmatrix},t_3=0) \right \}\]
如圖所示,我們可以將上述三個標簽數據進行幾何表示。
圖3.1 數據的幾何表示
我們只用一個最簡單的無偏置hard limit神經元來完成這個數據分類問題。訓練的開始,隨機選擇一個權行向量
\[w=\begin{bmatrix} 1 & -0.8 \end{bmatrix}\]
(1)開始訓練第一個數據\[\left ( p_1=\begin{bmatrix} 1\\ 2 \end{bmatrix},t_1=1 \right )\],感知機的輸出為
\[a=f(wp_1)=f\left \{ \begin{bmatrix} 1 & -0.8 \end{bmatrix} \begin{bmatrix} 1\\ 2 \end{bmatrix}\right \}=0\],與目標$t_1=1$不符合
那么學習方法是將向量$p_1^{\mathrm{T}}$=[1 2]加到$\bm{w}$=[1 -0.8]上,讓決策邊界線向目標靠近,因此權向量的學習為
\[\bm{w}^{new}=\bm{w}^{old}+\bm{p}_1^{\mathrm{T}}=\begin{bmatrix} 1 & -0.8 \end{bmatrix}+\begin{bmatrix} 1 & 2 \end{bmatrix}=\begin{bmatrix} 2& 1.2 \end{bmatrix}\]
按照這新的權向量,那么\[a=f\left \{ \begin{bmatrix} 2 & 1.2 \end{bmatrix} \begin{bmatrix} 1\\ 2 \end{bmatrix}\right \}=1\],與目標$t_1=1$符合。
(2)那么我們繼續訓練第二個數據$\left ( p_2=\begin{bmatrix} -1\\ 2 \end{bmatrix},t_2=0 \right )$,這時$\bm{w}^{new}=\bm{w}^{old}$已經變成舊的權向量了。感知機的輸出為
\[a=f\left \{ \begin{bmatrix} 2 & 1.2\end{bmatrix} \begin{bmatrix} -1\\ 2 \end{bmatrix}\right \}=1\],與目標$t_2=0$不符合.
學習方法是將向量$-\bm{p}_2^{\mathrm{T}}$加到$\bm{w}^{old}$上,讓決策邊界線遠離目標$p_2$,因此權向量的學習為
\[\bm{w}^{new}=\bm{w}^{old}-\bm{p}_2^{\mathrm{T}}=\begin{bmatrix} 2 & 1.2\end{bmatrix}-\begin{bmatrix} -1 & 2 \end{bmatrix}=\begin{bmatrix} 3 & -0.8 \end{bmatrix}\]
按照這新的權向量,那
\[\bm{a}=f\left \{ \begin{bmatrix} 3 & -0.8 \end{bmatrix} \begin{bmatrix} 1\\ 2 \end{bmatrix}\right \}=1\]與目標$t_1=1$符合.
\[\bm{a}=f\left \{ \begin{bmatrix} 3 & -0.8 \end{bmatrix} \begin{bmatrix} -1\\ 2 \end{bmatrix}\right \}=1\]與目標$t_2=0$符合.
(3)和上面分析一樣$\left ( p_3=\begin{bmatrix} 0\\ -1 \end{bmatrix},t_3=0 \right )$
\[\bm{a}=f\left \{ \begin{bmatrix} 3 & -0.8 \end{bmatrix} \begin{bmatrix} 0\\ -1 \end{bmatrix}\right \}=1\]與目標$t_3=0$不符合.
學習方法是$\bm{w}^{new}-\bm{p}_3^{\mathrm{T}}$,讓決策邊界線遠離目標$p_3$,因此權向量的學習為
\[\bm{w}^{new}=\bm{w}^{old}-\bm{p}_3^{\mathrm{T}}=\begin{bmatrix} 3 & -0.8\end{bmatrix}-\begin{bmatrix} 0 & -1 \end{bmatrix}=\begin{bmatrix} 3 & 0.2 \end{bmatrix}\]
此時
\[a=f\left \{ \begin{bmatrix} 3 & 0.2 \end{bmatrix} \begin{bmatrix} 1\\ 2 \end{bmatrix}\right \}=1\]與目標$t_1=1$符合
\[a=f\left \{ \begin{bmatrix} 3 & 0.2 \end{bmatrix} \begin{bmatrix} -1\\ 2 \end{bmatrix}\right \}=0\]與目標$t_2=0$符合
\[a=f\left \{ \begin{bmatrix} 3 & 0.2 \end{bmatrix} \begin{bmatrix} 0\\ -1 \end{bmatrix}\right \}=0\]與目標$t_3=0$符合
對於三個標簽數據都分類正確,訓練完畢。
學習規則:設誤差(向量)
$e=t-a$
如果誤差$e=1$,則
\[\bm{w}^{new}=\bm{w}^{old}+\bm{p}^{\mathrm{T}}\]
如果誤差$e=-1$,則
\[\bm{w}^{new}=\bm{w}^{old}-\bm{p}^{\mathrm{T}}\]
如果誤差$e=0$,則
\[\bm{w}^{new}=\bm{w}^{old}\]
這三種情況可以合成
\[\bm{w}^{new}=\bm{w}^{old}+\bm{ep}^{\mathrm{T}}\]
\[b^{new}=b^{old}+e\]
雖然上面例子沒有偏置向量,可以將其看成輸入總是1的一個標量或者向量。推廣到多個神經元的感知機,學習規則
\[\bm{w}^{new}=\bm{w}^{old}+\bm{ep}^{\mathrm{T}}\]
\[\bm{b}^{new}=\bm{b}^{old}+\bm{e1}\]
思考題:具有$s$個神經元的感知機可以解決類別的分類問題?
例題:四分類判定決策界面問題。
圖3.2 四類數據的幾何表示
訓練數據為8個目標向量,分別是
\[\left \{ \left ( p_1=\begin{bmatrix} 1\\ 1 \end{bmatrix},t_1=\begin{bmatrix} 0\\ 0 \end{bmatrix} \right ), \left ( p_2=\begin{bmatrix} 1\\ 2 \end{bmatrix},t_2=\begin{bmatrix} 0\\ 0 \end{bmatrix} \right )\right \}\]類1標記為○
\[\left \{ \left ( p_3=\begin{bmatrix} 2\\ -1 \end{bmatrix},t_3=\begin{bmatrix} 0\\ 1 \end{bmatrix} \right ), \left ( p_4=\begin{bmatrix} 2\\ 0\end{bmatrix},t_4=\begin{bmatrix} 0\\ 1 \end{bmatrix} \right )\right \}\]類2標記為□
\[\left \{ \left ( p_5=\begin{bmatrix} -1\\ 2 \end{bmatrix},t_5=\begin{bmatrix} 1\\ 0 \end{bmatrix} \right ), \left ( p_6=\begin{bmatrix} -2\\ 1 \end{bmatrix},t_6=\begin{bmatrix} 1\\ 0 \end{bmatrix} \right )\right \}\]類3標記為●
\[\left \{ \left ( p_7=\begin{bmatrix} -1\\ -1 \end{bmatrix},t_7=\begin{bmatrix} 1\\ 1 \end{bmatrix} \right ), \left ( p_8=\begin{bmatrix} -2\\ -2 \end{bmatrix},t_8=\begin{bmatrix} 1\\ 1 \end{bmatrix} \right )\right \}\]類4標記為■
利用感知機的學習規則完成 Matlab版本程序
clear all
close all
clc
% 定義測試集,P為輸入,T為目標輸出
P = [1 1 2 2 -1 -2 -1 -2
1 2 -1 0 2 1 -1 -2];
T = [0 0 0 0 1 1 1 1
0 0 1 1 0 0 1 1];
% 根據目標輸出維數定義神經元個數
num_neural = size(T,1);
% 根據神經元個數與輸入維數定義權值矩陣,並隨機初始化
W = rand(size(T, 1), size(P, 1));
% W = [1 0; 0 1];
% b = [1; 1];
% 根據神經元數定義偏置向量,並隨機初始化
b = rand(size(T, 1), 1);
while 1
N = 0; % 計算正確次數累計
for i = 1:size(P, 2)
p = P(:, i);
t = T(:, i);
[W, b, e] = update(W, b, p, t);
if norm(e) == 0
N = N + 1;
end
end
if N == size(P, 2)
break;
end
end
plot(P(1,1),P(2,1),'ro','MarkerSize',10)
hold on
plot(P(1,2),P(2,2),'ro','MarkerSize',10)
plot(P(1,3),P(2,3),'bs','MarkerSize',10)
plot(P(1,4),P(2,4),'bs','MarkerSize',10)
plot(P(1,5),P(2,5),'ks','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[1,0,0])
plot(P(1,6),P(2,6),'ks','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[1,0,0])
plot(P(1,7),P(2,7),'ro','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0,1,0])
plot(P(1,8),P(2,8),'ro','MarkerSize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0,1,0])
axis([-2.5 2.5 -2.5 2.5])
axis off
x=-2.5:2.5;
y=-2.5:2.5;
plot([0 0],[min(y),max(y)],'k',[min(x),max(x)],[0 0],'k');
%axis off
hold on
ax=[max(x),max(x)-0.3,max(x)-0.3;0,0.1,-0.1];
fill(ax(1,:),ax(2,:),'k');
ay=[0,0.1,-0.1;max(y),max(y)-0.3,max(y)-0.3];
fill(ay(1,:),ay(2,:),'k');
fplot(@(x) (-W(1,1).*x-b(1))./W(1,2),[-2.5 2.5],'LineWidth',2)
fplot(@(x) (-W(2,1).*x-b(2))./W(2,2),[-2.5 2.5],'LineWidth',2)
% 定義hardlim函數
function a = hardlim(n)
a = n >= 0;
end
% 定義學習函數
function [W, b, e] = update(W, b, p, t)
% 計算凈輸入
n = W * p + b;
% 計算實際輸出
a = hardlim(n);
% 計算誤差
e = t - a;
% 學習規則
W = W + e * p';
b = b + e;
end
圖3.3 數據分類決策邊界實現
注意:由於每次運行的權矩陣和偏置向量都是隨機選擇的,因此8個數據訓練完畢之后,能夠得到無數對決策邊界,都滿足要求。運行上述程序時每次得到結果不同,但是如果你選擇相同的初始權矩陣和偏置向量進行學習,得到結果是一樣的。
Python程序:(待補充)
§3.2 感知機的學習收斂性(*選講)
感知機學習規則簡單,非常有效,如果該權系數存在,那么必定收斂。我對於上面hard limit類型的數據分類問題收斂性做一下不太嚴格的證明。
我們有訓練數據集合
$\{(p_1,t_1),(p_2,t_2),\cdots,(p_q,t_q),\cdots,(p_Q,t_Q)\}$
設增廣向量
\[\bm{x}=\begin{bmatrix} \bm{w}^{\mathrm{T}}\\ b \end{bmatrix}\]
第組的輸入也增廣為
\[\bm{z}_q=\begin{bmatrix} \bm{p}_q\\ 1 \end{bmatrix}\]
那么神經元的輸入
\[\bm{n}=\bm{x}^{\mathrm{T}}\bm{z}=\begin{bmatrix} \bm{w} & b \end{bmatrix}\begin{bmatrix} \bm{p}\\ 1 \end{bmatrix}=\bm{wp}+b\]
感知機的學習規則是
\[\bm{w}^{new}=\bm{w}^{old}+\bm{ep}^{\mathrm{T}}\]
\[b^{new}=b^{old}+e\]
按照上面的增廣向量可以合成一個公式(轉秩符號看向量維數)
\[\bm{x}^{new}=\bm{x}^{old}+\bm{ez}\]
誤差取0,1,-1三種,只考慮權值改變的可能就是$e$取1,-1二種,那么設步數為,那么下一步與上一步的權值學習規則是
\[\bm{x}(k)=\bm{x}(k-1)+\widetilde{\bm{z}}(k-1)\]
$\widetilde{z}(k-1)$是
\[\left \{ \bm{z}_1,\bm{z}_2,\cdots,\bm{z}_Q,-\bm{z}_1,-\bm{z}_2,\cdots,-\bm{z}_Q \right \}\]
設最后能夠正確分類的增廣權向量存在$x^*$,那么肯定滿足我們的標簽所標記的,如果
$t_q=1$,那么$n=\bm{x}^{*\mathrm{T}}\bm{z}_q>\delta>0$, 這樣感知機輸出為1
$t_q=0$,那么$n=\bm{x}^{*\mathrm{T}}\bm{z}_q<-\delta<0$, 這樣感知機輸出為0
這里我們設$0<\delta$很小的正數。
設初始權增廣向量為零向量,那么依據學習規則
權值學習規則是
\[x(k)=x(k-1)+\widetilde{z}(k-1)=x(k-2)+\widetilde{z}(k-2)+\widetilde{z}(k-1)\\ =\widetilde{z}(0)+\widetilde{z}(1)+\cdots+\widetilde{z}(k-1)\]
下面需要找到每次改變權向量的上界和下界,來證明迭代有限次收斂。對於上式同時兩邊乘以$x^{*\mathrm{T}}$得到
\[x^{*\mathrm{T}}x(k)=x^{*\mathrm{T}}\widetilde{z}(0)+x^{*\mathrm{T}}\widetilde{z}(1)+\cdots+x^{*\mathrm{T}}\widetilde{z}(k-1)\]
\[x^{*\mathrm{T}}z(q)>\delta\]因此得到
\[x^{*\mathrm{T}}x(k)>k\delta\]
范數的Cauchy-Schwartz不等式
\[\left \| x \right \|^2=x^{\mathrm{T}}x\]
\[\left \| x^{*\mathrm{T}}x(k) \right \|^2\leq \left \|x^* \right \|^2\left \| x(k) \right \|^2\]
這里需要知道2范數,和Cauchy-Schwartz不等式。那么我們得到
\[\left \|x(k) \right \|^2\geq\frac{\left \| x^{*\mathrm{T}}x(k) \right \|^2}{\left \| x^* \right \|^2}>\frac{(k\delta)^2}{\left \| x^* \right \|^2}\]
這樣找到了下界,我們再看$\left\|x(k)\right\|^2$的上界。
這里考慮被改變的權向量情況
\[x^{\mathrm{T}}(k-1)z(k-1)=wp+b<0\]
而$t_q=1$分錯了,e=1,所以$\bm{x}(x)=\bm{x}(k-1)+\bm{z}(k-1)$,
\[\left \| x(k) \right \|^2=x^{\mathrm{T}}(k)x(k)= [x(k-1)+z(k-1)]^{\mathrm{T}}[x(k-1)+z(k-1)]=x^{\mathrm{T}}(k-1)x(k-1)+2x^{\mathrm{T}}(k-1)\widetilde{z}(k-1)+\widetilde{z}(k-1)+\widetilde{z}^{\mathrm{T}}(k-1)\widetilde{z}(k-1)\]
那么得到
\[\left \| x(k) \right \|^2\leq x^{\mathrm{T}}(k-1)x(k-1)+z^{\mathrm{T}}(k-1)z(k-1)=\left \| x(k-1) \right \|^2+\left \| z(k-1) \right \|^2\]
若
\[x^{\mathrm{T}}(k-1)z(k-1)=wp+b>0\]
而$t_q=0$分錯了,e=-1,所以$\bm{x}(x)=\bm{x}(k-1)-\bm{z}(k-1)$
\[\left \| x(k) \right \|^2=x^{\mathrm{T}}(k)x(k)=[x(k-1)-z(k-1)]^{\mathrm{T}}x(k-1)-z(k-1)=\left \| x(k-1) \right \|^2+\left \| z(k-1) \right \|^2-2x^{\mathrm{T}}(k-1)z(k-1)\]
還是得到
\[\left \| x(k) \right \|^2\leq \left \| x(k-1) \right \|^2+\left \| z(k-1) \right \|^2\]
因此
\[\left \| x(k) \right \|^2- \left \| x(k-1) \right \|^2 \leq \left \| z(k-1) \right \|^2\]
從$k=0$開始相加
\[\left \| x(k) \right \|^2\leq \left \| z(0) \right \|^2+\left \| z(1) \right \|^2+\cdots+\left \| z(k-1) \right \|^2\]
設輸入數據增廣向量有個上界
\[\beta=\max_{z}\left \{ \left \| z(k) \right \|^2 \right \}\]
那么得到
\[\left \| x(k) \right \|^2\leq k\beta\]
結合上界下界得到
\[\frac{(k\delta)^2}{\left \| x^* \right \|^2}<\left \| x(k) \right \|^2\leq k\beta\]
得出迭代次數滿足
\[k<\frac{\beta\left \| x^* \right \|^2}{\delta^2}\]
迭代次數是有上界的,肯定有限次迭代之后收斂。
注意:必須肯定存在一個可行解,輸入數據必須有界。有不存可行解的情況嗎?對於單層的感知機,決策邊界都是尋找
$\bm{wp}+b=0$
這樣的線性平面(超平面),因此對於線性可分的類別是合適的,對很多線性不可分的情況,上述單層感知機和學習規則是失敗的。
圖3.4 線性不可分例子
感知機進一步發展,多層感知機,多層的前饋神經網絡,學習算法也改成了后向傳播(Back Propagation)算法可以解決上面的線性不可分問題。
作業:下面數據是玩具廠測量玩具兔和熊的重量和耳朵長度得到的,目標值0表示玩具兔,1表示玩具熊,輸入向量的第一個元素是重量,第二個元素是耳朵長度。
\[\begin{Bmatrix} \left ( p_1=\begin{bmatrix} 1\\ 4 \end{bmatrix},t_1=0 \right ) & \left ( p_2=\begin{bmatrix} 1\\ 5 \end{bmatrix},t_2=0 \right ) & \left ( p_3=\begin{bmatrix} 2\\ 4 \end{bmatrix},t_3=0 \right ) & \left ( p_4=\begin{bmatrix} 2\\ 5 \end{bmatrix},t_4=0 \right )\\ \left ( p_5=\begin{bmatrix} 3\\ 1 \end{bmatrix},t_5=1 \right ) & \left ( p_6=\begin{bmatrix} 3\\ 2 \end{bmatrix},t_6=1 \right ) & \left ( p_7=\begin{bmatrix} 4\\ 1 \end{bmatrix},t_7=1 \right ) & \left ( p_8=\begin{bmatrix} 4\\ 2 \end{bmatrix},t_8=1 \right ) \end{Bmatrix}\]
設計一個網絡,初始化並利用上述8組帶標簽的數據和感知機學習規則對網絡進行訓練,得到決策邊界,並且判斷下面的測量數據其種類。
\[p_9=\begin{bmatrix} 3\\ 2.5 \end{bmatrix},p_{10}=\begin{bmatrix} 2\\ 6 \end{bmatrix},p_{11}=\begin{bmatrix} 5\\ 3 \end{bmatrix}\]