目录
整理一下, 关于卷积层梯度反向传递的过程.
注: (s ot=1)的部分是自己推得, 可能是错的(自己想了很久, 感觉错的机会不大).
符号
输入: (x in mathbb{R}^{N imes C imes H imes W});
权重: (w in mathbb{R}^{F imes C imes HH imes WW});
biases: (b);
输出:(y in mathbb{R}^{N imes F imes H' imes W'})
且
[H' = 1+ (H+2 p-HH)/s \
W' = 1+ (W+2p-WW)/s,
]
其中(p)表示补零(pad), (s)表示滑动距离(stride).
[y=x*w,
]
其中(*)表示卷积.
2-D, s=1
不考虑(C), 可以将补零后的视作(x).
(mathrm{d}b)
(mathrm{d}w)
[mathrm{d}w=x*mathrm{d}y
]
(mathrm{d}x)
[mathrm{d}x=mathrm{d}hat{y} * w^r.
]
(mathrm{d}x_{mn})可以表示为俩个矩阵对应元素相乘再对各元素求和.
(mathrm{d}hat{y})是以(mathrm{d}y) 为中心完全补零(上下各补(HH-1), 左右各补(WW-1)), (w^r)是(w)左右翻转, 上下翻转后的结果.
举个例子
2-D (s ot =1)
(mathrm{d}b)
一样的
(mathrm{d}w)
[mathrm{d} w = x * mathrm{d}hat{y},
]
其中(hat{y})是在(y)的基础上, 在行列间添加(s-1)个0.
(mathrm{d} x)
[mathrm{d}x = mathrm{d}hat{y} * w^r,
]
其中(w^r)和上面一样都是左右翻转加上上下翻转, (mathrm{d}hat{y})先在(mathrm{d}y)的基础上各行各列插入(s-1)零, 并在左右各补(WW-1)零, 上下各补(HH-1)零.
depth
加上了(C),则
[y_f=sum_c y_{fc},
]
其中
[y_{fc} = x_c*w_{fc}+b_{fc},
]
则
[frac{partial L}{partial y_fc} = frac{partial L}{partial y_{f}},
]
剩下的就是和之前的类似的操作了.