4种激活函数
1,sigmoid函数
特点:1,输出值落于[0,1]连续区间;
2,输入值从横坐标左侧移动到右侧的过程中,其输出值呈现从平缓到加速再到平缓的特点;
3,sigmoid函数的导数值落于[0,0.25]的连续区间;
注意:在神经网络中,sigmoid函数其实有很大的局限性,在逆向参数调整back propagation过程中,使用链式法则chain rule,可以推导出下面的公式:
并对深度神经网络模型的权重调整幅度进行计算,中间是sigmoid函数导数的乘积,多个小于0.25的值相乘后,会严重影响最终的权重调整幅度,所以第一层的初始权重很难通过back propagation再产生变换,这个问题被称为梯度消失(vanishing Gradient)。另外,sigmoid函数在进行指数计算时,会消耗较多的算力资源。
函数实现
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
y = 1/(1+np.exp(-x))
return y
X = np.arange(-10, 10, 0.01)
Y = sigmoid(X)
plt.plot(X, Y)
plt.xlim(-11,11)
plt.ylim(0, 1)
plt.scatter(0,0.5,marker='*',c='r')
plt.show()
2,Tanh函数(与sigmoid类似)
**特征:**1,值落在[-1,1]之间;
2,导数落于[0,1]之间,因此Tanh能缓解sigmoid梯度消失的问题,在激活函数的选择时,优先于sidmoid.
import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
y = (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))
return y
X = np.arange(-10, 10, 0.1)
y = tanh(X)
plt.plot(X, y)
plt.scatter(0,0,marker='+',c='r')
plt.show()
3,ReLu(Rectified Linear Unit)
import matplotlib.pyplot as plt
def relu(x):
return np.maximum(0, x)
x = np.arange(-10, 10, 0.1)
y= relu(x)
plt.plot(x,y)
plt.show()
leakReLu
在负数区间内,通过添加一个较小斜率的线性部分,使负数区域内也能够产生梯度调整值,完美解决之前的神经元熄灭问题(指ReLU函数在取值小于0时会等于0,这时神经元不激活,称为神经熄灭状态 )
4,softmax
它将多个神经元的输出,映射到(0,1)区间内,可以看成概率来理解,从而来进行多分类。
假设我们有一个数组,V,Vi表示V中的第i个元素,那么这个元素的softmax值就是
在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,作为我们的预测目标。
import numpy as np
import numpy as np
import matplotlib.pyplot as plt
def softmax(a):
exp_a = np.exp(a)
sum_exp_a = np.sum(exp_a)
return exp_a/sum_exp_a
X = np.arange(-5, 5, 0.1)
y = softmax(X)
plt.plot(X, y)
plt.show()
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。