1. 神经元模型
(Neurons Model)
为了构建神经网络模型,我们需要首先思考大脑中的神经网络是怎样的。而神经网络是大量神经元相互链接并通过电脉冲来交流的一个网络,因此先来看看什么是神经元。
神经元可以简化为以下结构:
- 多个 树突,主要用来接受传入信息
- 一个 细胞核
- 一条 轴突,轴突尾端有许多 轴突末梢 可以给其他多个神经元传递信息,轴突末梢 跟其他神经元的树突产生连接,从而传递信号。
神经元模型是一个包含输入,输出与计算功能的模型。
- 输入——神经元的树突
- 输出——神经元的轴突
- 计算——细胞核
下图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能(其实可以合并成1个计算,对应1个细胞核):
注意中间的箭头线。这些线称为“连接”。每个上有一个“权值”(weight)(其实就是机器学习中的参数
θ
\theta
θ)。一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。
如果我们将神经元图中的所有变量用符号表示,并且写出输出的计算公式的话,就是下图:
可见
z
z
z 是在输入和权值的线性加权和叠加了一个函数
g
g
g 的值。
(在MP模型里,函数
g
g
g 是
s
g
n
sgn
sgn 函数,也就是取符号函数。这个函数当输入大于0时,输出1,否则输出0。)
下面对神经元模型进行一些扩展:
- 将 s u m sum sum 函数与 s g n sgn sgn 函数合并到一个圆圈里,代表神经元的内部计算,即 f f f
- 一个神经元可以引出多个代表输出
z
z
z 的有向箭头,但值都是一样的
神经元可以看作一个计算与存储单元。计算是神经元对其的输入进行计算功能。存储是神经元会暂存计算结果,并传递到下一层。
2. 神经网络模型
(Neural network model)
当我们用“神经元”组成网络以后,描述网络中的某个“神经元”时,我们更多地会用“单元”(unit)或者“激活单元”(activation unit)来指代。同时由于神经网络的表现形式是一个有向图,有时也会用“节点”(node)来表达同样的意思。
神经网络模型是许多单元按照不同层级组织起来的网络,每一层的输出变量都是下一层的输入变量。下图为一个3层的神经网络:
- 第一层称为 输入层(Input Layer)
- 中间一层称为 隐藏层(Hidden Layers)
- 最后一层称为 输出层(Output Layer)
在神经网络的每个层次中,除了输出层以外,都会含有这样一个 偏置单元(bias unit),它本质上是一个只含有存储功能,且存储值永远为1的单元。偏置单元没有输入(前一层中没有箭头指向它),且与后一层的所有节点都有连接,有些神经网络的结构图中会把偏置节点明显画出来,有些不会。
下面引入一些标记法来帮助描述模型:
项目 | 解释 | 举例 |
---|---|---|
a i ( l ) a_i^{(l)} ai(l) | 第 l l l 层的第 i i i 个激活单元 | a 3 ( 2 ) a_3^{(2)} a3(2)代表第 2 2 2层的第 3 3 3个激活单元 |
θ ( l ) \theta^{(l)} θ(l) | 从第 l l l 层映射到第 l + 1 l+1 l+1 层时的权重的矩阵 | θ ( 1 ) \theta^{(1)} θ(1) 代表从第一层映射到第二层的权重的矩阵 |
θ j i ( l ) \theta_{ji}^{(l)} θji(l) | 第 l l l 层的第 i i i 个神经元与第 l + 1 l+1 l+1 层的第 j j j 个神经元连接的权值 | θ 13 ( 1 ) \theta_{13}^{(1)} θ13(1)代表第一层的第3个神经元 x 3 x_3 x3 与第二层的第1个神经元 a 1 ( 2 ) a_1^{(2)} a1(2) 连接的权值 |
- 权重矩阵的尺寸:以第 l + 1 l+1 l+1 层的激活单元数量为行数,以第 l l l 层的激活单元数(不算偏置单元)加 1 为列数的矩阵。例如:上图所示的神经网络中 θ ( 1 ) \theta^{(1)} θ(1) 的尺寸为 3行*4列。
对于上图所示的模型,第二层的激活单元和第三层的输出分别表达为:
a
1
(
2
)
=
g
(
θ
10
(
1
)
x
0
+
θ
11
(
1
)
x
1
+
θ
12
(
1
)
x
2
+
θ
13
(
1
)
x
3
)
a_1^{(2)}=g( \theta_{10}^{(1)} x_0+ \theta_{11}^{(1)} x_1+\theta_{12}^{(1)} x_2+\theta_{13}^{(1)} x_3)
a1(2)=g(θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3)
a
2
(
2
)
=
g
(
θ
20
(
1
)
x
0
+
θ
21
(
1
)
x
1
+
θ
22
(
1
)
x
2
+
θ
23
(
1
)
x
3
)
a_2^{(2)}=g( \theta_{20}^{(1)} x_0+ \theta_{21}^{(1)} x_1+\theta_{22}^{(1)} x_2+\theta_{23}^{(1)} x_3)
a2(2)=g(θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3)
a
3
(
2
)
=
g
(
θ
30
(
1
)
x
0
+
θ
31
(
1
)
x
1
+
θ
32
(
1
)
x
2
+
θ
33
(
1
)
x
3
)
a_3^{(2)}=g( \theta_{30}^{(1)} x_0+ \theta_{31}^{(1)} x_1+\theta_{32}^{(1)} x_2+\theta_{33}^{(1)} x_3)
a3(2)=g(θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3)
h
θ
(
x
)
=
a
1
(
3
)
=
a
(
3
)
=
g
(
θ
10
(
2
)
a
0
(
2
)
+
θ
11
(
2
)
a
1
(
2
)
+
θ
12
(
2
)
a
2
(
2
)
+
θ
13
(
2
)
a
3
(
2
)
)
h_\theta(x)=a_1^{(3)}=a^{(3)}=g( \theta_{10}^{(2)} a_0^{(2)}+ \theta_{11}^{(2)}a_1^{(2)}+\theta_{12}^{(2)} a_2^{(2)}+\theta_{13}^{(2)} a_3^{(2)})
hθ(x)=a1(3)=a(3)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2)+θ13(2)a3(2))模型中的每一个
a
a
a 都是由上一层所有的
x
x
x 及其对应的权值所决定的,因此也把这种“输入层→隐藏层→输出层”计算顺序称为 前向传播(Forward Propagation)
2.1 模型向量化
为了使上述模型计算更为简便,可以将其向量化。
以上述模型计算第二层激活单元,原式为:
a
1
(
2
)
=
g
(
θ
10
(
1
)
x
0
+
θ
11
(
1
)
x
1
+
θ
12
(
1
)
x
2
+
θ
13
(
1
)
x
3
)
a_1^{(2)}=g( \theta_{10}^{(1)} x_0+ \theta_{11}^{(1)} x_1+\theta_{12}^{(1)} x_2+\theta_{13}^{(1)} x_3)
a1(2)=g(θ10(1)x0+θ11(1)x1+θ12(1)x2+θ13(1)x3)
a
2
(
2
)
=
g
(
θ
20
(
1
)
x
0
+
θ
21
(
1
)
x
1
+
θ
22
(
1
)
x
2
+
θ
23
(
1
)
x
3
)
a_2^{(2)}=g( \theta_{20}^{(1)} x_0+ \theta_{21}^{(1)} x_1+\theta_{22}^{(1)} x_2+\theta_{23}^{(1)} x_3)
a2(2)=g(θ20(1)x0+θ21(1)x1+θ22(1)x2+θ23(1)x3)
a
3
(
2
)
=
g
(
θ
30
(
1
)
x
0
+
θ
31
(
1
)
x
1
+
θ
32
(
1
)
x
2
+
θ
33
(
1
)
x
3
)
a_3^{(2)}=g( \theta_{30}^{(1)} x_0+ \theta_{31}^{(1)} x_1+\theta_{32}^{(1)} x_2+\theta_{33}^{(1)} x_3)
a3(2)=g(θ30(1)x0+θ31(1)x1+θ32(1)x2+θ33(1)x3)令:
输入向量
X
=
[
x
0
x
1
x
2
x
3
]
X=\begin{bmatrix} x_0 \\ x_1 \\ x_2 \\x_3 \end{bmatrix}
X=⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤,第二层的激活单元向量
a
(
2
)
=
[
a
1
(
2
)
a
2
(
2
)
a
3
(
2
)
]
a^{(2)}=\begin{bmatrix} a_1^{(2)} \\ \\ a_2^{(2)} \\ \\ a_3^{(2)} \end{bmatrix}
a(2)=⎣⎢⎢⎢⎢⎢⎡a1(2)a2(2)a3(2)⎦⎥⎥⎥⎥⎥⎤,第一层映射到第二层的权重矩阵为
θ
(
1
)
\theta^{(1)}
θ(1)
则:
a
(
2
)
=
[
a
1
(
2
)
a
2
(
2
)
a
3
(
2
)
]
=
g
(
[
θ
10
(
1
)
x
0
θ
11
(
1
)
x
1
θ
12
(
1
)
x
2
θ
13
(
1
)
x
3
θ
20
(
1
)
x
0
θ
21
(
1
)
x
1
θ
22
(
1
)
x
2
θ
23
(
1
)
x
3
θ
30
(
1
)
x
0
θ
31
(
1
)
x
1
θ
32
(
1
)
x
2
θ
33
(
1
)
x
3
]
)
=
g
(
[
θ
10
(
1
)
θ
11
(
1
)
θ
12
(
1
)
θ
13
(
1
)
θ
20
(
1
)
θ
21
(
1
)
θ
22
(
1
)
θ
23
(
1
)
θ
30
(
1
)
θ
31
(
1
)
θ
32
(
1
)
θ
33
(
1
)
]
∗
[
x
0
x
1
x
2
x
3
]
)
=
g
(
θ
(
1
)
X
)
\begin{aligned} a^{(2)}=\begin{bmatrix} a_1^{(2)} \\ \\ a_2^{(2)} \\ \\ a_3^{(2)} \end{bmatrix} &=g\begin{pmatrix} \begin{bmatrix}\theta_{10}^{(1)} x_0& \theta_{11}^{(1)} x_1&\theta_{12}^{(1)} x_2&\theta_{13}^{(1)} x_3\\ \\ \theta_{20}^{(1)}x_0&\theta_{21}^{(1)} x_1&\theta_{22}^{(1)} x_2 &\theta_{23}^{(1)}x_3\\\\ \theta_{30}^{(1)}x_0& \theta_{31}^{(1)} x_1&\theta_{32}^{(1)} x_2 &\theta_{33}^{(1)}x_3 \end{bmatrix}\end{pmatrix}\\\\ &=g \begin{pmatrix} \begin{bmatrix} \theta_{10}^{(1)}& \theta_{11}^{(1)} &\theta_{12}^{(1)} &\theta_{13}^{(1)} \\ \\ \theta_{20}^{(1)}& \theta_{21}^{(1)} &\theta_{22}^{(1)} &\theta_{23}^{(1)} \\ \\ \theta_{30}^{(1)}& \theta_{31}^{(1)} &\theta_{32}^{(1)} &\theta_{33}^{(1)} \end{bmatrix} * \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\x_3 \end{bmatrix} \end{pmatrix} =g(\theta^{(1)}X) \end{aligned}
a(2)=⎣⎢⎢⎢⎢⎢⎡a1(2)a2(2)a3(2)⎦⎥⎥⎥⎥⎥⎤=g⎝⎜⎜⎜⎜⎜⎛⎣⎢⎢⎢⎢⎢⎡θ10(1)x0θ20(1)x0θ30(1)x0θ11(1)x1θ21(1)x1θ31(1)x1θ12(1)x2θ22(1)x2θ32(1)x2θ13(1)x3θ23(1)x3θ33(1)x3⎦⎥⎥⎥⎥⎥⎤⎠⎟⎟⎟⎟⎟⎞=g⎝⎜⎜⎜⎜⎜⎛⎣⎢⎢⎢⎢⎢⎡θ10(1)θ20(1)θ30(1)θ11(1)θ21(1)θ31(1)θ12(1)θ22(1)θ32(1)θ13(1)θ23(1)θ33(1)⎦⎥⎥⎥⎥⎥⎤∗⎣⎢⎢⎡x0x1x2x3⎦⎥⎥⎤⎠⎟⎟⎟⎟⎟⎞=g(θ(1)X)即得到:
a
(
2
)
=
g
(
θ
(
1
)
X
)
a^{(2)}=g(\theta^{(1)}X)
a(2)=g(θ(1)X)
同理,对于输出:
h
θ
(
x
)
=
a
(
3
)
=
g
(
θ
10
(
2
)
a
0
(
2
)
+
θ
11
(
2
)
a
1
(
2
)
+
θ
12
(
2
)
a
2
(
2
)
+
θ
13
(
2
)
a
3
(
2
)
)
=
g
(
[
θ
10
(
2
)
θ
11
(
2
θ
12
(
2
)
θ
13
(
2
)
]
∗
[
a
0
(
2
)
a
1
(
2
)
a
2
(
2
)
a
3
(
2
)
]
)
=
g
(
θ
(
2
)
a
(
2
)
)
\begin{aligned} h_\theta(x)=a^{(3)} &=g( \theta_{10}^{(2)} a_0^{(2)}+ \theta_{11}^{(2)}a_1^{(2)}+\theta_{12}^{(2)} a_2^{(2)}+\theta_{13}^{(2)} a_3^{(2)})\\\\ &=g \begin{pmatrix} \begin{bmatrix} \theta_{10}^{(2)}& \theta_{11}^{(2} &\theta_{12}^{(2)} &\theta_{13}^{(2)} \end{bmatrix}* \begin{bmatrix}a_0^{(2)}\\\\ a_1^{(2)} \\ \\ a_2^{(2)} \\ \\ a_3^{(2)} \end{bmatrix} \end{pmatrix}=g(\theta^{(2)}a^{(2)}) \end{aligned}
hθ(x)=a(3)=g(θ10(2)a0(2)+θ11(2)a1(2)+θ12(2)a2(2)+θ13(2)a3(2))=g⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛[θ10(2)θ11(2θ12(2)θ13(2)]∗⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡a0(2)a1(2)a2(2)a3(2)⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞=g(θ(2)a(2)) 因此可以得出上述神经网络模型的向量化表示:
a
(
2
)
=
g
(
θ
(
1
)
X
)
h
θ
(
x
)
=
a
(
3
)
=
g
(
θ
(
2
)
a
(
2
)
)
\begin{aligned}a^{(2)}&=g(\theta^{(1)}X) \\ h_\theta(x)=a^{(3)}&=g(\theta^{(2)}a^{(2)}) \end{aligned}
a(2)hθ(x)=a(3)=g(θ(1)X)=g(θ(2)a(2))此时我们再回过头来看逻辑回归的假设函数:
h
θ
(
x
)
=
g
(
θ
T
X
)
h_θ(x)=g(\theta^TX)
hθ(x)=g(θTX)可以发现神经网络是将逻辑回归中的输入向量
X
X
X 变成了中间层的向量
a
(
2
)
a^{(2)}
a(2) ,如下图:
我们可以把
a
(
2
)
a^{(2)}
a(2) 看成比 输入
X
X
X更高级、更复杂的特征,它是由
X
X
X 与
θ
(
1
)
\theta^{(1)}
θ(1) 决定的,这些更高级的特征比原始输入能更好地预测新数据,就也神经网络相比于逻辑回归和线性回归的优势。
如下图所示,我们可以再进一步简化模型:
- 第一层:
a
(
1
)
=
x
a^{(1)}=x
a(1)=x
- 传输: z ( 2 ) = θ ( 1 ) a ( 1 ) z^{(2)}=\theta^{(1)}a^{(1)} z(2)=θ(1)a(1)
- 第二层:
a
(
2
)
=
g
(
z
(
2
)
)
a^{(2)}=g(z^{(2)})
a(2)=g(z(2))
- 传输: z ( 3 ) = θ ( 2 ) a ( 2 ) z^{(3)}=\theta^{(2)}a^{(2)} z(3)=θ(2)a(2)
- 第三层:
a
(
3
)
=
g
(
z
(
3
)
)
a^{(3)}=g(z^{(3)})
a(3)=g(z(3))
…
2.2 多类分类(多个输出)
(Multiclass Classification)
如果我们要训练一个神经网络算法来识别路人、汽车、摩托车和卡车,在输出层我们应该有4个值。例如,第一个值为1或0用于预测是否是行人,第二个值用于判断是否为汽车。
下面是该神经网络的可能结构示例:
该神经网络算法的输出结果为四种可能情形之一:
2.3 神经网络的代价函数
(Cost Function of Neural Networks)
假设神经网络有 m m m 个训练样本,每个训练样本包含一组输入 x x x 和一组输出信号 y y y
建立如下标记:
- L L L :神经网络的总层数
- s l s_l sl:第 l l l 层的神经元个数
将神经网络的分类定义为两种情况:
- 二类分类: S L = 1 , y = 0 o r 1 S_L=1,y=0or1 SL=1,y=0or1
- 多类分类(K类分类): S L = L , y i = 1 S_L=L,y_i=1 SL=L,yi=1表示分到第 i i i类( k ≥ 3 k\geq3 k≥3)
如下图所示:
回顾逻辑回归问题中的代价函数(带正则项)为:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
log
h
θ
(
x
(
i
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
+
λ
2
m
∑
j
=
1
n
θ
j
2
J(\theta)=-\frac{1}{m} \left [ \sum_{i=1}^{m} y^{(i)}\log{h_θ( x^{(i)})}+(1-y^{(i)})\log{(1-h_θ( x^{(i)}))}\right ] +\frac{\lambda}{2m}\sum_{j=1}^{n}\theta_j^2
J(θ)=−m1[i=1∑my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλj=1∑nθj2逻辑回归只有一个输出变量,又称标量(scalar),但是在神经网络中可以有很多输出变量,其假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x) 和训练集的输出
y
y
y 都是一个维度为
K
K
K 的向量,因此其代价函数会比逻辑回归更加复杂一些,为:
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
∑
k
=
1
K
y
k
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
k
+
(
1
−
y
k
(
i
)
)
log
(
1
−
(
h
θ
(
x
(
i
)
)
)
k
)
]
+
λ
2
m
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
θ
j
i
(
l
)
)
2
J(\theta)=-\frac{1}{m} \left [ \sum_{i=1}^{m}\sum_{k=1}^{K} y_k^{(i)}\log{(h_θ( x^{(i)}))_k}+(1-y_k^{(i)})\log{(1-(h_θ( x^{(i)}))_k)}\right ] +\frac{\lambda}{2m} \sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} (\theta_{ji}^{(l)})^2
J(θ)=−m1[i=1∑mk=1∑Kyk(i)log(hθ(x(i)))k+(1−yk(i))log(1−(hθ(x(i)))k)]+2mλl=1∑L−1i=1∑slj=1∑sl+1(θji(l))2其中
h
θ
(
x
)
∈
R
K
h_\theta(x)∈R^K
hθ(x)∈RK ,
y
∈
R
K
y∈R^K
y∈RK
- ( h θ ( x ( i ) ) ) k (h_\theta(x^{(i)}))_k (hθ(x(i)))k表示第 i i i 个训练实例的第 k k k 个假设
- y k ( i ) y_k^{(i)} yk(i)表示第 i i i 个训练实例的第 k k k 个实际输出
正则化项
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
θ
j
i
(
l
)
)
2
\displaystyle\sum_{l=1}^{L-1} \displaystyle\sum_{i=1}^{s_l} \displaystyle\sum_{j=1}^{s_{l+1}} (\theta_{ji}^{(l)})^2
l=1∑L−1i=1∑slj=1∑sl+1(θji(l))2 是每一层排除
θ
0
\theta_0
θ0后的所有权值
θ
\theta
θ 的平方和
以上图的四层神经网络为例,
L
=
4
L=4
L=4,故
∑
l
=
1
L
−
1
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
θ
j
i
(
l
)
)
2
=
∑
l
=
1
3
∑
i
=
1
s
l
∑
j
=
1
s
l
+
1
(
θ
j
i
(
l
)
)
2
\displaystyle\sum_{l=1}^{L-1} \displaystyle\sum_{i=1}^{s_l} \displaystyle\sum_{j=1}^{s_{l+1}} (\theta_{ji}^{(l)})^2= \displaystyle\sum_{l=1}^{3} \displaystyle\sum_{i=1}^{s_l} \displaystyle\sum_{j=1}^{s_{l+1}} (\theta_{ji}^{(l)})^2
l=1∑L−1i=1∑slj=1∑sl+1(θji(l))2=l=1∑3i=1∑slj=1∑sl+1(θji(l))2
- 当
l
=
1
,
i
=
1
l=1,i=1
l=1,i=1时,
s
l
+
1
=
5
s_{l+1}=5
sl+1=5,计算最里面的循环:
∑ j = 1 s l + 1 ( θ j i ( l ) ) 2 = ∑ j = 1 5 ( θ j 1 ( l ) ) 2 = ( θ 11 ( 1 ) ) 2 + ( θ 21 ( 1 ) ) 2 + ( θ 31 ( 1 ) ) 2 + ( θ 41 ( 1 ) ) 2 \displaystyle\sum_{j=1}^{s_{l+1}} (\theta_{ji}^{(l)})^2=\displaystyle\sum_{j=1}^{5} (\theta_{j1}^{(l)})^2= (\theta_{11}^{(1)})^2+(\theta_{21}^{(1)})^2+(\theta_{31}^{(1)})^2+(\theta_{41}^{(1)})^2 j=1∑sl+1(θji(l))2=j=1∑5(θj1(l))2=(θ11(1))2+(θ21(1))2+(θ31(1))2+(θ41(1))2 表示第一层的第1个神经元到第二层的5个神经元连接的权值 θ \theta θ 的平方和
神经网络和逻辑回归两者的代价函数背后的思想其实是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大,唯一不同的是,对于每一行特征,神经网络都会给出 K K K个预测,然后将其与 y y y中的实际数据进行比较,并在 K K K个预测中选择可能性最高的一个。