常用激活函数

作用:

​ 线性模型的表达能力不够,引入激活函数来增加非线性因素,并且能逼近任何一个非线性函数

  • Sigmoid

    Sigmoid 函数也叫 Logistic 函数,定义为

    Sigmoid:=11+ex

    它的一个优良特性就是能够把 𝑥 ∈ 𝑅 的输入压缩到 𝑥∈[0,1]区间,这个区间的数值在机器学习常用来表示以下含义:

    1. 概率分布 [0,1] 区间的输出和概率的分布范围契合,可以通过Sigmoid函数将输出转译为概率输出
    2. 信号强度 一般可以将 0~1理解为某种信号的强度,如像素的颜色强度,1代表当前通道颜色最强,0代表当前通道无颜色;抑或代表门控值(Gate)的强度,1代表当前门控全部开放,0代表门控关闭

    Sigmoid 函数连续可导,其函数图如下,相对于阶跃函数,可以直接利用梯度下降算法优化网络参数,应用广泛。

    阶跃函数:

    不足:在输入值较大或较小时,易出现梯度值接近于 0 的现象,称为梯度弥散现象,网络参数长时间得不到更新,很难训练较深层次的网络模型。

    在 TensorFlow 中,可以通过 tf.nn.sigmoid 实现 Sigmoid 函数

  • Softmax

    将输出值映射到 [0,1] 区间,且满足所有的输出值之和为 1 的特性,适用于多分类问题,表示每个类别的概率。

    其定义为:

    𝜎(𝑧i)=ezij=1doutezj

    不足:容易因输入值偏大发生数值溢出现象
    同样在计算交叉熵时,也会出现数值溢出的问题,因此,tensorflow 中提供了一个统一的接口,将两者同时实现,函数式接口为:

    # 当 from_logits=False 时,表示 y_pred 是经过 Softmax 函数的输出 
    tf.keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False)
    

    在 TensorFlow 中,可以通过 tf.nn.softmax 实现 Softmax 函数

  • ReLU(Rectified Linear Unit,修正线性单元)

    ReLU 针对 sigmoid 的不足做出了改进。2012 年提出的 8 层 AlexNet 首次采用了 ReLU 作为激活函数,使得网络参数达到了 8 层。它的定义为:

    ReLU(x):=max(0,x)

    函数图如下:

    可以看到其对于小于 0 的值全部抑制为0,对于正数则直接输出,这种单边抑制来源于生物学。

    不足:ReLU 函数在 x < 0 时梯度值恒为 0 ,也可能会造成梯度弥散现象

    在 TensorFlow 中,可以通过 tf.nn.relu 实现 ReLU 函数

  • LeakyReLU

    为了克服 ReLU 的问题,提出了 LeakyReLU 函数,其表达式为:

    LeakyReLU={xx0pxx0

    其中 p 为用户自行设置的某较小数值的超参数,如 0.02 等。当 p = 0 时,LeakyReLU 函数退化为 ReLU 函数;当 p ≠ 0时,x < 0 能够获得较小的梯度值 p,从而避免出现梯度弥散现象。

    函数图如下:

    在 TensorFlow 中,可以通过 tf.nn.leaky_relu 实现 LeakyReLU 函数

  • Tanh

    Tanh 函数能够将 x ∈ R 的输入压缩到 [-1,1] 区间,定义为:

    tanh(x)=exexex+ex=2sigmoid(2x)1

    可以看到 tanh 激活函数可通过 Sigmoid 函数缩放平移后实现,函数图如下:

    在 TensorFlow 中,可以通过 tf.nn.tanh 实现 tanh 函数

posted @   -费费  阅读(1483)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示