激活函数


一、激活函数

1、引入

  感知机接收x1x2两个输入信号,输出y b是被称为偏置的参数,用于控制神经元被激活的容易程度;而w1w2是表示各个信号的权重的参数,用于控制各个信号的重要性。

   登场的hx)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数activation function)。如“激活”一词所示,激活函数的作用在于决定如何来激活输入信号的总和。

   激活函数以阈值为界,一旦输入超过阈值,就切换输出。这样的函数称为“阶跃函数”。因此,可以说感知机中使用了阶跃函数作为激活函数。也就是说,在激活函数的众多候选函数中,感知机使用了阶跃函数。那么,如果感知机使用其他函数作为激活函数的话会怎么样呢?实际上,如果将激活函数从阶跃函数换成其他函数,就可以进入神经网络的世界了。

 2、sigmoid函数

import numpy as np
import matplotlib.pyplot 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() 

                                               

  sigmod函数与阶跃函数的区别

    相对于阶跃函数只能返回0或1, sigmoid函数可以返回0.731 . . .、 0.880 . . .等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。

    当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。还有一个共同点是,不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。

  神经网络的激活函数必须使用非线性函数。换句话说,激活函数不能使用线性函数。为什么不能使用线性函数呢?因为使用线性函数的话,加深神经网络的层数就没有意义了。

  线性函数的问题在于,不管如何加深层数,总是存在与之等效的“无隐藏层的神经网络”。为了具体地(稍微直观地)理解这一点,我们来思考下面这个简单的例子。这里我们考虑把线性函数 h(x) = cx 作为激活函数,把y(x) = h(h(h(x)))的运算对应3层神经网络 A。这个运算会进行

y(x) = c × c × c × x的乘法运算,但是同样的处理可以由y(x) = ax(注意,a = c3)这一次乘法运算(即没有隐藏层的神经网络)来表示。如本例所示,使用线性函数时,无法发挥多层网络带来的优势。因此,为了发挥叠加层所带来的优势,激活函数必须使用非线性函数。

 

3、ReLU函数

  ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输0

import numpy as np
import matplotlib.pyplot 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(-1, 6) 
plt.show() 

                                 

 3、softmax函数

  exp(x)是表示ex的指数函数(e是纳皮尔常数2.7182 . . .)。式(3.10)表示假设输出层共有n个神经元,计算第k个神经元的输出yk。如式(3.10)所示,softmax函数的分子是输入信号ak的指数函数,分母是所有输入信号的指数函数的和。

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a - c) # 溢出对策
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y

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

  这里需要注意的是,即便使用了softmax函数,各个元素之间的大小关系也不会改变。这是因为指数函数(y = exp(x))是单调递增函数。

  一般而言,神经网络只把输出值最大的神经元所对应的类别作为识别结果。并且,即便使用softmax函数,输出值最大的神经元的位置也不会变。因此,神经网络在进行分类时,输出层的softmax函数可以省略。在实际的问题中,由于指数函数的运算需要一定的计算机运算量,因此输出层的softmax函数一般会被省略。

   归问题可以使用恒等函数,二元分类问题可以使用 sigmoid函数,多元分类问题可以使用 softmax函数。

参考

常用激活函数(激励函数)理解与总结