神经网络结构的输出为所有输入的加权和,这导致整个神经网络是一个线性模型。如果将每一个神经元的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,使得神经网络可以更好地解决较为复杂的问题。这个非线性函数也就是激活函数


目前TensorFlow提供了7种不同的非线性激活函数,tf.nn.relu、tf.sigmoid、tf.tanh 是其中比较常用的几个。当然,TensorFlow也支持使用自己定义的激活函数。


激活函数有以下几种形式:

  1. 平滑非线性函数(Smooth nonlinearities):

    • sigmoid

      sigmoid 非线性函数将输入映射到 (0,1) 之间。

      数学关系为:f(x)=1/(1+e^−x)

      sigmoid优点

      1. Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。

      2. 求导容易。

      sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。
      sigmoid缺点

      1. 函数饱和使梯度消失
        sigmoid 在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个损失函数关于该单元输出的梯度相乘,结果也会接近为 0 。因此这时梯度就对模型的更新没有任何贡献。
        除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。

      2. sigmoid 函数关于原点中心不对称
        这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。因为如果输入都是正数的话(如y=wx+b中每个元素都 x>0),那么关于w的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式y而定),这将会导致梯度下降权重更新时出现z字型的下降。
        如果是按 batch 训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。

      资料:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf

    • tanh

      数学关系为:f(x)=tanh(x)

      tanh函数与sigmoid一样也存在饱和问题,但它的输出是零中心的,因此实际应用中tanh比sigmoid 更受欢迎。tanh函数实际上是一个放大的sigmoid函数。

      tanh优点:

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

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

      tanh缺点:

      1. 还是没有改变Sigmoid函数的最大问题–由于饱和性产生的梯度消失。

      资料:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf

    • softplus

      数学关系为:

      资料http://papers.nips.cc/paper/1920-incorporating-second-order-functional-knowledge-for-better-option-pricing.pdf

    • softsign

      数学关系为:

    • ELU

      数学关系为:

      资料:https://arxiv.org/pdf/1511.07289v5.pdf

  2. 连续但并不是处处可微(Continuous but not everywhere differentiable):

    • ReLU

      数学关系为:f(x)=max(0,x)

      ReLU的优点:

      1. 相较于sigmoid和tanh函数,ReLU 对于 SGD 的收敛有巨大的加速作用(Alex Krizhevsky 指出有 6 倍之多)。有人认为这是由它的线性、非饱和的公式导致的。

      2. 相比于 sigmoid和tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的(指数)运算。

      3. 有效缓解了梯度消失的问题。

      4. 在没有无监督预训练的时候也能有较好的表现。

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

      ReLU的缺点:

      1. 它在训练时比较脆弱并且可能“死掉”。

        举例来说:一个非常大的梯度经过一个ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。

        合理设置学习率,会降低这种情况的发生概率。

    • ReLU6

      数学关系为:

      资料:https://www.tensorflow.org/api_docs/python/tf/nn/relu6

    • SReLU

      数学关系为:

      资料:

    • Leaky ReLU

      数学关系为:

      Leaky ReLU是为解决“ ReLU 死亡”问题的尝试。ReLU中当x<0时,函数值为0。而 Leaky ReLU则是给出一个很小的负数梯度值,比如0.01。

      资料:http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf

    • PReLU

      数学关系为:

      PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。

      Kaiming He 等人在 2015 年发布的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》中,对比了PReLU和ReLU在ImageNet model A的训练效果,把负区间上的斜率当做每个神经元中的一个参数来训练。然而该激活函数在在不同任务中表现的效果也没有特别清晰。

      资料:https://arxiv.org/pdf/1502.01852.pdf

    • RReLU

      数学关系为:

      资料:http://blog.csdn.net/yhl_leo/article/details/56488640

    • CReLU

      数学关系为:

      资料:https://arxiv.org/pdf/1603.05201v2.pdf

  3. 离散的(Discrete):

    • NReLU

      数学关系为:

      资料:https://www.cs.toronto.edu/~hinton/absps/reluICML.pdf

    • Noisy Activation Functions

      资料:https://arxiv.org/pdf/1603.00391v3.pdf


References:

  • http://cs224d.stanford.edu/lecture_notes/LectureNotes3.pdf
  • https://www.tensorflow.org/api_guides/python/nn
  • http://www.cnblogs.com/rgvb178/p/6055213.html
  • http://blog.csdn.net/yhl_leo/article/details/56488640
  • https://livc.io/176

激活函数(Activation Functions)相关推荐

  1. Pytorch专题实战——激活函数(Activation Functions)

    文章目录 1.激活函数的两种用法 1.1.softmax激活函数 1.2.sigmoid激活函数 1.3.tanh激活函数 1.4.relu激活函数 1.5.leaky_relu激活函数 2.用激活函 ...

  2. 1. 激活函数(Activation functions)

    1.1 激活函数(Activation functions) 选择激活函数的经验法则 如果输出是0.1值(二分类问题),则输出层选择sigmoid函数,然后其它的所有单元都选择Relu函数. 这是很多 ...

  3. #Paper Reading# Implicit Neural Representations with Periodic Activation Functions

    论文题目: Implicit Neural Representations with Periodic Activation Functions 论文地址: https://arxiv.org/abs ...

  4. 隐式神经表示一:神经网络拟合图像Implicit Neural Representations with Periodic Activation Functions

    文章目录 1. Implicit Neural Representations with Periodic Activation Functions 0. 什么是隐式神经表示 1. 了解SineLay ...

  5. 激活函数 activation function

    文章目录 激活函数 activation function Sigmoid Sigmoid 反向传播 Tanh ReLU Dead ReLU Problem 产生的原因 激活函数 activation ...

  6. DeepLearning: 归纳几种常用的激活函数(activation)

    Deep Learning中常用的激活函数(activation) 1. sigmoid 表达式: a=sigmoid(z)=11+e−za = sigmoid(z) = \frac {1} {1 + ...

  7. Pytorch——激活函数(Activation Function)

    文章目录 1.非线性方程 2.激活函数 3.常用选择 4.代码 1.非线性方程 我们为什么要使用激励函数? 用简单的语句来概括. 就是因为, 现实并没有我们想象的那么美好, 它是残酷多变的. 哈哈, ...

  8. 激活函数activation总结

    激活函数在深度学习中扮演着非常重要的角色,它给网络赋予了非线性,从而使得神经网络能够拟合任意复杂的函数. 非线性激活函数可以使神经网络随意逼近复杂函数.没有激活函数带来的非线性,多层神经网络和单层无异 ...

  9. python license activation_激活函数activation

    TensorFlow的中阶API主要包括: 数据管道(tf.data) 特征列(tf.feature_column) 激活函数(tf.nn) 模型层(tf.keras.layers) 损失函数(tf. ...

最新文章

  1. Centos7 Kubernetes1.8+docker容器集群
  2. win32 数据类型 vs c#
  3. GD32如何替换STM32?
  4. 计算机网络OSI模型、TCP/IP模型与5G协议
  5. c#+web与php,将Web服务客户端从c#转换为php
  6. 腾讯AI让二子,柯洁还是输了
  7. AcWing 5. 多重背包问题 II(二进制优化)
  8. poj 动态规划总结
  9. python开发人工智能要不要很高数学_CFA、FRM持证人的“秘密武器”—Python,连潘石屹都在学,你确定不要了解一下吗?...
  10. 主机动手系列 — 不同CPU,不同命令,怎么管理HP-UX服务器
  11. 【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary
  12. 爱情指数测试脸型软件,心理测试:你和谁的脸型最像?测出你的幸运指数是多少!...
  13. Skyline软件二次开发初级——2如何在WEB页面中控制三维地图的观察点坐标和角度...
  14. 10068---谈谈Runtime类中的freeMemory,totalMemory,maxMemory几个方法
  15. 十二生肖的相合、相冲、相刑、相害
  16. 人力资源管理专业知识与实务(中级)
  17. LZW算法原理及实现
  18. C# 按Esc键关闭窗体
  19. 全国计算机三级网络技术电子版,全国计算机三级网络技术最新版笔试电子教材(完全免费版).doc...
  20. 我爱你,没有什么目的:情感日志

热门文章

  1. 浅谈广告系统预算控制(SMART PACING)与核心代码实现
  2. NFT 项目 Loot 生态发展如何?
  3. linux kernel 4.4.1 uaf提权漏洞,条件竞争在Kernel提权中的应用
  4. 强烈推荐C#打开文件夹openfolder自定义类(不是browser也不是openfile哦~)自带的实在不好用
  5. DevExpress VCL v17.2.7全新发布|附下载
  6. Q_D指针和Q_Q指针
  7. MAC 下载基础命令
  8. Dubbo服务注册与发现的流程?
  9. 透过数据看国产CPU性能排行
  10. Java类、变量、集合、数据结构基础知识