激活函数(activation functions)的目标是,将神经网络非线性化。激活函数是连续的(continuous),且可导的(differential)。
神经网络中比较常用的激活函数有sigmoid、tanh、ReLU,Leaky ReLU、Maxout:
在PyTorch的老版本里这些激活函数在torch.nn.functional
下,目前在torch
下可以使用。
1. Sigmoid
数据将被映射到0到1之间。
示例代码:
import torch
a = torch.linspace(-100, 100, 10)
print(torch.sigmoid(a))
输出结果:
tensor([0.0000e+00, 1.6655e-34, 7.4564e-25, 3.3382e-15, 1.4945e-05, 9.9999e-01,
1.0000e+00, 1.0000e+00, 1.0000e+00, 1.0000e+00])
2. Tanh
可以由Sigmoid变换得到,数据将被映射到-1到1之间。
示例代码:
b = torch.linspace(-1, 1, 10)
print(torch.tanh(b))
输出结果:
tensor([-0.7616, -0.6514, -0.5047, -0.3215, -0.1107, 0.1107, 0.3215, 0.5047,
0.6514, 0.7616])
3. ReLU
即Rectified Linear Unit,是现在DL用得最多的激活函数。ReLU在输入正信号时保证输出信号的导数是1,避免了当输入过大时引起(前面Sigmoid或者Tanh都会出现的)梯度弥散。
示例代码:
c = torch.linspace(-1, 1, 10)
print(torch.relu_(c))
输出结果:
tensor([0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.1111, 0.3333, 0.5556, 0.7778,
1.0000])