让我们首先考虑具有不常出现的特征的学习问题。
12.7.1。稀疏特征和学习率
想象一下,我们正在训练一个语言模型。为了获得良好的准确性,我们通常希望在继续训练时降低学习率,通常为O(t−12)或更慢。现在考虑在稀疏特征(即不常出现的特征)上进行模型训练。这在自然语言中很常见,例如,我们看到preconditioning一词的可能性要小于learning 。然而,它在计算广告和个性化协同过滤等其他领域也很常见。毕竟,有很多东西只是少数人感兴趣的。
与不常见特征关联的参数只有在这些特征出现时才会收到有意义的更新。如果学习率下降,我们可能会遇到这样一种情况,即常见特征的参数会很快收敛到它们的最优值,而对于不常见的特征,在确定它们的最优值之前,我们仍然没有足够频繁地观察它们。换句话说,学习率要么对于频繁出现的特征下降得太慢,要么对于不频繁出现的特征下降得太快。
解决此问题的一种可能的破解方法是计算我们看到特定功能的次数,并将其用作调整学习率的时钟。也就是说,而不是选择形式的学习率η=η0t+c我们可以使用 ηi=η0s(i,t)+c. 这里s(i,t) 计算特征的非零数i我们观察到时间t. 这实际上很容易实现,而且没有任何有意义的开销。然而,每当我们不太具有稀疏性而只是梯度通常非常小且很少大的数据时,它就会失败。毕竟,尚不清楚人们会在哪里划清是否符合观察到的特征的界限。
Duchi等人的 Adagrad 。( 2011 )通过更换相当粗糙的计数器来解决这个问题s(i,t)通过先前观察到的梯度的平方的集合。特别是,它使用 s(i,t+1)=s(i,t)+(∂if(x))2作为调整学习率的手段。这有两个好处:首先,我们不再需要决定梯度何时足够大。其次,它会随着梯度的大小自动缩放。通常对应于大梯度的坐标会显着缩小,而其他具有小梯度的坐标会得到更温和的处理。在实践中,这导致了计算广告和相关问题的非常有效的优化过程。但这隐藏了 Adagrad 固有的一些额外好处,这些好处最好在预处理的背景下理解。
12.7.2。预处理
凸优化问题有利于分析算法的特性。毕竟,对于大多数非凸问题来说,很难得出有意义的理论保证,但直觉和洞察力 往往会起作用。让我们看看最小化问题 f(x)=12x⊤Qx+c⊤x+b.
正如我们在12.6 节中看到的,可以根据其特征分解来重写这个问题 Q=U⊤ΛU得出一个大大简化的问题,其中每个坐标都可以单独求解:
这里我们使用了x¯=Ux因此c¯=Uc. 修改后的问题具有最小值 x¯=−Λ−1c¯ 和最小值 −12c¯⊤Λ−1c¯+b. 这更容易计算,因为Λ是包含特征值的对角矩阵Q.
如果我们扰乱cslightly 我们希望在最小化器中找到微小的变化f. 不幸的是,这种情况并非如此。虽然略有变化c导致同样轻微的变化c¯