大数据,机器学习,人工智能人工智能/模式识别/机器学习精华专题人工智能时代(AI)

10分钟AI - 让深度学习更深一点(ResNet)

2019-01-31  本文已影响2人  AI小白笔记
image

注意,阅读本文需要有基本的导数知识以及神经网络反向传播的概念,如果没有,请自行百度后再来光顾。这篇文章不会讲解ResNet的具体结构,只关注其中的Connection部分。

首先,我们需要明确几个概念:

  1. 越深层次的神经网络就能提取更潜藏的数据特征(在不损失广度的情况下)

  2. 数据特征是以每层的权重矩阵来表示的

  3. 权重矩阵是根据反向传播训练的

  4. 反向传播基本等同于梯度(导数)优化

OK,基本知识就到这里了。接下来我们说一下在残差连接出现之前,神经网络遇到的问题。

问题1:深度固然好,但不是你想深就能深的。

在解释这个问题之前,我们借用一个比较经典的动图:

image

从图中可以明显的看到,在反向传播的过程中,梯度的更新量会随着层级的加深成指数级的下降,在网络浅层的特征空间里,由于连乘了[0,1]之间的小数,梯度更新量几乎变成了0(梯度弥散),导致浅层部分的参数几乎得不到训练,上梁不正下梁歪,如此这般再加深n层又有什么意义。

问题2:深度学习不深,怎么办?

科学家们当然不会束手待毙,想尽了各种办法来解决网络深度的问题。从最开始的通过逐层预训练,到Relu函数的出现,再到某位大神提出加入额外监督的中间层辅助损失等等,都是从各种高大上的角度来解决浅层梯度接近0的问题。可惜大多数都是治标不治本。直到有一天,灵感的横空出世。

Less is More

再次回顾一下权重更新过程中梯度的计算方法(无脑链式法则),这里为了便于表达,用F代替了反向传播的层损失函数:

梯度弥散正是因为连乘一堆小数导致d慢慢逼近0导致的。仔细回忆一下小学五年级的数学课本,然后回答一下最直观的解决这个问题的方法是什么? 最保险的方法就是让连乘中的每一项都至少大于1不就好了。怎么做呢?

某位大神惊天地泣鬼神的修改了函数F:

顺便呈上一个经典的连接架构图:

image

是不是目瞪口呆?就是这么简单,就是这么无脑。等等,是不是发现了一点问题,我给出的公式在x前有一个W,而示意图没有。这是因为在残差链接的过程中,F(x)的纬度并不总是能等同于x,而在x前加上一个W是为了将x的维度转换成跟F(x)相同,相同的维度才能线性叠加。在改造了特征映射函数F之后,就可以完美的保证梯度在传递过程不丢失的问题了。当然,大道至简,这种形式的改造在其他方面也有着非常重要的作用:

  1. 网络对损失更敏感(证明可以自行查询百度)

  2. 解决了深层网络梯度消失的问题

  3. 打破了网络对称性,使得网络表征学习能力提升(以后会专门有一章讲解网络对称性与权重矩阵的关系)

强调:事实上,经过研究,引起网络无法加深的原因除了梯度弥散之外,更深层次的理由是由于权重矩阵的退化现象,由于本篇还是属于小白范畴,所以略过。感兴趣的同学可以百度先行了解。

上一篇下一篇

猜你喜欢

热点阅读