您的位置:首页 > 理论基础 > 计算机网络

【机器学习】反向传播神经网络推导

2016-08-23 02:17 731 查看
简单的反向传播神经网络可以说就是将基本单元如感知器,组成层级结构,划分出输入层、隐含层、输出层;不同层之间通过连接来形成耦合,从而组成一个有功用的网状算法结构。

感知器可以通过迭代计算来逼近想获取的结果,迭代过程中感知器不断和计算结果反馈,较为常用的迭代计算方法有梯度下降法。当感知器组成网络之后,每个感知器如果获得结果反馈就比较麻烦,这里就要用到反向传播方法。

假设我们有一个计算过程y=a∗b+c,其中a,b,c都是输入变量,y是输出。按照梯度下降法,针对a的迭代计算过程为ak+1=ak+η∂y∂a=ak−ηb。其中η是学习率,是一个经验值。以上对于b和c同理。如果我们把乘法提升到加法的上一层,每一层之间用connect连接来耦合:

connect1:q=a∗bconnect2:y=q+c

那么a,b,c的迭代计算过程都要相应变化:

ck+1=ck−η∗1grad(q)=1,qk+1=qk−η∗1ak+1=ak−ηgrad(q)∗b

注意到这里将q=a∗b单独提取出来,其实是可以用微积分的链式法则来推导的。另外,η一般是个很小的值,是不能传递的,因此每一层之间要传递与η无关的提低。实际应用中需要使用链式法则来计算神经网络的反馈。

一般而言神经网络每一层的输出是一堆数据,这里我只推导简单的反向传播神经网络。前向单次计算过程是:先计算连接,输入为上次的输出;然后用H函数激活连接计算后的结果,作为下一次的输入。第k层的感知器输入之后需要经过滤波,定义为激活函数Oq=H(Q1,Q2...),层之间的连接函数为[Q1,Q2...]=∑wqpIq。其中Iq=Op。我们要反馈修正的是权值w。这里定义神经网络层名为j->p->q。

设总的代价函数为cost(O)=12(T−O)2,则根据链式法则,修正量计算为grad(wqp)=∂cost(O)∂wqp=∂cost(O)∂Oq∂Oq∂Qq∂Qq∂wqp=∂cost(O)∂OqΔHqIq=−(T−Oq)ΔHq(Qq)Iq

其中T表示目标输出,是人工标记结果。Oq是神经网络输出层的输出。输出层没有前向连接,修正量为Δwqp=−ηgrad(wqp)。

然后是隐含层,隐含层是中间层,受到前方多重连接的影响,且不知道中间目标输出T应该是多少,因此需要从输出层向前递推,其中Nq是第q层的感知器数量:

grad(wpj)=∂cost(O)∂Op∂Op∂Qp∂Qp∂wpj=∑q=1Nq∂cost(O)∂Qq∂Qq∂OpΔHpIp=∑q=1Nq∂cost(O)∂QqwqpΔHpIp=∑q=1Nq∂cost(O)∂Oq∂Oq∂QqwqpΔHpIp=∑q=1Nqgrad(wqp)IqwqpΔHpIp

注意这里的代价函数是cost(O),只和输出有关,而不是cost(Op)等中间代价函数,后者是无法传递计算的。

设H(x)=11−ex,即sigmoid函数,有ΔH(Qq)=H(Qq)(1−H(Qq))=Oq(1−Oq),则输出端修正量为Δwqp=η(T−Oq)Oq(1−Oq)Iq隐藏层修正量为Δwpj=−η∑q=1Nqgrad(wqp)IqwqpOp(1−Op)Ip=−η∑q=1Nqgrad(wqp)wqpOp(1−Op)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息