相关文章推荐
瘦瘦的菠萝  ·  Java ...·  2 年前    · 
老实的鸵鸟  ·  kubeadm init curl ...·  2 年前    · 
但神经网络中,基本的函数y=wx+b就是一个线性函数,如果激活函数还是线性函数,那么线性的组合还是线性,和单独一个线性分类器没有差别,是无法逼近任意函数,而实际生活中的很多问题都不是简单的线性分类问题; 非线性激活函数可以引入非线性因素,让神经网络具有更强大的能力,可以真正做到逼近和表示任意的复杂的函数,解决更多复杂的问题,可以学习解决很多类型的问题,比如图像、文本、视频、音频等,这也是现在深度学习被全面应用到很多传统的机器学习问题的基础之一 Leaky ReLU 可以得到更多扩展。不让 x 乘常数项,而是让 x 乘超参数,这看起来比 Leaky ReLU 效果要好。该扩展就是 Parametric ReLU,也就是 PReLU,这是 LReLU 的改进。 其公式定义和 LReLU 一样,但这里的参数a是一个超参数,不需要自定义,而是自适应从数据中学习,也就是可以进行反向传播,这让神经元可以选择负区域最好的梯度 RReLU 公式定义如下所示: $$a_{ji} \sim U(l,u),l<u\;\;and\;\;l,u\in [0,1)="" $$="" 就是给定范围内取样的随机变量,但在测试中是固定的,该激活函数在一定程度上可以起到正则效果。 在论文《Empirical Evaluation of Rectified Activations in Convolution Network》,作者对比了ReLU激活函数和其三个改进版本LReLU、PReLU、RReLU在数据集CIFAR-10、CIFAR-100、NDSB中相同网络模型的性能。 想了解的可以具体看看这篇论文,当然在实际应用中,初次训练可以选择ReLU激活函数,然后可以再尝试这三个改进版来看看对比的结果 3.1.5 ELU 公式定义: 导数如下: 1.ELU减少了正常梯度与单位自然梯度之间的差距,从而加快了学习。2.在负的限制条件下能够更有鲁棒性。 由于包含指数运算,所以计算时间更长; 无法避免梯度爆炸问题; 神经网络不学习 α 值。 ELU 激活函数可以参考 ICLR 2016的论文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》。 3.1.6 Swish 这个函数也叫做自门控激活函数,来自2017年谷歌的论文《Swish: a Self-Gated Activation Function》:https://arxiv.org/abs/1710.05941v1 公式定义如下所示 其图像如下所示: 非线性 :当激活函数是线性的,一个两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即 ,就不满足这个性质,而且如果 MLP 使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的; 可微性 :当优化方法是基于梯度的时候,就体现了该性质; 单调性 :当激活函数是单调的时候,单层网络能够保证是凸函数; :当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值; 输出值的范围 :当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的 Learning Rate。 3.3 如何选择激活函数 通常选择一个激活函数并不容易,需要考虑很多因素,最好的做法还是一一实验所有的激活函数,但需要保证其他因素相同。 一些技巧:(来自深度学习500问第三篇深度学习基础) 如果 输出是 0、1 值(二分类问题) ,则 输出层选择 sigmoid 函数 ,然后其它的所有单元都选择 Relu 函数。 如果在隐藏层上不确定使用哪个激活函数,那么 通常会使用 Relu 激活函数 。有时,也会使用 tanh 激活函数,但 Relu 的一个优点是:当是负值的时候,导数等于 0。 Sigmoid 激活函数 :除了输出层是一个二分类问题基本不会用它。 Tanh 激活函数 :tanh 是非常优秀的,几乎适合所有场合。 ReLU 激活函数 :最常用的默认函数,如果不确定用哪个激活函数,就使用 ReLu 或者 Leaky ReLu,再去尝试其他的激活函数。 如果遇到了一些死的神经元,我们可以使用Leaky ReLU函数。 3.4 激活函数以零为中心的问题 在介绍Sigmoid的缺点的时候说到它不是以 0 为中心,这个特点主要是影响收敛速度,因为它的输出值是恒为正的,那么在梯度下降,进行参数更新的时候,所有参数每次更新的方向都是同个方向,要不都是正方向,或者要不都是负方向,其更新就是一个z字形,如下图所示: 《Empirical Evaluation of Rectified Activations in Convolution Network》:https://arxiv.org/abs/1505.00853 《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》:https://arxiv.org/pdf/1511.07289v5.pdf 《Swish: a Self-Gated Activation Function》:https://arxiv.org/abs/1710.05941v1 激活函数相关TensorFlow的官方文档 从ReLU到GELU,一文概览神经网络的激活函数 SELU 论文:https://arxiv.org/pdf/1706.02515.pdf GELU 论文:https://arxiv.org/pdf/1606.08415.pdf 谈谈激活函数以零为中心的问题 cs231n_激活函数