本文详细描述一下不同神经网络结构中的要素矩阵和系数矩阵。
一、数据样例
如下表是一个利用特征判断水果的例子。输入数据的特征有3个,分别是颜色、大小和形状;样本有5个;目标值为1个,即水果类型。
二、神经网络基本结构
这是一个单个神经元的示意图。工作原理分成两步:
第一,加和;
Y
=
w
1
x
1
+
w
2
x
2
+
w
3
x
3
+
⋯
+
w
m
x
m
Y=w_1x_1+w_2x_2+w_3x_3+\cdots+w_mx_m
Y=w1x1+w2x2+w3x3+⋯+wmxm
第二,激活函数。
H
=
f
(
Y
)
H=f(Y)
H=f(Y)
注:神经元对应的系数矩阵w是固定的,不会随着样本的不同而变化。第一个样本的 x 1 x_1 x1和第二个样本的 x 1 x_1 x1对应的 w 1 \mathrm{w}_1 w1是不变的。
激活函数只作用在单个神经元上。下文中的每层神经网络加和后,还要再经过一步激活函数,才能当成本层神经网络的输出,值得一提的是,该操作不会改变矩阵大小。
三、矩阵形式
下面部分主要针对第一步的加和部分,分析各层矩阵传递方式。
1. 单神经元,单样本
上面示意图就是单样本,单神经元的计算方式,这种情况实际中基本没有,只是做个示例。其计算方式和矩阵形式为:
Y
=
W
T
X
Y=W^TX
Y=WTX
W
=
[
w
1
w
2
⋮
w
m
]
,
X
=
[
x
1
x
2
⋮
x
m
]
,
Y
=
[
y
1
y
2
⋮
y
m
]
W=\begin{bmatrix}w_1\\ w_2\\ \vdots\\ w_m\end{bmatrix},\quad X=\begin{bmatrix}x_1\\ x_2\\ \vdots\\ x_m\end{bmatrix},\quad Y=\begin{bmatrix}y_1\\ y_2\\ \vdots\\ y_m\end{bmatrix}
W=
w1w2⋮wm
,X=
x1x2⋮xm
,Y=
y1y2⋮ym
2. 单神经元,多样本
这种情况例如感知机(PLA),利用一个神经元进行分类,输入矩阵X从一列变成多列,系数矩阵W不变。
进一步将X写成矩阵形式,n个样本,m个变量,用
x
n
m
x_{nm}
xnm来表示(n在前,m在后,这种矩阵写法是整个架构的前提),这和上面表格的表达方式是一样的。竖着是样本,横着是变量。
(1)对于第 i i i个样本,则 y i = W T x i y_i=W^Tx_i yi=WTxi
W = [ w 1 w 2 ⋮ w m ] , x i = [ x i 1 x i 2 ⋮ x i m ] , y i = [ y i ] W=\begin{bmatrix}w_1\\ w_2\\ \vdots\\ w_m\end{bmatrix},\quad x_i=\begin{bmatrix}x_{i1}\\ x_{i2}\\ \vdots\\ x_{i m}\end{bmatrix},\quad y_i=[y_i] W= w1w2⋮wm ,xi= xi1xi2⋮xim ,yi=[yi]
注:实际上 x i x_i xi是行向量 x i = [ x i 1 , x i 2 , . . . , x i m ] x_i=[x_{i1},x_{i2},...,x_{im}] xi=[xi1,xi2,...,xim],但是按照常规,如果把一行单拎出来,一般会写成列向量的形式。
(2)对于整个样本,则 Y = X W Y=XW Y=XW
X = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] , W = [ w 1 w 2 ⋮ w m ] , Y = [ y 1 y 2 ⋮ y n ] X={\left[\begin{array}{l l l l}{x_{11}}&{x_{12}}&{\cdots}&{x_{1m}}\\ {x_{21}}&{x_{22}}&{\cdots}&{x_{2m}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {x_{n1}}&{x_{n2}}&{\cdots}&{x_{n m}}\end{array}\right]},\quad W={\left[\begin{array}{l}{w_{1}}\\ {w_{2}}\\ {\vdots}\\ {w_{m}}\end{array}\right]},\quad Y={\left[\begin{array}{l}{y_{1}}\\ {y_{2}}\\ {\vdots}\\ {y_{n}}\end{array}\right]} X= x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm ,W= w1w2⋮wm ,Y= y1y2⋮yn
3. 多神经元,单样本
对于单样本输入,最终输出是1个y值。但是多神经元肯定是多个输出,和1个y对不上,所以这种情况必然还得增加一层个数是1的神经元。
对于第一层
Z
=
W
T
X
:
p
*
m
×
m
*
1
=
p
*
1
Z=W^TX:p\text{*}m\times m\text{*}1\text{=}p\text{*}1
Z=WTX:p*m×m*1=p*1
W
=
[
w
11
w
12
⋯
w
1
p
w
21
w
22
⋯
w
2
,
p
⋮
⋮
⋱
⋮
w
m
1
w
m
2
⋯
w
m
p
]
,
X
=
[
x
1
x
2
⋮
x
m
]
,
Z
=
[
z
1
z
2
⋮
z
p
]
W=\begin{bmatrix}w_{11}&w_{12}&\cdots&w_{1p}\\ w_{21}&w_{22}&\cdots&w_{2,p}\\ \vdots&\vdots&\ddots&\vdots\\ w_{m1}&w_{m2}&\cdots&w_{mp}\end{bmatrix},\quad X=\begin{bmatrix}x_1\\ x_2\\ \vdots\\ x_m\end{bmatrix},\quad Z=\begin{bmatrix}z_1\\ z_2\\ \vdots\\ z_p\end{bmatrix}
W=
w11w21⋮wm1w12w22⋮wm2⋯⋯⋱⋯w1pw2,p⋮wmp
,X=
x1x2⋮xm
,Z=
z1z2⋮zp
注意 W 和 V 矩阵形式。可以这样记:下角标左右顺序和神经网络左右顺序一致,W先是m再是p;V先是p再是1
对于第二层
Y
=
V
T
Z
:
1
*
p
×
p
*
1
=
1
*
1
Y=V^TZ:1\text{*}p\times p\text{*}1\text{=}1\text{*}1
Y=VTZ:1*p×p*1=1*1
V
=
[
v
1
v
2
⋮
v
p
]
,
Z
=
[
z
1
z
2
⋮
z
p
]
,
Y
=
[
y
i
]
V=\begin{bmatrix}v_1\\ v_2\\ \vdots\\ v_p\end{bmatrix},\quad Z=\begin{bmatrix}z_1\\ z_2\\ \vdots\\ z_p\end{bmatrix},\quad Y=[y_i]
V=
v1v2⋮vp
,Z=
z1z2⋮zp
,Y=[yi]
注:同上所述,第一层神经网络的结果 Z ,需要经过激活函数后才能从该层输出,激活函数作用在每个神经元上,作用在Z矩阵的每个值上,不改变 Z 矩阵大小,故简略起见,第二层还用 Z 来表征第一层的输出。
4. 多神经元,多样本
这种形式就是日常见到的神经网络。
对于第一层
Z
=
X
W
:
n
*
m
×
m
*
p
=
n
*
p
Z=XW:n\text{*}m\times m\text{*}p\text{=}n\text{*}p
Z=XW:n*m×m*p=n*p
X
=
[
x
11
x
12
⋯
x
1
m
x
21
x
22
⋯
x
2
m
⋮
⋮
⋱
⋮
x
n
1
x
n
2
⋯
x
n
m
]
,
W
=
[
w
11
w
12
⋯
w
1
p
w
21
w
22
⋯
w
2
p
⋮
⋮
⋱
⋮
w
m
1
w
m
2
⋯
w
m
p
]
,
Z
=
[
z
11
z
12
⋯
z
1
p
z
21
z
22
⋯
z
2
p
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
p
]
,
X=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\ x_{21}&x_{22}&\cdots&x_{2m}\\ \vdots&\vdots&\ddots&\vdots\\ x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix}, \quad W=\begin{bmatrix}w_{11}&w_{12}&\cdots&w_{1p}\\ w_{21}&w_{22}&\cdots&w_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ w_{m1}&w_{m2}&\cdots&w_{mp}\end{bmatrix}, \quad Z=\begin{bmatrix}z_{11}&z_{12}&\cdots&z_{1p}\\ z_{21}&z_{22}&\cdots&z_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ z_{n1}&z_{n2}&\cdots&z_{np}\end{bmatrix},
X=
x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1mx2m⋮xnm
,W=
w11w21⋮wm1w12w22⋮wm2⋯⋯⋱⋯w1pw2p⋮wmp
,Z=
z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1pz2p⋮znp
,
对于第二层
Y
=
Z
V
:
n
*
p
×
p
*
1
=
n
*
1
Y=ZV:n\text{*}p\times p\text{*}1\text{=}n\text{*}1
Y=ZV:n*p×p*1=n*1
Z
=
[
z
11
z
12
⋯
z
1
p
z
21
z
22
⋯
z
2
p
⋮
⋮
⋱
⋮
z
n
1
z
n
2
⋯
z
n
p
]
,
V
=
[
v
1
v
2
⋮
v
p
]
,
Y
=
[
y
1
y
2
⋮
y
n
]
Z=\begin{bmatrix}z_{11}&z_{12}&\cdots&z_{1p}\\ z_{21}&z_{22}&\cdots&z_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ z_{n1}&z_{n2}&\cdots&z_{np}\end{bmatrix}, \quad V=\begin{bmatrix}v_1\\ v_2\\ \vdots\\ v_p\end{bmatrix}, \quad Y=\begin{bmatrix}y_1\\ y_2\\ \vdots\\ y_n\end{bmatrix}
Z=
z11z21⋮zn1z12z22⋮zn2⋯⋯⋱⋯z1pz2p⋮znp
,V=
v1v2⋮vp
,Y=
y1y2⋮yn
对于更复杂的情况如:2个隐藏层,y一次输出为10个。则涉及4个矩阵:输入x,两个隐藏层的输出,以及y。
5. 总结
神经网络工作方式是以(行)向量的方式进入网络,一行一行逐个进入计算,多行就是多个batch。
只要是单样本,就写成
Y
=
W
T
X
Y=W^TX
Y=WTX 形式;只要是多样本,就写成
Y
=
X
W
Y=XW
Y=XW 形式。