感知器算法与神经网络,及反向传播算法的推导

姓名:Jyx
班级:****人工智能直通车-5期
描述:这是本人在学习人工智能时的学习笔记,加深理解

  1. 感知器模型
    1.1 感知器模型的推广
  2. 神经网络
  3. 反向传播算法

感知器模型(wiki)

一个简单的感知器算法可以表示如下

y=sgn(wTx+b) 或者y=sgn(wTx),where w=[wT,b]T,x=[xT,1]T

感知器算法与神经网络,及反向传播算法的推导
出于简化考虑,本文采用第二种表达方式,如无特别说明一般用w,x代替w,x
感知器的代价函数定义为:
J(w)=xY(δxwTx),δx={1,xω1+1,xω2

ω1,ω2代表类别,Y代表错误分类的样本的集合。
显然代价函数总是正的。
采用梯度下降法,权重更新公式为
w(t+1)=w(t)ρtJ(w)w|w=w(t)=w(t)ρtxY(δxx)

算法描述:

  • 随机选择w(0), 选择ρ0
  • t=0
  • 重复
    • Y=
    • For i=1 to N
      If δxiw(t)Txi0 then Y=Y{xi}
    • End For
    • w(t+1)=w(t)ρtxYδxx
    • 调整ρtρt+1
    • t = t+ 1
  • 直到Y=

这不是一个标准的梯度下降过程,因为函数j(w)随着训练的进行一直在改变。但算法依然收敛。

感知器模型的推广

异或问题

简单的感知器模型只能处理线性可分的问题,著名的异或问题感知器算法就不能解决。为此,可以使用两层感知器,
两层感知器的局限:
两层感知器的处理能力依旧有限:两层感知器可以分离由多面体区域的并集构成的类,而不能分离这些区域的并集。
为此,我们可以选择三层感知器。

神经网络

上面讨论通过增加感知器的层数来增强感知器的分类能力,但另一方面我们也可以改变感知器的其它方面来增强他的分类能力,比如**函数。这就是神经网络。
在查找资料的过程中,找到一个很有用的博客专题:深度神经网络基本问题的原理详细分析和推导,里面具体描述了神经网络的方方面面

关于**函数的一个定理

整个机器学习中最重要的一个部分就是优化,优化可以看成是在一定损失函数下的拟合问题。通用逼近定理给出了一些拟合的结论。通用逼近定理这里就不罗列了,有兴趣参考wiki,这里摘录一段网上一篇blog对通用逼近定理的解释

一个仅有单隐藏层的神经网络。在神经元个数足够多的情况下,通过特定的非线性**函数(包括sigmoid,tanh等),足以拟合任意函数。这使得我们在思考神经网络的问题的时候,不需要考虑:我的函数是否能够用神经网络拟合,因为他永远可以做到——只需要考虑如何用神经网络做到更好的拟合(摘自https://blog.****.net/zpcxh95/article/details/69952020

反向传播算法

反向传播算法从根本上而言是一种多元函数的链式法则的应用。其中也没有高深的推导,只是有层窗户纸让人看不真切
这里力图把本人理解的关键点写清楚。
推荐一篇比较形象的推导反向传播算法

一个简单的神经网络定义如下
感知器算法与神经网络,及反向传播算法的推导
在本文推倒中假定网络共有L(1,,L)层,每层有ki个神经元,有两个特例:对于第一层输入层k1就等于输入向量的特征维数,对于最后一层输出层kL就等于输出向量的维数,又假定输入向量共有N(x1,,xN)个,fil表示第l层的第i个**函数,wijl表示第l层第i个神经元的第j个权向量,bl表示第l层的偏置。y^表示网络的输出。vil表示第l层第i个神经元的输出

一般形式

按照上面的定义,每一层的输出可以表示为上一层输出的函数,即

(1)vil=fil(j=1kl1wijlvjl1+bil),l>1y^i=viL定义辅助变量(2)ξil=j=1l1wijlvjl1+bil(3)vil=fil(ξil),l>1

note: 这里有个重点wijlvjl1是独立的变量,这意味着对ξil求导时vjl1可以看作常量
同一般的反向传播算法这个名字暗示的那样,我们从最后一层开始往回计算梯度,即先计算wijL的梯度,再依次wijl1,,wij2

1. 第L
对于损失L(y,y^),可以写成viL(y^i=viL)的函数

L(y,y^)=L(y,y1^,y2^,,ykl^)(4)=L(y,v1L,v2L,,vkLL)(5)LwijL=LviLviLwijL=LviLviLξiLξiLwijL(6)LbiL=LviLviLbiL=LviLviLξiLξiLbiL

利用2式和3式,可以得到
ξiLwijL=vjL1ξiLbiL=1viLξiL=fiL(ξil)

所以5式和6式可以化简成
LwijL=L(viL)fiL(ξil)vjL1LbiL=L(viL)fiL(ξil)

2. l<L
l<L时,根据神经网络的构成,每一层都只和下一层有关。迭代递归下去可以知道,损失L(y,y^)总可以写成某一层的函数,即

(7)L(y,y^)=L(y,v1l,v2l,,vkll)

注意式(7)和式(3)虽然形式不同,但确实是同一个函数,只不过展开深度的不同。
因为式(7)和式(3),根据上面的推导过程,立即可以得到
(5)Lwijl=LviLvilwijl=Lvilvilξilξilwijl(6)Lbil=Lvilvilbil=Lvilvilξilξilbil

Lvil并不像第L层那样好求,因为网络太复杂并且网络结构不确定,直接展开求解显然不可能,这时,反向传播算法中的传播 就来了,考虑网络的结构,我们可以一层一层递归解决
假定第l+1层已经解决,即Lvil+1已知。
考虑第l+1层,综合式(1)和式(7)
(7)L(y,y^)=L(y,v1l+1,v2l+1,,vkl+1l+1)vil+1=fil+1(j=1klwijl+1vjl+bil+1),i=1,,N利用多元函数的链式法则 Lvil=j=0kl+1Lvjl+1vjl+1vil=j=0kl+1Lvjl+1vjl+1ξjl+1ξjl+1vil(8)=j=0kl+1Lvjl+1l+1fjl+1(ξjl+1)wjil+1

这样Lvil已经求出,带入5,6式即可求出l层梯度