首页
学习
活动
专区
工具
TVP
发布

人工神经网络中为什么会有激活函数,主要的激活函数有哪些?

在神经网络中会存在激活函数这样的设计,但是为什么需要激活函数,它有什么作用呢?

这篇文章对激活函数进行一些讲解。

1 激活函数的来源

感知器是模仿生物神经元而设计的一种简单数学模型,它主要有两部分组成,前半部分是一个线性模型,而后半部分是一个激活函数。在感知器中,设计激活函数的初衷应该是为了模仿生物神经元 (注:生物神经元存在激活和非激活这两种状态,当神经元处于激活状态时会发出电脉冲)。从数学角度去考虑的话,在感知器的后半部分加上一个激活函数,可以增加感知器模型的“拟合能力”,使得模型有更强的表达作用。

在基本的感知器模型中,激活函数是一个阶跃函数,这个函数的特性是,在输入为零的时候会发生跳转,形状像一个台阶。在下图的感知器模型中,当阶跃函数的输入小于等于零时候,输出为零,而在其它情况输出为1。

2 早期常用的激活函数sigmoid

虽然在基础的感知器模型中选择阶跃函数作为激活函数,但是在实际中却很少采用阶跃函数,这是因为阶跃函数有点太极端了,要么输出为零要么输出为1。人们最初的考虑是能不能让激活函数的输出别这么极端,让它平滑一些,因此有了sigmoid函数,如下图所示。

3 sigmoid的变种tanh

细心的读者可能注意到,阶跃函数和sigmoid函数的输出都是大于等于零的,这会在神经网络中存在一个问题,也就是一旦经过这样的激活函数,值会恒大于等于零。因为有输出恒大于等于零的顾虑,又出现了tanh激活函数。tanh函数和sigmoid函数长得非常像,输出为-1到1之间,它相当于把sigmoid函数沿着纵轴拉伸了一倍,然后又向下平移了一个单位。

4 sigmoid与tanh的梯度消失问题

虽然sigmoid和tanh函数看起来很不错,函数的形状很规则,也很平滑。但是这样的激活函数在深度的神经网络中使用,会存在一个严重的问题,也就是梯度消失问题。

sigmoid和tanh函数中存在饱和区,一旦输入落入饱和区,函数的导数就会变得接近于零,这会导致反向传播中的梯度变得非常小,此时网络参数很难进行有效调节,这种现象被称为梯度消失。一般来说,sigmoid网络在5层之内可能就会发生梯度消失现象。在历史很长时间内,梯度消失现象是阻碍神经网络发展的主要原因之一。

5 ReLU激活函数

为了解决梯度消失的问题,ReLU激活函数被发明了出来,它是一个非常简单的函数,当输入小于零的时候输出为零,否则输出等于输入。

看到ReLU函数如此简单,有些人可能会惊讶,怎么会有如此简单的激活函数,它真的有效的?在实际中,ReLU效果非常好,然而ReLU却是目前在深度神经网络中主要使用的激活函数。与传统的sigmoid激活函数相比,ReLU能够有效缓解梯度消失问题,可以说正因为采用了ReLU作为激活函数,神经网络可训练的层数才大为增加,这也是2012年卷积神经网络AlexNet在ILSVRC竞赛中,取得突破性进展的重要原因之一。

后记

在这篇文章为大家介绍了sigmoid、tanh、ReLU等激活函数,它是神经网络中的基本组件。在应用中激活函数还有很多种的变种,但是一般来说这些变种的效果并不是特别明显。现在,虽然人们对“人工神经网络”的认识越来越多,但是神经网络依然缺少好的理论基础,这个也制约了人工智能的发展。在后面的文章中,还会给大家介绍更多的AI知识,欢迎关注我们。

本文作者:知云学堂

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181206A0UFDZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券