形象的解释神经网络激活函数的作用是什么?

形象的解释神经网络激活函数的作用是什么?,第1张

这篇文章首先回答了一个人们都忽略的问题:在神经网络中,一个小小的激活函数为何如此重要?它的作用到底是什么?然后我就目前主流的激活函数做了一个对比讨论,并提出一些建议。

这里首先引出结论: 激活函数是来向神经网络中引入非线性因素的,通过激活函数,神经网络就可以拟合各种曲线。 这里举一个例子来说明:假如我的任务是:将下面的这幅图中的三角形和圆形分开,也就是一个典型的二分类问题。

就是上图右边的直线,无论如何更改参数,它都不能很好的完成这个二分类问题,因为问题本身就是 线性不可分 的。

那么如何才能完美解决这个问题呢?我们试一试多感知器的表现

如果仔细观察,你就会发现,多感知器形成的方程其实也是一条直线(不信你把上面的那个式子因式分解一下),上面已经说了,该问题是线性不可分的,所以多感知器也不能解决这个问题。接下来,就让我们看看激活函数能不能解决。在每一层叠加完后,我们为输出与输入之间加上一个激活函数,此时的方程就变成了这样:

这样也许就能将这个线性不可分的问题解决了。最后也许就是这个样子:

从上面的分析来看,我们可以看出激活函数是神经网络在拟合函数方面超过传统机器学习方法的一个关键因素。对比传统机器学习方法中, 即使是最复杂的SVM, 在拟合方面非线性曲线差神经网络n条街。

常见的激活函数

除了以上介绍的几个激活函数外, 还有一些比较小众的激活函数,如 Leaky ReLU、PReLU 或者 Maxout。

如何选择激活函数是一门大学问, 我的研究还不够深,做的实验还不够多, 因此很难有所定论, 这里先引用几篇博客里面和吴恩达视频中的结论。

1.除非在二分类问题中,否则请小心使用sigmoid函数。

2.可以试试 tanh,不过大多数情况下它的效果会比不上 ReLU 和 Maxout。

3.如果你不知道应该使用哪个激活函数, 那么请优先选择Relu。

4.如果你使用了Relu, 需要注意一下Dead Relu问题, 此时你需要仔细选择 Learning rate, 避免出现大的梯度从而导致过多的神经元 “Dead” 。

5.如果发生了Dead Relu问题, 可以尝试一下leaky ReLU,ELU等Relu变体, 说不定会有惊喜。

蓝海大脑图数据一体机研究人员表示:1. 非线性:即导数不是常数。这个条件是多层神经网络的基础,保证多层网络不退化成单层线性网络。这也是激活函数的意义所在。

2. 几乎处处可微:可微性保证了在优化中梯度的可计算性。传统的激活函数如sigmoid等满足处处可微。对于分段线性函数比如ReLU,只满足几乎处处可微(即仅在有限个点处不可微)。对于SGD算法来说,由于几乎不可能收敛到梯度接近零的位置,有限的不可微点对于优化结果不会有很大影响[1]。

3. 计算简单:非线性函数有很多。极端的说,一个多层神经网络也可以作为一个非线性函数,类似于Network In Network[2]中把它当做卷积 *** 作的做法。但激活函数在神经网络前向的计算次数与神经元的个数成正比,因此简单的非线性函数自然更适合用作激活函数。这也是ReLU之流比其它使用Exp等 *** 作的激活函数更受欢迎的其中一个原因。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11894191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存