神经网络激活函数

1 sigmoid

f ( x ) = 1 / 1 + e x p ( − x ) f(x)= 1/1+exp(-x) f(x)=1/1+exp(x)
图像如下形状:
神经网络激活函数_第1张图片
绘制代码

import matplotlib.pylab as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))

x=np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)

plt.plot(x,y)

plt.ylim(-0.1, 1.1)
plt.show()

这个函数的好处是连续函数, 深度刻画在0~1的范围, 自变量小, 则函数值小, 自变量大则函数值大

2 ReLU 函数

f ( x ) = m a x ( 0 , x ) f(x) = max(0, x) f(x)=max(0,x)

函数的形状如下:
神经网络激活函数_第2张图片
绘制代码:


import matplotlib.pylab as plt

def relu(x):
    return np.maximum(0, x)

x=np.arange(-5.0, 5.0, 0.1)
y = relu(x)

plt.plot(x,y)

plt.ylim(-0.1, 6)
plt.show()

3 恒等函数

f ( x ) = x f(x) = x f(x)=x

这个图就不画了, 图形是均分第一象限的一条直线。

这个函数不能用在神经网络的中间层, 对于回归问题, 一般用在输出层上, 实际上不用也行, 用了为了保值逻辑的一致性。

4 softmax 函数

y k = e x p ( a k ) ∑ i = 0 n e x p ( a i ) y_{k} = \displaystyle \frac{exp(a_k)}{ \sum^{n}_{i=0}{exp(a_i)}} yk=i=0nexp(ai)exp(ak)

一般用在分类问题中, 看函数的定义是对每一个分量求自然指数的值, 求和后作为分母, 而分子是每一个分量的自然指数值。 代码实现为:

def softmax(a):
    exp_a = np.exp(a)
    sum_exp_a = np.sum(exp_a)
    return exp_a /sum_exp_a

实际使用过程中为了防止计算机计算时溢出的风险, 会有如下的改进:
y k = e x p ( a k + C ) ∑ i = 0 n e x p ( a i + C ) y_{k} = \displaystyle \frac{exp(a_k+C)}{ \sum^{n}_{i=0}{exp(a_i + C)}} yk=i=0nexp(ai+C)exp(ak+C)

其中C是一个常, 一般进行运算是,C 可以取 m a x ( a ) max(a) max(a).

softmax的函数输出是0.0到1.0之间的实数, 并且 softmax函数的输出值的总和是1. 输出总和为1是softmax函数的一个重要性质。正因为有了这个性质, 我们才能把softmax函数的输出解释为“概率”。

y = e x p ( x ) y=exp(x) y=exp(x)是单调递增的, softmax函数, 各元素之间的大小关系不会改变。神经网络在进行分类时, 输出层的softmax 函数可以省略, 正如前面解释的, 经过softmax函数求解后, 最大值的位置不会改变。神经网络只把输出值最大的神经元多对应的类别作为识别结果。

你可能感兴趣的:(神经网络,神经网络,python)