当前位置:   article > 正文

多层感知机:Multi-Layer Perceptron

multi-layer perceptron

多层感知机:MLP

多层感知机由感知机推广而来,最主要的特点是有多个神经元层,因此也叫深度神经网络(DNN: Deep Neural Networks)。

感知机:PLA

多层感知机是由感知机推广而来,感知机学习算法(PLA: Perceptron Learning Algorithm)用神经元的结构进行描述的话就是一个单独的。

感知机的神经网络表示如下:

u=i=1nwixi+by=sign(u)={+1,u>01,u0

从上述内容更可以看出,PLA是一个线性的二分类器,但不能对非线性的数据并不能进行有效的分类。因此便有了对网络层次的加深,理论上,多层网络可以模拟任何复杂的函数。


多层感知机:MLP

多层感知机的一个重要特点就是多层,我们将第一层称之为输入层,最后一层称之有输出层,中间的层称之为隐层。MLP并没有规定隐层的数量,因此可以根据各自的需求选择合适的隐层层数。且对于输出层神经元的个数也没有限制。
MLP神经网络结构模型如下,本文中只涉及了一个隐层,输入只有三个变量[x1,x2,x3]和一个偏置量b,输出层有三个神经元。相比于感知机算法中的神经元模型对其进行了集成。


前向传播

前向传播指的是信息从第一层逐渐地向高层进行传递的过程。以下图为例来进行前向传播的过程的分析。
假设第一层为输入层,输入的信息为[x1,x2,x3]。对于层l,用Ll表示该层的所有神经元,其输出为yl,其中第j个节点的输出为yl(j),该节点的输入为ul(j),连接第l层与(l1)层的权重矩阵为Wl,上一层(第l1层)的第i个节点到第l层第j个节点的权重为wl(ji)

结合之前定义的字母标记,对于第二层的三个神经元的输出则有:

y2(1)=f(u2(1))=f(i=1nw21ixi+b2(1))=f(w2(11)x1+w2(12)x2+w2(13)x3+b2(1))y2(2)=f(u2(2))=f(i=1nw22ixi+b2(2))=f(w2(21)x1+w2(22)x2+w2(23)x3+b2(2))y2(3)=f(u2(3))=f(i=1nw23ixi+b2(3))=f(w2(31)x1+w2(32)x2+w2(33)x3+b2(3))

将上述的式子转换为矩阵表达式:
y2=[y2(1)y2(2)y2(3)]=f([w211w212w213w221w222w223w231w232w233][x1x2x3]+[b2(1)b2(2)b2(3)])=f(W2X+b2)

将第二层的前向传播计算过程推广到网络中的任意一层,则:
{yl(j)=f(ul(j))ul(j)=iLl1wl(ji)yl1(i)+bl(j)yl=f(ul)=f(Wlyl1+bl)
其中 f()为激活函数, bl(j)为第 l层第j个节点的偏置。


反向传播

基本的模型搭建完成后的,训练的时候所做的就是完成模型参数的更新。由于存在多层的网络结构,因此无法直接对中间的隐层利用损失来进行参数更新,但可以利用损失从顶层到底层的反向传播来进行参数的估计。(约定:小写字母—标量,加粗小写字母—向量,大写字母—矩阵)

假设多层感知机用于分类,在输出层有多个神经元,每个神经元对应一个标签。输入样本为x=[x1,x2,,xn],其标签为t;
对于层l,用Ll表示该层的所有神经元,其输出为yl,其中第j个节点的输出为yl(j),该节点的输入为ul(j),连接第l层与(l1)层的权重矩阵为Wl,上一层(第l1层)的第i个节点到第l层第j个节点的权重为wl(ji)

对于网络的最后一层第k层——输出层,现在定义损失函数:

E=12jLk(t(j)yk(j))2

为了极小化损失函数,通过梯度下降来进行推导:

{Ewl(ji)=Eyl(j)yl(j)wl(ji)=Eyl(j)yl(j)ul(j)ul(j)wl(ji)Ebl(j)=Eyl(j)yl(j)bl(j)=Eyl(j)yl(j)ul(j)ul(j)bl(j)

在上式子中,根据之前的定义,很容易得到:

{yl(j)ul(j)=f(ul(j))ul(j)wl(ji)=yl1(i)ul(j)bl(j)=1

那么则有:
{Ewl(ji)=Eyl(j)yl(j)ul(j)ul(j)wl(ji)=Eyl(j)f(ul(j))yl1(i)Ebl(j)=Eyl(j)yl(j)ul(j)ul(j)bl(j)=Eyl(j)f(ul(j))

另有,下一层所有结点的输入都与前一层的每个结点输出有关,因此损失函数可以认为是下一层的每个神经元结点输入的函数。那么:
Eyl(j)=E(ul+1(1),ul+1(2),...,ul+1(k),...,ul+1(K))yl(j)=kLl+1Eul+1(k)ul+1(k)yl(j)=kLl+1Eyl+1(k)yl+1(k)ul+1(k)ul+1(k)yl(j)=kLl+1Eyl+1(k)yl+1(k)ul+1(k)wl+1(kj)

此处定义节点的灵敏度为误差对输入的变化率,即:
δ=Eu

那么第 l层第j个节点的灵敏度为:
δl(j)=Eul(j)=Eyl(j)yl(j)ul(j)=Eyl(j)f(ul(j))

结合灵敏度的定义,则有:
Eyl(j)=kLl+1Eyl+1(k)yl+1(k)ul+1(k)wl+1(kj)=kLl+1δl+1kwl+1(kj)

上式两边同时乘上 f(ul(j)),则有
δl(j)=Eyl(j)f(ul(j))=f(ul(j))kLl+1δl+1kwl+1(kj)

注意到上式中表达的是前后两层的灵敏度关系,而对于最后一层,也就是输出层来说,并不存在后续的一层,因此并不满足上式。但输出层的输出是直接和误差联系的,因此可以用损失函数的定义来直接求取偏导数。那么:
δl(j)=Eyl(j)f(ul(j))={f(ul(j))kLl+1δl+1kwl+1(kj)lf(ul(j))(yl(j)t(j))l

至此,损失函数对各参数的梯度为:

{Ewl(ji)=Eul(j)ul(j)wl(ji)=δl(j)yl1(i)Ebl(j)=Eul(j)ul(j)bl(j)=δl(j)

上述的推到都是建立在单个节点的基础上,对于各层所有节点,采用矩阵的方式表示,则上述公式可以写成:
EWl=δlyl1TEbl=δlδl={(Wl+1Tδl+1)f(ul),l(ylt)f(ul),l

其中运算符 表示矩阵或者向量中的对应元素相乘。
常见的几个激活函数的导数为:
f(ul)=sigmoid(ul)=sigmoid(ul)(1sigmoid(ul))=yl(1yl)f(ul)=tanh(ul)=1tanh2(ul)=1yl2f(ul)=softmax(ul)=softmax(ul)softmax2(ul)=ylyl2

根据上述公式,可以得到各层参数的更新公式为:

Wl:=WlηEWl=Wlηδlyl1Tbl:=blηEb=blηδl


References:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/144818
推荐阅读
相关标签
  

闽ICP备14008679号