Matlab L1正则化系统的极小化,收敛于非最小位置?

Matlab L1正则化系统的极小化,收敛于非最小位置?,matlab,optimization,machine-learning,minimization,convex-optimization,Matlab,Optimization,Machine Learning,Minimization,Convex Optimization,这是我第一次发布stackoverflow,如果这不是正确的区域,我道歉。我正在研究最小化L1正则化系统 这个周末是我第一次进入优化领域,我有一个基本的线性系统Y=X*B,X是n×p矩阵,B是模型系数的p×1向量,Y是n×1输出向量 我试图找到模型系数,我已经实现了梯度下降和坐标下降算法来最小化L1正则化系统。为了找到我的步长,我使用了回溯算法,我通过查看梯度的范数-2来终止算法,如果它“足够接近”为零(现在我使用0.001) 我试图最小化的函数是(0.5)*(范数((Y-X*B),2)^2)+

这是我第一次发布stackoverflow,如果这不是正确的区域,我道歉。我正在研究最小化L1正则化系统

这个周末是我第一次进入优化领域,我有一个基本的线性系统Y=X*B,X是n×p矩阵,B是模型系数的p×1向量,Y是n×1输出向量

我试图找到模型系数,我已经实现了梯度下降和坐标下降算法来最小化L1正则化系统。为了找到我的步长,我使用了回溯算法,我通过查看梯度的范数-2来终止算法,如果它“足够接近”为零(现在我使用0.001)

我试图最小化的函数是(0.5)*(范数((Y-X*B),2)^2)+λ*范数(B,1)。(注:范数(Y,2)我指的是向量Y的范数-2值)我的X矩阵是150×5,不是稀疏的

如果我将正则化参数lambda设置为零,我应该收敛于最小二乘解,我可以验证我的两种算法都可以很好地很快地完成这一点

如果我开始增加lambda,我的模型系数都趋向于零,这就是我所期望的,我的算法永远不会终止,因为梯度的范数-2总是正数。例如,一个1000的lambda将给我在10^(-19)范围内的系数,但我的梯度的norm2是~1.5,这是经过几千次迭代后的结果,当我的梯度值都收敛到0到1范围内的某个值时,我的步长变得非常小(10^(-37)范围)。如果我让算法运行更长的时间,情况并没有改善,它似乎不知何故被卡住了

我的梯度算法和坐标下降算法都收敛于同一点,并为终止条件提供相同的norm2(梯度)数。它们在lambda为0时也能很好地工作。如果我使用一个非常小的lambda(比如说0.001),我会收敛,一个0.1的lambda看起来会收敛,如果我运行它一两个小时,一个更大的lambda,收敛速度是如此之小,以至于毫无用处

我有几个问题,我想可能与这个问题有关

在计算梯度时,我使用有限差分法(f(x+h)-f(x-h))/(2h)),h为10^(-5)。对h的这个值有什么想法吗

另一个想法是,在这些非常微小的步骤中,它在一个几乎与最小值正交的方向上来回移动,使得收敛速度如此之慢,以至于毫无用处


我的最后一个想法是,也许我应该使用一种不同的终止方法,也许看看收敛速度,如果收敛速度非常慢,那么终止。这是一种常见的终止方法吗?

1-范数是不可微的。这将导致许多事情出现根本性问题,尤其是您选择的终止测试;梯度将在你的最小值附近急剧变化,并且不存在于一组度量值零上

您真正想要的终止测试将沿着“在测试中有一个非常短的向量”的路线进行

在| | Ax-b | | | | | | | | u2^2+lambda | | x | | | u1的次梯度中,很容易找到最短的向量。明智地选择公差
eps
,并执行以下步骤:

  • 计算
    v=grad(| | Ax-b | | | u 2^2)。


  • 如果
    x[i]<-eps
    ,则从
    v[i]
    中减去λ。如果
    x[i]>eps
    ,则将lambda添加到
    v[i]
    。如果
    -eps,我并不是说这是StackOverflow的主题,但它可能更适合@tmyklebu:也许更适合程序员。stackexchange.com。