人工智能深度学习--Tanh激活函数

259 阅读5分钟

前言

前文为大家讲解了在机器学习和深度学习神经网络中运用最广泛的激活函数--Sigmoid激活函数,那么今天笔者就带大家来了解学习一下它的类似变种 -- Tanh激活函数。

一、定义和简介

Tanh(双曲正切)激活函数是深度学习中常用的一种非线性激活函数,它的形状类似于我们的Sigmoid激活函数,下面文是它的一些基本属性:

  1. 定义和表达式

    Tanh函数的数学表达式为:

    tanh(x)=exexex+ex\text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

    这个函数将输入值映射到-1到1之间。这种以0为中心的特性使得Tanh在表示能力上比Sigmoid函数更加强大。

  2. 函数图像

98f53d9a27b82cb89f326f340af44d1b.png

Tanh函数的图像呈S形曲线,与Sigmoid函数类似,但Tanh函数的输出范围是在-1到1之间,这使得它在处理具有负数标签的问题时具有优势。

二、与SigmoidSigmoid 激活函数的区别(重点问题)

Tanh函数与Sigmoid函数的究极比较

Tanh(双曲正切)激活函数与 Sigmoid 激活函数在形状和性质上有相似之处,但Tanh在某些方面对Sigmoid进行了改进和提升。比如说 :

  1. 输出范围

    • Sigmoid函数的输出范围是(0, 1),它将输入压缩到0和1之间。
    • Tanh函数的输出范围是(-1, 1),它将输入压缩到-1和1之间。(这样就有利于处理一些标签涉及到负数的任务了,当然,大部分的分类任务的标签基本上都是0和1)。
  2. 零中心化(Zero-centered)(其实说到底Tanh函数就是Sigmoid函数经过下移变换得到的)

    • Tanh函数的输出是以0为中心的,这意味着在输入为0时,输出也为0。这种零中心化的特性有助于数据的对称性,可以减少学习过程中的偏差,从而有助于梯度下降算法的收敛
    • Sigmoid函数的输出不是以0为中心的,它的输出被偏移到了0.5,这可能会导致梯度更新的效率降低。
  3. 梯度消失问题

    • 尽管Tanh和Sigmoid都存在梯度消失问题,即在输入值绝对值较大时,梯度接近于0,但Tanh函数的梯度在大部分定义域上都比Sigmoid函数的梯度大,因此在训练过程中收敛速度可能会更快。
  4. 计算复杂度

    • Sigmoid函数涉及指数运算,计算量较大,而Tanh函数虽然也涉及指数运算,但由于其输出范围的不同,Tanh函数在某些情况下可能会稍微快一些。
  5. 应用场景

    • Sigmoid函数常用于二分类问题的输出层,因为它的输出可以被解释为概率。
    • Tanh函数由于其零中心化的特性,常用于隐藏层,特别是在需要数据归一化的场景。
  6. 导数

    • Sigmoid函数的导数最大值为0.25,当输入值趋向于正无穷或负无穷时,导数趋近于0。
    • Tanh函数的导数最大值为1,当输入值为0时,导数达到最大值,而在输入值绝对值较大时,导数同样趋近于0,但相比于Sigmoid,Tanh的导数在定义域内的变化更为显著。

总的来说,Tanh函数在某些方面是对Sigmoid函数的改进,特别是在处理需要零中心化数据的情况时更为有效。然而,尽管Tanh函数在某些情况下可能表现更好,但在我们现代深度学习中,ReLU及其变体由于其在正区间内梯度恒定的特性,通常更受我们青睐。

三、导数

Tanh函数的导数表达式为 :

tanh(x)=1tanh2(x)\text{tanh}'(x) = 1 - \text{tanh}^2(x)

这个性质使得了Tanh函数在反向传播过程中的梯度计算相对比较简单。

四、其他属性

  1. 为什么要用tanh(一般为涉及到负标签需要代替Sigmoid问题)

    • 零中心性质:Tanh函数的输出以0为中心,有助于减少梯度消失问题,使得梯度下降算法更有效。
    • 收敛速度快:相比于Sigmoid函数,Tanh函数的收敛速度更快,因为它的梯度在大部分定义域上都比Sigmoid函数的梯度大。
    • 非线性特性:Tanh函数是非线性的,可以增加神经网络的表达能力。
  2. 不足的地方

    • 梯度饱和:当输入值较大或较小时,Tanh函数的梯度会接近于零,可能会导致梯度消失问题,使得训练过程变得缓慢或停滞。
    • 计算复杂度:Tanh函数的计算涉及到指数运算,这在大规模数据集和深层网络中可能会导致计算效率较低。
  3. 应用的场景

    • 隐藏层激活函数:Tanh函数常用于神经网络隐藏层的激活函数,尤其是在需要零均值化数据的场景。
    • 特征缩放:Tanh函数可以将输入数据映射到-1到1之间,有助于对输入数据进行标准化和特征缩放,加速神经网络的训练过程。
    • 序列数据建模:在处理序列数据(如时间序列、自然语言文本等)时,Tanh函数常被用于循环神经网络(RNN)的隐藏层,以捕捉序列数据之间的复杂关系。(这个不理解可以先放一放,笔者后面也会讲)

总而言之,在实际应用中,Tanh函数的选择通常还是取决于我们具体的任务需求和性能要求。比如笔者用的就不多,除非我的标签里面有负数,不然一般我都不会鸟它,嘿嘿。

五、Reference

blog.csdn.net/m0_61787307…

以上就是笔者关于人工智能深度学习Tanh激活函数的讲解,至于为什么这几篇激活函数没有放代码是因为笔者觉得没有必要,因为如果是真实用在模型里面也不会是简单的python代码的形式,一般都是包在一个库里或者一个具体的函数里面,很少会说单独写出来。欢迎大家点赞,收藏,交流和关注,O(∩_∩)O谢谢!