激活函数

原创
2018/04/04 00:27
阅读数 285

 深度学习基础理论-CNN篇 

激活函数


640?wx_fmt=png


激活函数(activation function)层又称非线性映射层,顾名思义,激活函数的引入为的是增加整个网络的表达能力(即非线性)。否则,若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数。在实际使用中,有多达十几种激活函数可供选择。本节以Sigmoid型激活函数和ReLU函数为例,介绍涉及激活函数的若干基本概念和问题。

 

直观上,激活函数模拟了生物神经元特性:接受一组输入信号并产生输出。在神经科学中,生物神经元通常有一个阈值,当神经元所获得的输入信号累积效果超过了该阈值,神经元就被激活而处于兴奋状态;否则处于抑制状态。在人工神经网络中,因Sigmoid型函数可以模拟这一生物过程,从而在神经网络发展历史进程中曾处于相当重要的地位。Sigmoid型函数也称Logistic函数:


640?wx_fmt=png


其函数形状下图(a)所示。很明显能看出,经过Sigmoid型函数作用后,输出响应的值域被压缩到[0,1] 之间,而0对应了生物神经元的“抑制状态”,1则恰好对应了“兴奋状态”。不过再深入的观察还能发现在Sigmoid函数两端,对于大于5(或小于−5)的值无论多大(或多小)都会压缩到1(或0)。如此便带来一个严重问题,即梯度的“饱和效应”。对照Sigmoid型函数的梯度图如下图(b)所示,大于5(或小于−5)部分的梯度接近0,这会导致在误差反向传播过程中导数处于该区域的误差将很难甚至根本无法传递至前层,进而导致整个网络无法训练(导数为0将无法更新网络参数)。此外,在参数初始化的时候还需特别注意,要避免初始化参数直接将输出值域带入这一区域:一种可能的情形是当初始化参数过大时,将直接引发梯度饱和效应而无法训练。


640?wx_fmt=png

图  Sigmoid型函数及其函数梯度


为了避免梯度饱和效应的发生,Nair和Hinton于2010年将修正线性单(Rectified Linear Unit,简称ReLU)引入神经网络。ReLU函数是目前深度卷积神经网络中最为常用的激活函数之一。另外,根据ReLU函数改进的其他激活函数也展示出更好的性能。


640?wx_fmt=png

图 ReLU函数及其函数梯度



ReLU函数实际上是一个分段函数,其定义为:


640?wx_fmt=png


由上图可见,ReLU函数的梯度在x ≥ 0 时为1,反之为0。对x ≥ 0 部分完全消除了Sigmoid型函数的梯度饱和效应。同时,在实验中还发现相比Sigmoid型函数,ReLU函数有助于随机梯度下降方法收敛,收敛速度约快6倍左右。正是由于ReLU函数的这些优质特性,ReLU函数已成为目前卷积神经网络及其他深度学习模型(如递归神经网络RNN等)激活函数的首选之一。



 end


*欢迎在留言区分享您的观点  

*值班小Paddle:wangp


*为了方便大家问题的跟进解决,PaddlePaddle采用Github Issue来采集信息和追踪进度。大家遇到问题请搜索Github Issue,问题未解决请优先在Github Issue上提问,有助于问题的积累和沉淀


640?wx_fmt=png


点击“阅读原文”,访问Github Issue。

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部