首页
学习
活动
专区
圈层
工具
发布

从零开始深度学习(十二):深层神经网络

1、深层神经网络

目前为止,学习了只有一个单独隐藏层的神经网络的正向传播和反向传播,还有逻辑回归,并且还学到了向量化,这在随机初始化权重时是很重要。

这一次所要做的是把这些理念集合起来,就可以组建并执行一个术语你自己的 深度神经网络,有没有一种乐高积木的感觉呢?

简单复习下前面的内容:

逻辑回归,下图左边。一个隐藏层的神经网络,下图右边。

神经网络层数的定义方式:从左到右,由隐藏层开始,定义为第一层,比如上边右图,、、这一层右边的隐藏层是第一层,所以浅层神经网络是两层网络。

由此类推,下图左边是两个隐藏层的三层神经网络,右边是五个隐藏层的六层神经网络。(这个层数叫法是存在不同的结论的,最简单且不出错的方法是说隐藏层的层数,比如左边的是两个隐藏层,右边的是五个隐藏层)

所以,严格意义上来说,逻辑回归也是一个一层的神经网络,而上边右图一个深得多的模型,是一个六层的神经网络。我们所说的浅层神经网络和深层神经网络中的浅与深,仅仅是指一种程度,也就是相对而言的。

小结一下: 严格的说,有一个隐藏层的神经网络,就是一个两层神经网络。记住算神经网络的层数时,不算输入层,只算隐藏层和输出层。

2、前向传播和反向传播

深度神经网络的每一层都有 前向传播 步骤以及一个相反的 反向传播 步骤,那么这两个步骤是如何实现的呢?

先说前向传播, 表示层数,网络的输入 ,网络的输出是 ,网络的缓存为 ;从实现的角度来说可以缓存下 和 ,这样更容易在不同的环节中调用函数。

所以前向传播的步骤可以写成:

(1)

(2)

向量化(深度学习入门笔记(四):向量化)整个过程之后,可以写成:

(1)

(2)

前向传播需要喂入 也就是 ,即输入特征,来进行初始化,初始化的是第一层的输入值。 对应于一个训练样本中的输入特征,而 对应于一整个训练样本中的输入特征,所以这就是这条链的第一个前向函数的输入,重复这个步骤就可以从左到右计算前向传播。

再讲反向传播,具体的原理和推导可以看这个博客——深度学习100问之深入理解Back Propagation(反向传播),输入为 ,输出为 ,, 。

所以反向传播的步骤可以写成:

(1)

(2)

(3)

(4)

(5)

式子(5)由式子(4)带入式子(1)得到,前四个式子就可实现反向传播。

向量化实现过程可以写成:

(6)

(7)

(8)

(9)

小结一下:

吴恩达老师手稿如下,举一个简单的三层(两层隐藏层)神经网络。

在这里插入图片描述

  • 前向传播:第一层可能有一个 ReLU 激活函数,第二层为另一个 ReLU 激活函数,第三层(输出层)可能是 sigmoid 函数(如果做二分类的话),输出值为 ,用来和 计算损失 ;
  • 反向传播:向后迭代,进行反向传播求导来求 , , , , ,。在计算的时候,缓存会把 传递过来,然后回传 , ,;
  • 前向递归:用输入数据 来初始化,那么反向递归(使用 Logistic 回归做二分类),对 求导。

3、核对矩阵维数

当实现深度神经网络的时候,其中一个最常用的也是最好用的检查代码是否有错的方法,就是拿出一张纸过一遍算法中矩阵的维数。或者有一个笨方法就是,一直运行,一直 ,不过这样太低效了。

向量化前,变量的维度如下:

  • 的维度是(下一层的维数,前一层的维数),即 :(,);
  • 的维度是(下一层的维数,1),即 :(;
  • 和 的维度是(下一层的维数,1),即 ,: ;
  • 和 维度相同;
  • 和 维度相同;

和 向量化维度不变,但 , 以及 的维度会向量化后发生变化。

向量化后:

  • 可以看成由每一个单独的 叠加而得到,, 为训练集大小,所以 的维度不再是 ,而是 。
  • 和 一样,维度变成 ,其中

到这里,一个深层神经网络就设计完成了,理论知识也大概讲述完毕了。

未完待续。。。

下一篇
举报
领券