关于激活函数的理解

本篇内容主要都是参考知乎: https://www.zhihu.com/question/22334626 加上个人理解整理而成, 很多图片直接引用自该帖.

深度学习要处理的数据, 其实基本上是无法通过类似: y = w1*x2+w2*x2+b 这样的线性表达式直接表达出来, 所以需要通过通过激活函数, 间接地达到线性表达式的结果, 直观的表示计算结果为”true” or “false”.

一万个线性函数的复合函数还是线性函数,那还要“深度”学习做什么? 激活函数就是为了增加神经网络对“非线性”数据的表达能力.

Part 1:

某些数据是线性可分的,意思是,可以用一条直线将数据分开。比如下图:

但是有些数据不是线性可分的。比如如下数据:

第二组数据你就没有办法画出一条直线来将数据区分开。

这时候有两个办法,第一个办法,是做线性变换(linear transformation),比如将x,y变成x^2,y^2,这样可以画出圆形。如图所示:

如果将坐标轴从x,y变为以x^2,y^2为标准,你会发现数据经过变换后是线性可分的了。大致示意图如下:

总的来说, 就是将非线性的数据, 拟合成线性的方式来表达.

(原作者描述的: 引入非线性函数, 异或问题的那一段尚未理解, 在此处不引用)

Part 2:

另外一种通俗的理解如下.

首先我们有这个需求,就是二分类问题,如我要将下面的三角形和圆形点进行正确的分类,如下图:

利用我们单层的感知机, 用它可以划出一条线, 把平面分割开:

上图右侧直线可以写成线性表达式: w_{1}x_{1} + w_{2}x_{2}+b=0 . 在直线右侧的为正类, 在直线左侧的为负类.

但是如果出现如下图的情况, 要通过线性函数直接区分开圆形跟三角形的集合, 就无法实现:

很容易能够看出,我给出的样本点根本不是线性可分的,一个感知器无论得到的直线怎么动,都不可能完全正确的将三角形与圆形区分出来.

那如果用多个感知器呢? 比如3个:

我们能够得到

y=w_{2-1}(w_{1-11}x_{1}+ w_{1-21}x_{2}+b_{1-1} )+ w_{2-2}(w_{1-12}x_{1}+ w_{1-22}x_{2}+b_{1-2} )+w_{2-3}(w_{1-13}x_{1}+ w_{1-23}x_{2}+b_{1-3} )

将多项式变换下组合, 我们可以得到:

y=x_{1}(w_{2-1}w_{1-11}+w_{2-2}w_{1-12} +w_{2-3}w_{1-13} )+x_{2} (w_{2-1}w_{1-21}+w_{2-2}w_{1-22} +w_{2-3}w_{1-23} )+w_{2-1} b_{1-1} +w_{2-2} b_{1-2}+w_{2-3} b_{1-3}

其实这本质上还是一个线性表达式, 无法表达非线性问题.

深度学习肯定不只是能处理线性问题, 更重要的是能处理非线性问题.

在上面线性方程的组合过程中,我们其实类似在做三条直线的组合,如下图:

这个时候可以开始引入激活函数了, 这里就给出sigmoid例子,如下图:

通过这个激活函数映射之后,输出很明显就是一个非线性函数!能不能解决一开始的非线性分类问题不清楚,但是至少说明有可能啊,上面不加入激活函数神经网络压根就不可能解决这个问题~

当扩展到多个神经元组合的情况时候,表达能力就会更强~对应的组合图如下:(现在已经升级为三个非线性感知器在组合了)

跟上面线性组合相对应的非线性组合如下:

这看起来厉害多了,是不是~最后再通过最优化损失函数的做法,我们能够学习到不断学习靠近能够正确分类三角形和圆形点的曲线,到底会学到什么曲线,不知道到底具体的样子,也许是下面这个~

那么随着不断训练优化,我们也就能够解决非线性的问题了

所以到这里为止,我们就解释了这个观点: 加入激活函数是用来加入非线性因素的,解决线性模型所不能解决的问题。