深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)

目录

一、概念与定义

二、损失函数/代价函数(loss)

三、梯度下降法

二维w与loss:

三维w与loss: 

四、常用激活函数

1、softmax激活函数 

2、sigmoid激活函数

3、tanh函数

4、softsign函数

sigmoid、tanh、softsign函数对比

5、relu函数

对比tanh和relu激活函数

4个隐藏层tanh激活函数

4个隐藏层relu激活函数

2个隐藏层relu激活函数

五、梯度消失与梯度爆炸

1、梯度消失

2、梯度爆炸

3、解决梯度消失与梯度爆炸


 

一、概念与定义

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第1张图片

BP神经网络:是一种按照误差逆向传播算法训练的多层前馈神经网络。
BP 算法的基本思想:学习过程由 信号的正向传播 误差的反向传播 两个过程组成 

正向传播:把样本的特征从输入层进行输入,信号经过各个隐藏层逐层处理后,最后从输出层传出。

反向传播:对于网络的实际输出与期望输出之间的误差,把误差信号从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。

周而复始地进行,权值不断调整的过程,就是神经网学习训练的过程

二、损失函数/代价函数(loss)

损失函数的值越小,说明模型的预测值越接近真实值

我们可以利用这个函数来优化模型参数

最常见的损失函数是均方差损失函数(二次损失函数): 

矩阵可以用大写字母来表示,这里的 T 表示真实标签,Y 表示网络输出,i 表示第 i 个数据。N 表示训练样本的个数(注意这里的 N 是一个大于 0 的整数,不是矩阵)。T-Y 可以到每个训练样本与真实标签的误差。误差的值有正有负,我们可以求平方,把所有的误差值都变成正的,然后除以 2N。这里 2 没有特别的含义,主要是我们对均方差代价函数求导的时候,公式中的 2 次方的 2 可以跟分母中的 2 约掉,使得公式推导看起来更加整齐 简洁。除以 N 表示求每个样本误差平均的平均值。

三、梯度下降法

梯度下降法是最常用的方法之一

既然在变量空间的某一点处,函数沿梯度方向具有最大的变化率,那么在优化代价函数的时候,就可以沿着负梯度方向减小代价函数的值

梯度下降法优化公式:

二维w与loss:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第2张图片

首先w移动到了w=3的位置: 

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第3张图片

当 w 为-3 时,w 所处位置的梯度应该是一个负数,梯度下降法在优化代价函数的时候,是沿着负梯度方向去减小代价函数的值,所以负梯度是一个正数,w 的值应该变大。

w再次移动,到w=2的位置: 

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第4张图片

当 w 为 2 时,w 所处位置的梯度应该是一个正数,梯度下降法在优化代价函数的时候,是沿着负梯度方向去减小代价函数的值,所以负梯度是一个负数, w 的值应该变小。

        我们可以发现不管 w 处于那一个位置,当 w 向着负梯度的方向进行移动时,实际上就是向着可以使 loss 值减小的方向进行移动只不过 它每一次是移动一步,这个步子的大小会受到学习率和所处位置梯度的大小所影响

三维w与loss: 

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第5张图片

在图中随机选取两个 w1 和 w2 的初始值 p1 和 p2,然后从 p1、p2 这两个初始位置,开始使用梯度下降法优化网络参数:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第6张图片

四、常用激活函数

        前面介绍的sign函数(符号函数)、purelin函数(线性函数)都不能很好地解决非线性问题。下面介绍神经网络中常用的非线性激活函数:softmax函数、sigmoid函数、tanh函数、softsign函数、relu函数。这些非线性激活函数有助于帮忙解决非线性问题。

1、softmax激活函数 

将多个神经元的输出,映射到(0,1)区间内。(可以看成概率来理解,从而来进行多分类

公式:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第7张图片

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第8张图片

2、sigmoid激活函数

sigmoid函数也称为逻辑函数,函数公式为:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第9张图片

        函数的取值范围是 0-1 之间,当 x 趋向于-∞的时候函数值趋向于 0; 当 x 趋向于+∞的时候函数值趋向于 1。

3、tanh函数

tanh函数也称为双曲正切函数。函数公式:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第10张图片

        函数的取值范围是-1-1 之间,当 x 趋向于-∞的时候函数值趋向于-1; 当 x 趋向于+∞的时候函数值趋向于 1。

4、softsign函数

softsign函数公式:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第11张图片

        函数的取值范围是-1-1 之间,当 x 趋向于-∞的时候函数值趋向于-1; 当 x 趋向于+∞的时候函数值趋向于 1。

sigmoid、tanh、softsign函数对比

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第12张图片

        这三个激活函数都是 S 形函数,形状相似,只不过 sigmoid 函数取值范围是 0-1 之间,tanh 函数和 softsign 函数取值范围是-1-1 之间。我们还可以观察到 softsign 函数相对于 tanh 函数而言过渡更加平滑,在 x 等于 0 附近函数的数值改变更缓慢。

5、relu函数

relu函数公式:

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第13张图片

        当 x 小于 0 时,y 等于 0。当 x 大于 0 时,y 等于 x。ReLU 的中文名称是校正线性单元,虽然在 x 小于 0 时函数是线性的,x 大于 0 时函数也是线性的,但是组合起来之后,函数就具有了非线性的特征。(大于0部分导数也始终为1, relu函数能抗梯度消失与梯度爆炸 )(在这些激活函数里面,relu激活函数最好)

对比tanh和relu激活函数

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第14张图片

 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第15张图片

4个隐藏层tanh激活函数

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第16张图片

4个隐藏层relu激活函数

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第17张图片

2个隐藏层relu激活函数

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第18张图片

可以发现:

ReLU 激活函数所描绘出来的边界其实是一条一条的直线构成的,不存在曲线。
模型的拟合效果其实还跟其他一些因素相关,比如说 每一层隐藏层的神经元越多,那么模型的拟合能力也就越强 模型训练的周期越多,模型的拟合能力就越强

五、梯度消失与梯度爆炸

1、梯度消失

梯度消失概念:学习信号随着网络传播逐渐减小

        学习信号从输出层一层一层向前反向传播的时候,每传播一层学习信号就会变小一点,经过多层传播后,学习信号就会接近于 0,从而使得权值∆w调整接近于 0。 ∆w 接近于 0 那就意味着该层的参数不会发生改变,不能进行优化。参数不能优化,那整个网络就不能再进行学习了。

2、梯度爆炸

梯度爆炸概念:学习信号随着网络传播逐渐增大

        如果学习信号\delta乘以一个大于 1 的数,那么 δ 就会变大。学习信号从输出层一层一层向前
反向传播的时候,每传播一层学习信号就会变大一点,经过多层传播后,学习信号就会接近于无穷大,从而使得权值∆w 调整接近于无穷大。 ∆w 接近于无穷大那就意味着该层的参数,处于一种极不稳定的状态,那么网络就不能正常工作了。

3、解决梯度消失与梯度爆炸

ReLu表达式:f(x)=max(0,x),当小于0时,f(x)的取值为0;当x>0时,f(x)的取值等于x。

深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失&&梯度爆炸)_第19张图片

        当激活函数的导数小于 1 时,网络会产生梯度消失,激活函数的导数大于 1 时,网络会产生梯度爆炸。
        导数为 1 是一个很好的特性,不会使得学习信号越来越小,也不会让学习信号越来越大,可以让学习信号比较稳定地从后向前传播,解决了梯度消失和梯度下降的问题。
疑问:
        ReLU 函数看起来是挺好的,既是非线性函数,导数又为 1,但是它好像也存在一些问题,当 x 小于 0 时,ReLU 函数输出为 0,导数也为0,有些信号不就丢失掉了吗? 如果你是这么想的,那你就想对了,确实是丢失了一些信号,但是没关系。在神经网络中,信号是冗余的,也就是说其实网络最后在做预测的时候并不需要从前面传过来的所有的信号,实际上只需要一部分的信号,网络就可以进行预测。并且使用部分信号来进行预测与使用全部信号来进行预测得到的结果相差不大。

你可能感兴趣的:(#,神经网络,tensorflow,深度学习,人工智能)