首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算卷积层的增量项,给定前一卷积层的增量项和权重?

如何计算卷积层的增量项,给定前一卷积层的增量项和权重?
EN

Data Science用户
提问于 2015-06-02 20:16:43
回答 1查看 3.7K关注 0票数 10

我试图训练一个包含两个卷积层(c1,c2)和两个隐藏层(c1,c2)的人工神经网络。我使用的是标准的反向传播方法。在反向传递中,我根据前一层的误差、前一层的权重和激活梯度相对于当前层的激活函数来计算一层(delta)的误差项。更具体地说,L层的三角洲是这样的:

代码语言:javascript
复制
delta(l) = (w(l+1)' * delta(l+1)) * grad_f_a(l)

我能够计算c2的梯度,它连接到一个规则的层。我只是把h1的权重乘以它的增量。然后将该矩阵重构为c2的输出形式,并将其与激活函数的梯度相乘完成。

现在我有一个c2的δ项,它是一个大小的4D矩阵(featureMapSize,featureMapSize,filterNum,patternNum)。此外,我还有c2的权重,它是一个大小的三维矩阵(filterSize,filterSize,filterNum)。

对于这两个项和c1激活的梯度,我想要计算c1的增量。

长话短说:

给定前一卷积层的δ项和该层的权重,如何计算卷积层的增量项?

EN

回答 1

Data Science用户

发布于 2015-07-21 21:45:39

首先,为了简化一维数组(输入),可以很容易地将其转换到多维数组(输入),我首先推导下面的卷积层的误差:

我们假设长度的y^{l-1} Nl-1-th conv的输入。层,m是由w_i表示每个权重的权重w的内核大小,输出是x^l

因此,我们可以写(注意从零开始的求和):x_i^l = \sum\limits_{a=0}^{m-1} w_a y_{a+i}^{l-1},其中y_i^l = f(x_i^l)f是激活函数(例如σ)。有了这些之后,我们现在可以考虑一些错误函数E\partial E / \partial y_i^l 给出的卷积层上的误差函数(前一层之一)。我们现在要找出错误在上一层的权重中的相关性(S):

\begin{equation} \frac{\partial E}{\partial w_a} = \sum\limits_{a=0}^{N-m} \frac{\partial E}{\partial x_i^l} \frac{\partial x_i^l}{\partial w_a} = \sum\limits_{a=0}^{N-m}\frac{\partial E}{\partial w_a} y_{i+a}^{l-1} \end{equation}

其中,我们对发生w_a的所有表达式都有和,即N-m。还请注意,我们知道最后一个项来自于\frac{\partial x_i^l}{\partial w_a}= y_{i+a}^{l-1},您可以从第一个方程中看到这一点。

要计算梯度,我们需要知道第一个项,它可以通过以下方法计算:

\frac{\partial E}{\partial x_i^l} = \frac{\partial E}{\partial y_i^l} \frac{\partial y_i^l}{\partial x_i^l} = \frac{\partial E}{\partial y_i^l} \frac{\partial}{\partial x_i^l} f(x_i^{l})

其中,第一个项是前一层的误差,f是非线性激活函数。

有了所有必要的实体,我们现在就能够计算错误并有效地将其传播回宝贵的层:

\delta^{l-1}_a = \frac{\partial E}{\partial y_i^{l-1} } = \sum\limits_{a=0}^{m-1} \frac{\partial E}{\partial x_{i-a}^l} \frac{\partial x_{i-a}^l}{\partial y_i^{l-1}} = \sum\limits_{a=0}^{m-1} \frac{\partial E}{\partial x^l_{i-a}} w_a^{flipped}

注意,在编写x_i^l-s w.r.t时,可以很容易地理解最后一步。y_i^{l-1}-s.flipped指的是转置重量最大值(T)。

因此,您只需计算下一层中的错误(现在采用向量表示法):

\delta^{l} = (w^{l})^{T} \delta^{l+1} f'(x^{l})

这就变成了一个卷积和次采样层:

\delta^{l} = upsample((w^{l})^{T} \delta^{l+1}) f'(x^{l})

其中,upsample操作通过最大池层传播错误。

请随意添加或纠正我!

参考资料见:

  • 斯坦福的卷积神经网络
  • 安德鲁的卷积神经网络

对于C++实现 (不需要安装)

票数 6
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/5987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档