机器学习算法完整版见fenghaootong-github
神经网络原理
- 感知机学习算法
- 神经网络
- 从感知机到神经网络
- 多层前馈神经网络
- bp算法
感知机学习算法
- 感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。
- 是神经网络和支持向量机的基础。
感知机定义
假设输入空间(特征向量)为X⊆RnX⊆Rn,输出空间为Y=−1,+1Y=−1,+1。输入x∈Xx∈X表示实例的特征向量,对应于输入空间的点;输出y∈Yy∈Y表示示例的类别。由输入空间到输出空间的函数为
f(x⃗ )=sign(w⃗ ⋅x⃗ +b)f(x→)=sign(w→⋅x→+b)
sign(x)={+1−1ifx≥0elsesign(x)={+1ifx≥0−1else
感知机学习策略
如果训练集是可分的,感知机的学习目的是求得一个能将训练集正实例点和负实例点完全分开的分离超平面。为了找到这样一个平面(或超平面),即确定感知机模型参数w⃗ w→和b,我们采用的是损失函数,同时并将损失函数极小化。
- 对于正确分类的样本点(xi→,yi)(xi→,yi), 有(w⃗ ⋅xi→+b)yi>0(w→⋅xi→+b)yi>0
- 对于误分类的样本点(xi→,yi)(xi→,yi), 有(w⃗ ⋅xi→+b)yi<0(w→⋅xi→+b)yi<0
误分类点到超平面的距离:
1||w⃗ ||2|(w⃗ ⋅xi→+b)|1||w→||2|(w→⋅xi→+b)|
||w⃗ ||2||w→||2为w⃗ w→的L2L2范数
对于误分类点:
−(w⃗ ⋅xi→+b)yi>0−(w→⋅xi→+b)yi>0
−1||w⃗ ||2(w⃗ ⋅xi→+b)yi−1||w→||2(w→⋅xi→+b)yi
所有的点到超平面的距离:
−1||w⃗ ||2∑xi→∈M(w⃗ ⋅xi→+b)yi−1||w→||2∑xi→∈M(w→⋅xi→+b)yi
不考虑1||w⃗ ||21||w→||2,就得到了感知机的损失函数:
L(w⃗ ,b)=−∑xi→∈M(w⃗ ⋅xi→+b)yiL(w→,b)=−∑xi→∈M(w→⋅xi→+b)yi
感知机学习算法
感知机学习转变成求解损失函数L(w⃗ ,b)L(w→,b)的最优化问题。最优化的方法是随机梯度下降法
minw⃗ ,bL(w⃗ ,b)=−minw⃗ ,b∑xi→∈M(w⃗ ⋅xi→+b)yiminw→,bL(w→,b)=−minw→,b∑xi→∈M(w→⋅xi→+b)yi
定义损失函数的梯度:
∇w⃗ L(w⃗ ,b)=−∑xi→∈Myixi→∇w→L(w→,b)=−∑xi→∈Myixi→
∇bL(w⃗ ,b)=−∑xi→∈Myi∇bL(w→,b)=−∑xi→∈Myi
随机选取一个误分类点,更新w⃗ ,bw→,b的值:
w⃗ :=w⃗ +ηyixi→w→:=w→+ηyixi→
b:=b+ηyib:=b+ηyi
η∈(0,1]η∈(0,1]
神经网络
从感知机到神经网络
- 感知机可以看作神经网络的特例。感知机由两层神经元组成:输入层接收外界输入信号,输出层是M-P神经元。
- 感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元
多层前馈神经网络
- 感知机只拥有一层功能神经元,它只能处理线性可分的问题,要想解决非线性可分问题,可以使用多层功能神经元
神经网络的结构:
- 每层神经元与下一层神经元全部相连
- 同层神经元之间不存在连接
- 跨层神经元之间也不存在连接
多层前馈神经网络有一下特点:
- 掩藏层和输出层神经元都拥有激活函数
- 输入层接收外界输入信号,不进行激活函数处理
- 最终结果由输出层神经元给出
下图是一个简单的神经网络
激活函数
隐藏层和输出层都需要激活函数
我们选用sigmod函数作为激活函数:
z(l)i=∑j=1nW(l−1)ija(l−1)j+b(l−1)izi(l)=∑j=1nWij(l−1)aj(l−1)+bi(l−1)
f(z(l)i)=11+e−z(l)if(zi(l))=11+e−zi(l)
参数说明:
- a(l)i:表示第l层第i个单元的输出值ai(l):表示第l层第i个单元的输出值
- W(l)ij:表示第l层第j单元和第l+1层第i单元之间的权重Wij(l):表示第l层第j单元和第l+1层第i单元之间的权重
- b(l)i:表示第l+1层第i单元的偏置项bi(l):表示第l+1层第i单元的偏置项
- z(l)i:表示第l层第i个单元输入加权和zi(l):表示第l层第i个单元输入加权和
对于给定参数集合 W,bW,b,我们的神经网络就可以按照函数 hW,b(x)hW,b(x)来计算输出结果。上图神经网络的计算步骤如下:
a(2)1=f(W(1)11x1+W(1)12x2+W(1)13x3+b(1)1)a1(2)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))
a(2)2=f(W(1)21x1+W(1)22x2+W(1)23x3+b(1)1)a2(2)=f(W21(1)x1+W22(1)x2+W23(1)x3+b1(1))
a(2)3=f(W(1)31x1+W(1)32x2+W(1)33x3+b(1)2)a3(2)=f(W31(1)x1+W32(1)x2+W33(1)x3+b2(1))
hW,b(x)=a(3)1=f(W(1)11x1+W(1)12x2+W(1)13x3+b(1)1)hW,b(x)=a1(3)=f(W11(1)x1+W12(1)x2+W13(1)x3+b1(1))
上面的计算步骤叫做前向传播
反向传播算法
代价函数
C=12n∑i=1n||yi(x)−a(L)i(x)||2C=12n∑i=1n||yi(x)−ai(L)(x)||2
其中,x表示输入的样本,y表示实际的分类,a(L)表示预测的输出,L表示神经网络的最大层数。其中,x表示输入的样本,y表示实际的分类,a(L)表示预测的输出,L表示神经网络的最大层数。
公式及其推导
首先,将第l层第i个神经元中产生的错误(即实际值与预测值之间的误差)定义为:
δ(l)i≡∂C∂z(l)iδi(l)≡∂C∂zi(l)
为了便于理解,下面都是一个样本
最后一层神经网络产生的错误:
δ(L)i=∇aC⊙f′(z(L)i)δi(L)=∇aC⊙f′(zi(L))
⊙⊙ 用于矩阵或向量之间点对点的乘法运算
由后往前,计算每一层神经网络产生的错误:
δ(l)i=((w(l))Tδ(l+1)i)⊙f′(z(l)i)δi(l)=((w(l))Tδi(l+1))⊙f′(zi(l))
权重的梯度:
∂C∂w(l)ij=a(l)jδ(l+1)i∂C∂wij(l)=aj(l)δi(l+1)
偏置的梯度:
∂C∂b(l)i=δ(l)i∂C∂bi(l)=δi(l)
使用梯度下降,训练参数:
w(l):=w(l)−ηm∑i=1nδ(l)i(a(l)i)Tw(l):=w(l)−ηm∑i=1nδi(l)(ai(l))T
b(l):=b(l)−ηm∑i=1nδ(l)ib(l):=b(l)−ηm∑i=1nδi(l)
实例