优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享)

这篇具有很好参考价值的文章主要介绍了优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享),算法

原文信息(包括题目、发表期刊、原文链接等):First Order Methods Beyond Convexity and Lipschitz Gradient Continuity with Applications to Quadratic Inverse Problems
原文作者:Jérôme Bolte, Shoham Sabach, Marc Teboulle, and Yakov Vaisbourd
代码分享者:李朋

1 问题描述

考虑下面的二次规划反问题
min ⁡ { Ψ ( x ) : = g ( x ) + θ f ( x ) : x ∈ R d } \min\Big\{ \Psi(x):=g(x) + \theta f(x): x\in \mathbb{R}^{d}\Big\} min{Ψ(x):=g(x)+θf(x):xRd}

其中 g ( x ) = 1 4 ∑ i = 1 m ( x T A i x − b i ) 2 , f ( x ) = ∥ x ∥ 1 g(x) = \frac{1}{4}\sum_{i=1}^{m}(x^{T}A_{i}x - b_{i})^2, f(x) = \|x\|_{1} g(x)=41i=1m(xTAixbi)2,f(x)=x1,而且 A i A_{i} Ai是对称矩阵。

2 求解方法

在给出求解方法之前,我们首先定义
p λ ( x ) = λ ∇ g ( x ) − ∇ h ( x ) p_{\lambda}(x)=\lambda \nabla g(x)-\nabla h(x) pλ(x)=λg(x)h(x)
和软阈值算子
S τ ( y ) = max ⁡ { ∣ y ∣ − τ , 0 } sgn ( y ) = max ⁡ ( y − τ , 0 ) − max ⁡ ( − y − τ , 0 ) ( 5.1 ) S_{\tau}(y)=\max\{|y|-\tau, 0\}\text{sgn}(y)=\max(y-\tau,0) - \max(-y-\tau,0) \qquad (5.1) Sτ(y)=max{yτ,0}sgn(y)=max(yτ,0)max(yτ,0)(5.1)
为保证函数 g ( x ) , f ( x ) g(x),f(x) g(x),f(x)L-smad,我们令
h ( x ) = 1 4 ∥ x ∥ 2 4 + 1 2 ∥ x ∥ 2 2 , h(x) = \frac{1}{4} \| x \|_2^4 + \frac{1}{2} \| x \|_2^2, h(x)=41x24+21x22,
具体见原文引理5.1。

本文的求解方法主要根据原文的命题5.1,如下所示

命题5.1 ( l 1 l_{1} l1范数正则化的Bregman近似公式) 令 f = ∥ ⋅ ∥ 1 f=\|\cdot\|_{1} f=1且对 x ∈ R d x\in \mathbb{R}^{d} xRd,令 v ( x ) : = S λ θ ( p λ ( x ) ) v(x):=S_{\lambda \theta}(p_{\lambda}(x)) v(x):=Sλθ(pλ(x))。那么,可得 x + = T λ ( x ) x^{+}=T_{\lambda}(x) x+=Tλ(x)
x + = − t ∗ v ( x ) = t ∗ S λ θ ( ∇ h ( x ) − λ ∇ g ( x ) ) ( 5.2 ) x^{+}=-t^{*}v(x)=t^{*}S_{\lambda\theta}(\nabla h(x)-\lambda\nabla g(x)) \qquad (5.2) x+=tv(x)=tSλθ(h(x)λg(x))(5.2)

是显示公式,其中 t ∗ t^{*} t是下面方程的唯一正实根,
t 3 ∥ v ( x ) ∥ 2 2 + t − 1 = 0. ( 5.3 ) t^{3}\|v(x)\|_{2}^{2}+t-1=0. \qquad (5.3) t3v(x)22+t1=0.(5.3)

3 代码实现

在本次仿真中,我们采用Julia语言编写一个求解二次规划反问题的算法 (5-2)。

(1) 用using 添加一些要用到的库。

using Roots
using LinearAlgebra
using SparseArrays
using Distributions
using Random
using Printf
using Plots
using Polynomials

(2) 根据公式 (5-1) 定义软阈值函数

function compute_softThreshold(y,τ)
    p = max.(y.-τ,0) - max.(-y.-τ,0);
    return p;
end

(3)根据公式(5-3) 计算 t ∗ t^{*} t

function find_positiveRoot(S)
    t = variable();
    v = sum(S.^2);
    
    f = t^3*v + t -1;
    t_opt = find_zero(f,(0,1));
    
    return t_opt;
end

(4) 计算 g ( x ) = 1 4 ∑ i = 1 m ( x T A i x − b i ) 2 g(x) = \frac{1}{4}\sum_{i=1}^{m}(x^{T}A_{i}x - b_{i})^2 g(x)=41i=1m(xTAixbi)2的导数

function derivative_g(A,b,x,m,n)
    # compute the derivative of g(x)
    der = zeros(n,1);
    for k in range(1,m)
        der = der + (transpose(x)*A[k]*x.-b[k]).*(A[k]*x);
    end
    return der;
end

(5) 计算 h ( x ) = 1 4 ∥ x ∥ 2 4 + 1 2 ∥ x ∥ 2 2 h(x)=\frac{1}{4}\|x\|_{2}^{4}+\frac{1}{2}\|x\|_{2}^{2} h(x)=41x24+21x22的导数

function derivative_h(x)
    # compute the derivative of h(x)
    der = (sum(x.^2) + 1).*x;
    return der;
end

(6) 全局参数

# Global Parameters
MAXITE = 500;
m =3;
n = 2;

(7) 生成问题数据

θ = 0.5;

Random.seed!(123);

A = Array{Matrix}(undef,m);
b = Array{Float64}(undef,m); 


d = Normal(2,2);
for k in range(1,m)
    A[k] = rand(d,n,n)
    A[k] = (transpose(A[k])+A[k])./2
end

for k in range(1,m)
    b[k] = rand(d,1)[1];
end

(8) 根据引理5.1的结果可知 L ≥ ∑ i = 1 m 3 ∥ A i ∥ 2 + ∥ A i ∥ ∣ b i ∣ L\geq \sum_{i=1}^{m}3\|A_{i}\|^{2}+\|A_{i}\||b_{i}| Li=1m3∥Ai2+Ai∥∣bi。另外,根据定理 4.1 成立的条件 0 < λ L < 1 0<\lambda L<1 0<λL<1,可得 0 < λ < 1 L 0<\lambda<\frac{1}{L} 0<λ<L1

L = sum([3*norm(A[k]).^2 + norm(A[k])*norm(b[k]) for k =1:m])+1;
λ = 1/L;   #λ≤1/L

(9) 主程序

x = ones(n,1)
objval_vec = zeros(1,MAXITE);  #存储计算过程中目标函数值
x_vec = zeros(n,MAXITE);       #存储计算过程中变量值

for k in range(1,MAXITE)
    
    #计算、存储当前目标函数值
    objval = sum([1/4*(transpose(x)*A[k]*x.-b[k])^2 for k=1:m]) .+ θ.*norm(x,1); 
    objval_vec[1,k] = objval[1,1];  
    
    #存储当前变量值
    x_vec[:,k] = x; 
    
    #计算函数g(x)、h(x)当前时刻的导数值
    xold = x;
    der_h = derivative_h(xold);
    der_g = derivative_g(A,b,xold,m,n);
    
    y = λ*der_g - der_h;
    τ = λ * θ;
    v = compute_softThreshold(y,τ);   #计算公式(5-2)中的软阈值算子部分   
    
    topt = find_positiveRoot(v);  #计算公式(5-2)中的 t*
    
    x = -topt.*v; # 根据公式(5-2) 求出下一时刻 x 的值
end
print("最优解:",x,"\n");
print("最小目标值:",objval_vec[end]);

(10) 画出目标函数值随计算步数的变化

K = range(1, MAXITE);
plot(K, [objval_vec[k] for k=1:MAXITE], yaxis=:log10,label="object value")

优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享),算法

(11) 画出变量值随计算步数的变化

plot(x_vec[1,1:MAXITE], x_vec[2,1:MAXITE], arrow = :arrow)
scatter!([x_vec[1,1]], [x_vec[2,1]], markshape=:rect, marksize = 5, markercolor= :red, legend = false)
xlabel!("x1")
ylabel!("x2")

优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享),算法文章来源地址https://www.toymoban.com/news/detail-743322.html

到了这里,关于优化|求解非凸和无梯度lipschitz连续性的一阶算法在二次规划反问题中的应用(代码分享)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 共轭梯度法解求解大规模稀疏矩阵,对比最速梯度法(C++)

    记录计算方法大作业,练习C++,欢迎指正。 共轭梯度法(Conjugate Gradient)是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点。共轭梯度法不仅是解决大型线性方程

    2024年02月08日
    浏览(35)
  • 基于梯度下降算法的无约束函数极值问题求解

    导数(Derivative),也叫 导函数值 。又名 微商 ,是微积分中的重要基础概念。 导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率 。如果函数的自变量和取值都是实数的话,函数在某一点的导数就是该函数所代表的曲线在这一点上的切线

    2024年02月13日
    浏览(33)
  • 【基础理论】图像梯度(Image Gradient)概念和求解

    什么是图像梯度?以及图像梯度怎么求解? 图像梯度是指图像某像素在x和y两个方向上的变化率(与相邻像素比较),是一个二维向量,由2个分量组成X轴的变化、Y轴的变化 。其中: X轴的变化是指当前像素右侧(X加1)的像素值减去当前像素左侧(X减1)的像素值。 Y轴的变

    2024年02月16日
    浏览(28)
  • 【算法系列】非线性最小二乘求解-梯度下降法

    ·【算法系列】卡尔曼滤波算法 ·【算法系列】非线性最小二乘求解-直接求解法 ·【算法系列】非线性最小二乘求解-梯度下降法 ·【算法系列】非线性最小二乘-高斯牛顿法  ·【算法系列】非线性最小二乘-列文伯格马夸尔和狗腿算法  文章目录 系列文章 文章目录 前言 一、

    2024年02月16日
    浏览(33)
  • MATLAB:梯度下降法求解一元和多元函数极小值和极大值

    梯度下降法,顾名思义即通过梯度下降的方法。对于一个函数而言,梯度是一个向量,方向是表示函数值增长最快的方向,而大小则表示该方向的导数。下面展示了用梯度下降法求解一元函数的MATLAB代码: syms x; y = @(x)((x-1).^2); % 定义一元函数 dy = diff(y,x); % 一元函数导数 x =

    2024年02月05日
    浏览(31)
  • 共轭梯度法、 最速下降法求解大规模稀疏方程组【Matlab】

    针对此题,可分别用共轭梯度法、 最速下降法求解线性方程组。 程序如下: 附录1   共辄梯度法求解大规模稀疏方程组程序 附录2   三对角矩阵A、右端项b生成程序 附录3   最速下降法求解线性方程组程序 此处仅展示了代码实现,具体算法原理可参考《数值分析》等有关

    2024年02月08日
    浏览(30)
  • 如何用梯度下降法求解数学建模的拟合问题——以logistics增长问题为例

    众所周知的是,在大学课程中一般只会教授一种拟合方法(也即参数估计方法)——最小二乘法。这是一种直接求解的方法,非常的有效,不仅是损失最小解,而且是最大似然解。只不过,有一个缺点,它只能解决线性方程参数问题,对于非线性曲线,就无能为力了。大部分情

    2024年02月11日
    浏览(32)
  • 举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

    我们将通过一个简单的例子来说明基于线性回归的单层神经网络,以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集,表示学生的学习时间(小时)与他们的考试分数: 学习时间(X):1, 2, 3, 4, 5 考试分数(Y):2, 4, 6, 8, 10 这是一个线性关系,我们可以使用线

    2024年02月16日
    浏览(74)
  • 优化算法之梯度下降|Matlab实现梯度下降算法

    题目要求: 使用Matab实现梯度下降法 对于函数: min ⁡ f ( x ) = 2 x 1 2 + 4 x 2 2 − 6 x 1 − 2 x 1 x 2 min f(x)=2 x_{1}^{2}+4 x_{2}^{2}-6 x_{1}-2 x_{1} x_{2} min f ( x ) = 2 x 1 2 ​ + 4 x 2 2 ​ − 6 x 1 ​ − 2 x 1 ​ x 2 ​ 试采用 MATLAB实现最速下降法求解该问题, 给出具体的迭代过程、 最终优化结果、

    2024年02月16日
    浏览(40)
  • 梯度下降优化

    在机器学习中的无约束优化算法中,除了梯度下降以外,还有最小二乘法,牛顿法和拟牛顿法。 最小二乘法 是计算解析解,如果样本量不算很大,且存在解析解,最小二乘法比起梯度下降法要有优势,计算速度很快。 梯度下降法 是迭代求解,是如果样本量很大,用最小二乘

    2024年02月08日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包