激活函数在深度学习中的作用非常大,如果没有激活函数,所有的模型都将只是线性变换。
Pytorch中实现了多种激活函数,例如常见的ReLU、sigmoid 和 tanh。往往不同的模型,使用的激活函数对最终模型效果影响还是很大的。如何选取最佳的激活函数也是常常需要面临的一个问题。
本文将主要介绍三种常见激活函数的实现,并在实际模型中如何挑选最佳的一个激活函数。
引言
本文介绍三种常见的激活函数的实现,以及对应的对比、选取。本文分为以下几部分:
1、sigmoid激活函数的实现
2、tanh激活函数的实现
3、relu激活函数的实现
4、不同激活函数的选取
sigmoid激活函数的实现
sigmoid激活函数可以将任意输入映射到 0 到 1 之间的值,该值可以理解为概率。所以它经常用于二分类任务。
但是其当输入值较大或较小时,sigmoid函数的梯度接近0,这会导致梯度消失问题,从而在模型训练中难以训练。
借助Pytorch,它的实现也很简单,如下所示。
tanh激活函数的实现
tanh激活函数的输出范围是是(-1, 1),以零中心,有助于数据的均匀分布,从而提高训练效率。
与sigmoid类似,tanh函数在输入值较大或较小时也会遇到梯度消失的问题。
借助Pytorch,它的实现也很简单,如下所示。
relu激活函数的实现
relu相比前两个激活函数,计算起来都要更简单。
relu激活函数,当输入为正时,输出直接是输入,而输入为负时输出是0。它是一种非饱和函数,意味着它不会在输入为正数的情况下导致梯度消失。
它的缺点是由于负值部分的输出为0,这会导致网络在任意时刻只有一部分神经元被激活,增加了网络的稀疏性。
借助Pytorch,它的实现也很简单,如下所示。
不同激活函数的选取
最简单的,可以通过实验的方式,来看每个激活函数在实际模型上的效果。
代码如下所示。通过比较对应的损失情况,来选择对应的激活函数。
当你有了一定模型开发经验后,你会发现:
- relu由于其简单性和效率,通常是隐藏层的首选激活函数。
- sigmoid和tanh则因为其特定的输出范围,可能在输出层被用于特定类型的问题,例如二分类问题(sigmoid)或者当你需要输出在-1和1之间变化的情况(tanh)。
- 由于梯度消失的问题,sigmoid和tanh在深层网络的隐藏层中使用得较少。在这些情况下,可能会选择ReLU的变体,如Leaky ReLU或者ELU,来缓解ReLU的一些限制。
本文暂时没有评论,来添加一个吧(●'◡'●)