本节首先对之前所学到的激活函数进行回顾与巩固,随后介绍一些其他类型的激活函数,
如图,蓝线为sigmoid激活函数,sigmoid激活函数可以将数值压缩至0到1,特别适合于probability和RGB的计算,但它具有梯度离散的问题,在边缘时梯度接近于0,会导致无法继续优化的情况。
而红线是tanh函数,是sigmoid函数经过缩放平移得到的,其区间范围是-1至1,中间范围更窄,梯度变化更大,同样tanh也会存在梯度离散的情况,tanh较多应用于RNN循环神经网络中。
上图中的Relu函数较sigmoid函数更简单,它具有一阈值,当输入值小于莫一阈值时,输出为0。当达到阈值后,进行线性输出。relu函数一定程度上解决了梯度离散的问题。
但relu函数在梯度小于0的时候仍会出现梯度离散的情况。为解决此问题后人研究了Leaky ReLU函数。
由图可看出,Leaky ReLU函数在梯度小于0的部分进行一定程度上的倾斜,倾斜度为α。
写代码如下
import torch.nn as nn
nn.Linear(784, 200),
nn.LeakyReLU(inplace=True),
nn.Linear(200, 200),
nn.LeakyReLU(inpalce=True),
nn.Linear(200, 10),
nn.LeakyReLU(inplace=True)
这里倾斜角度α也可以进行指定,后续会进行讲解。
这里注意到无论是ReLU还是Leaky ReLU,均在0处不连续,后人研究了一种梯度更平滑的SELU函数。
这样在x小于0处也具有更平滑的梯度。
另外还有softplus函数
softplus也在x=0处进行了平滑处理。
本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!