激活函数用于对每层的输出数据进行变换, 进而为整个网络结构结构注入了非线性因素。此时, 神经网络具备逼近任意函数的能力。
如果不使用激活函数,整个网络虽然看起来复杂,其本质还相当于一种线性模型,如下公式所示:
上述简单网络中,输入两个特征,隐藏层包含两个神经元,输出一个结果。
隐藏层两个神经元分别为:fc1、fc2,输出神经元:fout
我们经过推导整个网络模型的计算过程,发现其在没有引入激活函数时等价于一个线性模型。可想而知,对于很多复杂的问题,线性模型的拟合能力确实捉襟见肘。
我们也可以通过图形化的方式看下添加了激活函数的网络的拟合能力,如下图所示:
如上图所示,如果选择线性激活函数,相当于网络中并没有引入非线性因素,我们发现拟合的分类边界看起来仍然是线性的。
当我们把激活函数换成了 Relu 函数,引入了非线性因素,此时,我们发现网络拟合的分类边界并不是线性的,很明显拟合效果还是非常好的。
最后,我们也可以使用一个通俗的例子来理解下非线性因素的必要性。
假设:我们有 10 名同学,我们通过学习将其映射为:医生、律师、建筑师标签。
1. 经过小学这层网络,最后通过升级考试,映射为不同基础能力的人群
2. 经过初中这层网络,最后通过升级考试,映射为不同初级能力的人群
3. 经过高中这层网络,最后通过升级考试,映射为不同中等能力的人群
4. 经过大学这层网络,最后通过毕业考试,映射为不同高级能力的人群,完成职业映射
通过反向传播来调整每个同学在小学、初中、高中、大学应该怎么学习,才可以映射为指定的标签。在这里我们将 升级考试 理解为激活函数。
如果没有升级考试这个计算环节,所有人经过小学、初衷、高中、大学都没有得分明显的区分,最后也不太容易映射到其职业标签。
通过升级考试(激活函数)对 10 名同学不同阶段能力的认定,每一基础能力的认定都能影响后期对其的认定,最后将其合理的映射为不同的职业。