在神经网络中使用激活函数

人工智能2年前 (2023)发布 wangzhan
3,137 0
ChatGPT国内版

激活函数通过引入非线性在神经网络中发挥着不可或缺的作用。这种非线性使得神经网络能够根据输入开发复杂的表示和函数,而这是简单的线性回归模型不可能实现的。

在神经网络的整个历史中,已经提出了许多不同的非线性激活函数。在这篇文章中,您将探索三种流行的函数:sigmoid、tanh 和 ReLU。

读完本文后,您将了解到:

  • 为什么非线性在神经网络中很重要
  • 不同的激活函数如何导致梯度消失问题
  • Sigmoid、tanh 和 ReLU 激活函数
  • 如何在 TensorFlow 模型中使用不同的激活函数
在神经网络中使用激活函数

在神经网络中使用激活函数

概述

本文分为五个部分;他们是:

  • 为什么我们需要非线性激活函数
  • Sigmoid 函数和消失梯度
  • 双曲正切函数
  • 修正线性单元 (ReLU)
  • 在实践中使用激活函数

为什么我们需要非线性激活函数

您可能想知道,为什么对非线性激活函数如此大肆宣传?或者为什么我们不能在前一层激活的加权线性组合之后使用恒等函数?使用多个线性层与使用单个线性层基本相同。这可以通过一个简单的例子看出。

假设您有一个隐藏层神经网络,每个神经网络有两个隐藏神经元。

在神经网络中使用激活函数

具有线性层的单隐层神经网络

如果您使用线性隐藏层,则可以将输出层重写为原始输入变量的线性组合。如果您有更多的神经元和权重,则方程会更长,并且连续层权重之间的嵌套和乘法会更多。然而,想法仍然是一样的:您可以将整个网络表示为单个线性层。

为了使网络表示更复杂的函数,您需要非线性激活函数。让我们从一个流行的例子开始,sigmoid 函数。

S 型函数和消失梯度

sigmoid 激活函数是神经网络非线性激活函数的流行选择。它受欢迎的原因之一是它的输出值在 0 到 1 之间,模拟概率值。因此,它用于将线性层的实值输出转换为概率,该概率可以用作概率输出。这也使得它成为逻辑回归方法的重要组成部分,可以直接用于二元分类。

sigmoid 函数通常用 $\sigma$ 表示,其形式为 $\sigma = \frac{1}{1 + e^{-1}}$。在 TensorFlow 中,您可以从 Keras 库调用 sigmoid 函数,如下所示:�并具有以下形式�=11+�-1。在 TensorFlow 中,您可以从 Keras 库调用 sigmoid 函数,如下所示:

这给出了以下输出:

您还可以将 sigmoid 函数绘制为 $x$ 的函数,�,

在神经网络中使用激活函数

S 型激活函数

在查看神经网络中神经元的激活函数时,您还应该对其由于反向传播和链式法则而产生的导数感兴趣,这会影响神经网络从数据中学习的方式。

在神经网络中使用激活函数

Sigmoid 激活函数(蓝色)和梯度(橙色)

在这里,您可以观察到 sigmoid 函数的梯度始终在 0 到 0.25 之间。当 $x$ 趋于正无穷大或负无穷大时,梯度趋于零。这可能会导致梯度消失问题,这意味着当输入处于 $x$ 的某个较大幅度时(例如,由于较早层的输出),梯度太小而无法启动校正。�趋于正无穷或负无穷,梯度趋于零。这可能会导致梯度消失问题,这意味着当输入处于某个较大的幅度时�(例如,由于较早层的输出),梯度太小而无法启动校正。

梯度消失是一个问题,因为链式法则用于深度神经网络的反向传播。回想一下,在神经网络中,每一层(损失函数)的梯度是其后续层的梯度乘以其激活函数的梯度。由于网络中有很多层,如果激活函数的梯度小于1,则远离输出的某些层的梯度将接近于零。任何梯度接近于零的层都会停止梯度传播进一步返回到较早的层。

由于 sigmoid 函数始终小于 1,因此具有更多层的网络会加剧梯度消失问题。此外,存在一个sigmoid梯度趋于0的饱和区域,即$x$的幅度较大的区域。因此,如果前一层激活的加权和的输出很大,那么通过该神经元传播的梯度将非常小,因为激活 $a$ 相对于激活函数的输入的导数会很小(在饱和区)。�很大。因此,如果前一层激活的加权和的输出很大,那么您将有一个非常小的梯度通过该神经元传播作为激活的导数�相对于激活函数的输入会很小(在饱和区域)。

当然,还存在线性项相对于前一层激活的导数,该导数对于该层可能大于 1,因为权重可能很大,并且它是来自不同神经元的导数之和。然而,在训练开始时它仍然可能引起关注,因为权重通常初始化得很小。

双曲正切函数

另一个需要考虑的激活函数是 tanh 激活函数,也称为双曲正切函数。与sigmoid函数相比,它具有更大的输出值范围和更大的最大梯度。tanh 函数是大多数人所熟悉的圆的法线正切函数的双曲类比。

绘制 tanh 函数:

在神经网络中使用激活函数

Tanh 激活函数

我们也看看梯度:

在神经网络中使用激活函数

Tanh 激活函数(蓝色)和梯度(橙色)

请注意,与 sigmoid 函数相比,梯度现在的最大值为 1,其中最大梯度值为 0。这使得具有 tanh 激活的网络不易受到梯度消失问题的影响。然而,tanh 函数也有一个饱和区域,其中梯度值随着输入 $x$ 的大小变大而趋于趋于饱和。�变大。

tanh在 TensorFlow 中,您可以使用Keras 激活模块中的函数在张量上实现 tanh 激活:

这给出了输出:

© 版权声明
广告也精彩

相关文章

暂无评论

暂无评论...