【学习整理】深度学习相关知识点1

1.MLP

1.多层感知机Multilayer Perceptron,也叫人工神经网络(ANN,Artificial Neural Network),除了输入(Input Layer)输出(Output Layer)层,它中间可以有多个隐层(Hidden Layer)。
多层感知机层与层之间是全连接的。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。
隐藏层的神经元怎么得来?首先它与输入层是全连接的,假设输入层用向量X表示,则隐藏层的输出就是 f (W1X+b1),W1是权重(也叫连接系数),b1是偏置,函数f 可以是常用的sigmoid函数或者tanh函数。
2.为什么要使用激活函数?

  1. 不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
  2. 使用激活函数,能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。

3.激活函数需要具备以下几点性质:

  1. 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
  2. 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
  3. 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。

4.输出层与隐藏层是什么关系?
隐藏层到输出层可以看成是一个多类别的逻辑回归,也即softmax回归,所以输出层的输出就是softmax(W2X1+b2),X1表示隐藏层的输出f(W1X+b1)。

2.FLOPS

FLOPS是floating point operations per second的缩写,意思为每秒浮点运算次数,理解为计算速度,是一个衡量硬件性能的指标。
FLOPs是floating point operations的缩写(s表示复数),意思为浮点运算数,理解为计算量,可以用来衡量算法/模型的复杂度。
参考文章:深度学习中的FLOPs介绍及计算(注意区分FLOPS)

3.消融实验

消融实验(Ablation experiment):当作者提出了一种新的方案时,这个方案同时改变了多个条件/参数,那么在消融实验中,作者会控制一个条件/参数不变,来看看结果,到底是哪个条件/参数对结果的影响更大。
举例:在目标检测系统中,使用了A,B,C相加的方法取得了不错的效果,但是这个时候你并不知道这不错的效果是由于A,B,C中哪一个起的作用,于是你保留A,B,移除C进行实验来看一下C在整个系统中所起的作用。最终确定到底是哪个方法对结果的影响更大。
总结:消融实验类相当于:“控制变量法”
参考文章:深度学习中的消融实验指的是什么?

4.GELU激活函数在这里插入图片描述

图片来源:从ReLU到GELU,一文概览神经网络的激活函数
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。激活函数对于人工神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用,他们将非线性特性引入到我们的网络中。

激活函数在上一层隐藏层的输出和下一层隐藏层输入之前。

4.1常用的激活函数

sigmoid函数

是非常常用的非线性激活函数,它的数学形式如下:
在这里插入图片描述
图像如下:
在这里插入图片描述
特点:sigmoid函数能把输入的连续实值变换为0和1之间的输出,如果是非常大的负数,输出值就是0,如果是非常大的正数,输出值就是1,适用于二分类。

缺点:

  1. 在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大,具体表现为:如果我们初始化神经网络的权值为[0,1]之间随机值,由反向传播算法的数学推导可知,梯度从后向前传播时,每传递一层,梯度值都会减小为原来的0.25倍,如果Hidden层特别多,那么梯度在穿过多层后将变得非常小接近于0,即出现梯度消失的现象,当网络权值初始化为(1,+∞)区间内的值时,容易出现梯度爆炸情况。
  2. 计算中含有幂运算,求解时比较耗时,对于规模比较大的深度网络,会增加训练时间。
  3. sigmoid的output不是0均值,会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入,产生的一个结果就是:如果x>0,f(x)=wTx+b>0,那么对w求局部梯度则都为正,这样在反向传播的过程中w要么都往正方向更新,要么都往负方向更新,导致有一种捆绑的效果,使得收敛缓慢。

tanh函数

数学形式如下:
在这里插入图片描述
写成sigmoid函数的形式:tanh(x) = 2sigmoid(2x) - 1
图像如下:
在这里插入图片描述
特点:

  1. 部分解决了sigmoid关于zero-centerd的输出问题,导数范围变大在(0,1)之间,而sigmoid在(0,0.25)之间,梯度消失问题有所缓解
  2. 收敛速度远快于sigmoid

缺点:

  1. 幂运算,计算成本高,梯度消失问题
  2. 某些神经元(如小于0的特征)可能永远不会被激活,导致相应的参数永远不能被更新(当输入较大或较小时,输出几乎是平滑的并且梯度较小)。
    在这里插入图片描述

ReLU函数

是一个取最大值函数,是目前最常用的激活函数。

数学形式如下:
在这里插入图片描述
图像如下:
在这里插入图片描述

特点:

  1. 当输入为正时,不存在梯度饱和问题
  2. 计算速度快得多,ReLU函数中只存在线性关系,因此他的计算速度比前两个都要快。

缺点:

  1. Dead ReLU问题,当输入为负时,ReLU完全失效,在向正向传播过程中,这不是问题,但在反向传播过程中,如果输入负数,则梯度将完全为0,sigmoid函数和tanh函数也具有相同的问题。
  2. ReLU函数不是以0为中心的函数

Leaky ReLU

专门设计用于解决Dead ReLU问题的激活函数
在这里插入图片描述
Leaky ReLU通过把x的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度问题,Leak有助于扩大ReLU函数的范围,通常a值为0.01左右,Leaky ReLU的函数范围是负无穷到正无穷。从理论上讲,Leaky ReLU具有ReLU的所有优点,而且Dead ReLU不会有任何问题,但在实际操作中,尚未完全证明Leaky ReLU总是比ReLU好。

PReLU函数

数学形式如下:
在这里插入图片描述
函数图像如下:

在这里插入图片描述
PReLU函数也是用来解决ReLU带来的Dead ReLU问题,与Leaky ReLU函数不同的是,PReLU激活函数负半轴的斜率参数α是通过学习得到的,而不是手动设置的恒定值。

ELU函数

数学形式如下:
在这里插入图片描述
函数图像如下:
在这里插入图片描述与Leaky ReLU和PRelu激活函数不同的是,ELU激活函数的负半轴是一个指数函数而不是一条直线。

什么情况下适合用ELU?

  1. ELU试图将激活函数的输出均值接近于零,使正常梯度更接近于单位自然梯度,从而加快学习速度

  2. ELU 在较小的输入下会饱和至负值,从而减少前向传播的变异和信息

缺点:

计算时需要计算指数,计算效率低

SELU函数

数学形式如下:
在这里插入图片描述
其中λ = 1.0507 , α = 1.6733

函数图像如下:
在这里插入图片描述
优点:

  1. 内部归一化的速度比外部归一化快,这意味着网络能更快收敛
  2. 不可能出现梯度消失或爆炸问题

缺点:
这个激活函数相对较新,需要更多论文比较性地探索其在CNN和RNN等架构中应用。

GELU
高斯误差线性单元激活函数最近在Transformer模型(Google的Bert和OpenAI的GPT-2)中得到了应用。
数学形式如下:
在这里插入图片描述
可以看出,这就是双曲正切函数tanh与近似数值的组合。

函数图像如下:
在这里插入图片描述
可以看出,当x大于0时,输出近似于x,但x处于(0,1)区间时,这时曲线更偏向于y轴。

优点:

  1. 似乎是NLP领域的当前最佳,尤其在Transformer模型中表现最好
  2. 能避免梯度消失问题
  3. 尽管是2016年提出的,但是在实际应用中还是一个相当新颖的激活函数

下面是各大函数的图像:

在这里插入图片描述

参考文章:
深度学习中常见的10种激活函数(Activation Function)总结
从ReLU到GELU,一文概览神经网络的激活函数

猜你喜欢

转载自blog.csdn.net/qq_45746168/article/details/129342916