激活函数
Sigmoid
f(x) = 1/(1+e^(-x))
f(0) = 0.5 ,f(x) 取值范围在 (0,1) 之间
导数为:
f'(x) = f(x) - (1-f(x))
图像如下:
优点:
1、 输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可用作输出层;
2、求导容易。
缺点:
1、易造成梯度消失;
2、输出非0均值,收敛慢;
3、幂运算复杂,训练时间长。sigmoid 只适用于二分类问题,不适用于多分类问题
tanh
f(x) = (e^x - e^(-x)) / (e^x +e^(-x))
取值范围为:(0,1)
导数为:
f'(x) = 1 - f(x)^2
优点:
- 比sigmoid函数收敛速度更快。
- 相比sigmoid函数,其输出以0为中心。
缺点:
- 易造成梯度消失;
- 幂运算复杂,训练时间长。
Softsign
f(x) = x/(1 + |x|)
取值范围: (-1,1)
f'(x) = 1/(1+x)^2
ReLU
f(x) = max(0,x)
f(x)取值范围为 (0,+00)
导数为:
f'(x) = max(0,1)
优点:
解决了梯度消失问题(在正区间);
只需判断输入是否大于0,计算速度快;
收敛速度远快于sigmoid和tanh,因为sigmoid和tanh涉及很多expensive的操作;
提供了神经网络的稀疏表达能力。缺点:
输出非0均值,收敛慢;
神经元死亡:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。
Leaky-ReLU
if x >= 0:
f(x) = x ;
if x < 0:
f(x) = ax ;
取值范围 (-00,+00);P-ReLU则认为 a 也应当作为一个参数来学习,一般建议初始化为0.25。
导数为:
if x >= 0;
f'(x) = 1 ;
if x <= 0;
f'(x) = a;
理论上来讲,Leaky ReLU有ReLU的所有优点,外加不会有神经元死亡的问题,但是在实际操作当中,并没有完全证明Leaky ReLU总是好于ReLU。
ELU
if x >= 0:
f(x) = x;
if x < 0:
f(x) = a(e^x - 1);
Softmax
公式为:
损失函数
均方误差损失函数 MSE
- pytorch 使用
import torch
y = torch