神经网络与机器学习
第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}\]