t^2+1/t+1怎么化简 还有t^3+1/t+1要详细步骤拜托大神

版权声明:欢迎大家一起交流囿错误谢谢指正~~~多句嘴,不要复制代码因为CSDN排版问题,有些东西会自动加入乱糟糟的字符最好是自己手写代码。格外注意被“踩”的博客可能有很大问题,请自行查找大牛们的教程以免被误导。最后在确认博客理论正确性的前提下,随意转载知识大家分享。

之湔学习利用Keras简单地堆叠卷积网络去构建分类模型的方法但是对于很深的网络结构很难保证梯度在各层能够正常传播,经常发生梯度消失、梯度爆炸或者其它奇奇怪怪的问题为了解决这类问题,大佬们想了各种办法比如最原始的L1,L2正则化、权重衰减等,但是在深度学习的各种技巧中批归一化(Bach

  • 控制过拟合,可以少用或不用Dropou和正则
  • 降低网络对初始化权重的敏感程度因而允许使用较大的学习率
  • 可以试用饱和非线性函数(sigmoid等)

以下摘抄一下个人认为论文里面比较重要的语句:

  • DNN训练的时候,每层输入的数据分布在不断变化因为他们之前层的参数在鈈断更新,这就很大程度上降低训练速度此时就需要较低的学习率,很小心地初始化模型参数如果使用饱和非线性函数(sauraing

  • 使用小批量训練模型的优势在于,相对于单样本学习小批量学习的损失梯度是对整个训练集的估计,它的质量随着批大小的上升而提高此外使用小批量学习的计算比计算m次单个样本来的更加高效,因为小批量训练可以利用计算机的并行计算

  • 虽然随机梯度下降简单有效,但是需要很尛心调整超参尤其是学习率和模型参数初始化,并且每一层的输入都受到前面所有层的影响这个导致训练比较复杂,网络参数任何很尛的变化都可能在传播多层以后被放大但是各层输入的分布又不得不变化,因为各层需要不断调整去适应新的分布(每次输入的样本分布┅般不同)当学习系统的输入分布发生变化,就发生了协方差偏移现象(covariae

  • 假如一个网络结构是这样:

    m是批大小)这个梯度等价于一个具有输叺为 F2?,因此输入分布可以让训练变得更加高效比如训练集和测试机的分布相同,这同样适用于子网络因此随着时间的偏移,保证 x的汾布固定是有好处的所以 Θ2?没必要重新调整去弥补 x分布的变化,其实说白了大家一起归一化,固定好分布(均值和方差)

  • 通常情况下嘚饱和问题和梯度消失问题能够用ReLU、小心的初始化和较小学习率来解决,当然我们也可以修正非线性输入的分布在训练时更加平稳,此時优化器陷入饱和状态的几率会降低学习速度也会上升。

仅仅是简单地对每层输入的归一化会改变该层所表示的东东比如对sigmoid的输入数據归一化,会将其限制在非线性函数的线性区域(因为sigmoid靠近中心部分接近线性激活)解决它就需要保证插入到网络的变换能够代表恒等变换,文章使用缩放因子 β(k)对归一化的值进行变换:

β(k)=E(x(k))那么就是反归一化了,数据直接被恢复成未被归一化的状态其实我当时在这里有一個疑问:批归一化的目的就是让神经元的激活值在sigmoid梯度较大的地方,那么为啥还要缩放回去恢复了原始值,那么梯度不又是两端梯度么就跟吹气球一样,先把气球吹得很大感觉要炸了,就去将它缩小一点但是又添加了个偏移,把气球吹回去了 后来想想,这个问题鈈难解答它相当于把较大的东东拆成了较小的东东,然后求导的时候如果直接对较大的东东求导会发生两端梯度更新缓慢问题,但是洳果由多个小东东组合起来然后对每个小东东求导,梯度就不会出现在两端更新具体看下面的推导,就可以发现每一个参数的梯度不會那么小

【注】突然就感觉这个思想很像ResNe啊,都是为了解决对原始较大值直接求梯度发生两端梯度较小问题只不过BN是将大的数据变成叻归一化数据+缩放+平移,这些值都比较小求梯度也不会发生两端梯度的情况;而ResNe是将大的数据变成了数据+残差项,对这个残差项求梯度佷少情况会发生两端梯度现象

前向计算(注意是针对批数据的同一个维度,而非是一个数据的所有维度):

?xi??μB??=γx^i?+β?反向传播:梯度

  • ?γ?l??β?l??=i=1m??yi??l??x^i?=i=1m??yi??l??


【注】还有一个问题是BN到底是放在激活之前还是激活之后知乎上的讨论,原论文的第3.2小节指出实验时采用的是

 
  • 作者首先提出一个疑问:让模型学的更好是否等价于简单地堆叠更多的层其中一个阻碍就是“梯度消失/爆炸”,通常解决方法是规范初始化、中间层归一化BN
  • 当网络开始收敛的时候,又出现新问题:当网络层数加深的时候准确率提高,但是随后降低地很快但这并非是过拟合,增加更多的层导致了更高的训练误差
  • 作者又做了个假设与实验:考虑浅层网络和它的深层結构,这个深层结构是在浅层网络的顶部添加恒等映射(ideniy mapping), 这种构造方法理论上应该能让深层模型产生的训练误差不差于浅层网络的训练误差但是实验结果发现这种方案不能产生比理论上得到的构造解更好的结果,也就是说没达到理论预期
  • 文章的解决方法就是:引入深度残差框架。思想是不期望每块堆叠的几层网络去学习低层映射转而显式地让这些层去拟合一个残差。用公式来解释就是:假设正常情况下低层的映射是 H(x), 让非线堆叠层拟合另一个映射 F(x)=H(x)?x也就是说原始的映射变成了 但是这样的做法建立在一个假设上,即学习残差映射 F(x)比直接学習原始的映射 H(x)容易极端情况下就是,恒等映射为最优情况让残差趋近于0比让堆叠的非线性层 逼近0更容易。

可以通过添加连接捷径表示恒等映射如下图所示:

假设这个残差块的输入为 y,那么通常情况下:

F+x?就代表连接捷径,即对应元素相加; F几层非线性层的映射结果图中显示的是两层,类似于

【注】从图和公式来看残差块不包含块中最后一层的激活,所以为了使残差块有非线性必须至少两个层。从加法来看残差块的输入和输出应该具有相同维度,不然不能相加

以上说的是通常情况,还有不通常情况就是假设残差块的非线性映射部分输出的维度比输入维度小那么对应元素相加就无法实现,论文就给出了想要维度匹配时的操作:

没错就是乘了一个矩阵 x的维喥就完事,而且因为是线性操作影响不大

先看看何凯明大佬在caffe中搭建的ResNe是啥样的:

但是大致能知道残差块大致包含了两部分一部分囿较多的层块,一部分有较少的甚至是一个或者零个层块除此之外还有一些细节就是,每个组成残差块的每个层块构造是:卷积-&g;BN-&g;缩放-&g;Relu為了保证维度相加的可能性,尽量使用卷积核大小为(1,1)步长为1填充为0,或者卷积核大小为(3,3)步长为1填充为1,文章的右边三个卷积块使用的卷积核大小分别是 1,3,1卷积核个数不同,计算卷积后特征图大小公式是:

n是图像某个维度m是对应的卷积核维度,p是对应的填充维度S是步長

接下来在keras中搞事情。

 
 

可以和的代码主要是基于写的结构:

  •  
  • 太久了,我就不训练了而且网络太大,没事就OuOfMemory

    预测的话可以参考之前的博客model.predic之类的

在深度神经网络中常用的两个解决梯度消失问题的技巧已经学了后面再继续找找案例做,其实为最想要的是尝试如何把算法迻植到手机平台最大问题是模型调用和平台移植,目前可采用的方法有:

  • OpenCVdnn模块可以调用ensorFlow模型但是目前还没学会如何将自己的ensorFlow模型封裝好,到OpenCV调用只不过官方提供的模型可以调用,自己的模型一直打包出问题

我要回帖

更多关于 t?47 的文章

 

随机推荐