卷积神经网络反向传播推导

以TensorFlow的卷积神经网络为例

卷积-池-卷积-池-全连接-softmax
卷积神经网络反向传播推导_第1张图片

前向传导

C1层:卷积神经网络的输入是28×28的矩阵 A ,经过 F1 个5×5的卷积核 K1i(i=1,2,...,F1) 的卷积生成 F1 个24×24大小的feature maps:
C1i=conv2(A,K1i,VALID)+b1i
u1i=C1i
a1i=f(u1i)

S2层:窗口为2x2,输出为12x12的pool maps:
S2i=β2idown(a1i)+b2i
u2i=S2i
a2i=f(u2i)

C3层:卷积神经网络的输入是12x12的矩阵 A ,经过 F1 个5×5的卷积核 K3ij(i=1,2,...,F1) 的卷积生成 F1 个8x8大小的feature maps:
C1i=conv2(A,K1i,VALID)+b1i
u1i=C1i
a1i=f(u1i)

S4层:窗口为2x2,输出为4x4的pool maps:
S4i=β4idown(a3i)+b4i
u4i=S4i
a4i=f(u4i)

全连接层:将 a4i 展开,作为全连接层的输入

反向传播

全连接层

δ(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)

Jθl=δl(al1)T

Jbl=δl

卷积层
假设前一层 l1 为池化层,当前层 l 为卷积层,后一层 l+1 为池化层

δ(l)i=Ju(l)i=[Jul+1i,(jk)ul+1i,(jk)ali,(jk)ali,(jk)uli,(jk)]jk=β(l+1)i(f(u(l)i)up(δ(l+1)i))

up运算为:

up([1324])=1133113322442244)

Jb(l)i=s,t(δi)st

JK(l)ij=st(δ(l)i)st(P(l1)j)st

其中, ()st 遍历 的所有元素, (P(l1)j)st δ(l)i 所连接的 l1 层中 a(l1)j 中相关的元素构成的矩阵。

池化层

δ(l)i=j=1Nlf(u(l)iconv2(δ(l+1)j,K(l+1)ji,full))

Jb(l)i=s,t(δ(l)i)st

Jβ(l)i=s,t(δ(l)id(l1)i)st

其中, ()st 遍历 的所有元素, d(l1)i=down(a(l1)i)

解释一下为什么 δ(l)i 公式中有conv2:

Juli,(jk)=mrelatedJul+1mul+1mali,(jk)ali,(jk)uli,(jk)

其中与 ali,(jk) 相关联的feature maps中的 δ(l+1) 和卷积核参数 K(l+1) 可以由卷积操作完成。例子参考 http://www.cnblogs.com/tornadomeet/p/3468450.html 最好手算一遍体会。

Reference

http://www.cnblogs.com/tornadomeet/p/3468450.html
http://tech.youmi.net/2016/07/163347168.html?utm_source=tuicool&utm_medium=referral

你可能感兴趣的:(深度学习,机器学习)