《深度学习入门》学习笔记四:神经网络(上)
一、从感知机到神经网络
上一次我们学习了感知机,但是感知机的权重是需要人为地输入的,因此人们发明了神经网络,能够自动地从数据中学习到合适的权重参数。
1、例子

此图是一个经典的神经网络,最左边是输入层,最右边是输出层,中间的叫作中间层,也叫隐藏层,隐藏层的神经元是看不见的。在《深度学习入门》一书中,将输入层到输出层依次称为第0层、第1层、第2层。
2、激活函数
在感知机模型中,我们会有一个 h ( x ) h(x) h(x)函数,即那个超过阈值的判定为1,没超过阈值判定为0诸如此类的函数来输出 y y y。而在神经网络中,我们称之为激活函数,常见的神经网络中的激活函数包括sigmoid、ReLU
2.1、sigmoid函数
公式:
h
(
x
)
=
1
1
+
e
x
p
(
−
x
)
h(x)=\frac{1}{1+exp(-x)}
h(x)=1+exp(−x)1
sigmoid函数与阶跃函数的比较:
在感知机中我们往往使用的是阶跃函数,而在神经网络中则不然,这就是感知机和神经网络的区别。
import numpy as np
import matplotlib.pyplot as plt
def step(x):
#阶跃函数
return np.array(x > 0, dtype = np.int)
def sigmoid(x):
#sigmoid函数
return 1/(1+np.exp(-x))
x = np.arange(-5.0, 5.0, 0.1)
y1 = step(x)
y2 = sigmoid(x)
plt.plot(x,y1,x,y2)
plt.show()
最终得到结果

我们看到sigmoid函数是一条平滑的曲线,而阶跃函数输出会发生急剧性的变化,sigmoid函数的平滑性对神经网络的学习具有重要的意义。同时感知机中流动的只有0和1两种信号,而神经网络中流动的是连续的实数信号
在阶跃函数和sigmoid函数中我们可以看到两者结构都是输入小时,输出为0,输入大时,输出为1,两者的值域都是从0到1。二者都属于非线性函数。
2.2、非线性函数
神经网络的激活函数必须使用非线性函数,因为如果使用了线性函数的话,加深神经网络的层数就没有意义了。比如说假设 h ( x ) = c x h(x)=cx h(x)=cx是激活函数, y = h ( h ( h ( x ) ) ) y=h(h(h(x))) y=h(h(h(x)))作为对应的三层神经网络,最后 y = c 3 x y=c^3x y=c3x但是这同样能用 y = a x ( a = c 3 ) y=ax(a=c^3) y=ax(a=c3)来表示。这样三层的神经网络就变成了没有隐藏层,无法发挥多层网络的优势。
2.3、ReLU函数
ReLU函数是最近主要使用的函数。
公式:
y = { x ( x ≥ 0 ) 0 ( x < 0 ) y=\left\{ \begin{aligned} x&&(x\ge0) \\ 0&&(x<0) \\ \end{aligned} \right. y={x0(x≥0)(x<0)
def relu(x):
return np.maximum(x,0)


浙公网安备 33010602011771号