深度学习吴恩达课程系列(5)

第三周

3.1调试处理

在这里插入图片描述
最为广泛的学习应用是𝑎,学习速率是需要调试的最重要的超参数。
除了𝑎,还有一些参数需要调试,例如 Momentum 参数𝛽,
重要性排第三位的是其他因素,层数有时会产生很大的影响,学习率衰减也是如此。

3.2为超参数选择合适的范围

如果你画一条从 0.0001 到 1 的数轴,沿其随机均匀取值,那 90%的数值将会落在0.1 到 1 之间,结果就是,在 0.1 到 1 之间,应用了 90%的资源,而在 0.0001 到 0.1 之间,只有 10%的搜索资源,这看上去不太对。

所以在 Python 中,你可以这样做,使 r=-4*np.random.rand(),然后𝑎随机取值,𝑎 = 10𝑟,所以,第一行可以得出𝑟 ∈ [4,0],那么𝑎 ∈ [10−4, 100],所以最左边的数字是10−4,最右边是100

所以总结一下,在对数坐标下取值,取最小值的对数就得到𝑎的值,取最大值的对数就得到𝑏值,所以现在你在对数轴上的10𝑎到10𝑏区间取值,在𝑎,𝑏间随意均匀的选取𝑟值,将超参数设置为10𝑟,这就是在对数轴上取值的过程。
在这里插入图片描述

3.3超参数调试实践

在这里插入图片描述
一种是你照看一个模型,通常是有庞大的数据组,但没有许多计算资源或足够的 CPU 和GPU 的前提下,基本而言,你只可以一次负担起试验一个模型或一小批模型,在这种情况下,即使当它在试验时,你也可以逐渐改良。
在这里插入图片描述
另一种方法则是同时试验多种模型,你设置了一些超参数,尽管让它自己运行,或者是一天甚至多天,然后你会获得像这样的学习曲线。

所以这两种方式的选择,是由你拥有的计算资源决定的,如果你拥有足够的计算机去平行试验许多模型,那绝对采用鱼子酱方式,尝试许多不同的超参数,看效果怎么样。但在一些应用领域,比如在线广告设置和计算机视觉应用领域,那里的数据太多了,你需要试验大量的模型,所以同时试验大量的模型是很困难的,会像对婴儿一样照看一个模型,调试参数,试着让它工作运转。

3.4归一化网络的激活函数

所以问题来了,对任何一个隐藏层而言,我们能否归一化𝑎值,在此例中,比如说𝑎[2]的值,但可以是任何隐藏层的,以更快的速度训练𝑤[3],𝑏[3],因为𝑎[2]是下一层的输值
在这里插入图片描述
𝑧̃(𝑖) = 𝛾𝑧norm(𝑖) + 𝛽,这里𝛾和𝛽是你模型的学习参数
在这里插入图片描述
均值和方差由两参数控制,即𝛾和𝛽,学习算法可以设置为任何值.

均值和方差可以是 0 和 1,也可以是其它值,它是由𝛾和𝛽两参数控制的。

3.5将Batch Norm拟合进神经网络

在这里插入图片描述
Batch 归一化是发生在计算𝑧和𝑎之间的。在这里插入图片描述
所以现在,这是你算法的新参数,接下来你可以使用想用的任何一种优化算法,比如使用梯度下降法来执行它。

我已经解释过 Batch 归一化是怎么操作的,计算均值和方差,减去均值,再除以方差。因此,探究框架,可写成一行代码,比如说,在 TensorFlow框架中,你可以用这个函数(tf.nn.batch_normalization)来实现 Batch 归一化。

实践中,Batch 归一化通常和训练集的 mini-batch 一起使用。用第一个 mini-batch(𝑋[1]),然后计算𝑧[1],应用参数𝑤[1]和𝑏[1],继续第二个 mini-batch(𝑋[2]),接着Batch 归一化会减去均值,除以标准差,由𝛽[1]和𝛾[1]重新缩放,这样就得到了𝑧̃[1],再应用激活函数得到𝑎[1]。然后用𝑤[2]和𝑏[2]计算𝑧[2],等等,所以你做的这一切都是为了在第一个 mini-batch(𝑋[1])上进行一步梯度下降法。

你会在第二个 mini-batch(𝑋[2])上计算𝑧[1],然后用 Batch 归一化来计算𝑧̃[1]

然后在第三个 mini-batch(𝑋[3])上同样这样做,继续训练。

所以,如果你在使用 Batch 归一化,其实你可以消除这个参数(𝑏[l]),或者你也可以,暂时把它设置为 0,那么,参数变成𝑧[l] = 𝑤[l]𝑎[l-1],然后你计算归一化的𝑧[l],𝑧̃[l] = 𝛾[l]𝑧[l] + 𝛽[l],你最后会用参数𝛽[l],以便决定𝑧̃[l]

所以总结一下,因为 Batch 归一化超过了此层𝑧[l]的均值,𝑏[l]这个参数没有意义,所以,你必须去掉它,由𝛽[l]代替,这是个控制参数,会影响转移或偏置条件。最后,请记住𝑧[l]的维数,因为在这个例子中,维数会是(𝑛[l], 1),𝑏[l]的尺寸为(𝑛[l], 1),那𝛽[l]和𝛾[l]的维度也是(𝑛[l], 1)

你运行𝑡 = 1到 batch 数量的 for 循环,你会在 mini-batch 𝑋[t]上应用正向 prop,每个隐藏层都应用正向 prop,用 Batch 归一化代替𝑧[l]为𝑧̃[l]。后,你更新这些参数:𝑤[l] = 𝑤[l] − αd𝑤[l],和以前一样,𝛽[l] = 𝛽[l]
𝛼𝑑𝛽[l],对于𝛾也是如此𝛾[l] = 𝛾[l] − 𝛼𝑑𝛾[l]

3.6Batch Norm

通过归一化所有的输入特征值𝑥,以获得类似范围的值,可以加速学习。

Batch 归一化有效的第二个原因是,它可以使权重比你的网络更滞后或更深层。

如果你已经学习了𝑥到𝑦 的映射,如果𝑥的分布改变了,那么你可能需要重新训练你的学习算法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Batch 归一化还有一个作用,它有轻微的正则化效果,在 mini-batch 上计算的均值和方差,而不是在整个数据集上,均值和方差有一些小的噪声,为均值和方差有一点小噪音,因为它只是由一小部分数据估计得出的。缩放过程从𝑧[𝑙]到𝑧̃[𝑙],过程也有一些噪音,因为它是用有些噪音的均值和方差计算得出的。

因为添加的噪音很微小,所以并不是巨大的正则化效果。也许另一个轻微非直观的效果是,如果你应用了较大的 mini-batch,对,比如说,你用了 512 而不是 64,通过应用较大的 min-batch,你减少了噪音,因此减少了正则化效果,这是 dropout 的一个奇怪的性质,就是应用较大的 mini-batch 可以减少正则化效果。

但是不要把 Batch 归一化当作正则化,把它当作将你归一化隐藏单元激活值并加速学习的方式,我认为正则化几乎是一个意想不到的副作用。
Batch 归一化一次只能处理一个 mini-batch 数据,它在 mini-batch 上计算均值和方差。所以测试时,你试图做出预测,试着评估神经网络,你也许没有mini-batch 的例子,你也许一次只能进行一个简单的例子,所以测试时,你需要做一些不同的东西以确保你的预测有意义。

3.7测试时的Batch Norm

Batch 归一化将你的数据以 mini-batch 的形式逐一处理,但在测试时,你可能需要对每个样本逐一处理
在这里插入图片描述
但是在测试时,你可能不能将一个 mini-batch 中的 6428 或 2056 个样本同时处理,因此你需要用其它方式来得到𝜇 和𝜎2,而且如果你只有一个样本,一个样本的均值和方差没有意义。

总结一下就是,在训练时,𝜇和𝜎2是在整个 mini-batch 上计算出来的包含了像是 64 或28 或其它一定数量的样本,但在测试时,你可能需要逐一处理样本,方法是根据你的训练集估算𝜇和𝜎2,估算的方式有很多种,我们通常运用指数加权平均来追踪在训练过程中你看到的𝜇和𝜎2的值。还可以用指数加权平均,有时也叫做流动平均来粗略估算𝜇和𝜎2,然后在测试中使用𝜇和𝜎2的值来进行你所需要的隐藏单元𝑧值的调整。

3.8Softmax回归

或者说是多种分类中的一个,不只是识别两个分类,我们来一起看一下。

我会用大写的𝐶来表示你的输入会被分入的类别总个数,当有 4 个分类时,指示类别的数字,就是从 0 到𝐶 − 1,换句话说就是 0、1、2、3。

因此这里的𝑦^将是一个4 × 1维向量,因为它必须输出四个数字,给你这四种概率,因为它们加起来应该等于 1,输出中的四个数字加起来应该等于 1。
在这里插入图片描述
在这里插入图片描述
Softmax 激活函数的特殊之处在于,因为需要将所有可能的输出归一化,就需要输入一个向量,最后输出一个向量。

3.9训练一个Softmax分类器

Softmax 回归将 logistic 回归推广到了两种分类以上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.11TensorFlow

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这是运行了梯度下降的 1000 次迭代,最后𝑤变成了 4.99999,记不记得我们说(𝑤 − 5)2最小化,因此𝑤的最优值是 5,这个结果已经很接近了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当你运行训练迭代,用 feed_dict 来让 x=coefficients。如果你在做 mini-batch 梯度下降,在每次迭代时,你需要插入不同的 mini-batch,那么每次迭代,你就用 feed_dict 来喂入训练集的不同子集,把不同的 mini-batch 喂入损失函数需要数据的地方。

但这个 with 结构也会在很多 TensorFlow 程序中用到,它的意思基本上和左边的相同,但是 Python 中的 with 命令更方便清理,以防在执行这个内循环时出现错误或例外。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

身影王座

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值