第三章 神经网络 一二节
神经网络示意图
做左边一列叫做输入层,该书中也叫做第0层,从左往右一次是第1层,第二层。中间的叫做中间层或者是隐藏层,最右边一列叫做输出层。
在感知机中输出与输入对应这样子一个式子
把偏加入神经元的图中,则我们加入一个神经元,如下图
为了让输入输出看上去更加简洁,把之前的式子改为
激活函数
上面的h(x)函数,将输入信号的总和转化为输出信号。这个函数一般被称为激活函数。
将激活函数分得更加细一点,变成两个式子。
那么之前的示意图可以变成这样子
sigmoid函数
sigmoid函数的表达式
其中exp(−x)表示e-x,sigmoid函数的值域在0到1之间,是一条s型的曲线。
阶跃函数
实现阶跃函数的代码如下
import numpy as np
def step_function(x):
y = x>0
return y.astype(np.int)
y = x>0 这句代码,如果x是一个数组,执行后的结果就是大于0的元素对应y这个数组就是true反之则为false.如x=[-1,1,4,-2],则y=[false,true,true,false]。然后y.astype(),.astype就是其他语言里面的数据类型的转化,把y转化为括号里面的类型。如中国地方括号里面写的是int类型,那么true就会变成1,false就会转化为0。
显示阶跃函数和sigmoid函数的图形的python代码
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0, dtype=np.int)
def sigmoid(x):
return 1/(1+np.exp(-x))
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()
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()
np.arang(-5.0,5.0,0.1)表示x轴的范围在-5到5,以0.1为一个单位,生成数组([-5.0, -4.9, …, 4.9])
阶跃函数和sigmoid函数图形的对比
阶跃函数和sigmoid函数的不同点是,sigmoid是一条平滑的曲线,输出随着输入发生连续性的变化,二阶跃函数也0为界限输出发生急剧的变化,并且阶跃函数的值域只能返回1或者是0,而sigmoid函数返回值是从0到1连续的值域。
阶跃函数和sigmoid函数的相同点是,他们的输出信号的值和1之间。并且都是非线性函数。
神经网络的激活函数必须是非线性的,应为如果激活函数是线性的话,那么我们加深网络的层数就没有意义了。
ReLU函数
函数的式子是这样子的
python实现
def relu(x):
return np.maxinum(0,x)