激活函数

激活函数是人工神经网络的一个极其重要的特征。它决定一个神经元是否应该被激活,激活代表神经元接收的信息与给定的信息有关。

激活函数对输入信息进行非线性变换。 然后将变换后的输出信息作为输入信息传给下一层神经元。

激活函数作用

当我们不用激活函数时,权重和偏差只会进行线性变换。线性方程很简单,但解决复杂问题的能力有限。没有激活函数的神经网络实质上只是一个线性回归模型。激活函数对输入进行非线性变换,使其能够学习和执行更复杂的任务。我们希望我们的神经网络能够处理复杂任务,如语言翻译和图像分类等。线性变换永远无法执行这样的任务。激活函数使反向传播成为可能,因为激活函数的误差梯度可以用来调整权重和偏差。如果没有可微的非线性函数,这就不可能实现。总之,激活函数的作用是能够给神经网络加入一些非线性因素,使得神经网络可以更好地解决较为复杂的问题。

激活函数种类

Sigmoid函数

函数如下:作用是计算 x 的 sigmoid 函数。具体计算公式为 y=1/(1+exp(−x)),将值映射到[0.0 , 1.0]区间
当输入值较大时,sigmoid将返回一个接近于1.0的值,而当输入值较小时,返回值将接近于0.0.
优点:在于对在真实输出位于[0.0,1.0]的样本上训练的神经网络,sigmoid函数可将输出保持在[0.0,1.0]内的能力非常有用.
缺点:在于当输出接近于饱和或者剧烈变化是,对输出返回的这种缩减会带来一些不利影响.
当输入为0时,sigmoid函数的输出为0.5,即sigmoid函数值域的中间点函数图像如下所示:

Softmax函数

也是一种sigmoid函数,但它在处理分类问题时很方便。
sigmoid函数只能处理两个类。当我们想要处理多个类时,该怎么办呢?只对单类进行“是”或“不是”的分类方式将不会有任何帮助。
softmax函数将压缩每个类在0到1之间,并除以输出总和。它实际上可以表示某个类的输入概率。比如,我们输入[1.2,0.9,0.75],当应用softmax函数时,得到[0.42,0.31,0.27]。
现在可以用这些值来表示每个类的概率。softmax函数最好在分类器的输出层使用。其定义为:

Tanh函数

函数如下:将值映射到[-1,1]区间

tanh与sigmoid非常接近,且与后者具有类似的优缺点, sigmoid和tanh的主要区别在于tanh的值为[-1.0,1.0]
优点在于在一些特定的网络架构中,能够输出负值的能力十分有用.
缺点在于注意tanh值域的中间点为0.0,当网络中的下一层期待输入为负值或者为0.0时,这将引发一系列问题.

Relu函数

(Rectified Linear Units修正线性单元)函数如下:
relu函数是目前用的最多也是最受欢迎的激活函数。

relu在x<0时是硬饱和。由于当x>0时一阶导数为1。
所以,relu函数在x>0时可以保持梯度不衰减,从而缓解梯度消失问题,还可以更快的去收敛。但是,随着训练的进行,部分输入会落到硬饱和区,导致对应的权重无法更新。我们称之为“神经元死亡”。
公式和函数图像如下

Elu函数

是relu激活函数的改进版本,解决部分输入会落到硬饱和区,导致对应的权重无法更新的问题。
计算激活函数relu,即max(features, 0),所有负数都会归一化为0,所以的正值保留为原值不变。
优点:在于不受”梯度消失”的影响,且取值范围在[0,+oo)
缺点:在于使用了较大的学习速率时,易受达到饱和的神经元的影响。
公式和图像如下:左边缩小方差,右边保持方差;方差整体还是缩小的,而均值得不到保障。

Selu函数

左边缩小方差,右边放大方差,适当选取参数alpha和lambda,使得整体上保持方差与期望。
如果选取:lambda=1.0506,alpha=1.67326,那么可以验证如果输入的x是服从标准正态分布,那么SELU(x)的期望为0,方差为1.

SoftPlus函数

可以看作是relu函数的平滑版本,公式和函数图像如下:

线性函数Linear

我们看到了step函数的问题,梯度为零,在反向传播过程中不可能更新权重和偏差。此时,我们可以用线性函数来代替简单的step函数。函数表达式:f(x)=ax+b

如何选择激活函数

激活函数好或坏,不能凭感觉定论。然而,根据问题的性质,我们可以为神经网络更快更方便地收敛作出更好的选择。
用于分类器时,sigmoid函数及其组合通常效果更好。
由于梯度消失问题,有时要避免使用sigmoid和tanh函数。
ReLU函数是一个通用的激活函数,目前在大多数情况下使用。
如果神经网络中出现死神经元,那么PReLU函数就是最好的选择。
请记住,ReLU函数只能在隐藏层中使用。
一点经验:你可以从ReLU函数开始,如果ReLU函数没有提供最优结果,再尝试其他激活函数。

梯度知识补充

在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y)T,简称grad f(x,y)或者▽f(x,y)。对于在点(x0,y0)的具体梯度向量就是(∂f/∂x0, ∂f/∂y0)T.或者▽f(x0,y0),如果是3个参数的向量梯度,就是(∂f/∂x, ∂f/∂y,∂f/∂z)T,以此类推。
那么这个梯度向量求出来有什么意义呢?它的意义从几何意义上讲,就是函数变化增加最快的地方。具体来说,对于函数f(x,y),在点(x0,y0),沿着梯度向量的方向就是(∂f/∂x0, ∂f/∂y0)T的方向是f(x,y)增加最快的地方。或者说,沿着梯度向量的方向,更加容易找到函数的最大值。反过来说,沿着梯度向量相反的方向,也就是 -(∂f/∂x0, ∂f/∂y0)T的方向,梯度减少最快,也就是更加容易找到函数的最小值。

在机器学习算法中,在最小化损失函数时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数,和模型参数值。反过来,如果我们需要求解损失函数的最大值,这时就需要用梯度上升法来迭代了。    
梯度下降法和梯度上升法是可以互相转化的。比如我们需要求解损失函数f(θ)的最小值,这时我们需要用梯度下降法来迭代求解。但是实际上,我们可以反过来求解损失函数 -f(θ)的最大值,这时梯度上升法就派上用场了。

推荐:
刘建平老师的博客:https://www.cnblogs.com/pinard/p/5970503.html
刘建平老师的GitHub:https://github.com/ljpzzz/machinelearning

TensorFlow神经网络的激活函数相关推荐

  1. 玩玩机器学习4——TensorFlow基础之激活函数

    激活函数(activation function)运行时激活神经网络中某一部分神经元,将激活信息向后传入下一层的神经网络.神经网络之所以能解决非线性问题(如语音.图像识别),本质上就是激活函数加入了非 ...

  2. Tensorflow神经网络框架 小例子 三层神经网络 卷积神经网络 循环神经网络 神经网络可视化

    Tensorflow神经网络框架 以前我们讲了神经网络基础,但是如果从头开始实现,那将是一个庞大且费时的工作,所以我们选择一条捷径---神经网络框架.我理解的神经网络框架就相当于一个工具包.就比如我们 ...

  3. TensorFlow神经网络学习笔记

    张量(tensor) 就是多维数组 阶代表张量的维数 维数 阶 名字 0-D 0 标量scalar 1-D 1 向量vector 2-D 2 矩阵 matrix n-D n 张量 tensor 张量可 ...

  4. tensorflow中Relu激活函数

    tensorflow中Relu激活函数 引用API:tensorflow.nn.relu(x) 初学者建议选择Relu激活函数 Relu激活函数 Relu激活函数是一个分段函数,只需要考虑值是否大于0 ...

  5. 为什么神经网络的激活函数必须使用线性函数?

    什么是线性函数? 函数本来是输入某个值后会返回一个值的转换器.向这个转换器输入某个值后,输出值是输入值的常数倍的函数称为线性函数(用数学式表示为h(x) = cx. c为常数).因此,线性函数是一条笔 ...

  6. TensorFlow神经网络集成方案

    TensorFlow神经网络集成方案 创造张力流create_tensorflow_neuropod 将TensorFlow模型打包为neuropod包. create_tensorflow_neur ...

  7. 神经网络中激活函数的真正意义?

    神经网络中激活函数的真正意义?一个激活函数需要具有哪些必要的属性?还有哪些属性是好的属性但不必要的? (1)非线性:即导数不是常数.这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络.这也 ...

  8. Python Tensorflow神经网络实现股票预测

    神经网络(NN)它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型.这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的.在提供数据量足够大情 ...

  9. 神经网络之激活函数面面观

    转载自: [机器学习]神经网络之激活函数面面观 - 仙道菜 - 博客频道 - CSDN.NET http://blog.csdn.net/cyh_24/article/details/50593400 ...

  10. 神经网络的激活函数、并通过python实现激活函数

    神经网络的激活函数.并通过python实现 what is 激活函数 激活函数的python实现 python实现阶跃函数 python实现sigmoid函数 python实现ReLU函数 激活函数的 ...

最新文章

  1. 原生android 权限管理,Android 权限管理(原生、EasyPermissions、RxPermissions)
  2. 11月25日struts培训日记
  3. 自学笔记:计时器Chronometer
  4. 风靡全球的儿童编程语言:Scratch
  5. 如何构建JavaScript警报框或弹出窗口
  6. Linux嵌入式系统开发之Led开发——应用篇(一)
  7. 运用tms320c54x汇编语言编写定点数运算,浮点数运算程序,运用TMS320C54x汇编语言编写定点数运算、浮点数运算程序...
  8. struts1(转)
  9. java代码审计工具_Java代码审计汇总系列(六)——RCE
  10. std::numeric_limits的一个使用注意事项
  11. 烽火交换机S2000单独划分VLAN的方法
  12. 使用POI编译word—删除WORD空白段落
  13. 2020年计算机设计大赛 人流量预测 (国赛三等奖)
  14. 低价主机,怎么找性价比虚拟主机香港空间
  15. 安卓一键清理内存_雨点清理app下载-雨点清理官方版下载v1.0
  16. 台式电脑计算机怎么看是固态硬盘,怎么看电脑是机械硬盘还是固态硬盘
  17. 机器学习、数据挖掘、统计建模的技术担当,20款免费预测分析软件
  18. java内部窗口无法实现,java 既不是内部命令也不是外部命令的解决办法
  19. 实操演示 | 如何将示波器波形保存到U盘
  20. 入门必看!ui设计分类有哪些?【萧蕊冰】

热门文章

  1. 人力资源数据分析师前景_5-数据分析师前景怎么样
  2. 数据库中,DDL,DQL,DML,DCL是什么意思?
  3. 常见光纤接头LC、FC、SC、ST
  4. 移动数据Moving Data
  5. 玩转地球: 如何利用SAS绘制现代化地图(附代码)
  6. pgsql装数卸数方案
  7. 校园网多拨网速叠加思路
  8. 赛码网笔试Java代码示例
  9. FineBI中tomcat服务器部署
  10. Adobe Premiere常用快捷键_艾孜尔江摘录