天天看点

自学记录《深度学习500问》之 深度学习基础

深度学习基础

      • 1.为什么使用深层表示?
      • 2.为什么深层神经网络难以训练?
      • 3.深度学习和机器学习有什么不同?
      • 4.前向传播与反向传播
      • 5.神经网络的输出
      • 6.卷积神经网络的输出
      • 7.池化层的输出
      • 8.神经网络更“深”有什么意义?
      • 9.什么是超参数?
      • 10.如何寻找超参数的最优值?
      • 11.超参数搜索的一般过程?
      • 12.为什么需要非线性激活函数?
      • 13.常见的激活函数
      • 14.常见的激活函数的导数
      • 15.激活函数有哪些性质?
      • 16.如何选择激活函数?
      • 17.使用Relu激活函数的优点?
      • 18.什么时候可以使用线性激活函数?
      • 19.怎样理解Relu(<0时)是非线性激活函数?
      • 20.softmax函数如何应用于多分类?
      • 21.cross_entropy交叉熵损失函数?
      • 22.为什么Tanh收敛速度比Sigmoid块?
      • 23.为什么需要batch_size?
      • 24.batch_size如何选择?
      • 25.在合理的范围内,增大batch_size有何好处?
      • 26.盲目增大batch_size有何坏处?
      • 27.调整batch_size对训练效果的影响到底如何?
      • 28.归一化的含义?
      • 29.归一化的目的?
      • 30.归一化如何提高求解最优解的速度?
      • 31.归一化有哪些类型?
      • 32.局部响应归一化?
      • 33.什么是批归一化(Batch Normalization)?
      • 34.批归一化(BN)算法的优点?
      • 34.批归一化(BN)算法流程?
      • 35. 批归一化和群组归一化比较
      • 36. Weight Normalization
      • 37.Batch Normalization在什么时候用比较合适?
      • 38.为什么无监督预训练可以帮助深度学习?
      • 39.什么是模型微调fine tuning
      • 40.微调时候网络参数是否更新?
      • 41.fine-tuning 模型的三种状态
      • 42.权重偏差初始化
      • 43.学习率的作用?
      • 44.为什么要正则化?
      • 45.什么是dropout正则化?
      • 46.dropout的缺点?
      • 47.深度学习中常用的数据增强方法?
      • 48.代价函数,损失函数,目标函数区别?

1.为什么使用深层表示?

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

2.为什么深层神经网络难以训练?

  1. 梯度消失:从隐藏层从后向前看,梯度会变得越来越小,说明前面层的学习效果远低于后面的层,所以学习会卡住。
梯度消失的原因受到多种因素影响,例如学习率的大小,网络参数的初始化,激活函数的边缘效应等。在深层神经网络中,每一个神经元计算得到的梯度都会传递给前一层,较浅层的神经元接收到的梯度受到之前所有层梯度的影响。如果计算得到的梯度值非常小,随着层数增多,求出的梯度更新信息将会以指数形式衰减,就会发生梯度消失。下图是不同隐含层的学习速率:
自学记录《深度学习500问》之 深度学习基础
  1. 梯度爆炸:在深度网络或循环神经网络等结构当中,梯度在网络中不断累积,变成非常大,导致网络的权重参数大幅更新,使网络不稳定。在极端情况下,权重值甚至会溢出,变为NaN值,再也无法更新。

若激活函数的导数的绝对值小于1**,那么经过多次连乘后传到前面层的误差项就接近于0,那么就会导致前面层的参数几乎没有更新,即梯度消失。反之,若激活函数的导数的绝对值大于1,多次连乘后就会非常大,导致梯度爆炸。**

  1. 权重矩阵的退化导致模型的有效自由度减少

​ 参数空间中学习的退化速度减慢,导致减少了模型的有效维数,网络的可用自由度对学习中梯度范数的贡献不均衡,随着相乘矩阵的数量(即网络深度)的增加,矩阵的乘积变得越来越退化。在有硬饱和边界的非线性网络中(例如 ReLU 网络),随着深度增加,退化过程会变得越来越快。Duvenaud等人2014年的论文里展示了关于该退化过程的可视化:

自学记录《深度学习500问》之 深度学习基础

随着深度的增加,输入空间(左上角所示)会在输入空间中的每个点处被扭曲成越来越细的单丝,只有一个与细丝正交的方向影响网络的响应。沿着这个方向,网络实际上对变化变得非常敏感。

3.深度学习和机器学习有什么不同?

机器学习:利用计算机使用概率学、统计学等知识,输入数据,让计算机学会新知识。机器学习的过程,就是训练数据去优化目标函数。

深度学习:是一种特殊的机器学习,具有更强大的能力和灵活性,它是通过学习将世界表示为嵌套的层次结构,由浅至深提取特征。

主要区别:传统的机器学习需要定义一些手工特征,从而指向性的去提取目标信息,非常依赖任务的特异性以及设计特征的专家经验。深度学习则不需要,可以从大数据中自主学习简单特征,逐渐学习更为复杂的深层特征。

自学记录《深度学习500问》之 深度学习基础

4.前向传播与反向传播

前向传播(foward propagation, FP):由输入层逐层计算得到输出的过程。

向传播(backward propagation, BP):由网络的输出通过计算梯度由深到浅的更新网络参数。

5.神经网络的输出

自学记录《深度学习500问》之 深度学习基础

如上图,输入层有三个节点,我们将其依次编号为 1、2、3;隐藏层的 4 个节点,编号依次为 4、5、6、7;最后输出层的两个节点编号为 8、9。比如,隐藏层的节点 4,它和输入层的三个节点 1、2、3 之间都有连接,其连接上的权重分别为是   w 41 , w 42 , w 43 \ w_{41}, w_{42}, w_{43}  w41​,w42​,w43​ 。

为了计算节点 4 的输出值,我们必须先得到其所有上游节点(也就是节点 1、2、3)的输出值。节点 1、2、3 是输入层的节点,所以,他们的输出值就是输入向量本身。按照上图画出的对应关系,可以看到节点 1、2、3 的输出值分别是   x 1 , x 2 , x 3 \ x_1, x_2, x_3  x1​,x2​,x3​。

a 4 = σ ( w T ⋅ a ) = σ ( w 41 x 4 + w 42 x 2 + w 43 a 3 + w 4 b ) a_4 = \sigma(w^T \cdot a) = \sigma(w_{41}x_4 + w_{42}x_2 + w_{43}a_3 + w_{4b}) a4​=σ(wT⋅a)=σ(w41​x4​+w42​x2​+w43​a3​+w4b​)

其中   w 4 b \ w_{4b}  w4b​ 是节点 4 的偏置项。

同样,我们可以继续计算出节点 5、6、7 的输出值   a 5 , a 6 , a 7 \ a_5, a_6, a_7  a5​,a6​,a7​。

计算输出层的节点 8 的输出值   y 1 \ y_1  y1​:

y 1 = σ ( w T ⋅ a ) = σ ( w 84 a 4 + w 85 a 5 + w 86 a 6 + w 87 a 7 + w 8 b ) y_1 = \sigma(w^T \cdot a) = \sigma(w_{84}a_4 + w_{85}a_5 + w_{86}a_6 + w_{87}a_7 + w_{8b}) y1​=σ(wT⋅a)=σ(w84​a4​+w85​a5​+w86​a6​+w87​a7​+w8b​)

其中   w 8 b \ w_{8b}  w8b​ 是节点 8 的偏置项。

同理,我们还可以计算出   y 2 \ y_2  y2​。这样输出层所有节点的输出值计算完毕,我们就得到了在输入向量   x 1 , x 2 , x 3 , x 4 \ x_1, x_2, x_3, x_4  x1​,x2​,x3​,x4​ 时,神经网络的输出向量   y 1 , y 2 \ y_1, y_2  y1​,y2​ 。这里我们也看到,输出向量的维度和输出层神经元个数相同。

6.卷积神经网络的输出

自学记录《深度学习500问》之 深度学习基础

假设图像宽度   W i n = 5 \ W_{in}=5  Win​=5,filter 宽度   F = 3 \ F=3  F=3,Zero Padding   P = 0 \ P=0  P=0,步幅   S = 2 \ S=2  S=2,则输出尺寸:

W o u t = ( W i − F + 2 P 单 侧 ) / S + 1 W_ {out} = (W_i-F+2P_{单侧})/S+1 Wout​=(Wi​−F+2P单侧​)/S+1

7.池化层的输出

Pooling 层主要的作用是下采样,通过去掉 Feature Map 中不重要的样本,进一步减少参数数量。

例:   2 ∗ 2 \ 2*2  2∗2 的   m a x p o o l i n g \ max pooling  maxpooling

自学记录《深度学习500问》之 深度学习基础

除了   M a x P o o i n g \ Max Pooing  MaxPooing 之外,常用的还有   A v e r a g e P o o l i n g \ Average Pooling  AveragePooling ——取各样本的平均值。​

对于深度为   D \ D  D 的   F e a t u r e M a p \ Feature Map  FeatureMap,各层独立做   P o o l i n g \ Pooling  Pooling,因此   P o o l i n g \ Pooling  Pooling 后的深度仍然为   D \ D  D(即池化后特征图通道数不变) 。

8.神经网络更“深”有什么意义?

前提:在一定范围内

  • 在神经元的数量相同的情况下,深层网络具有更大的容量,分层组合可以创造指数级的表达空间,能够组合更多不同类项的子结构,可以更容易的学习和表示各种特征。
  • 隐藏层的增加意味着由激活函数带来的非线性变换嵌套层数更多,就能构造更复杂的映射关系。

9.什么是超参数?

超参数是在开始学习之前设置的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习选择一组最优的超参数,以提高学习的性能和效果。

具体来讲包括

学习率(learning rate)

、梯度下降法的

迭代次数(iterations)

隐藏层数(hidden layers)

隐藏层单元数

激活函数( activation function)

等,都需要根据实际情况来设置,这些数字实际上控制了最后的参数和的值,所以它们被称作超参数。

10.如何寻找超参数的最优值?

  1. 猜测+试验:根据经验选择参数,训练;调整,再训练;再调整,训练;直至训练结果较符合要求。
  2. 网络搜索:让计算机尝试在一定范围内均匀分布的一组值。
  3. 随机搜索:让计算机随机挑选一组值
  4. MITIE方法:好的初始猜测的前提下,进行局部优化。

11.超参数搜索的一般过程?

  1. 将数据集分成训练集、验证集和测试集。
  2. 根据训练集上训练,得到模型参数。
  3. 在验证集上根据模型的性能指标对模型超参数进行搜索。
  4. 步骤2和步骤3交替迭代,直至网络模型符合要求。
  5. 模型的参数已经固定,此时在测试集中评价模型优劣

12.为什么需要非线性激活函数?

为什么需要激活函数?

  1. 激活函数可以让模型去理解和学习非常复杂的非线性函数。
  2. 如不使用激活函数,那么输出信号仅是一个简单的线性函数,神经网络则无法学习和拟合复杂的数据类型,例如图像、语音等等等。
  3. 激活函数可以把当前的特征空间映射转换到另一个空间,让数据能更好的被分类。

为什么激活函数需要是非线性的?

  1. 如果激活函数都是线性的,那么组合后网络仍是线性的,增加激活函数仅相当于改变了网络的权重参数W和偏置b,这样就做不到用非线性来逼近任意函数。
  2. 使用了非线性激活函数 ,以便使网络更加强大,增加它的能力,使它可以学习复杂的事物,复杂的表单数据,以及表示输入输出之间非线性的复杂的任意函数映射。使用非线性激活函数,能够从输入输出之间生成非线性映射。

13.常见的激活函数

自学记录《深度学习500问》之 深度学习基础
自学记录《深度学习500问》之 深度学习基础
自学记录《深度学习500问》之 深度学习基础
自学记录《深度学习500问》之 深度学习基础

14.常见的激活函数的导数

自学记录《深度学习500问》之 深度学习基础

15.激活函数有哪些性质?

  1. 非线性:激活函数是非线性的,理论上来讲一个两层的神经网络就可以逼近所有函数。
  2. 可微性:可以基于梯度优化参数。
  3. 单调性:当激活函数是单调的时候,单层网络能够保证是凸函数。
  4. f(x) ≈ x:当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值。
  5. 输出值的范围:当激活函数的输出是有限的时候,基于梯度的优化算法会更稳定(因为特征的表示受有限权值的影响更显著);当激活函数的输出是无限的时候,模型的训练会更高效,此时一般需要小一点的learning reat。

16.如何选择激活函数?

通常的做法是,如果不确定哪一个激活函数效果更好,可以把它们都试试,然后在验证集或者测试集上进行评价。然后看哪一种表现的更好,就去使用它。

以下是常见的选择情况:

  1. 如果输出是0,1二分类问题,则输出层选用Sigmoid函数,其他层选用Relu函数。
  2. 在隐藏层上通常会选用最常用的默认函数:Relu函数,或者Leaky ReLu函数。有时也会使用tanh函数,但 Relu 的一个优点是:当是负值的时候,导数等于 0。
  3. tanh函数非常优秀,几乎适合所有场合。
  4. Sigmoid函数除了二分类的输出层以外基本不会用。
  5. 如果遇到了一些死的神经元,可以使用Leaky ReLu函数。

17.使用Relu激活函数的优点?

  1. 在区间变动很大的情况下,Relu激活函数实际上就是一个if-else语句,而sigmoid函数需要进行浮点四则运算,在实践中,使用Relu函数的神经网络通常会比使用sigmoid和tanh激活函数的神经网络学习得更快。
  2. sigmoid和tanh函数的导数在正负饱和区间的梯度都会接近于0,导致梯度消失,而Relu和Leaky Relu函数大于0部分的梯度都为常数,不会出现此现象。
  3. 需要注意,当Relu函数进入负半区的时候,梯度为0,此时神经元不会训练,产生所谓的稀疏性,而Leaky Relu 不会产生这个问题。

18.什么时候可以使用线性激活函数?

  1. 输出层,大多可能使用线性激活函数。
  2. 在隐含层可能会用到一些线性激活函数。
  3. 总之用到线性激活函数的很少。

19.怎样理解Relu(<0时)是非线性激活函数?

图像如下:

自学记录《深度学习500问》之 深度学习基础

由图像可看出以下特点:

  1. 单侧抑制
  2. 相对宽阔的兴奋边界
  3. 稀疏激活性

ReLU 函数从图像上看,是一个分段线性函数,把所有的负值都变为 0,而正值不变,这样就成为单侧抑制。

因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。

稀疏激活性:从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。当 x<0 时,ReLU 硬饱和,而当 x>0 时,则不存在饱和问题。ReLU 能够在 x>0 时保持梯度不衰减,从而缓解梯度消失问题。

20.softmax函数如何应用于多分类?

softmax函数通过将多类别的输出转化为概率分布,之后应用在计算交叉熵损失函数上

自学记录《深度学习500问》之 深度学习基础

21.cross_entropy交叉熵损失函数?

计算两个概率分布之间的距离。

自学记录《深度学习500问》之 深度学习基础

22.为什么Tanh收敛速度比Sigmoid块?

自学记录《深度学习500问》之 深度学习基础

由二者的导数可以看出,tanh函数的梯度范围大于sigmoid函数的梯度范围,更小的梯度更容易出校梯度消失现象,所以tanh更快。

自学记录《深度学习500问》之 深度学习基础

23.为什么需要batch_size?

bath的选择会决定下降的方向。

对于较小的数据集,可令batch = 全数据集,好处是:

  1. 由全数据集确定的方向能更好的代表样本总体,从而更好地朝着极值所在的方向。
  2. 由于不同的权重的梯度差别巨大,因此选择一个全局学习率很困难,可以选用一些学习率自适应(基于不同的权重进行调整)的优化函数。

对于较大的数据集,由于显存的限制,一次载入所有数据不可行。

24.batch_size如何选择?

如果每次只训练一个新样本,即batch_size = 1,那么会导致每次修正的方向都以各自样本的梯度方向修正,各自为政、相互抵消、难以达到收敛。

因为全数据集又有显存限制,因此可采用批量梯度下降法(Mini-batches Learning)。

25.在合理的范围内,增大batch_size有何好处?

  1. 显存利用率增加,大矩阵乘法并行化效率提高。
  2. 跑完一次epoch所需时间减少,总体训练速度加快。
  3. 在到一定的范围内,batch_size越大,下降的方向越准确。

26.盲目增大batch_size有何坏处?

  1. 首先显存容量可能不够
  2. 跑完一个epoch所需迭代次数减少了,但是花费的时间大大增加了,从而对参数的修正也会变慢。

27.调整batch_size对训练效果的影响到底如何?

  1. 如果batch_size太小,训练结果极差。
  2. 随着batch_size增大,训练速率加快。
  3. 随着 Batch_Size 增大,达到相同精度所需要的 epoch 数量越来越多。
  4. 由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

28.归一化的含义?

将数据都映射到0-1范围内

自学记录《深度学习500问》之 深度学习基础

29.归一化的目的?

  • 为了之后数据处理方便
  • 使程序收敛加快、
  • 使用sigmoid激活函数时防止神经元饱和死亡
  • 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
  • 保证数据中的较小值不被吞食

30.归一化如何提高求解最优解的速度?

自学记录《深度学习500问》之 深度学习基础

上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。

3D 图解未归一化

例子:假设 w1 的范围在 [−10,10],而 w2 的范围在 [−100,100],梯度每次都前进 1 单位,那么在 w1 方向上每次相当于前进了 1/20,而在 w2 上只相当于 1/200!某种意义上来说,在 w2 上前进的步长更小一些,而 w1 在搜索过程中会比 w2 “走”得更快。这样会导致,在搜索过程中更偏向于 w1 的方向。走出了“L”形状,或者成为“之”字形。

自学记录《深度学习500问》之 深度学习基础

31.归一化有哪些类型?

  • 线性归一化
    自学记录《深度学习500问》之 深度学习基础

    适用范围:比较适用在数值比较集中的情况。

    ​ 缺点:如果 max 和 min 不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。

  • 标准化
    自学记录《深度学习500问》之 深度学习基础
    含义:经过处理的数据符合标准正态分布,即均值为 0,标准差为 1 其中 μ 为所有样本数据的均值,σ 为所有样本数据的标准差。
  • 非线性归一化

    -适用范围:经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。

32.局部响应归一化?

  • 原理:仿造生物学上活跃的神经元对相邻神经元的抑制现象。

33.什么是批归一化(Batch Normalization)?

上述的归一化,只是对输入层数据进行的归一化处理,却没有在中间层进行归一化处理。

  • 要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过 σ ( W X + b ) σ(WX+b) σ(WX+b)这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是肯定的。

这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。

34.批归一化(BN)算法的优点?

  1. 减少人为选择的参数。在某些情况下,可以取消dropout和L2正则项参数或采取更小的L2正则项约束参数。
  2. 减小了对学习率的要求。
  3. 可以不使用局部响应归一化
  4. 破坏原来数据的分布,在一定程度上给防止过拟合。
  5. 对于sigmoid激活函数来说可以减少梯度消失,加快收敛速度,提高训练精度。

34.批归一化(BN)算法流程?

自学记录《深度学习500问》之 深度学习基础

35. 批归一化和群组归一化比较

批量归一化: 按批量维度进行归一化。

群组归一化: GN 将通道分成组,并在每组内计算归一化的均值和方差。

自学记录《深度学习500问》之 深度学习基础

36. Weight Normalization

Weight Normalization 是对网络权值 W W W 进行 normalization,因此也称为 Weight Normalization;

自学记录《深度学习500问》之 深度学习基础

37.Batch Normalization在什么时候用比较合适?

  1. 在CNN当中,BN应用在非线性映射(激活函数)之前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。
  2. BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。

38.为什么无监督预训练可以帮助深度学习?

深度网络存在问题:

  1. 网络越深,需要的训练样本数越多。若用监督则需大量标注样本,不然小规模样本容易造成过拟合。深层网络特征比较多,会出现的多特征问题主要有多样本问题、规则化问题、特征选择问题。
  2. 多层神经网络参数优化是个高阶非凸优化问题,经常得到收敛较差的局部解;
  3. 梯度扩散问题,BP算法计算出的梯度随着深度向前而显著下降,导致前面网络参数贡献很小,更新速度慢。

解决方法:

​ 逐层贪婪训练,无监督预训练(unsupervised pre-training)即训练网络的第一个隐藏层,再训练第二个…最后用这些训练好的网络参数值作为整体网络参数的初始值。经过预训练最终能得到比较好的局部最优解。

39.什么是模型微调fine tuning

  • 用别人的参数、修改后的网络和自己的数据进行训练,使得参数适应自己的数据,这样一个过程,通常称之为微调(fine tuning).

40.微调时候网络参数是否更新?

答案:会更新。

  • finetune 的过程相当于继续训练,跟直接训练的区别是初始化的时候。
  • 直接训练是按照网络定义指定的方式初始化。
  • finetune是用你已经有的参数文件来初始化。

41.fine-tuning 模型的三种状态

  • 状态一:只预测,不训练。
  • 状态二:训练,但只训练最后分类层。 特点:fine-tuning的模型最终的分类以及符合要求,现在只是在他们的基础上进行类别降维。
  • 状态三:完全训练,分类层+之前卷积层都训练。特点:跟状态二的差异很小,当然状态三比较耗时和需要训练GPU资源,不过非常适合fine-tuning到自己想要的模型里面,预测精度相比状态二也提高不少。

42.权重偏差初始化

若全都初始化为同样的值,神经网络计算出来的输出值是一样的,神经网络在进行反向传播算法计算出来的梯度值也一样,并且参数更新值也一样,网络就是对称的。

  • 可以将每个神经元的权重向量初始化为一个从多维高斯分布取样的随机向量,所以神经元在输入空间中指向随机的方向(so the neurons point in random direction in the input space),也可以从均匀分布中来随机选取小数。
  • 对于偏差,可以将其初始化为零

43.学习率的作用?

学习率 (learning rate),在迭代过程中会控制模型的学习进度。

  • 在迭代优化的前期中,学习率较大,则前进的步长就会较长,这时便能以较快的速度进行梯度下降,而在迭代优化的后期,逐步减小学习率的值,减小步长,这样将有助于算法的收敛,更容易接近最优解。

44.为什么要正则化?

答:减小过拟合

  • 深度学习可能存在过拟合问题——高方差,有两个解决方法,一个是正则化,另一个是准备更多的数据,这是非常可靠的方法,但你可能无法时时刻刻准备足够多的训练数据或者获取更多数据的成本很高,但正则化通常有助于避免过拟合或减少你的网络误差。

过拟合现象如下图所示:左图是高偏差,右图是高方差,中间是Just Right

自学记录《深度学习500问》之 深度学习基础

45.什么是dropout正则化?

答:随机删除网络中的神经单元,使得网络不要依赖于任何一个特征(L2正则化:在损失函数中添加描述模型复杂度的因子)

  • 经过交叉验证,隐藏层中添加的 dropout 率等于 0.5 的时候效果最好,原因是 0.5 的时候 dropout 随机生成的网络结构最多。
>  class FooNet(Module):
>     def __init__(self):
>         super(FooNet, self).__init__()
>         self.layer = Sequential(
>             # Dropout 放在需要drop神经元的层之前,传入每个神经元被舍弃的概率
>             Dropout(p=0.5),
>             Linear(1000, 1),
>             ReLU()
>         )
> 
>     def forward(self, x):
>         return self.layer(x)

           

46.dropout的缺点?

答:​ dropout一大缺点就是代价函数J不再被明确定义

47.深度学习中常用的数据增强方法?

  • Color Jittering:对颜色的数据增强:图像亮度、饱和度、对比度变化(此处对色彩抖动的理解不知是否得当);
  • Random Scale:尺度变换;
  • Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换;
  • Horizontal/Vertical Flip:水平/垂直翻转;
  • Shift:平移变换;
  • Rotation/Reflection:旋转/仿射变换;
  • Noise:高斯噪声、模糊处理;
  • Label Shuffle:类别不平衡数据的增广;
  • PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering;

48.代价函数,损失函数,目标函数区别?

  • 损失函数和代价函数是同一个东西, 目标函数是一个与他们相关但更广的概念,对于目标函数来说在有约束条件下的最小化就是损失函数(loss function)。

继续阅读