文章目录
什么是神经网络呢?神经网络在不同领域可以作不同解释。在生物学领域,指的是生物神经网络;而在人工智能和数学领域,则指的是人工神经网络。
生物神经网络是由生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动。
人工神经网络是一种模拟生物神经网络以期能够实现类人工智能的机器学习技术(数学算法模型)。此算法在结构上分层,在层级间传递信息和中间计算结果,并应用大量的数据,通过优化函数和误差函数进行反复校正,使模型达到预期效果。使用时可以将神经网络看作为一个数学黑盒,这个黑盒中有许多繁琐的数学计算公式,给黑盒相应数据输入,这个黑盒便会产生特定的输出。本次学习的便是这种人工神经网络。
1、神经元
神经网络的基本结构是神经元。神经元的结构如下图所示。
其中
x
1
x_1
x1,
x
2
x_2
x2,
x
3
x_3
x3,……,
x
n
−
1
x_{n-1}
xn−1,
x
n
x_n
xn是神经元的n个输入,
w
1
w_1
w1,
w
2
w_2
w2,
w
3
w_3
w3,……,
w
n
−
1
w_{n-1}
wn−1,
w
n
w_n
wn,
b
b
b是神经元的参数。输出满足下列公式
y
=
f
(
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
.
.
.
+
w
n
−
1
x
n
−
1
+
w
n
x
n
+
b
)
(1-1)
y=f(w_1x_1+w_2x_2+w_3x_3+...+w_{n-1}x_{n-1}+w_nx_n+b)\tag{1-1}
y=f(w1x1+w2x2+w3x3+...+wn−1xn−1+wnxn+b)(1-1)
令
u
(
x
)
=
∑
i
=
0
N
w
i
x
i
+
b
(1-2)
u(x)=\sum_{i=0}^Nw_ix_i+b\tag{1-2}
u(x)=i=0∑Nwixi+b(1-2)
则公式
(
1
−
1
)
(1-1)
(1−1)可写为
y
=
f
(
∑
i
=
0
N
w
i
x
i
+
b
)
(1-3)
y=f(\sum_{i=0}^Nw_ix_i+b)\tag{1-3}
y=f(i=0∑Nwixi+b)(1-3)
我们可以使用矩阵来表示,设:
W
=
[
w
1
w
2
w
3
⋯
w
n
]
\bm{W}=\begin{bmatrix} w_1 & w_2 & w_3 &\cdots & w_n\end{bmatrix}
W=[w1w2w3⋯wn]
X
=
[
x
1
x
2
x
3
⋮
x
n
]
\bm{X}=\begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \vdots \\ x_n\end{bmatrix}
X=⎣⎢⎢⎢⎢⎢⎡x1x2x3⋮xn⎦⎥⎥⎥⎥⎥⎤
B
=
[
b
]
\bm{B}=\begin{bmatrix} b \end{bmatrix}
B=[b]
则
U
(
X
)
=
W
X
+
B
(1-4)
\bm{U}(\bm{X})=\bm{W}\bm{X}+\bm{B}\tag{1-4}
U(X)=WX+B(1-4)
式
(
1
−
1
)
(1-1)
(1−1)最终写为
Y
=
f
(
W
X
+
B
)
(1-5)
\bm{Y}=f(\bm{W}\bm{X}+\bm{B})\tag{1-5}
Y=f(WX+B)(1-5)
其中,式 ( 1 − 4 ) (1-4) (1−4)是线性结构,具有线性划分能力;而 y = f ( u ) y=f(u) y=f(u)一般为非线性结构,可以使神经元具有非线性划分能力。
2、激活函数
深度学习中,激活函数通常指s能够实现非线性映射的函数,神经元中的的f(u)便是激活函数。常用的激活函数有 sigmoid、tanh、ReLU函数。
2.1、sigmoid函数
sigmoid函数表达式如下:
σ
(
x
)
=
1
1
+
e
−
x
(2-1)
\sigma(x)=\frac1{1+e^{-x}}\tag{2-1}
σ(x)=1+e−x1(2-1)
2.2、tanh函数
tanh函数表达式如下:
t
a
n
h
(
x
)
=
s
i
n
h
x
c
o
s
h
x
=
e
x
−
e
−
x
e
x
+
e
−
x
(2-2)
tanh(x)=\frac{sinhx}{coshx}=\frac{e^x-e^{-x}}{e^x+e^{-x}}\tag{2-2}
tanh(x)=coshxsinhx=ex+e−xex−e−x(2-2)
2.3、ReLU函数
ReLU函数表达式如下:
R
e
L
U
(
x
)
=
{
x
(
x
>
0
)
0
(
x
≤
0
)
(2-3)
ReLU(x) =\begin{cases} x \qquad(x>0) \\ 0 \qquad(x\leq0) \end{cases}\tag{2-3}
ReLU(x)={x(x>0)0(x≤0)(2-3)
3、神经网络
神经网络由多个网络层组成,每层由多个神经元组成,一个简单的神经网络结构如下:
对于上图中的网络结构,第一层有n个节点,代表着有n个特征输入,是神经网络中的输入节点。第二层有m个节点,对应m个神经元,输出m个结果。第三层有p个节点,对应p个神经元。网络最终输出p个值。取神经网络的第二层做分析,对公式
Y
=
f
(
W
X
+
B
)
\bm{Y}=f(\bm{W}\bm{X}+\bm{B)}
Y=f(WX+B)中的参数结构做适当调整,公式
Y
=
f
(
W
X
+
B
)
\bm{Y}=f(\bm{W}\bm{X}+\bm{B)}
Y=f(WX+B)可以直接简单的表示出m个神经元的共同作用。W、X、B分别变为
W
=
[
w
11
w
12
w
13
⋯
w
1
n
w
21
w
22
w
23
⋯
w
2
n
w
31
w
32
w
33
⋯
w
3
n
⋮
⋮
⋮
⋱
⋮
w
m
1
w
m
2
w
m
3
⋯
w
m
n
]
\bm{W}=\begin{bmatrix} w_{11} & w_{12} & w_{13} &\cdots & w_{1n} \\ w_{21} & w_{22} & w_{23} &\cdots & w_{2n} \\ w_{31} & w_{32} & w_{33} &\cdots & w_{3n} \\ \vdots & \vdots & \vdots &\ddots & \vdots \\ w_{m1} & w_{m2} & w_{m3} &\cdots & w_{mn} \\ \end{bmatrix}
W=⎣⎢⎢⎢⎢⎢⎡w11w21w31⋮wm1w12w22w32⋮wm2w13w23w33⋮wm3⋯⋯⋯⋱⋯w1nw2nw3n⋮wmn⎦⎥⎥⎥⎥⎥⎤
X
=
[
x
1
x
2
x
3
⋮
x
n
]
\bm{X}=\begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \vdots \\ x_n\end{bmatrix}
X=⎣⎢⎢⎢⎢⎢⎡x1x2x3⋮xn⎦⎥⎥⎥⎥⎥⎤
B
=
[
b
1
b
2
b
3
⋮
b
m
]
\bm{B}=\begin{bmatrix} b_1 \\ b_2 \\ b_3 \\ \vdots \\ b_m\end{bmatrix}
B=⎣⎢⎢⎢⎢⎢⎡b1b2b3⋮bm⎦⎥⎥⎥⎥⎥⎤
对于上述结构的W、X、B,公式
Y
=
f
(
W
X
+
B
)
\bm{Y}=f(\bm{W}\bm{X}+\bm{B})
Y=f(WX+B)有输出下面结构的Y
Y
=
[
y
1
y
2
y
3
⋮
y
m
]
\bm{Y}=\begin{bmatrix} y_1 \\ y_2 \\ y_3 \\ \vdots \\ y_m\end{bmatrix}
Y=⎣⎢⎢⎢⎢⎢⎡y1y2y3⋮ym⎦⎥⎥⎥⎥⎥⎤
4、神经网络的学习
想要神经网络能够正确运行,需要让神经网络经过一个“学习”的过程,主要任务是寻找最优参数(权重和偏置),这个过程我们也称之为训练。
4.1、损失函数
为了使神经网络的正确识别率越来越高,引进了损失函数。我们可以通过损失函数,得到神经网络的损失值。学习的目标就是让这个损失值越来越小。常用的损失函数有均方误差、交叉熵误差。
4.1.1 均方误差
均方误差公式如下
M
S
E
=
1
m
∑
i
=
1
m
(
y
i
−
t
i
)
2
(4-1)
MSE=\frac1m\sum_{i=1}^m(y_i-t_i)^2\tag{4-1}
MSE=m1i=1∑m(yi−ti)2(4-1)
计算过程中,m为神经网络最终输出值的个数,是一个固定值,为了方便求导计算,可以改进公式为:
L
=
1
2
∑
i
=
1
m
(
y
i
−
t
i
)
2
(4-2)
L=\frac12\sum_{i=1}^m(y_i-t_i)^2\tag{4-2}
L=21i=1∑m(yi−ti)2(4-2)
其中,
y
i
y_i
yi表示神经网络的输出,
t
i
t_i
ti表示监督数据,
i
i
i表示最后一层中第几个神经元的输出。此公式一般用于回归问题。
4.1.2 交叉熵误差
分类问题中,需要将神经网络的输出值进行处理,使得各个输出值总和为1。一般在神经网络后接上一个softmax函数(归一化指数函数)。公式如下
s
o
f
t
m
a
x
(
y
j
)
=
e
y
j
∑
i
=
1
m
e
y
i
(4-3)
softmax(y_j)=\frac{e^{y_j}}{\sum_{i=1}^me^{y_i}}\tag{4-3}
softmax(yj)=∑i=1meyieyj(4-3)
其中,
j
=
1
,
2
,
3
,
⋯
,
m
j=1,2,3,\cdots,m
j=1,2,3,⋯,m。
分类问题一般使用交叉熵误差公式,公式如下
L
=
−
∑
i
m
t
i
log
y
i
(4-4)
L=-\sum_i^mt_i\log y_i\tag{4-4}
L=−i∑mtilogyi(4-4)
其
中
,
y
i
其中,y_i
其中,yi表示神经网络的输出,
t
i
t_i
ti表示正确解标签。并且,
t
i
t_i
ti中只有正确解标签的索引为1,其他均为0(one-hot表示)。log无特殊说明,一般表示以e为底数的自然对数(
log
e
\log_e
loge)。实际上,式
(
4
−
4
)
(4-4)
(4−4)只计算对应正确解标签的输出的自然对数,故交叉熵误差的值是由正确解标签所对应的输出结果决定的。
4.2、学习步骤
神经网络的学习一般采用梯度下降法,该方法不断去更新参数的值,去找到使损失函数的值尽可能小的参数,使得神经网络达到较好的识别准确率。对于k个参数,有如下公式
{
x
1
=
x
1
−
η
∂
f
∂
x
1
x
2
=
x
2
−
η
∂
f
∂
x
2
x
3
=
x
3
−
η
∂
f
∂
x
3
⋯
⋯
⋯
x
k
=
x
k
−
η
∂
f
∂
x
k
(4-5)
\begin{cases} x_1=x_1-\eta\frac{\partial f}{\partial x_1} \\ x_2=x_2-\eta\frac{\partial f}{\partial x_2} \\ x_3=x_3-\eta\frac{\partial f}{\partial x_3} \\ \quad \cdots \cdots \cdots \\ x_k=x_k-\eta\frac{\partial f}{\partial x_k} \end{cases} \tag{4-5}
⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧x1=x1−η∂x1∂fx2=x2−η∂x2∂fx3=x3−η∂x3∂f⋯⋯⋯xk=xk−η∂xk∂f(4-5)
其中
η
\eta
η表示更新量,在神经网络的学习中,称为学习率。梯度
∇
f
=
(
∂
f
∂
x
1
,
∂
f
∂
x
2
,
∂
f
∂
x
3
,
⋯
,
∂
f
∂
x
k
)
\nabla f=(\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\frac{\partial f}{\partial x_3},\cdots,\frac{\partial f}{\partial x_k})
∇f=(∂x1∂f,∂x2∂f,∂x3∂f,⋯,∂xk∂f)
计算梯度的主要方法有数值微分、误差反向传播算法。数值微分利用微小的差分(一般采用中心差分)求导数,虽然思路简单,但相较误差反向传播算法,计算精度不高、计算速度慢,不太适合多参数迭代,故梯度的求取一般使用误差反向传播算法。
综上,学习步骤如下:
步骤1(batch处理):随机挑选N(batch_size)条数据,计算batch的平均损失函数(
L
ˉ
=
1
N
∑
i
=
1
N
L
i
\bar L=\frac1{N}\sum_{i=1}^{N}L_i
Lˉ=N1∑i=1NLi)。
步骤2(计算梯度):求出损失函数的梯度,得到损失函数的值在各个参数中下降最快的方向。
步骤3(更新参数):将参数沿梯度方向进行微小更新。
步骤4(重复迭代):重复步骤1、2、3,直到参数合适(即神经网络有良好的表现能力)。
因为训练使用数据是随机挑选的数据,故这里的梯度下降法称为随机梯度下降法。