神经网络推导

首先介绍一个学习DL4NLP的一个网站WildML,英文的,有空我也整理一下中文版。

这篇讲的是神经网络的基础,没有RNN、CNN等结构。废话少说,直接上要推导的一个简单的神经网络结构图。

例子:三层神经网络

NN

这个神经网络包含一个输入层、一个隐含层和一个输出层。
注意输出的神经元有两个(多个),这个经常用在一个二(多)分类任务上,代表着每一类的概率,相应的激活函数变成了softmax函数(相当于多分类逻辑回归)。当然,如果用在其他任务上,输出结点的值含义可能不同,取值范围也可能不同。

softmax函数

σ(z)j=ezjKk=1ezk

导数:

σ(z)jzi={σ(z)j(1σ(z)j)σ(z)iσ(z)ji=jij

激活函数

常用的激活函数有tanh、sigmoid和ReLU。激活函数是一个学问,需要单独整理一块。
下面简单叙述一下各个函数的表达式:

tanh

tanh(x)=1e2x1+e2x

sigmoid

sigmoid(x)=11+ex

ReLU

y={x0if x  0if x < 0

前向传播公式

例子使用tanh激活函数,最后用softmax函数生成分布。

z2=xθ(1)
a2=tanh(z2)
z3=a2θ(2)
a3=ŷ =softmax(z3)

损失函数

这里使用cross entropy作为损失函数,表达式为:

J(θ)=CrossEntropy(y,ŷ )=1NnNiCyn,ilogŷ n,i

其中N是样本数量,C是类别集合。

反向传播中的梯度求解

这里定义第l层第i个单元的计算误差:

δ(l)i=Jz(l)i

其中 z(l)i 代表第l层的第i个神经元的输入值。

我们的目标是要求参数的所有参数的梯度,即 Jθ

这里推导通用的情况。

我们对 θ(l)i,j 求导( l<L ):

Jθ(l)i,j=Jz(l+1)iz(l+1)iθ(l)i,j=Ja(l+1)ia(l+1)iz(l+1)iz(l+1)iθ(l)i,j=k=1S(l+2)δ(l+2)kθ(l+1)k,ig(z(l+1)i)a(l)i

根据 δ 的定义:

δ(l+1)i=Jz(l+1)i=k=1Sl+2Jz(l+2)kz(l+2)ka(l+1)ia(l+1)iz(l+1)i=k=1S(l+2δ(l+2)lθ(l+1)k,ig(z(l+1)i)

这里的 θ a 都是已知变量,为当前迭代的参数和输出。

表达为矩阵形式,δl+1指第l+1层的所有单元的计算误差,则 δ(l+1)i 是其第i个元素:

δ(l+1)=(θ(l+1))Tδ(l+2).g(z(l+1))

注意.*为矩阵对应元素之间两两相乘。

这样就可以反向传播求所有神经元的计算误差。
最后,

Jθl=δ(l+1)(a(l))T

代入例子中计算梯度

计算第三层第i单元的计算误差 δ(3)i

δ(3)i=Jz(3)i=kCyklogŷ z(3)i=kCyk1ŷ ŷ z(3)i=yi1ŷ ŷ (1ŷ )kCandk¬iyk1ŷ (ŷ kŷ i)=yi(1ŷ )+kCandk¬iykŷ i=ŷ i(kCyk)yi=ŷ iyi

*第三层的所有计算误差用 δ3 表示。

计算 δ2 :

δ2=(θ(2))Tδ(3).g(z(2))=(θ(2))Tδ(3).(1tanh2z(2))

计算关于 θ(2) 的偏导:

Jθ(2)=δ(3)(a(2))T

计算关于 θ(1) 的偏导:

Jθ(1)=δ(2)(a(1))T=δ(2)(x)T

到此,所有的 θ 都已经可以求出来,最后代入梯度下降公式更新参数:

θ:=θλJθ

参考资料:

http://www.wildml.com/2015/09/implementing-a-neural-network-from-scratch/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值