激活函数的性质:
(1)单调可微
一般情况下,我们使用梯度下降算法更新神经网络中的参数,因此必须要求激活函数可微。如果函数时单调递增的,求导后函数必大于零(方便计算),因此需要激活函数具有单调性。
(2)限制输出值的范围
输入的数据通过神经元上的激活函数来控制输出数值的大小,该输出数值是一个非线形值。通过激活函数求得的数值,根据极限值来判断是否需要激活该神经元。
(3)非线性
因为线性模型的表达能力不够(从数据输入到权值求和加偏置,都是在线性函数内执行权重与输入数据进行加权求和的过程),因此激活函数的出现还为神经网络模型加入非线性因素。
常用的激活函数如下:
1.线性函数
线性函数是最基本的激活函数,其因变量和自变量之间有直接的比例关系。
F(x)=ax+b
def liner(x,a,b)
return a*x+b
2. Sigmoid函数
Sigmoid函数是一种在不删除数据的情况下,减少数据的极值或异常的函数。因此,它能够很好地表达激活的意思,未激活值为0,完全饱和的激活值为1.
S(x)=1/(1+e^(-ax))
Sigmoid函数的输出映射在【0,1】范围内,函数单调连续,且输出范围有限制。
def sigmoid(x,w=1):
return 1/(1+np.sum(np.exp(-wx))
3.双曲正切函数Tanh
取值[-1,1]
def tanh(x):
return np.tanh(x)
4.ReLU函数
该函数只有当输入值高于一定数目时才激活神经元节点。当输入值低于0时进行限制,当输入上升到某一阈值以上时,函数中的自变量与因变量呈线性关系。
Relu(x)=max(0,x)
def relu(x):
return x if x>0 else 0
5.Softmax函数
该函数的本质是将一个K维的任意实数向量,压缩(映射)为另一个K维的实数向量,其中向量中的每个元素取值都介于(0,1)范围内。
def Softmax(x):
renturn np.exp(x)/np.sum(np.exp(x))