才子佳人博客

我的故事我讲述

常用激活函数(激励函数)理解与总结
###SmallArticleTitle###
来源:blog.csdn.net;  编辑:xjh;  2019-12-30

学习神经网络的时候我们总是听到激活函数这个词,而且很多资料都会提到常用的激活函数,比如Sigmoid函数、tanh函数、Relu函数。本文的内容包括几个部分:

1)什么是激活函数?

2)激活函数的用途(为什么需要激活函数)?

3)有哪些激活函数,都有什么性质和特点?

4)应用中如何选择合适的激活函数?

如果你对以上几个问题不是很清楚,下面的内容对你是有价值的。

一、什么是激活函数?

首先要了解神经网络的基本模型。神经网络基础:神经元模型

神经网络中的每个神经元节点接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层,输入层神经元节点会将输入属性值直接传递给下一层(隐层或输出层)。在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数(又称激励函数)。

二、激活函数的用途(为什么需要激活函数)?

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层节点的输入都是上层输出的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了,那么网络的逼近能力就相当有限。

正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络表达能力就更加强大(不再是输入的线性组合,而是几乎可以逼近任意函数)。

简言之,激活函数的作用是用来加入非线性因素,把卷积层输出结果做非线性映射。

三、有哪些激活函数,都有什么性质和特点?

早期研究神经网络主要采用sigmoid函数或者tanh函数,输出有界,很容易充当下一层的输入。

近些年Relu函数及其改进型(如Leaky-ReLU、P-ReLU、R-ReLU等)在多层神经网络中应用比较多。下面我们来总结下这些激活函数:

1)Sigmoid函数

Sigmoid 是常用的非线性的激活函数,它的数学形式如下



Sigmoid的几何图像如下:


特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.

2)tanh 双曲正切函数

tanh函数解析式:


tanh函数的几何图像如下图:



tanh读作Hyperbolic Tangent,它解决了Sigmoid函数的不是zero-centered输出问题,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

3)Relu函数

线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元,通常指代数学中的斜坡函数,Relu函数的解析式:

Relu=max(0,x)

Relu函数的图像如下图所示:


ReLU函数其实就是一个取最大值函数,注意这并不是全区间可导的,但是我们可以取sub-gradient,如上图所示。ReLU虽然简单,但却是近几年的重要成果,有以下几大优点:

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

2)计算速度非常快,只需要判断输入是否大于0

3)收敛速度远快于sigmoid和tanh

ReLU目前仍是最常用的activation function,在搭建人工神经网络的时候推荐优先尝试!

四、应用中如何选择合适的激活函数?

1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。

2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.

3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

原文链接:
https://blog.csdn.net/tyhj_sf/article/details/79932893
https://www.cnblogs.com/adong7639/p/9213038.html ReLU上的花样

分类:网络日志 | 评论数:0 | 浏览数:89
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: