深度神经网络模型(DNN)与前向传播算法

原文见:深度神经网络模型(DNN)与前向传播算法

这里具体写一下摘要及感想

1、DNN(深度神经网络)简介:

从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,如下图示例,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。

输入层的每个神经元输入样本数据x的一维

在这里插入图片描述

层与层之间是全连接的,也就是说,第 i i 层的任意一个神经元一定与第 i + 1 i+1 层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系 z = w i x i + b z=∑w_ix_i+b 加上一个激活函数 σ ( z ) σ(z)

2、参数定义
由于DNN层数增多,则线性关系系数 w w 和偏倚 b b 的数量就会很多,具体的定义方法如下:
首先我们来看看线性关系系数 w w 的定义。以下图一个三层的DNN为例,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为 w 24 3 w_{24}^3

上标 3 代表线性系数 w w 所在的层数,而下标对应的是输出的第三层索引 2 和输入的第二层索引 4 。你也许会问,为什么不是 w 42 3 , w^3_{42}, 而是 w 24 3 w^3_{24} 呢,如果是 w 42 3 w^3_{42} 而每次进行矩阵运算是 w T x + b w^Tx+b , 需要进行转置。将输出的索引放在前面的话,则线性运算不用转置,即直接为 w x + b wx+b 。总结下,第 l 1 l−1 层的第 k k 个神经元到第 l l 层的第 j j 个神经元的线性系数定义为 w j k l w_{jk}^l 。注意,输入层是没有 w w 参数的。

在这里插入图片描述

再来看看偏倚 b b 的定义。还是以这个三层的DNN为例,第二层的第三个神经元对应的偏倚定义为 b 23 b_{23} 。其中,上标 2 2 代表所在的层数,下标 3 3 代表偏倚所在的神经元的索引。同样的道理,第三个的第一个神经元的偏倚应该表示为 b 31 b_{31} 。同样的,输入层是没有偏倚参数 b b 的。

3、传播公式
在这里插入图片描述
在这里插入图片描述

从上面可以看出,使用代数法一个个的表示输出比较复杂,而如果使用矩阵法则比较的简洁。假设第 l 1 l−1 层共有 m m 个神经元,而第 l l 层共有 n n 个神经元,则第 l l 层的线性系数 w w 组成了一个 n × m n×m 的矩阵 W l W^l , 第 l l 层的偏倚 b b 组成了一个 n × 1 n×1 的向量 b l b^l , 第 l 1 l−1 层的的输出 a a 组成了一个 m × 1 m×1 的向量 a l 1 a^{l-1} ,第 l l 层的的未激活前线性输出 z z 组成了一个 n × 1 n×1 的向量 z l z^l , 第 l l 层的的输出 a a 组成了一个 n × 1 n×1 的向量 a l a^l 。则用矩阵法表示,第l层的输出为:矩阵化:

在这里插入图片描述

4、前向传播过程
所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵 W W ,偏倚向量 b b 来和输入值向量 x x 进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。
    输入: 总层数 L L ,所有隐藏层和输出层对应的矩阵 W W ,偏倚向量 b b ,输入值向量 x x
    输出:输出层的输出 a L a^L
    1) 初始化 a 1 = x a_1=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)
最后的结果即为输出 a L a^L