深度学习基础问题

一、Sigmoid激活函数和梯度消失问题

1、Sigmoid函数

梯度消失:sigmoid函数只有在0附近梯度值正常,在两侧都接近于0,出现梯度消失

ReLU函数在大于0的部分梯度为常数,所以不会产生梯度消失,具有较好的激活性

注:梯度可以理解为斜率

深度学习基础问题_第1张图片

图片参考: (1条消息) Sigmoid和Relu激活函数的对比_bl128ve900的博客-CSDN博客_sigmoid和relu

二、批归一化(Batch Normalization)

做法:使中间层输出结果标准化,网络层的输出具有稳定的分布;

优点:

  • 可以是学习快速进行;

  • 可以降低模型对初始值的敏感性;

  • 可以从一定程度上抑制过拟合;

标准化(样本均值+方差)后 对数据做缩放和平移

  1. 样本均值:对所有样本的同一个通道(即同一特征)的像素点计算均值

  2. 方差:对所有样本的同一个通道(即同一特征)的像素点计算方差

eg:数据格式 [N,C,H,W]

沿着C维度展开,分别对每个通道计算N个样本总共N×H×W个像素点计算均值和方差

解决训练集和测试集中同一样本保存在不同mini-Batch中,导致最后预测结果不同的问题

训练时使用全局均值与方差,预测时不计算均值与方差,使用训练时的数据

BatchNorm——论文阅读理解部分

1、解决的问题:

  • 解决训练时每层神经网络参数变化复杂性导致的:模型初始化参数选择和较低的学习率

  • 需要不断适应层输入分布的变化:当学习的输入分布发生变化时,会经历协变量转移,通过域适应解决

    协变量:神经网络的参数

    协变量转移:协变量是不可控的且在训练过程中是必须变化的,且对输出值会产生影响,所以当参数发生变化时,就发生了协变量转移

    域适应:迁移学习中, 当源域和目标的数据分布不同 ,但两个任务相同时,这种特殊的迁移学习叫做域适应

    在迁移学习中,当协变量的值发生了变化,输出的样本分布也就发生了变化,从而产生了源域与目标域分布差异,而若是我们能够纠正这个协变量的迁移,就能够将源域与目标域结合起来了训练模型。

  • 较低的学习率和初始化参数选取使非线性模型饱和困难

效果:

  • 可以适当提高学习率

  • 模型初始化参数不需要那么小心

  • 规范化在特定情况可以不需要Dropout

MiniBatch

MiniBatch上的损失梯度是对训练集上的梯度的估计,质量随着批大小的增加而提高

三、Dropout

问题:训练深度神经网络时:

  • 容易过拟合

  • 费时

Dropout说的简单一点就是:我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。

训练时:

使用五个结构完全一样的模型,每个模型都有一定程度的过拟合

每次随机删除一部分神经元,不向前传播所携带的信息,相当于每次都是不同模型在学习

测试时:

以五个网络的平均值作为预测结果,效果好于单个模型

问题:

训练时随机丢弃神经元导致输出数据变小,但预测时不丢弃神经元,使预测和训练时的数据分布不一样。

解决:

  • downgrade_in_infer,预测时不丢弃神经元,把他们的数值变小;

  • upscale_in_train,训练时随机丢弃一部分神经元,但是把保留的那些神经元数值放大(根据丢弃比率放大);预测时原样输出所有神经元的信息;

你可能感兴趣的:(深度学习,深度学习)