First of all, 有一篇总结的很好的博文:
https://blog.csdn.net/qq_31347869/article/details/102799720
1. Activation Function
1) sigmoid
import numpy as np
def sigmoid(x):
s = 1 / (1 + np.exp(-x))
return s
x = np.array([1, 2, 3])
sigmoid(x)
>>>
array([ 0.73105858, 0.88079708, 0.95257413])
2) softmax
import numpy as np
def softmax(x):
x_exp = np.exp(x)
x_sum = np.sum(x_exp, axis = 1, keepdims = True)
s = x_exp / x_sum
return s
x = np.array([[-3, 2, -1, 0]])
print(x)
print(softmax(x))
>>>
[[-3 2 -1 0]]
[[ 0.0056533 0.83902451 0.04177257 0.11354962]]
Note: x_sum = np.sum(x_exp, keepdims = True)也可,因为x_exp是一维向量。
axis=1 以竖轴为基准 ,同行相加
keepdims主要用于保持矩阵的二维特性
实际应用中,e^V较大,所以:
3)tanh
Summary:激活函数的选择
(1)首选ReLU函数(只在隐藏层中使用),性能好、速度快;
(2)在ReLU出现很多死神经元的情况下,考虑使用Leaky ReLU函数;
(3)建议只在全连接层使用sigmoid函数;
(4)tanh函数在某些情况下有比较好的效果,但应用场景比较少;
(5)Maxout效果虽好但参数翻倍,因此一般不用。