为什么要用神经网络?
为了获得非线性假设空间,我们引入神经网络模型。之前文章提到,对于分类问题,对数几率回归结合多项式特征可以得到非线性决策边界;而将多项式特则与线性回归结合也可以拟合非线性函数。既然我们已经可以得到非线性假设空间,为什么还要引入神经网络模型呢?这是因为当数据集特征数 d d d增大时,高阶多项式项的数量将以几何级数递增,特征空间也随之急剧膨胀。因此,我们需要神经网络模型来解决复杂的非线性问题。
模型表示
如图所示,神经网络模型通常按照一个输入层、若干隐藏层以及一个输出层的顺序组成,每一层由若干神经元组成。相邻两层之间的神经元通过参数(包括权重 W W W和偏置 b b b)矩阵连接。神经元可以被激活,激活信号沿着参数矩阵逐层向后传递到输出层。这里,我们用 Θ k , i ( j ) \Theta^{(j)}_{k,i} Θk,i(j)表示连接第 j j j层第 i i i个神经元与 j + 1 j+1 j+1层第 k k k个神经元的参数, a i ( j ) a_i^{(j)} ai(j)表示第 j j j层中第 i i i个激活单元。
将输入值从输入层逐层传递到输入层的过程叫做前向传播(Forward Propagation),这也是神经网络模型进行预测的基础。考虑只有一个隐藏层的神经网络:
[
x
0
x
1
x
2
x
3
]
→
[
a
1
(
2
)
a
2
(
2
)
a
3
(
2
)
]
→
h
θ
(
x
)
\begin{bmatrix}x_0 \\x_1 \\ x_2 \\ x_3 \end{bmatrix}\rightarrow\begin{bmatrix}a_1^{(2)} \\ a_2^{(2)} \\ a_3^{(2)} \\ \end{bmatrix}\rightarrow h_\theta(x)
⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤→⎣⎢⎡a1(2)a2(2)a3(2)⎦⎥⎤→hθ(x)
隐藏层中每个神经元的激活值为:
a
1
(
2
)
=
g
(
Θ
1
,
0
(
1
)
x
0
+
Θ
1
,
1
(
1
)
x
1
+
Θ
1
,
2
(
1
)
x
2
+
Θ
1
,
3
(
1
)
x
3
)
a
2
(
2
)
=
g
(
Θ
2
,
0
(
1
)
x
0
+
Θ
2
,
1
(
1
)
x
1
+
Θ
2
,
2
(
1
)
x
2
+
Θ
2
,
3
(
1
)
x
3
)
a
3
(
2
)
=
g
(
Θ
3
,
0
(
1
)
x
0
+
Θ
3
,
1
(
1
)
x
1
+
Θ
3
,
2
(
1
)
x
2
+
Θ
3
,
3
(
1
)
x
3
)
\begin{aligned} a_1^{(2)} &= g(\Theta_{1,0}^{(1)}x_0 + \Theta_{1,1}^{(1)}x_1 + \Theta_{1,2}^{(1)}x_2 + \Theta_{1,3}^{(1)}x_3) \\ a_2^{(2)} &= g(\Theta_{2,0}^{(1)}x_0 + \Theta_{2,1}^{(1)}x_1 + \Theta_{2,2}^{(1)}x_2 + \Theta_{2,3}^{(1)}x_3) \\ a_3^{(2)} &= g(\Theta_{3,0}^{(1)}x_0 + \Theta_{3,1}^{(1)}x_1 + \Theta_{3,2}^{(1)}x_2 + \Theta_{3,3}^{(1)}x_3) \end{aligned}
a1(2)a2(2)a3(2)=g(Θ1,0(1)x0+Θ1,1(1)x1+Θ1,2(1)x2+Θ1,3(1)x3)=g(Θ2,0(1)x0+Θ2,1(1)x1+Θ2,2(1)x2+Θ2,3(1)x3)=g(Θ3,0(1)x0+Θ3,1(1)x1+Θ3,2(1)x2+Θ3,3(1)x3)
令
z
k
(
j
+
1
)
=
Θ
k
,
0
(
j
)
x
0
+
Θ
k
,
1
(
j
)
x
1
+
⋯
+
Θ
k
,
d
(
j
)
x
d
z_k^{(j+1)} = \Theta_{k,0}^{(j)}x_0 + \Theta_{k,1}^{(j)}x_1 + \cdots + \Theta_{k,d}^{(j)}x_d
zk(j+1)=Θk,0(j)x0+Θk,1(j)x1+⋯+Θk,d(j)xd
则
a
1
(
2
)
=
g
(
z
1
(
2
)
)
a
2
(
2
)
=
g
(
z
2
(
2
)
)
a
3
(
2
)
=
g
(
z
3
(
2
)
)
\begin{aligned}a_1^{(2)} = g(z_1^{(2)}) \\ a_2^{(2)} = g(z_2^{(2)}) \\ a_3^{(2)} = g(z_3^{(2)}) \end{aligned}
a1(2)=g(z1(2))a2(2)=g(z2(2))a3(2)=g(z3(2))
那么
h
Θ
(
x
)
=
a
1
(
3
)
=
g
(
Θ
1
,
0
(
2
)
a
0
(
2
)
+
Θ
1
,
1
(
2
)
a
1
(
2
)
+
Θ
1
,
2
(
2
)
a
2
(
2
)
+
Θ
1
,
3
(
2
)
a
3
(
2
)
)
\begin{aligned} h_\Theta(x) = a_1^{(3)} = g(\Theta_{1,0}^{(2)}a_0^{(2)} + \Theta_{1,1}^{(2)}a_1^{(2)} + \Theta_{1,2}^{(2)}a_2^{(2)} + \Theta_{1,3}^{(2)}a_3^{(2)}) \end{aligned}
hΘ(x)=a1(3)=g(Θ1,0(2)a0(2)+Θ1,1(2)a1(2)+Θ1,2(2)a2(2)+Θ1,3(2)a3(2))
这样,我们就计算出了
h
Θ
(
x
)
h_\Theta(x)
hΘ(x)的值,得到模型的预测结果。
上述过程推广到向量形式:
x
=
[
x
0
x
1
⋮
x
d
]
,
z
(
j
)
=
[
z
1
(
j
)
z
2
(
j
)
⋮
z
s
j
(
j
)
]
,
a
(
j
)
=
[
a
1
(
j
)
a
2
(
j
)
⋮
a
s
j
(
j
)
]
\begin{aligned}x = \begin{bmatrix}x_0 \\ x_1 \\ \vdots \\ x_d\end{bmatrix},\quad z^{(j)} = \begin{bmatrix}z_1^{(j)} \\ z_2^{(j)} \\ \vdots \\ z_{s_j}^{(j)}\end{bmatrix}, \quad a^{(j)} = \begin{bmatrix}a_1^{(j)} \\ a_2^{(j)} \\ \vdots \\ a_{s_j}^{(j)}\end{bmatrix}\end{aligned}
x=⎣⎢⎢⎢⎡x0x1⋮xd⎦⎥⎥⎥⎤,z(j)=⎣⎢⎢⎢⎢⎡z1(j)z2(j)⋮zsj(j)⎦⎥⎥⎥⎥⎤,a(j)=⎣⎢⎢⎢⎢⎡a1(j)a2(j)⋮asj(j)⎦⎥⎥⎥⎥⎤
z ( j ) = Θ ( j − 1 ) a ( j − 1 ) a ( j ) = g ( z ( j ) ) z ( j + 1 ) = Θ ( j ) a ( j ) \begin{aligned} z^{(j)} &= \Theta^{(j-1)}a^{(j-1)}\\ a^{(j)} &= g(z^{(j)})\\ z^{(j+1)} &= \Theta^{(j)}a^{(j)} \end{aligned} z(j)a(j)z(j+1)=Θ(j−1)a(j−1)=g(z(j))=Θ(j)a(j)
注意,如果网络模型的第 j j j层有 s j s_j sj个神经元,而第 j + 1 j+1 j+1层有 s j + 1 s_{j+1} sj+1个神经元,那么参数矩阵的维度(包含偏置项)为 s j + 1 × ( s j + 1 ) s_{j+1} \times (s_j + 1) sj+1×(sj+1)。