尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ResNet 论文阅读(二):用传话游戏理解残差学习为什么有效

ResNet 论文阅读(二):用传话游戏理解残差学习为什么有效 论文信息论文标题Deep Residual Learning for Image RecognitionCVPR 官方页面CVPR 2016 Open Access PagearXiv 摘要页Deep Residual Learning for Image Recognition官方 PDFCVPR 2016 PDF上一篇文章里我们从 VGG 的加深思路出发讲到了 ResNet 要解决的核心问题普通网络继续加深以后可能出现退化问题也就是网络更深了训练误差反而更高。随后我们从公式角度理解了残差学习y F(x) x这篇文章换一种方式不再一上来盯着公式而是用一个更生活化的“传话游戏”来理解 ResNet。这个类比的目标不是替代数学推导而是帮助我们把残差学习的直觉真正吃透为什么保留原信息再学习一点修正量会比每一层都重新生成完整表示更容易。一、先把残差块翻译成传话规则假设有五个人参加传话游戏A - B - C - D - E原话是今天下午实验室窗外在下小雨但屋里很安静大家都在认真调试自己的模型。这句话里有一个核心主干大家都在认真调试自己的模型也有一些修饰信息今天下午 实验室窗外在下小雨 屋里很安静如果把这句话类比成网络里的特征表示那么主干信息就像是需要被保留下来的重要特征修饰信息则像是在不同层之间可以继续调整和增强的细节。现在我们分别看普通网络和 ResNet 会怎样完成这场传话。二、普通网络每个人都重新组织整句话在普通网络里可以粗略理解为每一层都要根据上一层输入重新生成一个完整输出。类比到传话游戏里就是每个人听到上一版后都要靠自己的理解重新说一遍整句话。传话过程可能变成这样A: 今天下午实验室窗外在下小雨但屋里很安静大家都在认真调试自己的模型。 B: 今天下午实验室外面在下雨屋里很安静大家都在调试模型。 C: 下午外面下着雨实验室里的人都在安静地做实验。 D: 下雨天大家都在实验室里做实验气氛很安静。 E: 雨天实验室里很安静大家都在工作。最后 E 说出来的句子并不是完全错误但和原句相比信息已经发生了明显变化认真调试自己的模型被压缩成了工作今天下午消失了实验室窗外在下小雨变成了笼统的雨天原句里“大家在调试模型”的专业语境被削弱了这就是普通深层网络里容易出现的一个直观问题每一层都在做完整变换原始信息每经过一层都可能被重新解释一次。层数少时这种偏差可能还不明显层数一多信息就容易在连续变换中被削弱、扭曲或丢失。用公式来表示普通网络更像是y F(x)也就是说输出完全依赖当前层学到的变换F(x)。如果当前层没有学好后面的层只能基于这个已经偏掉的表示继续加工。三、ResNet先保留上一版再做一点修改ResNet 的传话规则不一样。它不是要求每个人都重新组织整句话而是要求每个人先保留上一版然后只决定自己要不要做一点小修改。这时传话过程可能变成这样A: 今天下午实验室窗外在下小雨但屋里很安静大家都在认真调试自己的模型。 B: 我保留原句只把“在下小雨”说得更自然一点。 今天下午实验室窗外下着小雨但屋里很安静大家都在认真调试自己的模型。 C: 我保留主干只把“屋里很安静”改成“实验室里很安静”。 今天下午实验室窗外下着小雨实验室里很安静大家都在认真调试自己的模型。 D: 我觉得这句已经很好了不改。 今天下午实验室窗外下着小雨实验室里很安静大家都在认真调试自己的模型。 E: 我只补一点语气把“认真”换成“专心”。 今天下午实验室窗外下着小雨实验室里很安静大家都在专心调试自己的模型。这一次最后的句子仍然保留了原句最重要的含义大家都在调试自己的模型它只是对局部表达做了一些调整比如“小雨”的说法更自然“屋里很安静”更明确为“实验室里很安静”“认真”被换成了“专心”。这就是残差学习最重要的直觉新结果 旧结果 一点修正对应到 ResNet 的公式就是y F(x) x这里x就像上一版原话F(x)就像这一层给出的修改意见F(x) x就像“保留原话再加上一点修订”。所以 ResNet 并不是让每一层都推翻前面的表达而是在前一层的基础上做增量更新。四、为什么“不改”反而很重要这个传话规则里有一个看似不起眼但非常关键的能力如果某个人觉得上一版已经很好他可以选择不改。在传话游戏里D 的操作是我觉得这句已经很好了不改。翻译成 ResNet 的公式就是F(x) 0于是y F(x) x y 0 x y x这就表示当前残差块可以近似变成恒等映射也就是把输入原样传下去。这件事正好对应 ResNet 要解决的退化问题。理论上更深的网络至少应该可以模仿浅层网络因为新增的层只要不改变已有表示就行。但在普通网络中让一组卷积层精确学成“什么都不改”的恒等映射并不容易。而在 ResNet 里这件事被改写得更简单如果不需要改就让 F(x) 接近 0所以残差学习给深层网络提供了一个更容易达到的基线新增层不一定非要学出复杂变换它也可以先学会“少改一点”甚至“暂时不改”。五、反向传播错误信息怎么传回来传话游戏不只可以解释前向传播也可以帮助我们理解反向传播。假设老师最后检查 E 的结果发现 E 说的是今天下午实验室窗外下着小雨实验室里很安静大家都在专心调试自己的模型。原话是今天下午实验室窗外在下小雨但屋里很安静大家都在认真调试自己的模型。两句话的大方向没有错主要差别在于认真 - 专心 屋里很安静 - 实验室里很安静 在下小雨 - 下着小雨现在老师要把“哪里错了”这个反馈从 E 往回传给 D、C、B、A这就像神经网络里的梯度回传。六、普通网络的回传每个人都很难判断是谁改偏了在普通网络式传话里每个人都重新组织过整句话。于是最后出了偏差时反馈很难准确定位。E 会对 D 说最后这句话和原句有点不一样你看看是不是前面传偏了。D 再对 C 说好像意思整体有点变化但我也不确定是哪里开始变的。C 再对 B 说后面说法和原句不完全一致可能主干和细节都有点变化。传到越前面反馈越模糊。因为每一层都做过完整改写前面的层很难判断是我把主干改偏了是后面的人把细节改丢了是整体表达变化太大还是只有某个局部词语变化对应到普通网络的梯度公式就是dL/dx dL/dy * dF(x)/dx它表示前一层收到的梯度完全要经过F(x)这条复杂变换路径。如果网络很深这种变化率会一层层相乘。每层都缩小一点就可能梯度消失每层都放大一点就可能梯度爆炸。七、ResNet 的回传主干保留谁改了什么就检查什么在 ResNet 式传话里情况更清楚。因为每个人都保留上一版只做少量修改所以最后回传错误时可以更容易定位到每个人的修改。比如老师说主干“大家都在调试自己的模型”是对的只是部分修饰词发生了变化。那么 E 很容易知道我主要把“认真”改成了“专心”这个变化需要检查。D 也很容易知道我没有改所以我大概率没有引入新的偏差。C 会知道我把“屋里很安静”改成了“实验室里很安静”这是局部表达变化。B 会知道我把“在下小雨”改成了“下着小雨”这个变化也比较局部。也就是说ResNet 的回传更像是主干信息先保留重点检查每一层额外加的修改。对应到公式就是y F(x) x所以梯度回传时可以写成dL/dx dL/dy * dF(x)/dx dL/dy这行公式可以拆成两部分理解dL/dy * dF(x)/dx表示错误信号经过残差分支F(x)回传相当于检查“这一层具体改了什么”。dL/dy表示错误信号可以沿着 shortcut 直接回传相当于主干信息有一条更直接的反馈通路。这就是 ResNet 反向传播更顺畅的原因。它不是只靠复杂变换路径传梯度而是额外保留了一条恒等路径。这样即使残差分支在训练初期还不稳定前面的层也仍然能收到更直接的误差信号。八、这个类比对应到 ResNet 的哪些核心点这个传话游戏可以帮助我们抓住 ResNet 的几个关键直觉。第一普通网络更像“每一层都重写全文”y F(x)如果层数变多每一层的改写都会影响后续表达信息可能在不断变换中逐渐偏移。第二ResNet 更像“保留上一版再做少量修订”y F(x) x这样每一层不必从零生成完整表示而是学习相对于输入的增量。第三残差学习让恒等映射更容易实现如果 F(x) 0那么 y x这意味着当某些层暂时不需要做复杂变换时它们可以更容易接近“不改动输入”的状态。第四shortcut 让梯度回传多了一条直接路径dL/dx dL/dy * dF(x)/dx dL/dy多出来的dL/dy就是残差连接带来的直接回传项。九、这个类比也有边界虽然传话游戏很好理解但它毕竟只是类比不能把它当成神经网络训练的完整解释。真实的 ResNet 里每一层不是人在主动判断“我要不要改”而是通过损失函数和反向传播自动调整参数。网络也不是在处理自然语言句子而是在处理高维特征图。shortcut 是否能直接相加还要求两条路径的特征图尺寸和通道数能够匹配如果不匹配论文中会使用 projection shortcut 来调整维度。因此这个类比最适合帮助我们理解 ResNet 的直觉而不是替代严格的网络结构和优化分析。十、小结用一句话记住 ResNet如果用传话游戏来总结 ResNet我会这样说普通网络像是每个人都重新说一遍整句话ResNet 则像是每个人先保留上一版再只修改自己认为需要调整的部分。这句话背后的数学形式就是y F(x) x也正因为有了这个结构ResNet 在前向传播时更容易保留已有信息在反向传播时也能让梯度沿着 shortcut 更直接地传回前面。它解决退化问题的关键不是简单地“网络变深了”而是让深层网络的每一段都从“完整重建”变成了“增量修正”。上一篇文章更偏严谨地解释了残差学习的数学原理这一篇则用传话游戏把直觉补上。两篇合在一起看ResNet 最核心的思想就比较完整了深层网络不一定要每层都重新发明表示很多时候学会在已有表示上少量修正反而是更稳定、更高效的方式。参考文献He, K., Zhang, X., Ren, S., Sun, J. (2015).Deep Residual Learning for Image Recognition. arXiv:1512.03385.
返回列表