终于可以直接输入公式了,希望sf越来越好。目前对公式的渲染速度有点慢,而且公式渲染也有问题
(Block) Coordinate Descent Alorithm
所谓的(B)CD,是指每一步迭代的时候,不是对所有的参数进行优化,而是每次只选一个参数进行迭代优化。通过这种方式,可能每一步都会有一个容易计算的解析解,可能大大降低每一步迭代的计算量和复杂度,可能让算法变得可并行。
对l1正则的CD
$$ \min_{w\in\mathbb{R}} \frac{1}{2}(w-w_0)^2+\lambda |w_0| $$
根据前面的结论,最优解为
$$ w^* = Prox_{\lambda|\cdot|}(w_0) := (1-\frac{\lambda}{|w_0|})_+ w_0 $$
Lasso Case
$$ \min_{w_j\in\mathbb{R}} ||Xw-y||2^2 +\lambda |w| $$
如果只对第j个w优化,上述问题编程
$$ ||X_j w_j + X{\hat{j}}w_{\hat{j}}||2^2 + \lambda |w_j| $$
前面一项为关于wj的二次函数,归约为l1正则项的CD问题
$$ w_j^*=Prox{\lambda|\cdot|}(w_j^t – X_j^T(Xw^t-y)/X_j^T X_j $$
有一定的计算代价
Smooth loss
这里强调原函数是smooth的,就意味着对某些问题会不适用。
每一步转化成一维变量的优化问题后,仍可使用前面提到的proximal方法
Bloack CD for l1/l2正则
一般的,BCD解决如下的子问题
$$\min_{w_g\in\mathbb{R}^{|g|}} \nabla_g f(w^t)^T(w_g – w_g^t) + \frac{1}{2}(w_g-w_g^t)^TH_{gg}(w_g-w_g^T) +\lambda||w_g||_2 $$
如果H是单位阵的倍数,则w_g有解析解。如果不是,则有两种近似办法,一个是用||w||_2^2代替||w||_2,选择新的\lambda,可以找到一个\lambda使得两个问题等解;另一种方法是用H’=hI代替H,其中h是原H的最大特征值,这是一种近似方法。
一般的,在确定w_g^之后,还会用line search的方法找到下一步结果
$$ d=w_g^-w_g^t,\ w_g^{t+1} = w_g^t + \alpha d $$
Reweighted-l2 Algorithm
书上篇幅太短,没看懂
Working-Seg 方法
利用问题的结构,维护一个非零参数集。开始时设置参数集为空,之后不断调整非0参数集(可增可减)。书中给了一个解Lasso问题的LARS算法,作为working set方法的一个例子。但实际上可能该方法需要深入问题本身的结构,通用性不好说。
LARS – Homotopy
$$ min_{w\in\mathbb{R}}\frac{1}{2}||y-Xw||2^2 +\lambda||w||_1 $$
根据前文的结论,在最优点处,有
$$ |X_j^T(y-Xw)| \leq \lambda\ if\ w_j = 0 $$
$$ |X_j^T(y-Xw)| = \lambda\ if\ w_j \neq 0 $$
定义
$$ J := {j;|X_j^T(y-Xw^*)|=\lambda}, \epsilon := sgn(X^T(y-Xw^*)) $$
$$ 对j\notin J,|X_j^T(y-Xw^*)|<\lambda, 根据最优条件,有w_j = 0 $$
$$ 对j\in J, X_j^T(y-Xw)= \lambda \epsilon_j $$
$$ X_j^T y-\lambda\epsilon_j = X_j^T Xw = x_j^T X_J w_J $$
$$ 所以w_J = (X_J^TX_J)^{-1}(X_J^Ty-\lambda\epsilon_J),这里假设逆存在 $$
结论:
$$ w{J^c}=0, w_J = ((X_J^TX_J)^{-1}(X_J^Ty-\lambda\epsilon_J)) $$
算法:
1、设置w为一个较大的值,比如max(Xy)
2、缩小lambda, 直到某个wj从非0变成0,将wj从J中除去(根据J中w的计算公式);或者某个j触达集合J的条件,将j加入集合J
书中对X_j^T X_j不可逆时,可以加上一个比较小的二次正则项,r||w||_2^2,使得可逆总是存在。