自用 备战实习——深度学习基础

168 阅读16分钟

一、激活函数

1.激活函数作用

激活函数(也译作激励函数)的主要作用就是加入非线性因素,以解决线性模型表达能力不足的缺陷,在整个神经网络里起到至关重要的作用。

2.激活函数种类
sigmoid函数

Sigmoid函数是生物学中常见的S型函数,函数曲线如下图所示。它可以把输入的数变换到0~1之间输出,如果输入时特别小的负数,则输出为0,如果输入是特别大的正数,则输出为1。Sigmoid可以看作非线性激活函数赋予网络非线性区分能力,常用在二分类。

image.png

Sigmoid激活函数的计算公式可以表示为公式,其中x 表示输入的像素。通过分析函数表达式和Sigmoid曲线可以知道,Sigmoid激活函数优点是曲线平滑处处可导;缺点是幂函数运算较慢,激活函数计算量大;求取反向梯度时,Sigmoid的梯度在饱和区域非常平缓,很容易造成梯度消失的问题,减缓收敛速度。

image.png

Tanh

Tanh函数是一个典型的奇函数,函数曲线如下图所示,它能够把输入的连续实值变换为-1和1之间的输出,如果输入是特别小的负数,则输出为-1,如果输入是特别大的正数,则输出为1;解决了Sigmoid函数均值不是0的问题。Tanh可以作为非线性激活函数赋予网络非线性区分能力。

image.png

Tanh激活函数的计算公式可以用公式(2-2)表示,其中x 表示输入。通过分析函数表达式和Tanh曲线可以知道,Tanh激活函数优点是曲线平滑,处处可导,具有良好的对称性,网络均值为0。Tanh函数与Sigmoid类似,幂函数运算较慢,激活函数计算量大;求取反向梯度时,Tanh的梯度在饱和区域非常平缓,很容易造称梯度消失的问题,减缓收敛速度。

image.png

ReLU

线性整流激活函数(Rectified Linear Unit, ReLU),是一种深度神经网络中常用的激活函数,ReLU函数曲线如下图所示,整个函数可以分为两部分,在小于0的部分,激活函数的输出为0;在大于0的部分,激活函数的输出为输入。

image.png

ReLU激活函数的计算公式可以用公式(2-3)表示,其中x 表示输入。通过分析函数表达式和ReLU曲线可以知道,ReLU激活函数优点是收敛速度快,不存在饱和区间,在大于0的部分梯度固定为1,有效解决了Sigmoid中存在的梯度消失的问题。计算速度快,ReLU只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的指数运算,具有类生物性质。

ReLU函数的缺点是它在训练时可能会“死掉”。如果一个非常大的梯度经过一个ReLU神经元,更新过参数之后,这个神经元的的值都小于0,此时ReLU再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。合理设置学习率,会降低这种情况的发生概率。

image.png

ELU

ELU激活函数函数曲线如下图所示,输入大于0部分的梯度为1,输入小于0的部分无限趋近于-a。理想的激活函数应满足输出的分布是零均值的,可以加快训练速度。激活函数是单侧饱和的,可以更好的收敛,ELU激活函数同时满足这两个特性。在本文第四张,设计Encoder-Decoder网络中,会使用ELU激活函数。

image.png

ELU激活函数的计算公式可以表达为公式(2-5),其中x 是输入。通过分析函数表达式和ELU函数曲线可以知道,函数的输出分布式零均值的,因此可以单独使用,在前面可以不用加BN层,ELU函数具有单饱和性,可以更好的收敛。由于ELU牵涉到指数运算,因此推理速度相对耗时。

image.png

softmax

softmax回归,对一些数据进行多种分类。softmax从字面上来说,可以分成soft和max两个部分。max故名思议就是最大值的意思。softmax的核心在于soft,而soft有软的含义,与之相对的是hard硬。很多场景中需要我们找出数组所有元素中值最大的元素,实质上都是求的hardmax。softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。如果判断输入属于某一个类的概率大于属于其他类的概率,那么这个类对应的值就逼近于1,其他类的值就逼近于0。该算法主要应用于多分类,而且是互斥的。公式为

1668153863756.jpg

二、损失函数

损失函数作用:

损失函数是决定网络学习质量的关键。无论什么样的网络结构,如果使用的损失函数不正确,最终都将难以训练出正确的模型。使用于描述模型预测值与真实值的差距大小。一般有两种比较常见的算法——均值平方差(MSE)和交叉熵。

常见损失函数种类
均值平方差(Mean Squared Error,MSE)

y为真实标签,p即predict值。均方误差的值越小,表明模型越好。类似的损失算法还有均方根误差(RMSE)(将MSE开平方),平均绝对值误差(MAD)(对一个真实值与预测值相减的绝对值取平均值)等

1668154063147.jpg

交叉熵损失函数(Cross Entropy Loss Function)

式中y代表真实值分类(0或1),a代表预测值。交叉熵也是值越小,代表预测结果越准。
注意:这里用于计算的a也是通过分布统一化处理的(或者是经过Sigmoid函数激活等),取值范围在0~1之间。

1668154118892.jpg

注意:损失算法的选取
损失函数的选取取决于输入标签数据的类型:如果输入的是实数、无界的值,损失函数使用MSE;如果输入标签是位矢量(分类label),使用交叉熵会更合适。

三、CNN

卷积运算输出

输入图片大小 W×W
Filter大小 F×F
步长 S
padding的像素数P
于是我们可以得出 N = (W − F + 2P )/S+1

1. 卷积层的作用

卷积层的作用是提取输入图片中的信息,这些信息被称为图像特征,这些特征是由图像中的每个像素通过组合或者独立的方式所体现,比如图片的纹理特征,颜色特征。

2.池化层的作用

1)首要作用,下采样(downsamping)

(2)降维、去除冗余信息、对特征进行压缩、简化网络复杂度、减小计算量、减小内存消耗等等。各种说辞吧,总的理解就是减少参数量。

(3)实现非线性(这个可以想一下,relu函数,是不是有点类似的感觉?)。

(4)可以扩大感知野。

(5)可以实现不变性,其中不变形性包括,平移不变性、旋转不变性和尺度不变性。

3.全连接层的作用

池化层的后面一般接着全连接层,全连接层将池化层的所有特征矩阵转化成一维的特征大向量,全连接层一般放在卷积神经网络结构中的最后,用于对图片进行分类,到了全连接层,我们的神经网络就要准备输出结果了。

从池化层到全连接层会进行池化操作,数据会进行多到少的映射,进行降维,也就是为什么上图从20×12×12变成100个神经元了,数据在慢慢减少,说明离输出结果越来越近,从全连接层到输出层会再一次减少数据,变成更加低维的向量,这个向量的维度就是需要输出的类别数。然后将这个向量的每个值转换成概率的表示,这个操作一般叫做softmax,softmax使得向量中每个值范围在(0,1)之间,它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。 因为从卷积层过来的数据大多了,全连接层的作用主要是对数据进行降维操作,不然数据骤降到输出层,可能会丢失一些图像特征的重要信息。

四、优化器

优化器作用

优化器是引导神经网络更新参数的工具,深度学习在计算出损失函数之后,需要利用优化器来进行反向传播,完成网络参数的更新。在这个过程中,便会使用到优化器,优化器可以利用计算机数值计算的方法来获取损失函数最小的网络参数。

常见的优化器
1. SGD – 随机梯度下降

函数朝着梯度方向上升最快,梯度反方向下降最快。而在深度学习的目标中,是最小化loss。直觉上可以想到能使用梯度下降方法,来最优化loss。 他的缺点是更新比较频繁,会有严重的震荡

2.Momentum

Momentum原本来源物理,表示动量。

它可以在梯度方向不变的维度上使速度变快,在梯度方向有所改变的维度上更新速度更慢,可以抵消某些维度的摆动,加快收敛并减小震荡。

举个简单的例子:当我们将一个小球从山上滚下来,没有阻力时,它的动量会越来越大,但是如果遇到了阻力,速度就会变小,动量优化法就是借鉴此思想。

这是一种自适应的学习率策略,自适应梯度法。

他的缺点是分母会不断累计,最终学习率会变得非常小。如果初始梯度很大,会导致学习率变得很小。它适合用于稀疏数据。

3.Adagrad算法

Adagrad优化算法被称为自适应学习率优化算法,之前我们讲的随机梯度下降对所有的参数都使用的固定的学习率进行参数更新,但是不同的参数梯度可能不一样,所以需要不同的学习率才能比较好的进行训练,但是这个事情又不能很好地被人为操作,所以 Adagrad 便能够帮助我们做这件事。

fed6c89c69e94be3bc821b3d3b187a4f.gif Adagrad优化算法就是在每次使用一个 batch size 的数据进行参数更新的时候,算法计算所有参数的梯度,那么其想法就是对于每个参数,初始化一个变量 s 为 0,然后每次将该参数的梯度平方求和累加到这个变量 s 上,然后在更新这个参数的时候,学习率就变为:
在这里插入图片描述

AdaGrad会记录之前的所有梯度之和,这使得这个结果会越来越大,从而使得后面学习率会无限接近0,从而使得权值无法得到更新。

4.Adam

Adam 是一种可以替代传统随机梯度下降(SGD)过程的一阶优化算法,它能基于训练数据迭代地更新神经网络权重。 Adam 优化算法应用在非凸优化问题中所获得的优势: 1.直截了当地实现 2.高效的计算 3.所需内存少 4.梯度对角缩放的不变性(第二部分将给予证明) 5.适合解决含大规模数据和参数的优化问题 6.适用于非稳态(non-stationary)目标 7.适用于解决包含很高噪声或稀疏梯度的问题 8.超参数可以很直观地解释,并且基本上只需极少量的调参

Adam 算法和传统的随机梯度下降不同。随机梯度下降保持单一的学习率(即 alpha)更新所有的权重,学习率在训练过程中并不会改变。而 Adam 通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率 Adam 算法的提出者描述其为两种随机梯度下降扩展式的优点集合,即:

适应性梯度算法(AdaGrad)为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。

均方根传播(RMSProp)基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。

Adam 算法同时获得了 AdaGrad 和 RMSProp 算法的优点。

超参数

什么是超参数,参数和超参数的区别?

​ 区分两者最大的一点就是是否通过数据来进行调整,模型参数通常是有数据来驱动调整,超参数则不需要数据来驱动,而是在训练前或者训练中人为的进行调整的参数。例如卷积核的具体核参数就是指模型参数,这是有数据驱动的。而学习率则是人为来进行调整的超参数。这里需要注意的是,通常情况下卷积核数量、卷积核尺寸这些也是超参数,注意与卷积核的核参数区分。

神经网络中包含哪些超参数?

通常可以将超参数分为三类:网络参数、优化参数、正则化参数。

​ 网络参数:可指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层数(也称深度)和激活函数等。

​ 优化参数:一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数。

​ 正则化:权重衰减系数,丢弃法比率(dropout)

为什么要进行超参数调优?

​本质上,这是模型优化寻找最优解和正则项之间的关系。网络模型优化调整的目的是为了寻找到全局最优解(或者相比更好的局部最优解),而正则项又希望模型尽量拟合到最优。两者通常情况下,存在一定的对立,但两者的目标是一致的,即最小化期望风险。模型优化希望最小化经验风险,而容易陷入过拟合,正则项用来约束模型复杂度。所以如何平衡两者之间的关系,得到最优或者较优的解就是超参数调整优化的目的。

过拟合

过拟合产生原因
  1. 模型复杂度过高,参数过多

  2. 数量数据比较小

  3. 训练集和测试集分布不一致

    1. 样本里面的噪声数据干扰过大,导致模型过分记住了噪声特征,反而忽略了真实的输入输出特征
    2. 训练集和测试集特征分布不一样(如果训练集和测试集使用了不同类型的数据集会出现这种情况)
过拟合解决办法

1、降低模型复杂度

2、增加更多数据

3、数据增强

使用数据增强可以生成多幅相似图像。这可以帮助我们增加数据集规模从而减少过拟合。因为随着数据量的增加,模型无法过拟合所有样本,因此不得不进行泛化。计算机视觉领域通常的做法有:翻转、平移、旋转、缩放、改变亮度、添加噪声等等

4、正则化

5、dropout

dropout 是一种避免神经网络过拟合的正则化技术。像L1和L2这样的正则化技术通过修改代价函数来减少过拟合。而丢弃法修改神经网络本身。它在训练的每一次迭代过程中随机地丢弃神经网络中的神经元。当我们丢弃不同神经元集合的时候,就等同于训练不同的神经网络。不同的神经网络会以不同的方式发生过拟合,所以丢弃的净效应将会减少过拟合的发生。

6、早停

如上图所示,在几次迭代后,即使训练误差仍然在减少,但测验误差已经开始增加了。

7、重新清洗数据

把明显异常的数据剔除

8、使用集成学习方法

梯度消失 梯度爆炸

blog.csdn.net/hollyprince…

什么是梯度消失和梯度爆炸

深度神经网络训练的时候,采用的是反向传播方式,该方式使用链式求导,计算每层梯度的时候会涉及一些连乘操作,因此如果网络过深。
那么如果连乘的因子大部分小于1,最后乘积的结果可能趋于0,也就是梯度消失,后面的网络层的参数不发生变化.
那么如果连乘的因子大部分大于1,最后乘积可能趋于无穷,这就是梯度爆炸

如何防止梯度消失?

sigmoid容易发生,更换激活函数为 ReLU即可。
权重初始化用高斯初始化

如何防止梯度爆炸?

1 设置梯度剪切阈值,如果超过了该阈值,直接将梯度置为该值。

2 使用ReLU,maxout等替代sigmoid
区别:

  1. sigmoid函数值在[0,1],ReLU函数值在[0,+无穷],所以sigmoid函数可以描述概率,ReLU适合用来描述实数;
  2. sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。
  3. Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发

正向传播与反向传播(backward和forward)

1.什么是正向传播和反向传播,有何关系? 一、正向传播:沿着从输入层到输出层的顺序,依次计算并存储神经网络的中间变量。

二、反向传播:沿着从输出层到输入层的顺序,依次计算并存储神经网络的中间变量和参数的梯度。

三、关系:在训练深度学习模型时,正向传播和反向传播相互依赖。一方面,正向传播的计算可能依赖于模型参数的当前值,而这些模型参数是在反向传播的梯度。另一方面,反向传播的梯度计算可能依赖于各变量的当前值,而这些变量的当前值是通过正向传 播计算得到的。

计算后通过优化算法迭代的。