adadelta
# Adadelta 🏷 sec_adadelta Adadelta 是 AdaGrad 的另一种变体( :numref: sec_adagrad ), 主要区别在于前者减少了学习率适应坐标的数量。 此外,广义上 Adadelta 被称为没有学习率,因为它使用变化量本身作为未来变化的校准。 Adadelta 算法是在 :cite: Zeiler.2012 中提出的。 # Adadelta 算法 简而言之,Adadelta 使用两个状态变量,st\mathbf{s}_tst 用于存储梯度二阶导数的泄露平均值,Δxt\Delta\mathbf{x}_tΔxt...
more...rnn
# 循环神经网络 🏷 sec_rnn 在 :numref: sec_language_model 中, 我们介绍了nnn 元语法模型, 其中单词xtx_txt 在时间步ttt 的条件概率仅取决于前面n−1n-1n−1 个单词。 对于时间步t−(n−1)t-(n-1)t−(n−1) 之前的单词, 如果我们想将其可能产生的影响合并到xtx_txt 上, 需要增加nnn,然而模型参数的数量也会随之呈指数增长, 因为词表V\mathcal{V}V 需要存储∣V∣n|\mathcal{V}|^n∣V∣n 个数字, 因此与其将P(xt∣xt−1,…,xt−n+1)P(x_t \mid...
more...convexity
# 凸性 🏷 sec_convexity 凸性(convexity)在优化算法的设计中起到至关重要的作用, 这主要是由于在这种情况下对算法进行分析和测试要容易。 换言之,如果算法在凸性条件设定下的效果很差, 那通常我们很难在其他条件下看到好的结果。 此外,即使深度学习中的优化问题通常是非凸的, 它们也经常在局部极小值附近表现出一些凸性。 这可能会产生一些像 :cite: Izmailov.Podoprikhin.Garipov.ea.2018 这样比较有意思的新优化变体。 %matplotlib inlineimport numpy as npimport torchfrom...
more...lr-scheduler
# 学习率调度器 🏷 sec_scheduler 到目前为止,我们主要关注如何更新权重向量的优化算法,而不是它们的更新速率。 然而,调整学习率通常与实际算法同样重要,有如下几方面需要考虑: 首先,学习率的大小很重要。如果它太大,优化就会发散;如果它太小,训练就会需要过长时间,或者我们最终只能得到次优的结果。我们之前看到问题的条件数很重要(有关详细信息,请参见 :numref: sec_momentum )。直观地说,这是最不敏感与最敏感方向的变化量的比率。 其次,衰减速率同样很重要。如果学习率持续过高,我们可能最终会在最小值附近弹跳,从而无法达到最优解。 :numref:...
more...minibatch-sgd
# 小批量随机梯度下降 🏷 sec_minibatch_sgd 到目前为止,我们在基于梯度的学习方法中遇到了两个极端情况: :numref: sec_gd 中使用完整数据集来计算梯度并更新参数, :numref: sec_sgd 中一次处理一个训练样本来取得进展。 二者各有利弊:每当数据非常相似时,梯度下降并不是非常 “数据高效”。 而由于 CPU 和 GPU 无法充分利用向量化,随机梯度下降并不特别 “计算高效”。 这暗示了两者之间可能有折中方案,这便涉及到小批量随机梯度下降(minibatch gradient descent)。 #...
more...