神经网络中的常用梯度推导(2)

本文以一个简单的神经网络为例,应用上次的公式求解该神经网络中的各个参数的梯度

神经网络的前向传播过程如下:

x=[Lw0,Lw1,...,Lwm1]z=xW+b1h=relu(z)θ=hU+b2ˆy=softmax(θ)J=CE(y,ˆy)

各个参数的维度如下:

LR|V|×db1R1×DhWRmd×Dhb2R1×NcURDh×Nc
其中, V 是词汇表的大小,d是embedding词向量的长度,m是特征数目,Dh是隐含层的神经元数目,Nc是输出类的个数

需要计算的参数梯度如下:

JUJb2JWJb1JLwi

推导前,我们先定义下ReLu函数的梯度:

ReLU(x)=max(x,0)ReLU(x)={1abcif x>00abcif otherwise=sgn(ReLU(x))

sgn表示函数的符号

在推导前,我们再定义下两个比较重要的中间变量JθJz,这两个可以看做输出层和中间隐层的误差信号:

δ1=Jθ=ˆyythis is just identity (7)δ2=Jz=Jθθhhzusing the chain rule=δ1θhhzsubstituting in δ1=δ1 UThzusing identity (2)=δ1 UTrelu(z)using identity (4)=δ1 UTsgn(h)we computed this earlier

检查我们的推导是否正确的一个常用的方法就是看梯度中各个项的维度是否匹配.以上面的为例:

Jz=δ1UTsgn(h)(1×Dh)(1×Nc)(Nc×Dh)(Dh)

下面依次推导上面的梯度

1.JU

JU=JθθU=δ1θU=hTδ1using identity (6)

2.Jb2

Jb2=Jθθb2=δ1θb2=δ1using identity (3)

3.JW

JW=JθzW=δ2zW=xTδ2using identity (6)

4.Jb1

Jb1=Jθzb1=δ2zb1=δ2using identity (3)

5.JLwi

JLwi=JzzLwi=δ2zLwi

下面求解zLwi.

xW=[Lw0,Lw1,...,Lwm1]W=[Lw0,Lw1,...,Lwm1][W0:dWd:2dW(m1)d:md]=Lw0W0:d+Lw1Wd:2d++Lwm1W(m1)d:md=m1j=0LwjWdj:d(j+1)

Lw0是x中第1个单词的embedding向量,长度为d

从上面可以看出,zLwi只有第i项是非零的, 所以

zLwi=LwiLwiWdi:d(i+1)=(Wdi:d(i+1))T
宁雨 /
Published under (CC) BY-NC-SA in categories MachineLearning  tensorflow  tagged with