动量法

https://zh.d2l.ai/chapter_optimization/momentum.html

11.6.7 公式是不是错了,按此计算结果和原h(x)不对应。按11.6.7计算第二项是 - xTc,而11.6.6的第二项是+xTc

1 Like

正如人们所期望的,由于其功效,动量是深度学习及其后优化中一个深入研究的主题。 例如,请参阅文章,这个链接标签是不是写错,需要去掉后面的站点信息才能跳转。

2 Likes

我不知道哪个对,但是书中说的最优解和公式(11.6.7)确实是矛盾的 :joy:

我试了一下,确实是这样的。。。。。。。。。

11.6.6以及x_和最小值都是对的,11.6.7是错的,它展开后跟原式第二项符号相反,结合下文:“梯度由∂_xf(x)=Q(x-Q_-1c)给出。也就是说,它是由和最小化器之间的距离乘以Q所得出的”这句话可进一步确定,距离应该是x-x_=x-(-Q_-1c)=x+Q_-1c,所以这里梯度也是错的,应该是∂_xf(x)=Q(x+Q_-1c)。下文的z也一样,但是这个错误不影响11.6.8及之后的逻辑

在原notebook中,错把后括号写成了中文后括号导致的

11.6.1.3中:


是不是把$\mathbf{v_t}$写成了$\mathbf{g_t}$……

在后续11.8节中提到:


这里的泄露平均值第二项存在系数$(1-\gamma)$。而根据“平均值”一词的含义,也理应如此。但是在本节中却没有这个系数。本节提供的参考文献是一整本,没有具体指明页数,我没有去具体查找。谷歌直接搜索leaky average也无法得到相关结果。

我并不是说这里一定存在错误,而是我无法理解为什么要叫“泄露平均值”。在第二项权重不取(1-\gamma)的情况下,第一项展开后的权重和并不为1(甚至大于1)。

上面推导部分有误,重新推导一下

$$h(\mathbf{x}) = \frac{1}{2} \mathbf{x}^\top \mathbf{Q} \mathbf{x} + \mathbf{x}^\top \mathbf{c} + b.$$

取最小值时$h’(x^)=0$,因此$Qx^+c=0$,此时$x^=-Q^{-1}c$,也可以求得此时函数值为$h(x^)=b-\frac{1}{2} \mathbf{c}^\top \mathbf{Q}^{-1} \mathbf{c}$。这一步书上是正确的。

再对原函数进行配方使其变为$m(x+n)^2+k$形式。

观察原函数二次项系数,不难发现$m=\frac{Q}{2}$,也可以根据原函数一次项系数得到$n=Q^{-1}c$,那么$k=b-\frac{c^2}{2Q}$
(这里为了方便,暂时不写矩阵乘法)。这里的$n$就是书中出错的地方。

这样就可以把原函数化为:
$$h(x)=\frac{Q}{2}(x+Q^{-1}c)^2+b-\frac{c^2}{2Q}=\frac{Q}{2}(x-x^)^2+h(x^)$$

向量矩阵情况下即为:
$$h(\mathbf{x}) = \frac{1}{2} (\mathbf{x} - \mathbf{x^})^\top \mathbf{Q} (\mathbf{x} - \mathbf{x^}) + h(\mathbf{x^*}).$$

梯度由$\partial_{\mathbf{x}} f(\mathbf{x})=\mathbf{Q} (\mathbf{x}+\mathbf{Q}^{-1}\mathbf{c})=\mathbf{Q}(\mathbf{x}-\mathbf{x^})$给出。
也就是说,它是由$\mathbf{x}$和最小化器之间的距离乘以$\mathbf{Q}$所得出的。
因此,动量法还是$\mathbf{Q} (\mathbf{x}_t - \mathbf{x^
})$的线性组合。

作为正定对称矩阵,可以分解$\mathbf{Q} = \mathbf{O}^\top \boldsymbol{\Lambda} \mathbf{O}$,带入上式:
$$h(\mathbf{x}) = \frac{1}{2} (\mathbf{x} - \mathbf{x^})^\top \mathbf{O}^\top \boldsymbol{\Lambda} \mathbf{O} (\mathbf{x} - \mathbf{x^}) + h(\mathbf{x^*}).$$

令$\mathbf{z} := \mathbf{O} (\mathbf{x} - \mathbf{x^}), b’=h(x^)=b-\frac{1}{2} \mathbf{c}^\top \mathbf{Q}^{-1} \mathbf{c}$,那么
$$g(\mathbf{z}) = \frac{1}{2} \mathbf{z}^\top \boldsymbol{\Lambda} \mathbf{z} + b’.$$

后面就一样了,也比较简单,z减去z的梯度可以得到$(\mathbf{I} - \boldsymbol{\Lambda}) \mathbf{z}_{t-1}$。
单位矩阵减去正特征值对角矩阵的结果仍是对角矩阵,z向量和此结果矩阵相乘,是逐坐标运算的,优化也是逐坐标进行的,特征不会互相混合。