zoukankan      html  css  js  c++  java
  • Tensorflow2.0笔记09——激活函数

    Tensorflow2.0笔记

    本博客为Tensorflow2.0学习笔记,感谢北京大学微电子学院曹建老师

    3. 激活函数

    激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。引入非线性激活函数,可使深 层神经网络的表达能力更加强大。

    优秀的激活函数应满足:

    非线性: 激活函数非线性时,多层神经网络可逼近所有函数

    可微性: 优化器大多用梯度下降更新参数

    单调性: 当激活函数是单调的,能保证单层网络的损失函数是凸函数

    近似恒等性:f(x) ≈x 。当参数初始化为随机小值时,神经网络更稳定激活函数输出值的范围:

    激活函数输出为有限值时,基于梯度的优化方法更稳定激活函数输出为无限值时,建议调小学习率

    ​ 常见的激活函数有:sigmoid,tanh,ReLU,Leaky ReLU,PReLU,RReLU,ELU(Exponential Linear Units),softplus,softsign,softmax等,下面介绍几个典型的激活函数:

    3.1 sigmoid

    TensorFlow API: tf.math.sigmoid

    优点

    ​ 1. 输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可用作输出层;

    1. 求导容易。

    缺点

    1. 易造成梯度消失;

    2. 输出非0均值,收敛慢;

    3. 幂运算复杂,训练时间长。

    ​ sigmoid函数可应用在训练过程中。然而,当处理分类问题作出输出时,sigmoid却无能为力。简 单地说,sigmoid函数只能处理两个类,不适用于多分类问题。而softmax可以有效解决这个问题,并 且softmax函数大都运用在神经网路中的最后一层网络中,使得值得区间在(0,1)之间,而不是二分类 的。

    3.2 tanh

    TensorFlow API:tf.math.tanh

    优点:

    ​ 1.比sigmoid函数收敛速度更快。

    ​ 2.相比sigmoid函数,其输出以0为中心。

    缺点:

    ​ 1.易造成梯度消失;

    ​ 2.幂运算复杂,训练时间长。

    3.3 ReLU

    image-20210622090004313

    image-20210622090012250

    image-20210622090022996

    TensorFlow API: tf.nn.relu

    优点

    1. 解决了梯度消失问题(在正区间);

    2. 只需判断输入是否大于0,计算速度快;

    3. 收敛速度远快于sigmoid和tanh,因为sigmoid和tanh涉及很多expensive的操作;

    4. 提供了神经网络的稀疏表达能力。

    缺点

    1. 输出非0均值,收敛慢;

    2. Dead ReLU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。

    3.4 Leaky ReLU

    image-20210622090210019

    image-20210622090218699

    TensorFlow API: tf.nn.leaky_relu

    ​ 理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。

    3.5 softmax

    image-20210622090303248

    TensorFlow API: tf.nn.softmax

    ​ 对神经网络全连接层输出进行变换,使其服从概率分布,即每个值都位于[0,1]区间且和为1。

    3.6 建议

    对于初学者的建议:

    1. 首选ReLU激活函数;

    2. 学习率设置较小值;

    3. 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;

    4. 初始化问题:初始参数中心化,即让随机生成的参数满足以0为均值, image-20210622090509585为标准差的正态分布。

  • 相关阅读:
    性能测试必备知识(10)- Linux 是怎么管理内存的?
    stat 命令家族(4)- 详解 iostat
    stat 命令家族(3)- 详解 mpstat
    stat 命令家族(2)- 详解 pidstat
    性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里
    性能分析(5)- 软中断导致 CPU 使用率过高的案例
    实体类转xml
    运气一直好,就不只是运气了——记中学七年
    (数据科学学习手札93)利用geopandas与PostGIS进行交互
    JVM系列之一:内存区域和内存溢出
  • 原文地址:https://www.cnblogs.com/wind-and-sky/p/14919795.html
Copyright © 2011-2022 走看看