Proximal Algorithms 4 Algorithms
这一节介绍了一些利用proximal的算法.
Proximal minimization
这个相当的简单, 之前也提过,就是一个依赖不动点的迭代方法:

有些时候\(\lambda\)不是固定的:
\]
import numpy as np
import matplotlib.pyplot as plt
以\(f(x,y) = x^2 + 50y\)为例
f = lambda x: x[0] ** 2 + 50 * x[1] ** 2
x = np.linspace(-40, 40, 1000)
y = np.linspace(-20, 20, 500)
X, Y = np.meshgrid(x, y) #获取坐标
fig, ax = plt.subplots()
ax.contour(X, Y, f([X, Y]), colors="black")
plt.show()

求解proximal可得:
y = \frac{v_2}{100\lambda + 1}
\]
def prox(v1, v2, lam):
x = v1 / (2 * lam + 1)
y = v2 / (100 * lam + 1)
return x, y
times = 50
x = 30
y = 15
lam = 0.1
process = [(x, y)]
for i in range(times):
x, y = prox(x, y, 0.1)
process.append((x, y))
process = np.array(process)
x = np.linspace(-40, 40, 1000)
y = np.linspace(-20, 20, 500)
X, Y = np.meshgrid(x, y) #获取坐标
fig, ax = plt.subplots()
ax.contour(X, Y, f([X, Y]), colors="black")
ax.scatter(process[:, 0], process[:, 1])
ax.plot(process[:, 0], process[:, 1])
plt.show()

解释
除了之前已经提到过的一些解释:
Gradient flow
考虑下面的微分方程:

\(t \rightarrow \infty\)时\(f(x(t))\rightarrow p^*\),其中\(p^*\)是最小值.
我们来看其离散的情形:

于是就有:
\]
还有一种后退的形式:
\]
此时,为了找到\(x^{k+1}\), 我们需要求解一个方程:
\Rightarrow x^{k+1} = (I+ h \nabla f)^{-1}x^k = \mathbf{prox}_{hf}(x^k)
\]
还有一种特殊的解释,这里不提了.
\(f(x) + g(x)\)
考虑下面的问题:
\]
其中\(f\)是可微的.
我们可以通过下列proximal gradient method来求解:
\]
可以证明(虽然我不会),当\(\nabla f\) Lipschitz连续,常数为\(L\),那么,如果\(\lambda^k = \lambda \in (0, 1/L]\),这个方法会以\(O(1/k)\)的速度收敛.
还有一些直线搜素算法:

一般取\(\beta=1/2\),\(\widehat{f}_{\lambda}\)是\(f\)的一个上界,在后面的解释中在具体探讨.
解释1 最大最小算法
最大最小算法, 最小化函数\(\varphi: \mathbb{R}^n \rightarrow \mathbb{R}\):
\]
其中\(\widehat{\varphi}(\cdot, x^k)\)是\(\varphi\)的凸上界:\(\widehat{\varphi}(x, x^k) \ge \varphi(x)\), \(\widehat{\varphi}(x, x)=\varphi(x)\).
我们可以这么构造一个上界:

上面的式子很像泰勒二阶展开,首先这个函数符合第二个条件,下面我们证明,当\(\lambda \in (0, 1/L]\),那么它也符合第一个条件.
\]
其中\(z = x + \theta (y-x), \theta \in [0, 1]\), 又Lipschitz连续,所以:
\]
考虑\(f(x+t\Delta x)\)关于\(t\)的二阶泰勒展式:
\]
令\(t=1\):
\]
\]
由当\(t \rightarrow 0\)时,左边为\(\|\nabla^2 f(x) \Delta x\|\), 所以\(\nabla^2 f(x)\)的最大特征值必小于\(L\), 所以:
\]
完蛋,好像只能证明在局部成立,能证明在全局成立吗?
\]
再令:
\]
那么:
\]
上面的等式,可以利用第二节中的性质推出.
不动点解释
最小化\(f(x)+g(x)\)的点\(x^*\)应当满足:
\]
更一般地:

这便说明了一种迭代方式.
Forward-backward 迭代解释
考虑下列微分方程系统:

离散化后得:

注意,等式右边\(x^k\)和\(x^{k+1}\),这正是巧妙之处.
解此方程可得:

这就是之前的那个迭代方法.
加速 proximal gradient method
其迭代方式为:
x^{k+1} := \mathbf{prox}_{\lambda^k g}(y^{k+1}-\lambda^k \nabla f(y^{k+1}))
\]
\(w^k \in [0,1)\)
这个方法有点类似Momentum的感觉.
一个选择是:
\]
也有类似的直线搜索算法:

交替方向方法 ADMM
alternating direction method of multipliers (ADMM), 怎么说呢,久闻大名,不过还没看过类似的文章.
同样是考虑这个问题:
\]
但是呢,这时\(f,g\)都不一定是可微的, ADMM采取的策略是:
z^{k+1} := \mathbf{prox}_{\lambda g} (x^{k+1} + u^k)\\
u^{k+1} := u^k + x^{k+1} -z^{k+1}
\]
特殊的情况是, \(f\)或\(g\)是指示函数,不妨设\(f\)是闭凸集\(\mathcal{C}\)的指示函数,而\(g\)是闭凸集\(\mathcal{D}\)的指示函数, 即:
\]
这个时候,更新公式变为:
z^{k+1} := \Pi_{\mathcal{C}} (x^{k+1} + u^k) \\
u^{k+1} := u^k + x^{k+1} -z^{k+1}
\]
解释1 自动控制
可以这么理解,\(z\)为状态,而\(u\)为控制,前俩步时离散时间动态系统(不懂啊...), 第三步的目标是选择\(u\)使得\(x=z\),所以\(x^{k+1}-z^{k+1}\)可以认为是一个信号误差,所以第三步就会把这些误差累计起来.
解释2 Augmented Largranians
我们可以将问题转化为:

augmented Largranian:

其中\(y\)为对偶变量.
在\(z, y\)已知的条件下,最小化\(L\), 即:
\]
在\(x, y\)已知的条件下,最小化\(L\), 即:
\]
最后一步:
\]
如果依照对偶问题的知识,关于\(y\)应该是取最大,但是呢,关于\(y\)是一个仿射函数,所以没有最值,所以就简单地取那个?
注意到:


让\(u^k = (1/\rho)y^k\), \(\lambda = 1/\rho\)就是最开始的结果.
解释3 Flow interpretation
问题(4.9)的最优条件(KKT条件):

其中\(v\)是对偶变量.考虑微分方程:

(4.11)取得稳定点的条件即为(4.10)(\(v=\rho)\)(这部分没怎么弄明白).
离散化情形为:

取\(h = \lambda, \rho = 1/\lambda\)即可得ADMM.
解释4 不动点
原问题的最优条件为:
\]
ADMM的不动点满足:
\]
从最后一个等式,我们可以知道:
\]
, 于是
\]
等价于:
\]
等价于:
\]
俩个式子相加,说明\(x\)即为最优解.
再来说明一下,为什么可以相加,根据次梯度的定义:
\lambda g(z) \ge \lambda g(x) + (+u)^T(z-x), \quad \forall z\in \mathbf{dom}g \\
\]
相加可得:
\]
需要注意的是,我证明的时候也困扰了,
\]
并不是指(x-u)是函数\(x^2/2 + \lambda f(x)\)的次梯度, 而是\(x-u\)在\(\lambda f(x)\)的次梯度集合加上\(x\)的集合内,也就是\(-u\)是其次梯度.
对不起!又想当然了,其实没问题, 如果
\]
而\(\partial f_2(x)=h(x)\)则:
\]
证:
已知:
f_2(z) \ge f_2(x)+h(x)^T(z-x) \\
\]
俩式相加可得:
\]
所以\(g \in \partial (f_1+f_2)(x)\), 注意\(g=g(x)\)也是无妨的.
特别的情况 \(f(x) + g(Ax)\)
考虑下面的问题:
\]
上面的求解,也可以让\(\widetilde{g}(x) = g(Ax)\),这样子就可以用普通的ADMM来求解了, 但是有更加简便的方法.

这个的来源为:

再利用和之前一样的推导,不过,我要存疑的一点是最后的替代,我觉得应该是:
\]
否则推不出来啊.
Proximal Algorithms 4 Algorithms的更多相关文章
- [Algorithms] Sorting Algorithms (Insertion Sort, Bubble Sort, Merge Sort and Quicksort)
Recently I systematicall review some sorting algorithms, including insertion sort, bubble sort, merg ...
- Matrix Factorization, Algorithms, Applications, and Avaliable packages
矩阵分解 来源:http://www.cvchina.info/2011/09/05/matrix-factorization-jungle/ 美帝的有心人士收集了市面上的矩阵分解的差点儿全部算法和应 ...
- [zt]Which are the 10 algorithms every computer science student must implement at least once in life?
More important than algorithms(just problems #$!%), the techniques/concepts residing at the base of ...
- Awesome Algorithms
Awesome Algorithms A curated list of awesome places to learn and/or practice algorithms. Inspired by ...
- 海量数据挖掘MMDS week3:流算法Stream Algorithms
http://blog.csdn.net/pipisorry/article/details/49183379 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 基音检测算法的性能:Performance Evaluation of Pitch Detection Algorithms
http://access.feld.cvut.cz/view.php?cisloclanku=2009060001 Vydáno dne 02. 06. 2009 (15123 přečtení) ...
- 机器学习算法之旅A Tour of Machine Learning Algorithms
In this post we take a tour of the most popular machine learning algorithms. It is useful to tour th ...
- 深度学习课程笔记(十四)深度强化学习 --- Proximal Policy Optimization (PPO)
深度学习课程笔记(十四)深度强化学习 --- Proximal Policy Optimization (PPO) 2018-07-17 16:54:51 Reference: https://b ...
- Proximal Algorithms
1. Introduction Much like Newton's method is a standard tool for solving unconstrained smooth minimi ...
随机推荐
- 云原生时代,为什么基础设施即代码(IaC)是开发者体验的核心?
作者 | 林俊(万念) 来源 |尔达 Erda 公众号 从一个小故事开始 你是一个高级开发工程师. 某天,你自信地写好了自动煮咖啡功能的代码,并在本地调试通过.代码合并入主干分支后,你准备把服务发布到 ...
- day08 Nginx模块
day08 Nginx模块 lnmp架构 l :Linux n :Nginx m :MySQL p :Python/PHP lnmp架构:是最简单的架构 Nginx中的模块(Python模块):前提是 ...
- Scala【需求二:求各省市的各个指标】
需求处理步骤 原始数据->json->过滤->列裁剪 需求二:求各省市的各个指标 原始数据 文本pmt.json,每一行都是一个json字符串.里面包含ip等信息 {"se ...
- [JAVA]动态代理与AOP的千丝万缕
动态代理与AOP的联系 别的不说,直接上图 首先是AOP切面编程 什么是切面?(自己心里想想就ok)所以所谓的切面编程,你也就懂得大体了,只是这个被切的是个程序而已 那么AOP与动态代理有什么关系呢? ...
- Output of C++ Program | Set 10
Predict the output of following C++ programs. Question 1 1 #include<iostream> 2 #include<st ...
- Can references refer to invalid location in C++?
在C++中,引用比指针更加的安全,一方面是因为引用咋定义时必须进行初始化,另一方面是引用一旦被初始化就无法使其与其他对象相关联. 但是,在使用引用的地方仍然会有一些例外. (1)Reference t ...
- entfrm-app赋能entfrm零代码开发平台 开启多平台分发
entfrm-app是基于uni-app 框架.使用 Vue.js 语法开发的移动端 App开源产品.它可以编译为 H5.IOS App.Android App.微信小程序.QQ小程序.钉钉小程序.支 ...
- 阿里云esc 安装 docker
1. 更新 yum 到最新: yum update (用 root 用户登录,无需加 sudo,如果不是,需要加,即 yum update ) 2. 安装软件包:yum-util(提供 yum-co ...
- python爬虫期末复习
python期末复习 选择题 以下选项中合法的是(A). A 爬取百度的搜索结果 B 爬取淘宝的商品数据 C 出售同学的个人信息 D 为高利贷提供技术服务 网站的根目录下有一个文件告诉爬虫哪些内容可以 ...
- Mysql资料 数据类型
目录 一.类型 整型 浮点型 定点数 字符串 二进制数据 时间日期类型 二.长度和范围 三.使用建议 原则 存储引擎 text和blob 浮点数和定点数 四.属性 一.类型 整型 取值范围如果加了un ...