深度学习常见问题

文章介绍了深度学习中的优化算法,如SGD及其变种,以及ResNet解决深度网络退化问题的残差结构。此外,还提到了U-Net在图像分割中的应用和卷积操作的基本概念。最后,提及了过拟合问题和Transformer模型在序列处理中的重要性。
摘要由CSDN通过智能技术生成

基本流程:准备数据->Dataloader 加载数据->创建网络模型->损失函数->优化器->训练->验证

优化器

优化问题定义为寻找神经网络上的一组参数  , 能够显著地降低代价/损失函数 , 该代价函数通常包括整个训练集上的性能评估和额外的正则化项。

  1. 随机梯度下降(SGD, stochastic gradient descent)

        根据训练过程中每一次迭代使用的数据量的大小, 可以分为批量梯度下降随机梯度下降小批量随机梯度下降等三种优化算法。根据不同的数据量和参数量,可以选择一种具体的实现形式。

        但是问题就是由于训练数据多样,容易朝偏离网络最优点方向训练,网络训练不稳定。

        常见的改进方法主要从以下两个方面进行改进: 学习率衰减梯度方向优化,其中学习率衰减可以理解为在对参数更新的步数大小做调整,而梯度方向优化可以理解为对更新的方向做调整

        2. SGDM(加入了一阶动量)

        引入了动量 充当速度角色,它代表参数在参数空间移动的方向和速率。

        3. AdaGrad(加入了二阶动量)

        优点:学习率学习数据的特征自动调整其大小。对于那些只有少部分数据含有的特征,对应神经元权重获得更新机会。

        特点:Adagrad算法的缺点是在经过一定次数的迭代依然没有找到最优点时,由于这时的学习率已经非常小,很难再继续找到最优点。

        4. RMSProp

        5. Adam

        Adam(Adaptive Moment Estimation)自适应矩估计,是另一种自适应学习率的算法。

ResNet

(二十七)通俗易懂理解——Resnet残差网络 - 知乎 (zhihu.com)

1.产生原因:

随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。这就是网络的退化现象。

退化现象让我们对非线性转换进行反思,非线性转换极大的提高了数据分类能力,但是,随着网络的深度不断的加大,我们在非线性转换方面已经走的太远,竟然无法实现线性转换。显然,在神经网络中增加线性转换分支成为很好的选择,于是,ResNet团队在ResNet模块中增加了快捷连接分支,在线性转换和非线性转换之间寻求一个平衡。

2. 网络架构

 (a)快捷连接,弱化梯度消失问题;

(b)降采样的构建块,减少参数;

        常见于ResNet50/101/152(右图),一般称整个结构为一个”building block“。其中右图又称为”bottleneck design”,目的一目了然,就是为了降低参数的数目,第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

3. 细节问题

如图1所示,如果F(x)和x的channel个数不同怎么办,因为F(x)和x是按照channel维度相加的,channel不同怎么相加呢?

他们的channel个数一致,所以采用计算方式:

虚线的的Connection部分(”第一个绿色矩形和第三个绿色矩形“)分别是3x3x64和3x3x128的卷积操作,他们的channel个数不同(64和128),所以采用计算方式:

其中W是卷积操作(用128个(3x3)x64的filter),用来调整x的channel维度的;

4. resnet50 和 resnet101

        首先我们看一下表2,上面一共提出了5中深度的ResNet,分别是18,34,50,101和152,首先看表2最左侧,我们发现所有的网络都分成5部分,分别是:conv1,conv2_x,conv3_x,conv4_x,conv5_x,之后的其他论文也会专门用这个称呼指代ResNet50或者101的每部分。

        拿101-layer那列,我们先看看101-layer是不是真的是101层网络,首先有个输入7x7x64的卷积,然后经过3 + 4 + 23 + 3 = 33个building block,每个block为3层,所以有33 x 3 = 99层,最后有个fc层(用于分类),所以1 + 99 + 1 = 101层,确实有101层网络;

        注:101层网络仅仅指卷积或者全连接层,而激活层或者Pooling层并没有计算在内;

        这里我们关注50-layer和101-layer这两列,可以发现,它们唯一的不同在于conv4_x,ResNet50有6个block,而ResNet101有23个block,查了17个block,也就是17 x 3 = 51层。

U-Net

它是在FCN的基础上构建,它的U型结构解决了FCN无法上下文的信息和位置信息的弊端。

  • 编码:前半部分是编码, 它的作用是特征提取(获取局部特征,并做图片级分类),得到抽象语义特征由两个3x3的卷积层(RELU)再加上一个2x2的maxpooling层组成一个下采样的模块,一共经过4次这样的操作
  • 解码:利用前面编码的抽象特征来恢复到原图尺寸的过程, 最终得到分割结果(掩码图片),由一层反卷积+特征拼接concat+两个3x3的卷积层(ReLU)反复构成,一共经过4次这样的操作,与特征提取网络刚好相对应,最后接一层1*1卷积,降维处理,即将通道数降低至特定的数量,得到目标图。

卷积

(87条消息) 卷积原理:几种常用的卷积(标准卷积、深度卷积、组卷积、扩展卷积、反卷积)_chenyuping666的博客-CSDN博客

卷积运算的过程就是通过卷积核扫描输入矩阵的元素,将卷积核和扫描对应的元素相乘再相加,得到一个输出,通过不断地滑动,得到最后的输出矩阵。其运算过程如下:

在上边的例子中,采用3×3的卷积核卷积5×5的输入特征矩阵。从上述运算可以看出两个不足。

  • 第一个是通过卷积后输出矩阵相对于输入矩阵变小了,当参与多层的神经网络时,矩阵会变得越来越小。这对于人信息提取是不利的。
  • 第二个是中间元素参与运算的次数要远大于周围元素,尤其是当输入矩阵是高维时,差距会更大,因此在计算中我们会丢失掉一部分的边缘信息。

为了解决以上两点问题,我们在输入矩阵的周围进行填充。

如果输入矩阵的大小是n×n,卷积核的大小是f×f,则输出矩阵的大小为 (n-f+1)×(n-f+1)。

如上图所示,我们在输入矩阵的周边像素周围都填充一个元素,用p表示填充数量,图中展示的填充p为1。

用p表示填充数量,则输出矩阵的大小为(n+2p-f+1)×(n+2p-f+1)

过拟合

Transformer

十分钟理解Transformer - 知乎 (zhihu.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值