入门必看!一文读懂神经网络中的激活函数(二)

看看深度学习之激活函数

本篇接着上一篇推文入门《必看!从零开始了解到训练神经网络(一)》,在介绍完神经网络的基本原理和结构之后,继续介绍神经网络中的关键之一 —— 激活函数。

树根这一部分会给大家通俗讲一下激活函数的概念,原理以及作用,还有实际应用中各种激活函数的优缺点。因为激活函数本身就是一种数学函数,推文中出现数学公式在所难免,但是树根力求讲得通俗清晰,让初学者都能读懂,轻松入门深度学习。

1

感知机 Percrptron

Activation Function

感知机由Rosenblatt于1957年提出,是一个经典的二分类的线性分类器。对每一个输入w⋅x+b ,到输出 f(x) 的函数为:

f(x)=sign(w⋅x+b)

称为感知机。其中,参数w叫做权值向量weight,b称为偏置bias,w*b 表示w和x的点积,这些树根在之前也已经说了。sign为符号函数,即:

因此感知机会把输入分类为+1或者-1两类。放上一张图大家就懂了:

我们的输入为实例样本的特征(上图中分别为x1和x2),输出为实例的类别(上图实例分为两类,蓝色取+1,红色取-1)。

而感知机,就是上图中把实例样本划分为+1或-1两类的那条直线,即 w*x+b=0 。感知机旨在求出该直线,怎么求那条直线呢?类似于树根之前介绍神经网络时那样,引入了基于误分类的损失函数,利用梯度下降法 ,对损失函数进行最优化。

如上图,我们在二维的平面空间里,线性分类器是一条直线,那么假如是一个三维的立体空间呢?那么线性分类器就是一个平面,在大于三个维度的空间进行实例样本的分类呢,所求的线性分类器就是一个超平面(hyperplane)(我们看不见大于三维的空间,这里只能靠大家的想象了2333)

其实接触过机器学习的朋友都觉得以上内容很熟悉,对的,这部分内容和SVM支持向量机的基本原理是一样的。因此,感知机其实是神经网络和支持向量机的基础(树根有时间会给大家讲一下SVM支持向量机的原理和应用)。

但是怎么处理非线性不可分的实例样本呢?也许有些朋友会说,可以采用多个感知机,用很多条直线进行组合,获得更强的平面分类能力不就得了。

还有没有更加好的方法呢?

2

有激活函数的神经网络

Activation Function

我们在神经网络每一层神经元做完线性变换(SUM)以后,加上一个非线性激励函数(f)对线性变换的结果进行转换,那么输出(t)就是一个不折不扣的非线性函数了,如图所示:

拓展到多个神经元的情况,在每一个神经元的后面加上一个非线性的激活函数,输出就变成了一个复杂的非线性函数了:

而怎么样的函数能作为激活函数呢?这里树根认真复习了李飞飞还有吴恩达还有一些大牛的论文,总结出激活函数的一些特点:

(1)非线性,这点不用我多说了,直白的说就是提供网络的非线性建模能力,“让神经网络具备强大的拟合能力”。

(2)几乎处处可导(可微):当优化方法是基于梯度的时候,这个性质是必须的,也就是具备光滑性。保证了在优化中梯度的可计算性。对于分段线性函数比如ReLU,只满足几乎处处可微(在原点处不可微),这个激活函数树根等等会详细介绍。

(3)计算简单:激活函数在神经网络前向的计算次数与神经元的个数成正比,神经元越多,计算次数越多。因此简单的非线性函数自然更适合用作激活函数(这点谷歌大脑也有论文证实了)。

(4)接近恒等变换f(x)≈x:这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加,从而使网络更为稳定,同时梯度也能够更容易地回传。这个与非线性是有点矛盾的,因此激活函数基本只是部分满足这个条件。

(5)参数少:大部分激活函数都是没有参数的。

(6)单调性:即一阶导数符号不变。这个性质大部分激活函数都有。个人理解为,单调性使得在反向传播的时候,激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。

(7)输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会有稳定的输出,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。但这导致了前面提到的梯度消失问题,而且强行让每一层的输出限制到固定范围会限制其表达能力。

树根大概能理解的关于激活函数的特点可能会有错漏的地方,欢迎大家来补充和纠正。在我们大概理解了怎么样的函数能作为激活函数,接下来我们就来看看常见的激活函数有哪些。

3

常见的激活函数

Activation Function

下面是常见的激活函数的图示及其一阶导数的示意图(蓝线是函数,橙线是其导数),所有的激活函数一共有26个,这里由于篇幅问题,树根就不一一列举出来了,仅仅是列举几个最常用的激活函数,但是在日常的实践中已经够用了。

1.Sigmoid

数学形式:

Sigmoid 因其在 logistic 回归中的重要地位而被人熟知,值域在 0 到 1 之间。Logistic Sigmoid(或者按通常的叫法,Sigmoid)激活函数给神经网络引进了概率的概念(用于多分类的Softmax函数)。它的导数是非零的,并且很容易计算(是其初始输出的函数)。然而,在分类任务中,sigmoid 正逐渐被 Tanh 函数取代作为标准的激活函数。

sigmoid 函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它的一些 缺点(基于李飞飞的CS231n课程):

(1) Sigmoids saturate and kill gradients: 该函数存在饱和性(saturation)和梯度消失问题(vanishing gradient problem)。我们看图像可以知道,该函数的导数(向量形式称为梯度)在x取很大或者很小的时候,是接近于0的。回忆一下,在反向传播的时候,这个梯度将会与整个损失函数关于该神经元输出的梯度相乘。因此,如果激活函数的梯度非常小,那么相乘的结果也会接近零,这会有效地“杀死”梯度,这会导致网络变的很难进行学习。

(2)Sigmoid函数的输出不是零中心的(Zero-centered)。首先熟悉微积分的可以手算一下,该函数的导数为:sigmoid * (1 - sigmoid),如果输入x都是正数,那么sigmoid的输出y在[0.5,1]。那么sigmoid的梯度 = [0.5, 1] * (1 - [0.5, 1]) ~= [0, 0.5] 总是 > 0的。假设最后整个神经网络的输出是正数,最后 w 的梯度就是正数;反之,假如输入全是负数,w 的梯度就是负数。

这样的梯度造成的问题就是,优化过程呈现“之字形”(zig-zag),因为你的 w 要么只能往下走(负数),要么只能往右走(正的),导致优化的效率十分低下。

2.Tanh

数学表达:

在分类任务中,双曲正切函数(Tanh)逐渐取代 Sigmoid 函数作为标准的激活函数,其具有很多神经网络所钟爱的特征。它是完全可微分的,反对称,对称中心在原点。为了解决学习缓慢和/或梯度消失问题,可以使用这个函数的更加平缓的变体(log-log、softsign、symmetrical sigmoid 等等)

在实际应用中,tanh的效果几乎都比sigmoid好,这一点吴恩达也说了。假如不是二分类问题,一般是采用tanh取代sigmoid。它将实数值压缩到[-1,1]之间。和sigmoid神经元一样,它也存在饱和性问题,但是和sigmoid神经元不同的是,它的输出是零中心的,因此收敛会比sigmoid快。因此,在实际操作中,tanh非线性函数比sigmoid非线性函数更受欢迎。

3.ReLU

数学表达式:

f(x) = max (0, x)

在近些年ReLU(修正线性单元)变得非常流行。在介绍ReLU之前,我们再稍微提一下梯度不稳定的问题。在深层的神经网络中,后面层的梯度是前面层的累积的乘积,所以只要梯度稍微大于1或者小于1,神经网络都会非常不稳定,通常有多层后, 每层网络都以非常不同的速率学习。

怎么解决这个梯度不稳定问题呢?我们可以让激活函数的梯度刚好等于1。

ReLu解决了vanishing gradient的问题,至少在正区间内,神经元不会饱和了。值得注意的是,在原点该函数是不存在导数的(左导数为0,右导数为1,左右导数不相等故导数不存在,连续不一定可导)。但是不必担心,在实际训练中,出现完全为0的样本的概率是非常低的,这点并不会影响训练。

其次,ReLU 在x0时导数为 1,所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。但随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”。

第三,一般来说,ReLU仅限于作为隐藏层的激活函数,不会用来放在输出层。但是假如你想预测房价,样本不存在负数的情况下,也许可以考虑ReLU。

4.softmax

树根在之前的推文已经说过了,softmax函数用于多分类神经网络输出,数学表达式为:

5.Leaky ReLU

数学表达式:

f(x) = max(0.01x, x)

经典(以及广泛使用的)ReLU 激活函数的变体,带泄露修正线性单元(Leaky ReLU),输出对负值输入有很小的坡度。由于导数总是不为零,这能减少死神经元的出现,允许负值输入基于梯度的学习(虽然会很慢)。

值得一说的是,这里提到了这个0.01可以是任意数值,可以作为类似于学习率这样的超参数进行调整

还有其他的激活函数,比如PReLU、Maxout、ELU等等,树根就不介绍了,但是以上都是神经网络训练中比较常用的几个激活函数。那么我们该怎么选择适合的激活函数呢?

4

激活函数的选择

Activation Function

(1)用于分类器时,Sigmoid函数及其组合通常效果更好。当然了解LSTM模型的朋友也知道Sigmoid函数会用于“遗忘门”。但是其他情况下,由于梯度消失问题,要尽量避免使用sigmoid函数(和tanh函数)。

(2)ReLU函数是一个通用的激活函数,目前在大多数情况下使用。

一点经验(来自吴恩达和其他大牛):你可以从ReLU函数开始,如果ReLU函数没有提供最优结果,再尝试tanh激活函数,万不得已,不要去试sigmoid函数。

感谢阅读

--欢迎后台调戏聊天机器人--

树根精选原创TOP

本文来自企鹅号 - 树根经济学媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏社区的朋友们

机器学习概念总结笔记(三)

C4.5 算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4....

7501
来自专栏机器学习和数学

[机智的机器在学习] 卷积神经网络入门教程(2)

今天继续回归卷积神经网络的入门教程,主要是介绍全连接网络的训练过程,通俗的讲就是我们入门教程(1)里面讲的是全连接网络长什么样,神经元之间的关系是什么样的,里面...

3654
来自专栏WD学习记录

机器学习 学习笔记(20)深度前馈网络

深度前馈网络(deep feedforward network),也叫做前馈神经网络(feedforward neural network)或者多层感知机(mu...

3613
来自专栏PPV课数据科学社区

机器学习算法基础概念学习总结

1.基础概念 (1) 10折交叉验证:英文名是10-fold cross-validation,用来测试算法的准确性。是常用的测试方法。将数据集分成10份。轮...

3864
来自专栏人工智能LeadAI

数据挖掘面试题之梯度提升树

GBDT是机器学习面试中的常客,但是,要准确地说出它的原理却并不容易,除了掌握DT基本知识外,还要掌握加法模型、前向分步算法、梯度提升思想,本文是对这些知识点的...

3693
来自专栏深度学习自然语言处理

【精华】Batch Normalization理论与实践

batch norm也可以当做调参的一部分,对于有些实验是有效果的,有些实验是几乎没啥效果,但是它的收敛速度还是很客观的,所以我们还是有必要要了解下哒!

1092
来自专栏数据科学与人工智能

【深度学习】深度学习概述:从感知机到深度网络

近些年来,人工智能领域又活跃起来,除了传统了学术圈外,Google、Microsoft、facebook等工业界优秀企业也纷纷成立相关研究团队,并取得了很多令人...

33610
来自专栏用户2442861的专栏

深度学习概述:从感知机到深度网络

http://www.cnblogs.com/xiaowanyer/p/3701944.html

931
来自专栏专知

概率论之概念解析:极大似然估计

【导读】本文是数据科学家Jonny Brooks-Bartlett概率论基础概念系列博客中的“极大似然估计”一章,主要讲解了极大似然估计的若干概念。分别介绍了参...

3427
来自专栏IT派

笔记 | 吴恩达Coursera Deep Learning学习笔记

作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图。具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析...

3818

扫码关注云+社区

领取腾讯云代金券