吴恩达深度学习第一门课第四周—深层神经网络学习笔记

声明:注意文中的[𝑙],[𝑙][1]是上标

一.深层神经网络介绍

知识回顾

目前为止我们学习了只有一个单独隐藏层的神经网络的正向传播和反向传播,还有逻
辑回归,并且还学到了向量化,这在随机初始化权重时是很重要。
本周所要做的是把这些理念集合起来,就可以执行你自己的深度神经网络。
复习下前三周的课的内容:
1.逻辑回归,结构如下图左边。一个隐藏层的神经网络,结构下图右边:

注意,神经网络的层数是这么定义的:从左到右,由 0 开始定义,比如上边右图,𝑥1、
𝑥2、𝑥3,这层是第 0 层,这层左边的隐藏层是第 1 层,由此类推。如下图左边是两个隐藏层
的神经网络,右边是 5 个隐藏层的神经网络。

 

注意 :有一个隐藏层的神经网络,就是一个两层神经网络。算神经网络的层数时,我们不算输入层,我们只算隐藏层和输出层。

深度学习的符号定义

上图是一个四层的神经网络,有三个隐藏层。我们可以看到,第一层(即左边数过去
第二层,因为输入层是第 0 层)有 5 个神经元数目,第二层 5 个,第三层 3 个。
我们用 L 表示层数,上图:𝐿 = 4,输入层的索引为“0”,第一个隐藏层𝑛[1] = 5,表示有
5 个隐藏神经元,同理𝑛[2] = 5,𝑛[3] = 3,𝑛[4] =𝑛[𝐿] = 1(输出单元为 1)。而输入层,
𝑛[0] = 𝑛𝑥 = 3。第l层的w,b,z,𝑎用𝑤[𝑙],b[𝑙],z[𝑙],𝑎[𝑙]表示注意这里的 [𝑙] 是上标,因为用公式打出来会与其他字的大小不匹配,看起来会不美观。

二.前向传播和反向传播

前向传播

跟往常一样,我们先来看对其中一个训练样本 x 如何应用前向传播,之后讨论向量化
的版本。
第一层需要计算𝑧[1] = 𝑤[1]𝑥 + 𝑏[1],𝑎[1] = 𝑔[1](𝑧[1])(𝑥可以看做𝑎[0])
第二层需要计算𝑧[2] = 𝑤[2]𝑎[1] + 𝑏[2],𝑎[2] = 𝑔[2](𝑧[2])
以此类推,
第四层为𝑧[4] = 𝑤[4]𝑎[3] + 𝑏[4],𝑎[4] = 𝑔[4](𝑧[4])

........
前向传播可以归纳为多次迭代𝑧[𝑙] = 𝑤[𝑙]𝑎[𝑙−1] + 𝑏[𝑙],𝑎[𝑙] = 𝑔[𝑙](𝑧[𝑙])。
 向量化实现过程可以写成:
𝑍[𝑙] = 𝑊[𝑙]𝑎[𝑙−1] + 𝑏[𝑙],𝐴[𝑙] = 𝑔[𝑙](𝑍[𝑙]) (𝐴[0] = 𝑋)
这里只能用一个显式 for 循环,𝑙从 1 到𝐿,然后一层接着一层去计算。

反向传播 

反向传播的步骤可以写成:
(1)𝑑𝑧[𝑙] = 𝑑𝑎[𝑙] ∗ 𝑔[𝑙]′(𝑧[𝑙])
(2)𝑑𝑤[𝑙] = 𝑑𝑧[𝑙] ⋅ 𝑎[𝑙−1]
(3)𝑑𝑏[𝑙] = 𝑑𝑧[𝑙]
(4)𝑑𝑎[𝑙−1] = 𝑤[𝑙]𝑇 ⋅ 𝑑𝑧[𝑙]

向量化实现过程可以写成:
(6)𝑑𝑍[𝑙] = 𝑑𝐴[𝑙] ∗ 𝑔[𝑙]′(𝑍[𝑙])
(7)𝑑𝑊[𝑙] = 1/𝑚 (𝑑𝑍[𝑙] ⋅ 𝐴[𝑙−1]𝑇)
(8)𝑑𝑏[𝑙] = 1/𝑚 (𝑛𝑝. 𝑠𝑢𝑚(𝑑𝑧[𝑙], 𝑎𝑥𝑖𝑠 = 1, 𝑘𝑒𝑒𝑝𝑑𝑖𝑚𝑠 = 𝑇𝑟𝑢𝑒))
(9)𝑑𝐴[𝑙−1] = 𝑊[𝑙]𝑇 ⋅  𝑑𝑍[𝑙]

  (10)𝑑𝑍[𝑙-1] = 𝑑𝐴[𝑙-1] ∗ 𝑔[𝑙-1]′(𝑍[𝑙-1])

  ........

三.核对矩阵的维数

𝑤的维度是(下一层的维数,前一层的维数),即𝑤[𝑙]: (𝑛[𝑙],𝑛[𝑙−1]);
𝑏的维度是(下一层的维数,1),即:𝑏[𝑙] : (𝑛[𝑙], 1);
𝑧[𝑙],𝑎[𝑙]: (𝑛[𝑙], 1);
𝑑𝑤[𝑙]和𝑤[𝑙]维度相同,𝑑𝑏[𝑙]和𝑏[𝑙]维度相同,且𝑤和𝑏向量化维度不变,但𝑧,𝑎以及𝑥的维
度会向量化后发生变化。

向量化后
𝑍[𝑙] 可 以 看 成 由 每 一 个 单 独 的 𝑍[𝑙] 叠 加 而 得 到 , 𝑍[𝑙] = (𝑧[𝑙][1],𝑧[𝑙][2],𝑧[𝑙][3], ...,𝑧[𝑙][𝑚]),𝑚为训练集大小,所以𝑍[𝑙]的维度不再是(𝑛[𝑙], 1),而是(𝑛[𝑙], 𝑚)。
𝐴[𝑙]:(𝑛[𝑙], 𝑚),𝐴[0] = 𝑋 = (𝑛[𝑙], 𝑚)

四.参数 VS 超参数

算法中的 learning rate 𝑎(学习率)、iterations(梯度下降法循环的数量)、𝐿(隐藏
层数目)、𝑛[𝑙](隐藏层单元数目)、choice of activation function(激活函数的选择)都需要
你来设置,这些数字实际上控制了最后的参数𝑊和𝑏的值,所以它们被称作超参数

如何寻找超参数的最优值:

当你开始开发新应用时,预先很难确切知道,究竟超参数的最优值应该是什么。所以通常,你必须尝试很多不同的值,并走这个循环,试试各种参数。试试看 5 个隐藏层,这个数目的隐藏单元,实现模型并观察是否成功,然后再迭代。应用深度学习领域,一个很大程度基于经验的过程,凭经验的过程通俗来说,就是试直到你找到合适的数值。

然后其次,甚至是你已经用了很久的模型,在你开发途中,很有可能学习率的最优数值或是其他超参数的最优值是会变的,所以即使你每天都在用当前最优的参数调试你的系统,你还是会发现,
最优值过一年就会变化,因为电脑的基础设施,CPU 或是 GPU 可能会变化很大。所以有一
条经验规律可能每几个月就会变。如果你所解决的问题需要很多年时间,只要经常试试不
同的超参数,勤于检验结果,看看有没有更好的超参数数值。

经验规律:经常试试不同的超参数,勤于检查结果,看看有没有更好的超参数取值,你将会得到设定超参数的直觉。

五.深度学习和大脑的关联性

哈哈哈哈,其实关联不大。

一个神经网络的逻辑单元可以看成是对一个生物神经元的过度简化,但迄今为止连神经科学家都很难解释究竟一个神经元能做什么,它可能是极其复杂的;它的一些功能可能真的类似 logistic 回归的运算,但单个神经元到底在做什么目前还没有人能够真正可以解释。深度学习的确是个很好的工具来学习各种很灵活很复杂的函数,学习到从𝑥到𝑦的映射,在监督学习中学到输入到输出的映射。

如图,这是一个 logistic 回归单元的 sigmoid 激活函数,这里是个大脑中的神经元,图中这个生物神经元,也是你大脑中的一个细胞,它能接受来自其他神经元的电信号,比如𝑥1, 𝑥2, 𝑥3,或可能来自于其他神经元𝑎1, 𝑎2, 𝑎3 。其中有一个简单的临界计算值,如果这个神经元突然激发了,它会让电脉冲沿着这条长长的轴突,或者说一条导线传到另一个神经元。所以这是一个过度简化的对比,把一个神经网络的逻辑单元和右边的生物神经元对比。一个小小的神经元其实却是极其复杂的,以至于我们无法在神经科学的角度描述清楚,它的一些功能,可能真的是类似 logistic 回归的运算,但单个神经元到底在做什么,目前还没有人能够真正解释,大脑中的神经元是怎么学习的,至今这仍是一个谜之过程。到底大脑是用类似于后向传播或是梯度下降的算法,或者人类大脑的学习过程用的是完全不同的原理。

so生命个体是很神奇的,我们一定要爱惜生命!

最后,只了解基础的知识是不够的,还要自己动手运用这些公式到实例中,加油(ง •_•)ง,去做课后的编程作业啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值