梯度消失和梯度爆炸——从本质上说残差、LSTM遗忘门(依赖cell state)解决思路都是一样的,甚至relu激活函数也是

在深度学习中,梯度消失和梯度爆炸是两个常见的问题。

梯度消失是指在进行反向传播时,梯度会随着层数的增加而指数级地减小,直到几乎消失,导致深层的神经网络参数无法有效更新。这主要是因为使用了像sigmoid和tanh这样的激活函数,它们在输入值较大或较小的情况下,梯度值接近于0。

 

 

 

 


梯度爆炸与梯度消失相反,是指梯度随着层数的增加而指数级地增大,导致网络参数更新过大,使得网络模型无法收敛。这通常在深度神经网络中更常见。

解决这两个问题的方法包括:

1. 改变激活函数:ReLU及其变种(如Leaky ReLU、Parametric ReLU)在输入值为正时,梯度为1,因此不会出现梯度消失的问题。

2. 权重初始化:使用He初始化或Xavier初始化等方法,可以在训练开始时设置合适的初始权重,减少梯度消失和爆炸的可能性。

3. 批量归一化(Batch Normalization):这种方法可以在每一层都对输入进行归一化处理,使得值集中在0附近,减少梯度消失和爆炸的可能性。

4. 梯度裁剪(Gradient Clipping):这是一种针对梯度爆炸的解决方案,当梯度的值超过某个阈值时,将其限制在该阈值内。

5. 残差连接(Residual Connection):在深度神经网络中,通过引入跨层的直接连接,使得梯度可以直接反向传播到浅层,从而缓解梯度消失问题。

6. 使用LSTM或GRU等门控循环单元:在处理序列数据时,这些结构可以有效地缓解梯度消失问题,因为它们有专门的机制来控制信息的流动。

 

【我们看下几个激活函数】

双曲正弦函数和正弦函数是什么关系?有什么历史原因吗?

双曲正弦函数(hyperbolic sine,通常表示为sinh)和正弦函数(sine,通常表示为sin)是两种不同的数学函数,它们在形式上有一些相似性,但在数学性质和应用上有很大的不同。

双曲正弦函数的定义为:

sinh(x) = (e^x - e^-x) / 2

 


正弦函数的定义为:

sin(x) = y坐标值在单位圆上对应的角度x

双曲正弦函数和正弦函数的主要区别在于,双曲正弦函数是双曲线的一部分,而正弦函数则是圆的一部分。这就是为什么它们被称为"双曲"和"圆"的原因。
双曲函数(包括双曲正弦函数和双曲余弦函数等)在18世纪被引入到数学中,主要是为了解决某些微分方程的问题。双曲函数在许多科学和工程领域都有应用,包括物理、工程、信号处理等。
正弦函数则有更长的历史,它在古希腊时期就已经被研究,主要用于解决三角形的问题。正弦函数在许多科学和工程领域都有应用,包括物理、工程、计算机科学等。
总的来说,双曲正弦函数和正弦函数是两种不同的数学函数,它们在形式上有一些相似性,但在数学性质和应用上有很大的不同。

 

双曲正弦函数和正弦函数,为什么他们的名字相似呢?

双曲正弦函数(hyperbolic sine,通常表示为sinh)和正弦函数(sine,通常表示为sin)的名字之所以相似,主要是因为它们在数学形式上有一定的相似性。

双曲正弦函数的定义是 sinh(x) = (e^x - e^-x) / 2,双曲正弦函数(hyperbolic sine,通常表示为sinh)的泰勒级数展开是:

sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...

而正弦函数的泰勒级数展开形式是 

sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...。你可以看到,我们可以得到一个与正弦函数泰勒级数展开形式非常相似的表达式。

此外,双曲正弦函数和正弦函数都具有周期性(虽然双曲正弦函数的周期是虚数),并且它们的图形在某种程度上也有一些相似性。

因此,尽管双曲正弦函数和正弦函数在数学性质和应用上有很大的不同,但由于它们在数学形式上的相似性,因此它们被赋予了相似的名字。

 

正切函数和双曲正切函数有什么关系?名字为什么相似呢?

正切函数(tangent,通常表示为tan)和双曲正切函数(hyperbolic tangent,通常表示为tanh)的名字之所以相似,是因为它们在数学形式上有一定的相似性。
正切函数的定义是 tan(x) = sin(x) / cos(x),而双曲正切函数的定义是 tanh(x) = sinh(x) / cosh(x),其中sinh(x)和cosh(x)分别是双曲正弦函数和双曲余弦函数。你可以看到,正切函数和双曲正切函数的定义在形式上是非常相似的。

为什么relu函数可以解决梯度消失?

ReLU(Rectified Linear Unit)函数是一种常用的激活函数,其数学表达式为 f(x) = max(0, x)。ReLU函数的主要特点是在输入大于0时,其梯度为1;在输入小于0时,其梯度为0。

ReLU函数能够缓解梯度消失问题,主要原因是:

1. 正区间梯度恒为1:当输入大于0时,ReLU函数的梯度恒为1,这意味着在反向传播过程中,梯度不会因为经过ReLU函数而变小。这与sigmoid函数和tanh函数不同,这两种函数的梯度在输入远离0时会接近0,导致梯度消失问题。

2. 引入非线性:尽管ReLU函数在正区间内是线性的,但是由于其在负区间的值为0,因此ReLU函数是非线性的。这使得神经网络可以拟合和学习非线性函数。

通俗来理解,ReLU函数就像一个开关,当输入大于0时,开关打开,信息可以无损地通过;当输入小于0时,开关关闭,信息被阻断。这种设计使得在反向传播过程中,正向传播的信息可以更好地保留下来,从而缓解了梯度消失问题。

 

为什么LSTM能解决梯度消失问题?

LSTM(长短期记忆网络)能够解决梯度消失问题,主要是因为其特殊的网络结构设计。

1. 门控机制:LSTM引入了输入门、遗忘门和输出门的概念,这些门控结构允许模型有选择性地记住或遗忘信息。特别是遗忘门,它可以让模型忘记无关的历史信息,从而减少了长期依赖的影响。

2. 细胞状态(Cell State):LSTM中的细胞状态是一个“横跨”各个时间步的信息传递通道,它可以在很长的序列中传递信息。在反向传播过程中,细胞状态的梯度可以直接反向传播,避免了梯度消失的问题。

因此,通过这些设计,LSTM能够在处理长序列时,有效地缓解梯度消失的问题,从而能够捕捉到更长距离的依赖关系。

 

遗忘门是LSTM(长短期记忆)网络中的一个重要组成部分。它的主要作用是决定哪些信息应该从细胞状态中被遗忘或丢弃。

遗忘门的数学表达式通常为:

f_t = σ(W_f · h_(t-1), x_t] + b_f)

其中,σ表示sigmoid函数,W_f是遗忘门的权重矩阵,b_f是偏置项,h_(t-1)是上一时间步的隐藏状态,x_t是当前时间步的输入。sigmoid函数的输出在0到1之间,可以理解为遗忘的比例。

遗忘门的设计有助于解决梯度消失问题,主要原因是:

1. 直接的梯度路径:在反向传播过程中,遗忘门提供了一条直接的梯度路径,使得梯度可以直接反向传播,避免了在多层网络中梯度消失的问题。

2. 选择性遗忘:遗忘门可以选择性地遗忘细胞状态中的信息,这样可以减少不相关信息的干扰,使得网络更加关注于有用的信息,从而提高模型的性能。

因此,通过遗忘门的设计,LSTM能够在处理长序列时,有效地缓解梯度消失的问题。

 

更多细节见:https://www.cnblogs.com/bonelee/p/10475453.html  和 https://www.cnblogs.com/bonelee/p/7714843.html

 

posted @ 2023-10-10 17:44  bonelee  阅读(69)  评论(0编辑  收藏  举报