【发布时间】:2017-06-17 17:29:12
【问题描述】:
我了解在深度学习中计算前向部分的方法。现在,我想了解落后的部分。我们以X(2,2) 为例。 X(2,2)位置的后退可以计算如下图
我的问题是公式中的dE/dY(如dE/dY(1,1),dE/dY(1,2)...)在哪里?第一次迭代如何计算?
【问题讨论】:
标签: image-processing computer-vision deep-learning caffe
我了解在深度学习中计算前向部分的方法。现在,我想了解落后的部分。我们以X(2,2) 为例。 X(2,2)位置的后退可以计算如下图
我的问题是公式中的dE/dY(如dE/dY(1,1),dE/dY(1,2)...)在哪里?第一次迭代如何计算?
【问题讨论】:
标签: image-processing computer-vision deep-learning caffe
简短回答
这些术语在幻灯片底部的最终扩展中;它们有助于 dE/dX(2,2) 的总和。在您的第一次反向传播中,您从最后开始并向后工作(因此得名)- Y 值是真实标签。计算它们就这么多。 :-)
长答案
我会用更抽象、更自然的语言来表述这一点。我希望替代解释能帮助您了解全局并整理数学。
您从分配的权重开始训练,这些权重可能与基本事实(标签)完全相关,也可能完全不相关。你盲目地前进,根据对这些权重的天真信念在每一层进行预测。 Y(i,j) 值是该信念产生的元像素。
然后你打到最后的标签。你向后工作,调整每个重量。请注意,在最后一层,Y 值是真实标签。
在每一层,您在数学上处理两个因素:
您通过“off * weight * learning_rate”调整 X 到 Y 的权重。 当您完成第 N 层的操作后,您将返回第 N-1 层并重复。
进步
无论您使用固定值还是随机值初始化权重(我通常推荐后者),您都会注意到在早期迭代中确实没有太大进展。由于这是对猜测权重的缓慢调整,因此需要多次迭代才能在最后一层获得一些有用的学习。在这一点上,第一层仍然毫无头绪地颠簸。损失函数将在接近其初始值附近反弹一段时间。例如,使用 GoogLeNet 的图像识别,这种甩动会持续大约 30 个 epoch。
然后,最后,您在后面的层中获得了一些有效的学习,模式足够稳定,以至于一些一致性渗透回早期层。此时,您会看到损失函数下降到“定向实验”级别。从那里开始,进展在很大程度上取决于问题的范式和结构:一些急剧下降,然后逐渐收敛;其他的下降更为缓慢,几乎是指数衰减到收敛;随着中期或早期阶段“站稳脚跟”,更复杂的拓扑结构会出现额外的急剧下降。
【讨论】:
Y 是真实标签。它是卷积层的输出为Y=conv(X,kernel),或数学为Y=W.X。因此,应用链式法则dE/dX=dE/dY x dY/dX=dE/dY x W,其中 E 是最后一层的损失函数。要计算dE/dY,我认为我们需要再次应用链式法则来表达它。但是在 caffe 工具中,我看到它使用了 diff 术语。我不确定我的理解。你可以在1drv.ms/p/s!ArG9tn58GyvBge5DZXYiy3Wj39k4Ew和1drv.ms/p/s!ArG9tn58GyvBge5JDI_SkvbMBiMEiQ观看讲座