一、什么是深度神经网络
通常将逻辑回归函数以及下述的双层神经网络(输入层不算)定义为浅层神经网络,因为它不具备学习的能力。将一些多层且复杂的神经网络定义为深度神经网络。
浅层神经网络模型:
深度神经网络模型
一些符号的定义:
在下面的描述中,这些符号将被运用到
n
[
l
]
n^{[l]}
n[l]:代表第
l
l
l层的节点数,
l
=
1
l=1
l=1是第一个隐藏层,输入层为第0层。
a
[
l
]
a^{[l]}
a[l]:代表第
l
l
l层中的激活函数。在下述的正向传播中将会提到激活函数:
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
a^{[l]}=g^{[l]}(z^{[l]})
a[l]=g[l](z[l])
其中:
z
[
l
]
=
w
[
l
]
x
+
b
[
l
]
z^{[l]}=w^{[l]}x+b^{[l]}
z[l]=w[l]x+b[l](w和b都代表第
l
l
l层中z函数的权重)
x
x
x为输入函数,也是第0层的激活函数,
x
=
a
[
0
]
x=a^{[0]}
x=a[0]。
最后一层的激活函数为
a
[
l
]
=
y
^
a^{[l]}=\hat y
a[l]=y^,即
a
[
l
]
a^{[l]}
a[l]为预测输出。
二、前向和反向传播过程
1、前向传播过程
假设在一个
l
l
l层的神经网络中:
输入为
a
[
l
−
1
]
a^{[l-1]}
a[l−1],输出为
a
[
l
]
a^{[l]}
a[l],每一层的缓存为
z
[
l
]
z{[l]}
z[l](即为
w
[
l
]
,
b
[
l
]
w^{[l]},b^{[l]}
w[l],b[l])。
前向传播的过程为:
z
[
l
]
=
w
[
l
]
a
[
l
−
1
]
+
b
[
l
]
z^{[l]}=w^{[l]}a^{[l-1]}+b^{[l]}
z[l]=w[l]a[l−1]+b[l]
a
[
l
]
=
g
[
l
]
(
z
[
l
]
)
a^{[l]}=g^{[l]}(z^{[l]})
a[l]=g[l](z[l])(g为激活函数)
将正向传播过程进行向量化,则可表示为:
z
[
l
]
=
w
[
l
]
A
[
l
−
1
]
+
b
[
l
]
z^{[l]}=w^{[l]}A^{[l-1]}+b^{[l]}
z[l]=w[l]A[l−1]+b[l]
A
[
l
]
=
g
[
l
]
(
z
[
l
]
)
A^{[l]}=g^{[l]}(z^{[l]})
A[l]=g[l](z[l])
2、反向传播过程
假设在一个
l
l
l层的神经网络中:
输入为
d
a
[
l
]
da^{[l]}
da[l],输出为
d
a
[
l
−
1
]
da^{[l-1]}
da[l−1],
d
W
[
l
]
,
d
b
[
l
]
dW^{[l]},db^{[l]}
dW[l],db[l].
d
z
[
l
]
=
d
a
[
l
]
∗
g
[
l
]
′
(
z
[
l
]
)
dz^{[l]}=da^{[l]}*g^{[l]'}(z^{[l]})
dz[l]=da[l]∗g[l]′(z[l])
d
w
[
l
]
=
d
z
[
l
]
a
[
l
−
1
]
dw^{[l]}=dz^{[l]}a^{[l-1]}
dw[l]=dz[l]a[l−1]
d
b
[
l
]
=
d
z
[
l
]
db^{[l]}=dz^{[l]}
db[l]=dz[l]
d
a
[
l
−
1
]
=
w
[
l
]
T
d
z
[
l
]
da^{[l-1]}=w^{[l]T}dz^{[l]}
da[l−1]=w[l]Tdz[l]
将反向传播过程进行向量化:
d
z
[
l
]
=
d
A
[
l
]
∗
g
[
l
]
′
(
z
[
l
]
)
dz^{[l]}=dA^{[l]}*g^{[l]'}(z^{[l]})
dz[l]=dA[l]∗g[l]′(z[l])
d
w
[
l
]
=
1
m
d
z
[
l
]
A
[
l
−
1
]
T
dw^{[l]}=\frac{1}{m}dz^{[l]}A^{[l-1]T}
dw[l]=m1dz[l]A[l−1]T
d
b
[
l
]
=
1
m
n
p
.
s
u
m
(
d
z
[
l
]
,
a
x
i
s
=
1
,
)
db^{[l]}=\frac{1}{m}np.sum(dz^{[l]},axis=1,)
db[l]=m1np.sum(dz[l],axis=1,)
d
A
[
l
−
1
]
=
w
[
l
]
T
d
z
[
l
]
dA^{[l-1]}=w^{[l]T}dz^{[l]}
dA[l−1]=w[l]Tdz[l]
3、深度神经网络的整体过程(正向、反向)
3、深度网络的前向传播过程
对于上图中的深度神经网络来说:
输入为x,也可以说为
a
[
0
]
a^{[0]}
a[0]。
正向传播过程可以被描述为:
z
[
1
]
=
w
[
1
]
a
[
0
]
+
b
[
1
]
z^{[1]}=w^{[1]}a^{[0]}+b^{[1]}
z[1]=w[1]a[0]+b[1]
a
[
1
]
=
g
[
1
]
(
z
[
1
]
)
a^{[1]}=g^{[1]}(z^{[1]})
a[1]=g[1](z[1])
z
[
2
]
=
w
[
2
]
a
[
1
]
+
b
[
2
]
z^{[2]}=w^{[2]}a^{[1]}+b^{[2]}
z[2]=w[2]a[1]+b[2]
a
[
2
]
=
g
[
2
]
(
z
[
2
]
)
a^{[2]}=g^{[2]}(z^{[2]})
a[2]=g[2](z[2])
一直持续上述步骤到最后的输出层
z
[
4
]
=
w
[
4
]
a
[
3
]
+
b
[
4
]
z^{[4]}=w^{[4]}a^{[3]}+b^{[4]}
z[4]=w[4]a[3]+b[4]
a
[
4
]
=
g
[
4
]
(
z
[
4
]
)
=
y
^
a^{[4]}=g^{[4]}(z^{[4]})=\hat y
a[4]=g[4](z[4])=y^
对于多个样本的情况下,采用向量的形式进行表示:
若有m个输入样本:
正向传播过程可以被描述为:
z
[
1
]
=
w
[
1
]
A
[
0
]
+
b
[
1
]
z^{[1]}=w^{[1]}A^{[0]}+b^{[1]}
z[1]=w[1]A[0]+b[1]
A
[
1
]
=
g
[
1
]
(
z
[
1
]
)
A^{[1]}=g^{[1]}(z^{[1]})
A[1]=g[1](z[1])
z
[
2
]
=
w
[
2
]
A
[
1
]
+
b
[
2
]
z^{[2]}=w^{[2]}A^{[1]}+b^{[2]}
z[2]=w[2]A[1]+b[2]
A
[
2
]
=
g
[
2
]
(
z
[
2
]
)
A^{[2]}=g^{[2]}(z^{[2]})
A[2]=g[2](z[2])
Y
^
=
g
[
4
]
(
z
[
4
]
)
=
A
[
4
]
\hat Y=g^{[4]}(z^{[4]})=A^{[4]}
Y^=g[4](z[4])=A[4]
输入和权重w都为列向量,式中的
w
[
l
]
w^{[l]}
w[l]是转置后w矩阵的统称
z的输出样式为下图所示
其中,每一列向量代表每一个样本在第2层的输出
总的前向反向传播总结如下图所示: