凸优化学习(3)——对偶方法、KKT条件、ADMM

news2024/9/25 11:10:12

🍅 写在前面
👨‍🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。
🔎个人主页:主页链接(欢迎各位大佬光临指导)
⭐️近期专栏:机器学习与深度学习
                       LeetCode算法实例
                       张量分解

凸优化系列知识,详见下方链接:

凸优化学习(1)——什么是凸优化、凸集、凸函数
凸优化学习(2)——梯度类方法求解(gradient descent)
凸优化学习(3)——对偶方法、KKT条件、ADMM
本系列文章主要参考:卡耐基梅隆 凸优化系列课程

目录

  • 综述
    • 强弱对偶需要满足的条件
  • 线性规划对偶
  • 拉格朗日对偶
  • ADMM

综述

对偶方法在优化问题中非常重要,实际上就是实质相同但从不同角度提出不同提法的一对问题。有时候原问题 (Primal Problem) 不太好解,但是对偶问题 (Dual Problem) 却很好解,我们就可以通过求解对偶问题来迂回地解答原问题。其中对偶方法又分为强对偶定理弱对偶定理。弱对偶定理只能确定出原问题的上下界。强对偶定理指的是,在满足某下条件的情况下,可以通过求出对偶问题的解推断出原问题的解。

强弱对偶需要满足的条件

  • 弱对偶:不论原问题是否为凸问题均成立,没有需要满足的特别条件。
  • 强对偶:满足强对偶的条件有很多,这里只介绍常用的几种。
    1、Convex+Slater(强对偶的充分条件)
    (1)原问题必须为一个凸问题,凸问题的定义在第一节已经讲过,大家可以回顾查询一下。
    (2)Slater条件,对于一个凸优化问题,该条件描述如下:
    min ⁡ x f ( x ) s . t . g i ( x ) ≤ 0 , i = 1... , m h j ( x ) = 0 , j = 1... , r \begin{array}{l} {\min _x}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} f(x)\\ s.{\kern 1pt} {\kern 1pt} t.{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {g_i}(x) \le 0,i = 1...,m\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {h_j}(x) = 0,j = 1...,r\\ \end{array} minxf(x)s.t.gi(x)0,i=1...,mhj(x)=0,j=1...,r
    对于以上式子,存在可行解x,使得 g i ( x ) < 0 {g_i}(x) <0 gi(x)<0恒成立,并且满足第二个条件
    h j ( x ) = 0 {h_j}(x) = 0 hj(x)=0。那么称该问题满足Slater条件,并且强对偶也成立。
    2、KKT条件
    KKT条件的形式如下:
    在这里插入图片描述
    需要指出,KKT条件在问题凹凸性不同性质也有所不同。KKT条件对于凸问题是一个充分必要条件,对于非凸问题则是一个必要条件,无法作为一个充分条件来用。

线性规划对偶

对于形如下方的线性规划问题:
min ⁡ x c T x s . t . A x = b G x ≤ h \begin{array}{l} {\min _x}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {c^T}x\\ s.{\kern 1pt} {\kern 1pt} t.{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} Ax = b\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} Gx \le h \end{array} minxcTxs.t.Ax=bGxh
其对偶问题形式为:

min ⁡ u . v − b T u − h T v s . t . − A T u − G T v = c v ≥ 0 \begin{array}{l} {\min _{u.v}}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} - {b^T}u - {h^T}v\\ s.{\kern 1pt} {\kern 1pt} t.{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} - {A^T}u - {G^T}v = c\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} v \ge 0 \end{array} minu.vbTuhTvs.t.ATuGTv=cv0
对于LP问题,其对偶性的特性就是只要原问题存在,那么强对偶条件1就一定成立,因此强对偶也成立。

拉格朗日对偶

对于形如下方的凸问题:
min ⁡ x f ( x ) s . t . g i ( x ) ≤ 0 , i = 1... , m h j ( x ) = 0 , j = 1... , r \begin{array}{l} {\min _x}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} f(x)\\ s.{\kern 1pt} {\kern 1pt} t.{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {g_i}(x) \le 0,i = 1...,m\\ {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {h_j}(x) = 0,j = 1...,r\\ \end{array} minxf(x)s.t.gi(x)0,i=1...,mhj(x)=0,j=1...,r
则其增广拉格朗日函数为:

L ( x , u , v ) = f ( x ) + ∑ i = 1 m u i g i ( x ) + ∑ j = 1 r v j h j ( x ) ( u i ≥ 0 ) L(x,u,v) = f(x) + \sum\limits_{i = 1}^m {{u_i}{g_i}(x)} + \sum\limits_{j = 1}^r {{v_j}{h_j}(x)({u_i} \ge 0)} L(x,u,v)=f(x)+i=1muigi(x)+j=1rvjhj(x)(ui0)
原问题拉格朗日对偶形式为:
inf ⁡ ( L ( x , u , v ) ) \inf (L(x,u,v)) inf(L(x,u,v))
这里的inf指的是求函数的上界。这里有一个重要性质,任何函数的拉格朗日对偶函数都是凹函数,大家有兴趣可以自己证明一下,比较简单,证明过程如下。
在这里插入图片描述
为什么要求出这个拉格朗日对偶函数呢?它和原函数的关系如下:

∀ u ≥ 0 inf ⁡ ( L ( x , u , v ) ) ≤ f ( x ) \forall u \ge 0{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \inf (L(x,u,v)) \le f(x) u0inf(L(x,u,v))f(x)

证明起来也很容易,因为u不小于0,g(x)小于等于0,相乘小于0。h(x)又等于0。加上f(x)肯定小于等于f(x)。
所以原问题求f(x)的最小值可转变为求解以下式子:
min ⁡ inf ⁡ ( L ( x , u , v ) ) \min {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} \inf (L(x,u,v)) mininf(L(x,u,v))

使用拉格朗日对偶法求解问题的好处有:
1、参数约束减少了很多,只需要u大于等于0
2、拉格朗日对偶函数一定是一个凹函数,则很多凸优化问题的手段都能用上。

ADMM

ADMM (Alternating Direction Method of Multipliers) 是解决带约束的凸优化问题的一种迭代解法,当初提出这个算法最主要的目的是为了在分布式环境 (Hadoop, MPI 等) 中迭代求解这个问题。
ADMM要解决问题的形式如下:
min ⁡ x = f 1 ( x 1 ) + f 2 ( x 2 ) s . t . A 1 x 1 + A 2 X 2 = b \begin{array}{l} {\min _x} = {f_1}({x_1}) + {f_2}({x_2})\\ s.t.{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {A_1}{x_1} + {A_2}{X_2} = b \end{array} minx=f1(x1)+f2(x2)s.t.A1x1+A2X2=b
则ADMM的迭代公式为:
x 1 ( k ) = arg ⁡ min ⁡ x 1 f 1 ( x 1 ) + ρ 2 ∥ A 1 X 1 + A 2 X 2 ( k − 1 ) − b + w ( k − 1 ) ∥ 2 2 x 2 ( k ) = arg ⁡ min ⁡ x 2 f 2 ( x 2 ) + ρ 2 ∥ A 1 X 1 ( k − 1 ) + A 2 X 2 − b + w ( k − 1 ) ∥ 2 2 w ( k ) = w ( k − 1 ) + A 1 x 1 ( k ) + A 2 X 2 ( k ) − b \begin{array}{l} {x_1}^{(k)} = \arg {\min _{x1}}{f_1}({x_1}) + \frac{\rho }{2}{\left\| {{A_1}{X_1} + {A_2}{X_2}^{(k - 1)} - b + {w^{(k - 1)}}} \right\|_2}^2\\ {x_2}^{(k)} = \arg {\min _{x2}}{f_2}({x_2}) + \frac{\rho }{2}{\left\| {{A_1}{X_1}^{(k - 1)} + {A_2}{X_2} - b + {w^{(k - 1)}}} \right\|_2}^2\\ {w^{(k)}} = {w^{(k - 1)}} + {A_1}{x_1}^{(k)} + {A_2}{X_2}^{(k)} - b\\ \\ \end{array} x1(k)=argminx1f1(x1)+2ρ A1X1+A2X2(k1)b+w(k1) 22x2(k)=argminx2f2(x2)+2ρ A1X1(k1)+A2X2b+w(k1) 22w(k)=w(k1)+A1x1(k)+A2X2(k)b
其中ρ是事先选定的参数,可以选择定值和定值,和前一节讲过的学习率性质差不多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【pyenv】pyenv安装版本超时的解决方案

目录 1、现象 2、分析现象 3、手动下载所需版本 4、存放到指定路径 5、重新安装 6、pip失败&#xff08;做个记录&#xff0c;未找到原因&#xff09; 7、方法二修改环境变量方法 7.1 设置环境变量 7.2 更新 7.3 安装即可 8、方法三修改XML文件 前言&#xff1a;研…

【Android】Room—数据库的基本操作

引言 在Android开发中&#xff0c;数据持久化是一个不可或缺的部分。随着应用的复杂度增加&#xff0c;选择合适的数据存储方式变得尤为重要。Room数据库作为Android Jetpack架构组件之一&#xff0c;提供了一种抽象层&#xff0c;使得开发者能够以更简洁、更安全的方式操作SQ…

PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field

1 First/Last DW Byte Enables Rules & Attributes Field 1.1 First/Last DW Byte Enables Rules Byte Enable 包含在 Memory、I/O 和 Configuration Request 中。本文定义了相应的规则。Byte Enable 位于 header 的 byte 7 。对于 TH 字段值为 1 的 Memory Read Request…

【算法篇】哈希类(笔记)

目录 一、常见的三种哈希结构 二、LeetCode 练习 1. 有效的字母异位词 2. 两个数组的交集 3. 快乐数 4. 两数之和 5. 四数相加II 6. 赎金信 7. 三数之和 8. 四数之和 一、常见的三种哈希结构 当想使用哈希法来解决问题的时候&#xff0c;一般会选择如下三种数据…

java中的注解原理是什么?

Java中的注解&#xff08;Annotations&#xff09;是一种用于提供元数据的机制。它可以通过在代码中添加注解的形式&#xff0c;将一些额外的信息嵌入到代码里。注解本质上不会改变程序的实际逻辑行为&#xff0c;但是可以帮助开发工具、编译器、框架等获取这些元数据&#xff…

短信验证码倒计时 (直接复制即可使用) vue3

需求&#xff1a; 要实现一个获取验证码的需求&#xff0c;点击获取验证码60秒内不可以重复点击&#xff0c;方式有两种可以直接复制使用&#xff1b; 效果图 实现方案 方案1 (单个文件内使用比较推荐) <el-button :disabled"codeDisabled" click.stop"h…

SQL进阶的技巧:如何实现某列的累计乘积?

0 场景描述 在做数据处理的时候,尤其是复利累积的时候,有时候会有这样一场景,通过某种条件找到一列数据[X1,X2,X3...Xn],然后想要求y=X1X2X3...Xn。下面给出一个具体案例来详细解释这一问题,如下图所示,每个组的name值只有2个(2个A/B/C),当name=A or C时,price为value…

鸡蛋检测系统源码分享

鸡蛋检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

python webapi上传文件

一、安装 pip install Flask 二、 编写上传文件接口webapi.py http://127.0.0.1:5000/upload from flask import Flask,request from werkzeug.utils import secure_filename import uuidapp Flask(__name__)app.route(/) def hello_world():return Hello, World!app.post(…

MySQl篇(基本介绍)(持续更新迭代)

目录 一、为什么要使用数据库 1. 以前存储数据的方式 2. 什么是数据库 3. 采用的数据库的好处 4. 如何理解数据库、数据库管理系统、SQL 5. 如何理解数据是有组织的存储 6. 现在的数据库 二、关系型数据系统 1. 什么是关系型数据库 2. 关系型数据库特点 3. 关系型数据…

p11 日志,元数据,进程的查看

直接运行docker run -d centos这个时候回启动容器&#xff0c;但是因为容器里面没有前台进程所以这个时候docker会把没用的进程给停止掉&#xff0c;可以看到docker ps命令没有查看到任何的正在运行的容器 但是如果说你使用 -it命令进入到了容器里面&#xff0c;这个他就不会…

并发编程 - 锁(属性修饰符 atomic)

引言 在多线程编程中&#xff0c;数据一致性是一个必须解决的问题。多个线程同时访问同一片共享数据时&#xff0c;极易发生竞争条件&#xff08;race conditions&#xff09;&#xff0c;导致数据的不一致性&#xff0c;甚至程序崩溃。为了解决这些问题&#xff0c;我们需要引…

Vulnhub:BlueSky

靶机下载地址 信息收集 主机发现 nmap扫描攻击机同网段存活主机。 nmap 192.168.31.0/24 -Pn -T4 靶机ip&#xff1a;192.168.31.171。 端口扫描 nmap 192.168.31.171 -A -p- -T4 开放端口22,8080。 目录扫描 访问8080端口&#xff0c;如图&#xff0c;是tomcat管理页面…

Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象

1、reactive() 方法 reactive() 方法用于将定义的 JavaScript 对象转换为响应式对象。 使用方法&#xff1a; <script setup> //第一步&#xff1a;导入函数 import { reactive } from vue;//第二步&#xff1a;创建响应式对象 const data reactive(对象类型的数据);…

prompt实用技巧-AI+Mermaid【酷炫钉钉文档】

AI 新技能&#xff0c;最近 chatGPTo1 发布后模型能力出现了新的跨越&#xff0c;之前模型的一本正经的胡说八道幻想模式&#xff0c;让AI 对待理科推理明显弱于文案的 AGI 的生成。 prompt engineer 工程师程序员的福音 prompt 内容如下&#xff0c; 按照以上格式生成创建公…

C++ Primer Plus(速记版)-类和数据抽象

第十二章 类 在 C 中&#xff0c;用类来定义自己的抽象数据类型。 12.1. 类的定义和声明 12.1.1. 类定义&#xff1a;扼要重述 最简单地说&#xff0c;类就是定义了一个新的类型和一个新作用域。 类成员 类成员可以是属性、方法或类型别名。 成员可以是公有&#xff08;publ…

CPU 缓存的局部性特性

CPU 缓存的局部性特性是现代处理器中用来提高程序执行效率的重要原理。局部性特性是指程序在运行时&#xff0c;其数据和指令的访问具有一定的规律性&#xff0c;主要体现在时间局部性和空间局部性两方面。利用这些规律&#xff0c;CPU 可以更高效地管理缓存&#xff0c;减少从…

github远程仓库环境搭建及使用

目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 配置epel 2、关闭防火墙和selinux 关闭防火墙 临时关闭SELinux 永久关闭SELinux&#xff1a;编辑SELinux的配置文件 配置文件的修改内容 3、git是本地仓库&#xff0c;linux系统中一…

CleanClip:Mac上的剪贴板神器,轻松追溯历史记录

CleanClip 是一款功能强大的 Mac 剪贴板历史管理工具,它可以帮助用户轻松地管理和追溯复制粘贴的历史记录。CleanClip 能够保存用户复制过的所有内容,包括文本、图片、文件等,并且提供了多种视图模式,包括列表视图和网格视图,方便用户快速找到需要的内容。 评论区获取软件 Cl…

查询中的算术表达式

需要修改数据显示方式&#xff0c;如执行计算&#xff0c;或者作假定推测&#xff0c;这些都可能用到算术表达式。 一个算术表达式可以包含列名、固定的数字值和算术运算符。 使用算术运算符 示例&#xff1a;查询雇员的年薪&#xff0c;并显示他们的雇员ID&#xff0c;名字…