社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习基本概念|激活函数 Activation Function

生信修炼手册 • 4 年前 • 389 次点击  
欢迎关注”生信修炼手册”!
人工神经网络由多层神经元构成,对于单个神经元而言,首先对接收到的输入信号进行线性组合,示意如下

但是在输出信号时,会使用一个称之为激活函数的函数对线性组合的信号进一步处理。激活函数是一种非线性函数,由多种具体的函数表达式。

为何一定需要激活函数呢?如果没有激活函数的话,神经元的信号处理本质上就是一个线性组合,即使叠加再多层的神经元,整个神经网络也还是线性组合,这样就不能解决非线性的问题,所以激活函数的作用,是为神经网络引入非线性组合的能力,使其可以适用于复杂的应用场景。

激活函数由多种,下面介绍几种常用的激活函数

1. Sigmod

就是逻辑回归中的sigmod函数,函数图像如下

取值范围为0到1,sigmod是最常用的激活函数之一,作为最早使用的激活函数,在神经网络发展的早期最为常用,但是该函数存在着以下两个缺点。

神经网络通过基于梯度下降的反向传播算法来训练参数,在反向的过程中,需要借助链式法则来计算梯度

对于sigmod函数而言,其导函数的取值都很小,导函数的图像如下

最大值0.25,这样在链式法则的连乘过程中,会使得梯度很快趋近于0,这种现象称之为梯度消失kill gradients。研究表明,对于5层以上的神经网络,特别容易出现梯度消失,所以sigmod函数对于层数很多的深度神经网络效果不太好。

其次,sigmod函数的输出值恒大于0,即not zero-centered, 这样在梯度下降的过程中只能按照下图所示的路径来收敛

收敛速度较慢,神经网络参数非常多,收敛速度慢会大大增加模型的训练时长。

2. Tanh

Tanh函数的图像如下

相比sigmod函数,tanh函数输出范围为-1到1,是zero-centered, 所以收敛速度有所提高。

但是本质上该函数其实是sigmod的变体

所以与sigmod函数一样,该函数也会出现梯度消失的问题。

3. ReLU

ReLU是Rectified  Linear Unit的缩写,简称修正线性单元,函数表达式如下

函数图像如下

ReLU函数的求导很简单

而且在x>0的区间,不会梯度消失的现象,使得其性能比sigmod和tanh好很多,收敛速度更快,但是ReLU函数也有一个缺点。

ReLU函数对于负数,其导数为0,此时会出现神经元的参数永远无法更新的情况,推导过成如下

称之为神经元死亡,造成这种现象的原因由两个,第一种是在初始化参数时出现负值,第二种是学习率设置较大,导致参数更新幅度太大,出现负值。

所以在使用ReLU时,对学习率的设置要注意,需要一个合适的较小的学习率。

4. PReLU

全称是Parametric Relu, 是ReLU的改进版,函数表达式如下

针对ReLU负数为0的情况,在负数部分,设置了斜率α,当α取值为0.01时,激活函数称之为Leaky Relu, 函数图像如下

PReLU克服了ReLU会出现的神经元死亡问题,但是超参数α需要根据先验知识人工设置。

5. ELU

ELU是Exponential Linear Unit的缩写, 简称指数线性单元,函数表达式和图像如下

和PReLU类似,也定义了超参数α,对负数部分进行修正,不同的是这里不在是PReLU中的线性关系,而是一个指数关系。

该函数也避免了神经元死亡的问题,同样的超参数α需要根据先验知识人工设置,而且其求导运算比PReLU速度慢。

6. softplus

该函数是ReLU的一种平滑版本,表达式如下

函数图像如下

相比ReLU,该函数出现神经元死亡的概率更小。

7.  softsign

函数表达式如下

和tanh函数图像非常相似,图像如下

可以看作是tanh的替代品,梯度消失的概率会降低。

8. swish

同样属于ReLU的改进版,函数表达式如下

图像如下

上述几种激活函数用于隐含层神经元的输出处理,除此之外,还有两种特殊的激活函数,针对输出层的神经元,简介如下

1. softmax

专门用于处理多分类问题,在神经网络的输出层之后,在添加一个softmax层,示意如下

通过softmax函数,将神经元的输出值转换为概率,示意如下

2. MaxOut

maxout是由人为设定的K个神经元构成的一层神经元,示意如下

对于maxout层的输出,取k个神经元输出值的最大值作为最终的输出值,这就是maxout的含义。maxout可以看作是分段的线性函数,可以拟合任意的凸函数,提供模型的拟合能力。

引入maxout层,意味着额外增加了一层权重和参数,使得神经网络整体的参数变多,计算量更大。

·end·
—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
  更多精彩
  写在最后
转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。

扫描下方二维码,关注我们,解锁更多精彩内容!

一个只分享干货的

生信公众号



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/115227
 
389 次点击