resNet作为如今极其流行的深度学习架构,我们对其论文进行了研究,并且查阅了相关资料,现在我们想将其系统的描述一下。能力有限,文章供小白读者进行学习,如有问题希望大家指正。下面的正文是我在学校展示时写作的稿件,同时附上当时使用的PPT,有时间我会重新排版。
https://download.csdn.net/download/weixin_44485055/11937731
ppt1:同学们好老师好,今天我们presentation的主题是Deep Residual Learning for Image Recognition 深度残差学习在图像别中的应用
ppt2:我们的主要讲解结构如下:resNet是深度学习领域里目前非常炙手可热的架构,至少在cv领域的同学而言,这是非常值得一读的论文
ppt3:首先我们先来看一下需要解决的问题
ppt4:随着计算机性能和学界的理论发展,我们的神经网络架构也会随之向复杂化发展。
理论上而言,神经网络是受启发于动物神经系统,越复杂越深层的架构理应由更加优秀而鲁棒的学习能力,
ppt5:我们原文的作者向大家提出了这样一个问题:Is learning better networks
as simple as stacking more layers?
ppt6:研究表明,当神经网络层次增加时,训练集和测试集中更深层的神经网络的错误率更高。即,随着神经网络层次增加产生了退化。我们常用的正向传播算法和反向传播算法,有一定的局限性,我相信,世界上不存在完美的算法,每个算法都有局限性,但不完美正是这个世界完美的地方。
本文中提出一种新的架构,主要将大大改进深层神经网络中的退化问题。
ppt7:创新点主要在于,引入了残差块的结构
ppt8:传统神经元之间的信息传递,一般分为一下几个步骤:在前向传播算法中,首先发送端传入数据,根据其传入的不同边,会相应的乘以不同的权重,之后所有汇入输出端神经元的边,所拥有的乘积值,会进行求和;而在卷积神经网络中,实际上一次卷积运算,就实现了上面所述的所有操作;其次,求出的和值,会在接受端神经元中传入激活函数,此时得到的将是本位置假设函数的对应值。最后本次的接受端神经元,作为新一轮的发送端神经元,你求到的假设函数的值a,将作为新的数据,同时传给下一层的全部神经元。
我们暂时忽略卷积层与全连接层之间的差异,而讨论共性。残差网络中,我们在这一过程中添加了新的操作,一个残差块可以由多个层组成,我们的输入端会在给自己的下层传递数据x的同时,会给新的路径也传入x,这里的x是指值为x。
两个x走向不同,一个会以类似传统网络的路径一层一层的和权重相乘,进行线性求和,传入激活函数,另一个x在全程值不变,而两个岔路再次交会的时候,会进行求和操作,就是这里的addition。
ppt9:因此,在一般的神经网络中,原本传入reLu函数的应该是各个输入值和权值的,乘积的和,而在残差单元中,会变成这个和值,再加上从很远的层中传来的x,对了这个连接在文章中被称为shortcut connection,具体这个shortcut会cut几层其实都可以,并不是只能跳过一层。
(图中的F(x)大概是类似于z的东西)
ppt11:接下来主要讲一下具体的网络架构,我们给一个34层resNet的架构,具体的残差网络架构,是由大量残差单元堆叠而成。
由于都使用了相等卷积(same convolution),因此维度得以保留
这里的虚线指的是池化层或者类池化层,需要调整矩阵的维度,本架构可以类似于,卷积层,卷积层,卷积层,池化层,卷积层,卷积层,卷积层,池化层,这样的循环
(残差块不会影响架构性能的解释,要用到正则化)
ppt12:与其他实验方法的对比:a、imageNet测试集上,我们选择与plain网络进行对比,我们使用的plain网络有如下特点:
ppt13:它将选用3*3滤波器,(i) 输出特征映射尺寸相同的层含有相同数量的滤波器;
(ii) 如果特征尺寸减半,则滤波器的数量增加一倍来保证每层的时间复杂度相同。我们直接用步长为2的卷积层进行下采样。
网络以一个全局平均池层和一个带有Softmax的1000路全连接层结束。
ppt14:经过测试发现,随着层数的升高,plain网络会发生退化,而resNet不会有这样的问题,不仅如此,34层的架构下,resNet显然有着更加优秀的表现
ppt15:在CIFAR-10数据集中,resNet架构同样要优于FitNet和highWay等架构
ppt16:而当用同为resNet架构的不同深度的架构进行互相比较时,错误率不会因为深度的增加而增加,同时,即使铺设到1200层的超深度网络,其训练效果依旧强大
ppt17:首先我们要讲一下深度学习中,神经网络可能会出现的问题,包括但不限于梯度消失/梯度爆炸,退化问题。对于我们这些菜鸡而言,我并没有查阅到退化问题的定论,我也不知道有没有定论,因为现在有人认为退化问题的原因包括但不限于梯度爆炸/梯度消失,但是又有人认为完全是两回事。
(在《Why is it hard to train deep neural networks? Degeneracy, not vanishing gradients, is the key by Emin Orhan 》一文中,将梯度问题定义为,由于激活函数特性引起的,一旦深度达到一定程度,每个样本都会出现的,神经网络难以收敛的问题。而退化问题整个样本数据集中,准确率因为层数增加而降低的问题。)
还有一点就是,论文作者对于论文解决了什么问题还没有结论,甚至于大神自己的论文都出现了自相矛盾的情况。他在本文中强调resNet只是用于解决退化问题,却在之后自己的相关论文中承认,resNet确实解决了梯度消失/梯度爆炸问题。参见本文作者的另一个论文《Identity Mappings in Deep Residual Networks》。而在本文中使用的shortcut connection,也被证明是可以很好的解决梯度消失/梯度爆炸问题。
对于残差网络到底解决了什么问题,学界也是一致争论,比如这篇论文《The Shattered Gradients Problem: If resnets are the answer, then what is the question?》。因此很抱歉的通知各位,我们也不知道这个论文解决了什么具体的问题,只能宽泛的认为它解决的是一种退化的问题,但这个退化问题到底是怎么来的,emmmmm,我要是能知道的话,现在应该能达到毕业要求了。
我们现在处于的人生阶段已经不应该再去追寻一个正确的标准答案,对错好分是小孩子才会有的观点,在确定与不确定之间摇摆,不断在争论中探索,才是科学的魅力所在,也是工科研究者对学术和国家应有的担当
但是为了凑十五分钟并且把这个问题说的详细些,我决定给把这个网络在实际使用中结局的梯度消失问题的原理,给推演一下,当然我们水平有限,无法推演到很透彻的程度:
ppt18:行业内论文众多,具体对象的表示方法也是众说纷纭,我们在此统一一下我们的表示方法,在之后的推理中,都会沿用。首先假设函数将使用h,代价函数使用J,同时,我们规定各个中间层传入的求和值,为z,传出的激活函数值为a。
ppt19:就我们在此处列出的普通神经网络而言,i为后面那层的神经元编号,打个比方,从hidden layer1传到hidden layer2,那么i就是hidden layer2中的神经元编号,j就是hidden layer1中的神经元编号。
(对于本页的第二个公式,i是指第l+1层神经元的编号)
ppt20:我们推理的理论基础来自于链式求导法则,同时默认在迭代时权重,将使用梯度下降算法去进行更新。更新值为这个Δw。
ppt21:现在以一个三层中间层的简单神经网络为例,为了防止大家忘记之前讲的变量意义,我们将各个变量的涵义重新标示在上面。根据链式求导法则,我们可以推出求导公式,如图。
ppt22:将各个求导公式化简之后,就是这样的
ppt23:现在我们来看激活函数,激活函数我们这里选择sigmoid函数,当然如果你选择tanh等函数也会又类似的效果,由于sigmoid函数的导数的最大值都是小于0.25的,如果连乘式子中有过多的这样的因子,会导致整个链式表达式会快速减小,最后可能收敛于0
ppt24:而一旦使用resNet的残差块架构,我们的梯度表达式就要修改成这里的样子,这里的第三个公式,直接是用的论文中给的公式,它只显示了损失函数对于a的导数,但是还是可以定性分析出梯度的求解效果。
这里第一个公式的h4和第三个公式的a(L)是一样的,相当于把中间的这部分链式表达式化简成了
这里的F函数,论文中称之为残差函数,(我觉得就是一个权重积求和的过程)
明显后面这个累加项,对于总体的样本,不可能为-1,因此括号中的因子,不会为0,有因为加项还有1的原因,所以不可能出现梯度消失的现象
这个式子是怎么推出来的呢,我们看下一张
ppt25:在残差网络中,我们计算某一层的权重梯度,将不再完全依赖于一层一层地向前反向传播,我们有这样的递推公式
根据递推公式,我们可以递归的计算出用a(l)表示a(L)的方法,将这个式子带入反向传播算噶的,梯度求解公式,可以化简为这样的公式,就推出来了,嗯,就酱紫