ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

坐标下降法

2022-03-30 21:31:18  阅读:160  来源: 互联网

标签:mathbb sum cdots 更新 ik 坐标 下降


坐标下降法

本文讲解如何使用坐标下降法求解最小二乘问题。

原理

假设 \(A\in \mathbb{R}^{N\times K}\),\(b\in \mathbb{R}^N\),求 \(x = [x_1, \cdots, x_K]^T\in \mathbb{R}^K\),使得

\[\lVert b - Ax\rVert_2 \]

极小化。

坐标下降法的想法是一次只更新一个分量,假设更新第 \(k\) 个分量 \(x_k\),即要求一个 \(s\),

\[x_k \leftarrow x_k + s \]

用以更新 \(x_k\)。怎么选取这个 \(s\) 呢?当然是选可以使损失函数取得最小值的那个 \(s\)。

记更新后的损失函数为

\[g^k(s) = \lVert b - A[x_1, \cdots, x_k+s, \cdots, x_K]^T\rVert_2^2 = \sum_{i=1}^N \bigg( e_i - sA_{ik} \bigg)^2 \]

其中 \(e=b-Ax\in \mathbb{R}^N\)。由于 \(g^k\) 是二次函数,Taylor 展开后与其自身相等,即有

\[g^k(s) = g^k(0) + (g^k)'(0) s+ \frac12 (g^k)''(0)s^2, \]

其极小点为

\[s^{*} = -\frac{(g^k)'(0)}{(g^k)''(0)}. \]

因此可以更新 \(x_k\),

\[x_k \leftarrow x_k + s^{*}. \]

另外,简单计算可知一阶导数和二阶导数在 \(0\) 处的取值为

\[\left\{ \begin{aligned} (g^k)'(0) &= -2\sum_{i=1}^{N}e_iA_{ik} \\ (g^k)''(0) &= 2 \sum_{i=1}^{N}A_{ik}^2 \end{aligned} \right. \]

伪代码

上面讲了坐标下降法的原理,写成伪代码如下:

输入:系数矩阵 \(A\in \mathbb{R}^{N\times K}\),标签向量 \(b\in \mathbb{R}^N\)
过程
初始化 \(x\in \mathbb{R}^K\);
计算初始误差:\(e = b - Ax\);
提前计算每个分量处的二阶导数:\(h (k) = 2\sum_{i=1}^{N}A_{ik}^2\);
while 达到收敛条件:
选取 \(k \in \{1, ..., K\}\) :
计算一阶导数:\(g = -2\sum_{i=1}^Ne_i A_{ik}\);
计算极小点:\(s^{*} = \frac{g}{h (k)}\);
坐标更新:\(x_k = x_k + s^{*}\);
更新误差:\(e_i = e_i - s^{*} A_{ik}, \quad i=1, \cdots, N\);
输出:\(x\in \mathbb{R}^K\)。

分析

  • 复杂度:坐标下降算法单轮迭代的复杂度为 \(O(KN)\),设一共迭代了 \(T\) 次,则总复杂度为 \(O(TKN)\)。
  • 上述实现中,每轮迭代时坐标的选取没有确定,最简单的方式是按顺序循环更新,也可以随机选取。另外,也可以采用贪心的策略选取(有时间写一下)。
  • 对于非线性的问题,也可类似处理。

标签:mathbb,sum,cdots,更新,ik,坐标,下降
来源: https://www.cnblogs.com/23oclock/p/16079201.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有