一、Deeplearning-assignment
到目前为止,在之前的练习中我们一直使用梯度下降来更新参数并最小化成本函数。在本次作业中,将学习更先进的优化方法,它在加快学习速度的同时,甚至可以获得更好的最终值。一个好的优化算法可以让你几个小时内就获得一个结果,而不是等待几天。
1.Gradient Descent
在机器学习中,有一种优化方法叫梯度下降,当每次迭代使用m个样本时,它也叫批量梯度下降。
完成梯度下降的更新规则:
2.Mini-Batch Gradient descent
现在让我们学习如何从训练集(X, Y)中构建小批量数据集。
Shuffling:如下所示,将训练集(X, Y)的数据进行随机混洗. X 和 Y 的每一列代表一个训练样本. 请注意随机混洗是在X和Y之间同步完成的,这样才能保证X的第i个标签和Y的第i个标签相匹配。随机混洗是为了确保样本被随机的划分到不同的小批量集中。
Partitioning:将混洗的数据(X, Y)按固定大小(mini_batch_size这里是64)进行分区。请注意,训练样本的总数并不一定能被64整除。划分的最后一个小批量可能小于64,就像下面这样:
实现 random_mini_batches,
随机混洗的代码我们已经实现了。为了进行分区,我们提供了以下代码用来索引某个特定的小批量集,比如第一个和第二个小批量集:
first_mini_batch_X = shuffled_X[:, 0 : mini_batch_size]
second_mini_batch_X = shuffled_X[:, mini_batch_size : 2 * mini_batch_size]
...
你应该记住的是:
- Shuffling and Partitioning 是构建小批量所需的两个步骤。
- mini-batch的大小通常选择的是2的幂次方, 比如 16, 32, 64, 128。
3.Momentum
由于小批量梯度下降是用整体样本的一个子集进行的参数更新,所以更新的方向会发生一定变化,小批量梯度下降会在不断摆动中趋于收敛。使用动量优化法可以减少这些振荡。
动量法会把过去的梯度变化考虑进来用来平滑更新。我们把以前梯度变化的“方向”存储在变量 vv 中。形式上,你可以把它看成前面步骤中梯度的指数加权平均值。你可以想象有一个球从上坡上滚下来,vv 就是它的“速度”,速度(和动量)的构建取决于山坡的坡度/方向。
红色箭头表示采用动量优化法的小批量梯度下降每一步进行的方向. 蓝色的点表示的是每步的梯度(相对于当前小批量)方向。
momentum更新的规则是:for l = 1,...L:
β的常用值范围是从0.8到0.999。如果你不想调整它,β=0.9通常是一个合理的默认值。
4.Adam
Adam是训练神经网络最有效的优化算法之一。它结合了RMSProp(讲座中介绍)和Momentum。
Adam的更新规则是:for l = 1,...L:
5.Model with different optimization algorithms
让我们使用下面的"moons"数据集来测试不同的优化方法。
现在将用3种优化方法依次运行这个3层的神经网络(详见代码中的model函数)。
(1)Mini-batch Gradient desce