写在前面的话
本文为我在学习卷积神经网络的时候,对激活函数的一些理解。
总结起来,激活函数的作用就是:加入非线性因素,解决线性模型所不能解决的问题。
本文参考文章:神经网络激活函数的作用是什么?
欢迎扫码关注我的公众号,与我一同学习进步!主要致力于学习
- 使用深度学习解决计算机视觉相关问题
- Python为主的互联网应用服务
- 基于MIPS指令集的CPU微体系结构设计
简单的二分类问题
现有问题为:对下图中的两类不同形状的图案进行分类;这实质上是一个线性不可分问题,即在该平面内很难找到一条直线将两类不同形状的图案区分开。
-
使用不带激活函数的单层感知机进行分类
使用的单层感知机模型及对应的模型分类同如下图所示。
其中,W1、W2是模型的权重,b是偏置量。它的工作原理是:输入特征X1和X2,如果y大于0,就说明它是正类;如果y小于0,就说明它是负类。根据相应的网络模型,示例的分类线如右图所示。
-
使用不带激活函数的多层感知机进行分类
使用的多层感知机分类模型及对应的函数如下图所示。
其中,不同的W参数表示感知机不同层的参数。与单层感知机类似,它也是一个线性分类模型,无法解决上述的分类问题。
对于该模型中的三个神经元,其本质上是三条直线的线性组合,使用三条直线对相关区域进行分类,模型的数学表示如下图所示。
问题:在该问题中,我们尝试了不同的分类方法,都无法解决该非线性二分类问题。同时,由于仅使用线性函数及其组合可解决的问题有限,必须采用相关方法进行改进,解决非线性问题。
复杂的线性组合与激活函数
那么,对于该问题,是否一定不能使用线性函数进行解决?答案显然是否定的。
如下图所示,图中的两条直线可以很好的区分出两类不同形状的图案。但问题是,对于机器来说,学得这样的两条直线是相当困难的。
为了方便机器的学习,我们引入激活函数,在模型中增加非线性因素,从而期望可以学到一个较好的结果,可用于该线性不可分的二分类问题。
为了尽可能的使模型简单,算法易于理解,这里仅引入激活函数Sigmoid。它的表达式如下图所示。
针对该表达式,做出它的图像如下图所示。
引入该激活函数之后,在多层感知机的每一层计算得到输出结果之后,再将输出结果传入到激活函数中进行计算。这一过程中,线性的输出结果转变为非线性。经过该过程,构建的模型如下图所示。
模型拟合表达出的直线就转变为曲线,如下图所示。
这与我们之前的使用自己所想的两条直线勾勒出的结果十分类似。只不过,该方法是计算机可以接受并且进行学习的。经过多轮的训练与迭代之后,计算机将可以学习到能够正确分类两类不同图案的曲线,如下图所示。
注:下图只是认为构想的一个例子,但实际上可能并不是该曲线,也可能为其他曲线。
激活函数的作用
经过以上简单的示例,我们了解到:激活函数的主要目的是在线性模型中引入非线性元素,从而使得机器学习(深度学习)相关模型可以处理线性不可分的问题,构建出良好的模型用于实际的应用中。