1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai
4.1 深层神经网络 Deep L-layer Neural network
前面的学习中我们了解了逻辑回归和向量化,单隐层NN中的正向传播和反向传播,为什么要随机初始化权重,这些都是实现深度NN的基本理念。
本周的目标就是实现深度NN模型。
先来观察下面几个图。
上图左边是逻辑回归模型,右边是单隐藏NN。
上图是一个双隐层的NN。
上图是一个5隐层的NN。
第一个逻辑回归的模型,从技术层面上说,是单层NN,我们称之为“浅层”。而最后一个5隐层NN称之为“深层”。深层或者浅层是一个程度问题。
有些函数只有非常深的NN可以学习。尽管对于任何给定的问题很难去提前预测到底需要多深的神经网络,我们可以先去尝试逻辑回归一层NN,然后两层NN(含一个隐层),依次增加隐藏层数,把隐藏层的数量看做是另一个可以自由选择大小的超参数,再在保留的交叉验证数据上评估,或者用你的开发集来评估。
符号约定
上图是一个含3隐层和1个输出层的4层NN。从左往右,隐层中单元数量是5,5,3。
- 我们用L表示层数,L=4。
- 用n[i]表示第i层的节点数,第一层n[1]=5,第二层n[2]=5,第三层n[3]=3,第四层n[4]=n[L]=1。
- 输入层n[0]=3。
- 用a[i]表示第i层的激活函数,a[i]=g[i](z[i])
- 输入特征x是第0层的激活函数,x=a[0]
- 预测值y^=a[L]
- 用w[i]表示第i层计算z[i]的权重值
- 用b[i]表示第i层计算z[i]的偏置值
4.2 深层网络中的前向传播 Forward Propagation in a Deep Network
本节将介绍如何在深层NN中应用前向传播和反向传播。
我们先来看一个训练样本x的情况,如何计算第一层的激活单元。
z[1]=W[1]x+b[1]=W[1]a[0]+b[1],其中W[1]和b[1]是影响第一层激活单元的参数。特征向量x也是第0层的激活单元,即x=a[0]。
a[1]=g[1](z[1]),这个是作用于z[1]的激活函数
第二层计算如下
z[2]=W[2]a[1]+b[2]
a[2]=g[2](z[2]),这个是作用于z[2]的激活函数
后面几层依次类推,直到输出层
z[4]=W[4]a[3]+b[4]
a[4]=g[4](z[4])=y^,此时输出就是预测值y^
可以发现,一个训练样本正向传播公式可以归纳为
z[l]=W[l]a[l−1]+b[l]
a[l]=g[l](z[l])
接下来再看看如何用向量化方法训练整个训练集。其实就是把z和a向量从左到右横向叠起来。
例如:
Z[1]=⎣⎢⎢⎢⎡⋮z[1](1)⋮⋮z[1](2)⋮⋮z[1](3)⋮⋮⋮⋮⋮z[1](m)⋮⎦⎥⎥⎥⎤
第一层
Z[1]=W[1]X+b[1]=W[1]A[0]+b[1],其中X=A[0],就是把所有样本从左到右横向叠在一起
A[1]=g[1](Z[1])
第二层
Z[2]=W[2]A[1]+b[2]
A[2]=g[2](Z[2])
后面几层依次类推,直到输出层
Z[4]=W[4]A[3]+b[4]
A[4]=g[4](Z[4])=Y^,Y^就是把所有样本的预测值y^从左到右横向叠在一起
针对整个训练集正向传播的向量化公式归纳如下
Z[l]=W[l]A[l−1]+b[l]
A[l]=g[l](A[l])
此时要遍历所有层计算就需要一个显示for循环,for l=1,2…L,依次计算从输入层到输出层整个NN每层的Z和A值。
你可以发现深层NN正向传播实现过程和单隐层NN实现步骤是非常类似的,只不过多重复了几遍。