这里具体写一下摘要及感想
1、DNN(深度神经网络)简介:
从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,如下图示例,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。
输入层的每个神经元输入样本数据x的一维
层与层之间是全连接的,也就是说,第 i i i层的任意一个神经元一定与第 i + 1 i+1 i+1层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系 z = ∑ w i x i + b z=∑w_ix_i+b z=∑wixi+b加上一个激活函数 σ ( z ) σ(z) σ(z)。
2、参数定义
由于DNN层数增多,则线性关系系数
w
w
w和偏倚
b
b
b的数量就会很多,具体的定义方法如下:
首先我们来看看线性关系系数
w
w
w的定义。以下图一个三层的DNN为例,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为
w
24
3
w_{24}^3
w243
上标 3 代表线性系数 w w w所在的层数,而下标对应的是输出的第三层索引 2 和输入的第二层索引 4 。你也许会问,为什么不是 w 42 3 , w^3_{42}, w423, 而是 w 24 3 w^3_{24} w243呢,如果是 w 42 3 w^3_{42} w423而每次进行矩阵运算是 w T x + b w^Tx+b wTx+b, 需要进行转置。将输出的索引放在前面的话,则线性运算不用转置,即直接为 w x + b wx+b wx+b。总结下,第 l − 1 l−1 l−1层的第 k k k个神经元到第 l l l层的第 j j j个神经元的线性系数定义为 w j k l w_{jk}^l wjkl。注意,输入层是没有 w w w参数的。
再来看看偏倚 b b b的定义。还是以这个三层的DNN为例,第二层的第三个神经元对应的偏倚定义为 b 23 b_{23} b23。其中,上标 2 2 2代表所在的层数,下标 3 3 3代表偏倚所在的神经元的索引。同样的道理,第三个的第一个神经元的偏倚应该表示为 b 31 b_{31} b31。同样的,输入层是没有偏倚参数 b b b的。
3、传播公式
从上面可以看出,使用代数法一个个的表示输出比较复杂,而如果使用矩阵法则比较的简洁。假设第 l − 1 l−1 l−1层共有 m m m个神经元,而第 l l l层共有 n n n个神经元,则第 l l l层的线性系数 w w w组成了一个 n × m n×m n×m的矩阵 W l W^l Wl, 第 l l l层的偏倚 b b b组成了一个 n × 1 n×1 n×1的向量 b l b^l bl , 第 l − 1 l−1 l−1层的的输出 a a a组成了一个 m × 1 m×1 m×1的向量 a l − 1 a^{l-1} al−1,第 l l l层的的未激活前线性输出 z z z组成了一个 n × 1 n×1 n×1的向量 z l z^l zl, 第 l l l层的的输出 a a a组成了一个 n × 1 n×1 n×1的向量 a l a^l al。则用矩阵法表示,第l层的输出为:矩阵化:
4、前向传播过程
所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵
W
W
W,偏倚向量
b
b
b来和输入值向量
x
x
x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。
输入: 总层数
L
L
L,所有隐藏层和输出层对应的矩阵
W
W
W,偏倚向量
b
b
b,输入值向量
x
x
x
输出:输出层的输出
a
L
a^L
aL
1) 初始化
a
1
=
x
a_1=x
a1=x
2) for l=2 to L, 计算:
a
l
=
σ
(
W
l
a
l
−
1
+
b
l
)
a_l=\sigma(W^la^{l-1}+b^l)
al=σ(Wlal−1+bl)
最后的结果即为输出
a
L
a^L
aL。