深度学习常见问题

1、神经网络类型众多,其中最为重要的是多层感知机。

在这里插入图片描述
多层感知机由感知机推⼴⽽来,最主要的特点是有多个神经元层,因此也叫深度神经⽹络。相⽐于单 独的感知机,多层感知机的第i层的每个神经元和第i-1层的每个神经元都有连接。

2、为什么使用深层表示?

  1. 深度神经⽹络是⼀种特征递进式的学习算法,浅层的神经元直接从输⼊数据中学习⼀些低层次 的简单特征,例如边缘、纹理等。⽽深层的特征则基于已学习到的浅层特征继续学习更⾼级的特征,从计算机的⾓度学习深层的语义信息。
  2. 深层的⽹络隐藏单元数量相对较少,隐藏层数⽬较多,如果浅层的⽹络想要达到同样的计算结 果则需要指数级增⻓的单元数量才能达到。

3、为什么深层神经网络难以训练?

  1. 梯度消失
    梯度消失是指通过隐藏层从后向前看,梯度会变的越来越⼩说明前面层的学习会显著慢于后⾯层的学习,所以学习会卡住,除⾮梯度变⼤。 梯度消失的原因受到多种因素影响,例如学习率的⼤⼩,⽹络参数的初始化,激活函数的边缘效应等。在深层神经⽹络中,每⼀个神经元计算得到的梯度都会传递给前⼀层,较浅层的神经元接收到的梯度受到之前所有层梯度的影响。如果计算得到的梯度值⾮常⼩,随着层数增 多,求出的梯度更新信息将会以指数形式衰减,就会发⽣梯度消失。
  2. 梯度爆炸
    在深度⽹络或循环神经⽹络(Recurrent Neural Network, RNN)等⽹络结构中,梯度可在⽹络更新的过程中不断累积,变成⾮常⼤的梯度,导致⽹络权重值的⼤幅更新,使得⽹络不稳定;在极端情况下,权重值甚⾄会溢出,变为nan值,再也⽆法更新。
  3. 权重矩阵的退化导致模型的有效⾃由度减少。 参数空间中学习的退化速度减慢,导致减少了模型的有效维数,⽹络的可⽤⾃由度对学习中 梯度范数的贡献不均衡,随着相乘矩阵的数量(即⽹络深度)的增加,矩阵的乘积变得越来越 退化。在有硬饱和边界的⾮线性⽹络中(例如 ReLU ⽹络),随着深度增加,退化过程会变得 越来越快。

4、前向传播与反向传播?

神经⽹络的计算主要有两种:前向传播(foward propagation, FP)作⽤于每⼀层的输⼊,通过逐层计算得到输出结果;反向传播(backward propagation, BP)作⽤于⽹络的输出,通过计算梯度由深到浅更新⽹络参数。

5、卷积

在这里插入图片描述
注意通道数设置,如inchannnel = 3,out channnel =128,指的是有128组 3个卷积核进行卷积

卷积层参数个数=hwlc 参数含义:h,w为滤波器的宽高本次为(33),l为输入数据的通道数本次为3,c为卷积层的通道数本次为2,所以本例的参数个数为333*2

6、如何计算 Pooling 层输出值输出值?

Pooling 层主要的作⽤是下采样,通过去掉 Feature Map 中不重要的样本,进⼀步减少参数数量。 Pooling 的⽅法很多,最常⽤的是 Max Pooling。Max Pooling 实际上就是在 nn 的样本中取最⼤ 值,作为采样后的样本值。下图是 22 max pooling:

在这里插入图片描述

7、激活函数

为什么需要激活函数?

  1. 激活函数对模型学习、理解⾮常复杂和⾮线性的函数具有重要作⽤。
  2. 激活函数可以引⼊⾮线性因素。如果不使⽤激活函数,则输出信号仅是⼀个简单的线性函数。 线性函数⼀个⼀级多项式,线性⽅程的复杂度有限,从数据中学习复杂函数映射的能⼒很⼩。
    没有激活函数,神经⽹络将⽆法学习和模拟其他复杂类型的数据,例如图像、视频、⾳频、语 ⾳等。
  3. 激活函数可以把当前特征空间通过⼀定的线性映射转换到另⼀个空间,让数据能够更好的被分 类。

为什么激活函数需要⾮线性函数?

  1. 假若⽹络中全部是线性部件,那么线性的组合还是线性,与单独⼀个线性分类器⽆异。这样就做不到⽤⾮线性来逼近任意函数。
  2. 使⽤⾮线性激活函数,以便使⽹络更加强⼤,增加它的能⼒,使它可以学习复杂的事物,复杂的表单数据,以及表⽰输⼊输出之间⾮线性的复杂的任意函数映射。使⽤⾮线性激活函数, 能够从输⼊输出之间⽣成⾮线性映射。

8、常见的激活函数及图像

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么Tanh收敛速度⽐Sigmoid快?
在这里插入图片描述

在这里插入图片描述

  1. 在区间变动很⼤的情况下,ReLu 激活函数的导数或者激活函数的斜率都会远⼤于 0,在程序实现就是⼀个 if-else 语句,⽽ sigmoid 函数需要进⾏浮点四则运算,在实践中,使⽤ ReLu 激活 函数神经⽹络通常会⽐使⽤ sigmoid 或者 tanh 激活函数学习的更快。
  2. sigmoid 和 tanh 函数的导数在正负饱和区的梯度都会接近于 0,这会造成梯度弥散,⽽ Relu和Leaky ReLu 函数⼤于 0 部分都为常数,不会产⽣梯度弥散现象。
  3. 需注意,Relu 进⼊负半区的时候,梯度为 0,神经元此时不会训练,产⽣所谓的稀疏性,⽽Leaky ReLu 不会产⽣这个问题。
  4. 稀疏激活性:从信号⽅⾯来看,即神经元同时只对输⼊信号的少部分选择性响应,⼤量信号被刻意的屏蔽了,这样可以提⾼学习的精度,更好更快地提取稀疏特征。当x < 0时,ReLU 硬饱和,⽽当x > 0时,则不存在饱和问题。ReLU 能够在x > 0时保持梯度不衰减,从⽽缓解 梯度消失问题。
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

如何选择激活函数?
选择⼀个适合的激活函数并不容易,需要考虑很多因素,通常的做法是,如果不确定哪⼀个激活函 数效果更好,可以把它们都试试,然后在验证集或者测试集上进⾏评价。然后看哪⼀种表现的更好, 就去使⽤它。 以下是常⻅的选择情况:

  1. 如果输出是 0、1 值(⼆分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。
  2. 如果在隐藏层上不确定使⽤哪个激活函数,那么通常会使⽤ Relu 激活函数。有时,也会使⽤ tanh 激活函数,但 Relu 的⼀个优点是:当是负值的时候,导数等于 0。
  3. sigmoid 激活函数:除了输出层是⼀个⼆分类问题基本不会⽤它。
  4. tanh 激活函数:tanh 是⾮常优秀的,⼏乎适合所有场合。
  5. ReLu 激活函数:最常⽤的默认函数,如果不确定⽤哪个激活函数,就使⽤ ReLu 或者 LeakyReLu,再去尝试其他的激活函数。
  6. 如果遇到了⼀些死的神经元,我们可以使⽤ Leaky ReLU 函数。

9、数据归一化

有的数据为0.1,有的数据是100,所以两者的权重参数差距会很大

  1. 归纳统⼀样本的统计分布性。归⼀化在之间是统计的概率分布,归⼀化在之间是统计的坐标分布。
  2. ⽆论是为了建模还是为了计算,⾸先基本度量单位要同⼀,神经⽹络是以样本在事件中的统计 分别⼏率来进⾏训练(概率计算)和预测,且 sigmoid 函数的取值是 0 到 1 之间的,⽹络最 后⼀个节点的输出也是如此,所以经常要对样本的输出归⼀化处理。
  3. 归⼀化是统⼀在 之间的统计概率分布,当所有样本的输⼊信号都为正值时,与第⼀隐含 层神经元相连的权值只能同时增加或减⼩,从⽽导致学习速度很慢。
  4. 另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的⽹络训练时间增加,并可能引起⽹络⽆法收敛。为了避免出现这种情况及后⾯数据处理的⽅便,加快⽹络学习速度,可以对输⼊信号进⾏归⼀化,使得所有样本的输⼊信号其均值接近于 0 或与其均⽅差相⽐很⼩。

为什么要归⼀化? 1. 为了后⾯数据处理的⽅便,归⼀化的确可以避免⼀些不必要的数值问题。
2. 为了程序运⾏时收敛加快。
3. 同⼀量纲。样本数据的评价标准不⼀样,需要对其量纲化,统⼀评价标准。这算是应⽤层⾯的 需求。
4. 避免神经元饱和。啥意思?就是当神经元的激活在接近 0 或者 1 时会饱和,在这些区域,梯度⼏乎为 0,这样,在反向传播过程中,局部梯度就会接近 0,这会有效地“杀死”梯度。
5. 保证输出数据中数值⼩的不被吞⾷。
在这里插入图片描述
归一化既可以数据输入之前,如
在这里插入图片描述
也可以加入到网络中间
局部响应归⼀化: LRN 层,对局部神经元的活动创建竞争机制,使其中响应⽐较⼤对值变得相对更⼤,并抑制其他反馈较⼩的神经元,增强了模型的泛化能⼒。

批归⼀化(BN):BN算法的优点:

  1. 减少了⼈为选择参数。在某些情况下可以取消 dropout 和 L2 正则项参数,或者采取更⼩的 L2正则项约束参数;
  2. 减少了对学习率的要求。现在我们可以使⽤初始很⼤的学习率或者选择了较⼩的学习率,算法 也能够快速训练收敛;
  3. 可以不再使⽤局部响应归⼀化。BN 本⾝就是归⼀化⽹络(局部响应归⼀化在 AlexNet ⽹络中存 在)
  4. 破坏原来的数据分布,⼀定程度上缓解过拟合(防⽌每批训练中某⼀个样本经常被挑选到
  5. 减少梯度消失,加快收敛速度,提⾼训练精度。
    在这里插入图片描述
    Weight Normalization和Batch Normalization⽐较:
    Weight Normalization 是对⽹络权值 进⾏ normalization,因此也称为 Weight Normalization;
    Batch Normalization 是对⽹络某⼀层输⼊数据进⾏ normalization。

Weight Normalization相⽐Batch Normalization有以下三点优势:

  1. Weight Normalization 通过重写深度学习⽹络的权重W的⽅式来加速深度学习⽹络参数收敛, 没有引⼊ minbatch 的依赖,适⽤于 RNN(LSTM)⽹络(Batch Normalization 不能直接⽤于RNN,进⾏ normalization 操作,原因在于:1) RNN 处理的 Sequence 是变⻓的;2) RNN 是 基于 time step 计算,如果直接使⽤ Batch Normalization 处理,需要保存每个 time step 下,mini btach 的均值和⽅差,效率低且占内存)。
  2. Batch Normalization 基于⼀个 mini batch 的数据计算均值和⽅差,⽽不是基于整个 Trainingset 来做,相当于进⾏梯度计算式引⼊噪声。因此,Batch Normalization 不适⽤于对噪声敏感 的强化学习、⽣成模型(Generative model:GAN,VAE)使⽤。相反,WeightNormalization 对通过标量 和向量 对权重 进⾏重写,重写向量 是固定的,因此,基于 Weight Normalization 的 Normalization 可以看做⽐ Batch Normalization 引⼊更少的噪声。
  3. 不需要额外的存储空间来保存 mini batch 的均值和⽅差,同时实现 Weight Normalization时,对深度学习⽹络进⾏正向信号传播和反向梯度计算带来的额外计算开销也很⼩。因此,要 ⽐采⽤ Batch Normalization 进⾏ normalization 操作时,速度快。 但是 Weight Normalization 不具备 Batch Normalization 把⽹络每⼀层的输出 Y 固定在⼀个变化范围的作⽤。因此,采⽤ Weight Normalization 进⾏ Normalization 时需要特别注意参数初始值的选 择。

10、权重偏差初始化

11、学习率

常⽤到的⼏种学习率衰减⽅法有:分段常数衰减、多项式衰减、指数衰减、⾃然指数衰减、余弦衰减、线性余弦衰减、噪声线性余弦衰减

12、dropout

深度学习可能存在过拟合问题——⾼⽅差,有两个解决⽅法,⼀个是正则化,另⼀个是准备更 多的数据,这是⾮常可靠的⽅法,但你可能⽆法时时刻刻准备⾜够多的训练数据或者获取更多 数据的成本很⾼,但正则化通常有助于避免过拟合或减少你的⽹络误差。
Dropout可以随机删除⽹络中的神经单元,它为什么可以通过正则化发挥如此⼤的作⽤呢? 直观上理解:不要依赖于任何⼀个特征,因为该单元的输⼊可能随时被清除,因此该单元通过这种 ⽅式传播下去,并为单元的四个输⼊增加⼀点权重,通过传播所有权重,dropout将产⽣收缩权重的 平⽅范数的效果,和之前讲的L2正则化类似;实施dropout的结果实它会压缩权重,并完成⼀些预防 过拟合的外层正则化;L2对不同权重的衰减是不同的,它取决于激活函数倍增的⼤⼩。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值