outline
- 神经元与神经网络
- 激活函数
- 前向算法
- 损失函数
- 反向传播算法
- 数据的准备
- PyTorch实例:单层神经网络实现
3.2 激活函数
3.2.4 ReLU
- 线性整流函数(Rectified Linear Unit, ReLU), 又称修正线性单元,是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的 非线性函数。
ReLU是一个分段函数,其公式如下所示
image.png
- ReLU做的事情很简单:大于0的数原样输出,小于0的数输出0。在0处ReLU虽然不连续,但是也同样适合做激活函数。
- ReLU的成功应用是对生物学研究结果。生物学研究表明,生物神经不是对所有的外界信息都做出反应,而是部分,即对一部分信息进行忽略,对应于输入信息小于0的情况。
- 优点:
- 相对于Sigmoid/Tanh而言,它更简单,只需要一个阈值就可以计算结果,不用复杂的运算
- 有研究者发现ReLU在随机梯度下降的训练中收敛会更快,是目前应用广泛的激活函数
- 缺点
- ReLU单元很脆弱,以至于在训练过程中,一些神经元不再具有有效性,只会输出0,特别是使用较大的学习率的时候,如果发生这种情况,神经元的梯度将永远会是0,不利于训练。
import torch
m=torch.nn.ReLU()
_input = torch.autograd.Variable(torch.rand(2))
print(_input)
print(m(_input))
3.2.5 ReLU的扩展
为了解决ReLU函数存在的问题,研究者提出了在ReLU基础上的优化方案。主要思路是当输入是小于0的值时不再一味地输出0,而是通过一个很小的斜率为的直线方程计算结果,根据取值方案的不同有以下几种方案。
-
Leaky ReLU
image.png
其公式如下所示,通常取0.01
-
Parametric ReLU
其公式如下所示,这里是自学习的参数
当不带参数地调用时,nn.PReLU()在所有输入通道中使用同一个参数。如果用nn.PReLU(nChannels)调用,将应用到每个输入。 -
Randomized ReLU
Leaky ReLU地random版本,即参数是随机产生的。 -
Exponential Linear Unit(ELU)
这是一个新的激活函数,效果比所有ReLU的变形都要好,训练用的时间少,而且测试指标高。
一般取1。整个函数是平滑的。其缺点是因为使用了指数函数,计算比ReLU系列的计算速度慢,但是训练时收敛快。 -
Maxout
maxout和Dropout结合后,取得了start-of-art的识别率。它有ReLU函数的优点(不会饱和、计算简单),去没有ReLU函数的缺点(容易死),它唯一的缺点就是每一个神经元都有k个权重,导致权重的总数大大增加。
PyTorch中还没有Maxout的实现。
3.2.6 Softmax
Softmax函数又称归一化指数函数。它能将一个含任意实数的K维向量z,“压缩”到另一个K维实向量中,返回的是每个互斥输出类别上的概率分布。
import torch
m=torch.nn.Softmax(dim=1) #dim=1 每一行上的和为1;dim=0 每一列上的和为1
_input = torch.autograd.Variable(torch.rand(2,3))
print(_input)
print(m(_input))
image.png
3.2.7 LogSoftmax
有用就留个赞吧^_^
网友评论