激活函数:阶跃函数,sigmoid函数,ReLU函数

激活函数

首先看一下感知机的数学表达式,b是被称为偏置的参数,用于控制神经元被激活的容易程度;而w1和w2是表示各个信号的权重的参数,用于控制各个信号的重要性。
在这里插入图片描述
引入一个新函数h(x),将上式改成:
在这里插入图片描述
h(x)函数会将输入信号的总和转换为输出信号,这种函数一般称为激活函数(activation function)。
在这里插入图片描述

阶跃函数

阶跃函数,当输入超过0时,输出1,否则输出0。可以像下面这样简单地实现阶跃函数。

def step_function(x):
    if x > 0:
        return 1
    else:
        return 0

为了便于后面的操作,我们把它修改为支持NumPy数组的实现。

import numpy as np


def step_function(x):
    y = x > 0
    return y.astype(np.int_)


print(step_function(np.array([-1, 2, 3, -4])))

阶跃函数的图形:
请添加图片描述
实现如下:

import numpy as np
import matplotlib.pylab as plt


def step_function(x):
    return np.array(x > 0, dtype=np.int_)


x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y轴的范围
plt.show()
print(step_function(np.array([-1, 2, 3, -4])))

sigmoid函数

神经网络中经常使用的一个激活函数就是sigmoid函数:
在这里插入图片描述
exp(−x)表示e的−x次幂的意思。e是纳皮尔常数2.7182 …。sigmoid函数看上去有些复杂,但它也仅仅是个函数而已。而函数就是给定某个输入后,会返回某个输出的转换器。神经网络中用sigmoid函数作为激活函数,进行信号的转换,转换后的信号被传送给下一个神经元。
sigmoid函数的实现:

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

sigmoid函数图形:

请添加图片描述
实现如下:

import numpy as np
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) # 指定y轴的范围
plt.show()

sigmoid函数和阶跃函数的比较

在这里插入图片描述
首先注意到的是“平滑性”的不同。sigmoid函数是一条平滑的曲线,输出随着输入发生连续性的变化。而阶跃函数以0为界,输出发生急剧性的变化。sigmoid函数的平滑性对神经网络的学习具有重要意义。
另一个不同点是,相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731 …、0.880 …等实数(这一点和刚才的平滑性有关)。也就是说,感知机中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。
接着说一下阶跃函数和sigmoid函数的共同性质。阶跃函数和sigmoid函数虽然在平滑性上有差异,但是如果从宏观视角看,可以发现它们具有相似的形状。实际上,两者的结构均是“输入小时,输出接近0(为0);随着输入增大,输出向1靠近(变成1)”。也就是说,当输入信号为重要信息时,阶跃函数和sigmoid函数都会输出较大的值;当输入信号为不重要的信息时,两者都输出较小的值。还有一个共同点是,不管输入信号有多小,或者有多大,输出信号的值都在0到1之间。

ReLU函数

到目前为止,我们介绍了作为激活函数的阶跃函数和sigmoid函数。在神经网络发展的历史上,sigmoid函数很早就开始被使用了,而最近则主要使用ReLU(Rectified Linear Unit)函数。ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输出0。ReLU函数可以表示为下面的式:
在这里插入图片描述
ReLU函数实现也很简单:

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

ReLU函数图形:在这里插入图片描述
实现如下:

import numpy as np
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(-1, 6) # 指定y轴的范围
plt.show()

猜你喜欢

转载自blog.csdn.net/weixin_43912621/article/details/127174387
今日推荐