【问题标题】:How to update the weights of a Deconvolutional Layer?如何更新反卷积层的权重?
【发布时间】:2017-06-01 15:45:24
【问题描述】:

我正在尝试开发一个反卷积层(或者准确地说是转置卷积层)。

在前向传递中,我做了一个全卷积(零填充卷积) 在后向传递中,我做了一个有效的卷积(没有填充的卷积)将错误传递给前一层

偏差的梯度很容易计算,只需对多余的维度进行平均即可。

问题是我不知道如何更新卷积滤波器的权重。什么是渐变?我确定这是一个卷积操作,但我不知道如何。我尝试了输入与错误的有效卷积,但无济于事。

【问题讨论】:

  • 问题解决了吗?我在 caffe 中有类似的东西 deconv 层的所有特征的衍生物总是 0
  • @Alex 不幸的是,没有。目前,我一直在使用带有填充的标准卷积层,这样它们就不会改变尺寸,并且我已经构建了这样的自动编码器。

标签: machine-learning deep-learning convolution deconvolution


【解决方案1】:

解卷积解释

首先,反卷积一个卷积层,只用于不同的目的,即上采样(为什么它有用在this paper中解释)。

例如,这里将2x2 输入图像(蓝色底部图像)上采样为4x4(绿色顶部图像):

为了使其成为有效卷积,首先对输入进行填充以使其成为6x6,然后应用3x3 过滤器而不进行跨步。就像普通的卷积层一样,你可以选择different padding/striding strategies来生成你想要的图片尺寸。

向后传球

现在应该清楚反卷积的反向传播是卷积层反向传播的部分情况,具有特定的步幅和填充。我认为您已经完成了,但是对于任何步幅和填充,这是一个幼稚(而且不是很有效)的实现:

# input: x, w, b, stride, pad, d_out
# output: dx, dw, db <- gradients with respect to x, w, and b

N, C, H, W = x.shape
F, C, HH, WW = w.shape
N, C, H_out, W_out = d_out.shape

x_pad = np.pad(x, pad_width=((0, 0), (0, 0), (pad, pad), (pad, pad)), mode='constant', constant_values=0)

db = np.sum(d_out, axis=(0, 2, 3))

dw = np.zeros_like(w)
dx = np.zeros_like(x_pad)
for n in xrange(N):
  for f in xrange(F):
    filter_w = w[f, :, :, :]
    for out_i, i in enumerate(xrange(0, H, stride)):
      for out_j, j in enumerate(xrange(0, W, stride)):
        dw[f, :, :, :] += d_out[n, f , out_i, out_j] * x_pad[n, :, i:i+HH, j:j+WW]
        dx[n, :, i:i+HH, j:j+WW] += filter_w * d_out[n, f, out_i, out_j]
dx = dx[:,:,1:H+1,1:W+1]

使用im2colcol2im 可以更有效地完成相同的操作,但这只是一个实现细节。另一个有趣的事实:卷积操作的反向传递(对于数据和权重)同样是卷积,但带有空间翻转过滤器。

这是它的应用方式(简单的 SGD):

# backward_msg is the message from the next layer, usually ReLu
# conv_cache holds (x, w, b, conv_params), i.e. the info from the forward pass
backward_msg, dW, db = conv_backward(backward_msg, conv_cache)
w = w - learning_rate * dW
b = b - learning_rate * db

如您所见,它非常简单,只需要了解您正在应用相同的旧卷积即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2017-11-28
    相关资源
    最近更新 更多