多层感知机(Multi-Layer Perception)

鸣谢

多层感知机及其BP算法(Multi-Layer Perception)

Deep Learning 近年来在各个领域都取得了 state-of-the-art 的效果,对于原始未加工且单独不可解释的特征尤为有效,传统的方法依赖手工选取特征,而 Neural Network 可以进行学习,通过层次结构学习到更利于任务的特征。得益于近年来互联网充足的数据,计算机硬件的发展以及大规模并行化的普及。本文主要简单回顾一下 MLP ,也即为Full-connection Neural Network ,网络结构如下,分为输入,隐层与输出层,除了输入层外,其余的每层激活函数均采用 sigmod ,MLP 容易受到局部极小值与梯度弥散的困扰,如下图所示:
这里写图片描述

MLP 的 Forward Pass

MLP 的 BP 算法基于经典的链式求导法则,首先看前向传导,对于输入层有 I 个单元, 对于输入样本 (x,z) ,隐层的输入为:

ah=i=1Iwihxi
bh=f(ah)

这里函数 f 为 非线性激活函数,常见的有sigmod或者是 tanh ,本文选取 sigmod 作为激活函数。计算完输入层向第一个隐层的传导后,剩下的隐层计算方式类似,用 hl 表示第 l 层的单元数:
ah=h=1hl1whhbh
bh=f(ah)

对于输出层,若采用二分类即 logisticregression ,则前向传导到输出层:
a=hwhhbh
y=f(a)

这里 y 即为MLP的输出类别为 1 的概率,输出类别为0的概率为 1y ,为了训练网络,当 z=1 时, y 越大越好,而当z=0时, 1y 越大越好,这样才能得到最优的参数 w ,采用MLE的方法,写到一起可以得到 yz(1y)1z 这便是单个样本的似然函数,对于所有样本可以列出 log 似然函数 O=(x,z)zlogy+(1z)log(1y) ,直接极大化该似然函数即可,等价于极小化以下的 log 损失函数:
O=(x,z)zlogy+(1z)log(1y)

对于多分类问题,即输出层采用 softmax ,假设有 K 个类别,则输出层的第k个单元计算过程如下:
ak=hwhkbh
yk=f(ak)

则得到类别 k 的概率可以写作kyzkk,注意标签 z 中只有第k维为 1 ,其余为0,所以现在只需极大化该似然函数即可:
O=(x,z)kyzkk

同理等价于极小化以下损失:
O=(x,z)kyzkk

以上便是 softmax 的损失函数,这里需要注意的是以上优化目标 O 均没带正则项,而且logistic softmax 最后得到的损失函数均可以称作交叉熵损失,注意和平方损失的区别。


Backward Pass

有了以上前向传导的过程,接下来看误差的反向传递,对于 sigmod 来说,最后一层的计算如下: a=hwhbh , y=f(a)=σ(a) 这里 bh 为倒数第二层单元 h 的输出,σ sigmod 激活函数,且满足 σ(a)=σ(a)(1σ(a)) ,对于单个样本的损失 :

O=[zlog(σ(a)+(1z)log(1σ(a))]

可得到如下的链式求导过程:
Owh=Oaawh

显而易见对于后半部分 awh bh ,对于前半部分 Oa :
Oa=[z log(σ(a))+(1z)log(1σ(a))]a=[zσ(a)1z1σ(a)]σ(a)=[zσ(a)1z1σ(a)]σ(a)(1σ(a))=σ(a)z=yz

以上,便得到了 logistic 的残差,接下来残差反向传递即可,残差传递形式同 softmax ,所以先推倒 softmax 的残差项,对于单个样本, softmax log 损失函数为:
O=izilogyi

其中:
yi=eaijeaj

根据以上分析,可以得到 yk 关于 ak 的导数:
ykak=ikeajeakjeajjeajeakeakjeajjeaj=yk(1yk)    k=k=ykyk         kk

现在能得到损失函数 O 对于ak的导数:
Oak=[izilogyi]ak=izilogyiak=izi1yiyiak=zk(1yk)ikzi1yi(yiyk)=zk+zkyk+ikziyk=zk+yk(izi)=ykzk

这里有 izi=1 ,即只有一个类别。 到这一步, softmax sigmod 的残差均计算完成,可以用符号 δ 来表示,对于单元 j ,其形式如下:
δj=Oaj

这里可以得到 softmax 层向倒数第二层的残差反向传递公式:
δh=Obhbhah=bhahkOakakbh=f(ah)kwhkδk

其中 ak=hwhkbh ,对于 sigmod 层,向倒数第二层的反向传递公式为:
δh=Obhbhah=bhahOaabh=f(ah)whδ

以上公式的 δ 代表 sigmod 层唯一的残差,接下来就是残差从隐层向前传递的传递过程,一直传递到首个隐藏层即第二层( 注意,残差不会传到输入层,因为不需要,对输入层到第二层的参数求导,其只依赖于第二层的残差,因为第二层是这些参数的放射函数):
δh=f(ah)h=1hl+1whhδh

整个过程可以看下图:
这里写图片描述
最终得到关于权重的计算公式:
Owij=Oajajwij=δjbi

至此完成了 backwark pass 的过程,注意由于计算比较复杂,有必要进行梯度验证。对函数 O 关于参数 wij 进行数值求导即可,求导之后与与上边的公式验证差异,小于给定的阈值即认为我们的运算是正确的。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值