J. N. Tsitsiklis and Z.-Q. Luo, “Communication complexity of convex optimization,” Journal of Complexity, vol. 3, no. 3, pp. 231–243, Sep. 1987, doi: 10.1016/0885-064x(87)90013-6.

问题描述

两个用户各自有一个凸函数\(f_i\),相互交互最少的二进制消息,从而找到\(f_i+f_2\)的最优点

基本定义

  • \(\mathscr{F}\):定义域\([0,1]^n\)上凸函数的一个集合

  • \(I(f;\epsilon)\in[0,1]^n\):定义域上,给定误差\(\epsilon\)后\(f\)最小值对应的自变量集合(\(f(x) \leq f(y)+\varepsilon, \forall y \in[0,1]^{n}\))

  • \(C(f_1,f_2;\epsilon,\pi)\):在协议\(\pi\)和精度\(\epsilon\)下,两个函数通过交换信息找到集合\(I\left(f_{1}+f_{2} ; \varepsilon\right)\)中元素所需的消息数目

  • \(C(\mathscr{F} ; \varepsilon, \pi)\):该协议在最坏情况下找到目标所需交换的消息数量

    \[C(\mathscr{F} ; \varepsilon, \pi)=\sup _{f_{1}, f_{2} \in \mathscr{F}} C\left(f_{1}, f_{2} ; \varepsilon, \pi\right)
    \]
  • \(C(\mathscr{F} ; \varepsilon)\):最优协议下所需的交换消息的数量,又称为\(\epsilon\)-communication complexity

    \[C(\mathscr{F} ; \varepsilon)=\inf _{\pi \in \mathrm{I}(\varepsilon)} C(\mathscr{F} ; \varepsilon, \pi)
    \]
  • 消息传输的模式,通信\(T\)次

    • 每次传播信息的计算

      \[m_{i}(t)=M_{i, t}\left(f_{i}, m_{j}(0), \ldots, m_{j}(t-1)\right)
      \]
    • 最终最优点的确定

      \[x=Q\left(f_{1}, m_{2}(0), \ldots ., m_{2}(T-1)\right)
      \]

Straightforward Lower Bound

Lemma 1:\(\text { If } \mathscr{F} \subset \mathscr{G} \mathscr{\text { then }} C(\mathscr{F} ; \varepsilon) \leq C(\mathscr{G}; \varepsilon)\)

简单函数所需传输的消息数量更少

Proposition:\(C\left(\mathcal{F}_{Q} ; \varepsilon\right) \geq O(n(\log n+\log (1 / \varepsilon)))\)

其中\(\mathcal{F}_{Q}\)表示带有\(f(x)=\|x-x^\star\|^2\)形式的二次函数的集合,其中\(x^\star\in [0,1]^n\)。根据Lemma知道,选择最简单的函数能找到下界。考虑\(f_1=0\),所以\(f_2\)的最小值需要控制在\(\epsilon^{1/2}\)的精度内,因此至少需要\(\left(A n / \varepsilon^{1 / 2}\right)^{B n}\)个半径为\(\epsilon^{1/2}\)Euclidean ball来覆盖中\([0,1]^n\)。因此最终\(Q\)的解集的势至少就是\(\left(A n / \varepsilon^{1 / 2}\right)^{B n}\)。由于函数的值域的势不会超过定义域的势,所以\(Q\)的解集的势不超过\(2^T\),也就有\(T \geq O(n(\log n+\log (1 / \varepsilon))\)。

Naive Upper Bounds

The method of the centers of gravity (MCG) 在求解凸函数势需要最小次数的梯度计算。将MCG方法扩展到了分布式的场景,得到上界。

一维下的最优算法

算法核心在于用消息指示不同的计算步骤,而不是传递数据

算法首先定义两个区间,分别表示

  • \([a,b]\):\(f_1+f_2\)最优点所在的区间,\(x^\star \in [a,b]\)
  • \([c,d]\):\(f'(x^{\star})\),\(f'_1(\frac{a+b}{2})\),\(f'_2(\frac{a+b}{2})\)所在的区间

以区间\([c,d]\)为基准,分别计算消息\(m_1,m_2\)

  • \(f'_1(\frac{a+b}{2})\in [c,\frac{c+d}{2}]\)则\(m_1=0\),否则\(m_1=1\)
  • \(-f'_2(\frac{a+b}{2})\in[c,\frac{c+d}{2}]\)则\(m_2=0\),否则\(m_2=1\)

根据消息\(m_1,m_2\)的不同组合,分别缩减区间\([a,b]\)或者\([c,d]\)。缩减的设计总从两个原则

  1. \((f_1+f_2)'=f'_1+f'_2\),导值的正负性来找最小值
  2. 通过压缩\((f_1+f_2)'(\frac{a+b}{2})\)趋于零,从而确定\(\frac{a+b}{2}\)就是最小值

代码:

import numpy as np
import matplotlib.pyplot as plt def f1(x):
return (x - 2) ** 2 def df1(x):
return 2 * (x - 2) def f2(x):
return (x + 1) ** 2 def df2(x):
return 2 * (x + 1) a, b, c, d = -1, 1, -3, 3
eps = 0.1 while b - a > eps and d - c > eps:
if df1((a + b) / 2) <= (c + d) / 2:
m1 = 0
else:
m1 = 1 if -df2((a + b) / 2) <= (c + d) / 2:
m2 = 0
else:
m2 = 1 if m1 == 0 and m2 == 1:
a = (a + b) / 2
elif m1 == 1 and m2 == 0:
b = (a + b) / 2
elif m1 == 1 and m2 == 1:
c = (c + d) / 2
elif m1 == 0 and m2 == 0:
d = (c + d) / 2 print('传输消息+2')
print(a, b, c, d) if b - a <= eps:
optimum = a + eps
else:
optimum = f1((a + b) / 2) + f2((a + b) / 2) print(optimum)
print(f1(0.5) + f2(0.5))
# 直观画图结果
x = np.linspace(-1, 2, 100)
y = f1(x) + f2(x)
plt.plot(x, y)
plt.show()

【论文考古】分布式优化 Communication Complexity of Convex Optimization的更多相关文章

  1. [论文翻译] 分布式训练 Parameter Sharding 之 Google Weight Sharding

    [论文翻译] 分布式训练 Parameter sharding 之 Google Weight Sharding 目录 [论文翻译] 分布式训练 Parameter sharding 之 Google ...

  2. [源码解析] PyTorch分布式优化器(1)----基石篇

    [源码解析] PyTorch分布式优化器(1)----基石篇 目录 [源码解析] PyTorch分布式优化器(1)----基石篇 0x00 摘要 0x01 从问题出发 1.1 示例 1.2 问题点 0 ...

  3. [源码解析] PyTorch分布式优化器(2)----数据并行优化器

    [源码解析] PyTorch分布式优化器(2)----数据并行优化器 目录 [源码解析] PyTorch分布式优化器(2)----数据并行优化器 0x00 摘要 0x01 前文回顾 0x02 DP 之 ...

  4. [源码解析] PyTorch分布式优化器(3)---- 模型并行

    [源码解析] PyTorch分布式优化器(3)---- 模型并行 目录 [源码解析] PyTorch分布式优化器(3)---- 模型并行 0x00 摘要 0x01 前文回顾 0x02 单机模型 2.1 ...

  5. [论文翻译] 分布式训练 Parameter sharding 之 ZeRO

    [论文翻译] 分布式训练 Parameter sharding 之 ZeRO 目录 [论文翻译] 分布式训练 Parameter sharding 之 ZeRO 0x00 摘要 0x01 综述 1.1 ...

  6. 【论文考古】量化SGD QSGD: Communication-Efficient SGD via Gradient Quantization and Encoding

    D. Alistarh, D. Grubic, J. Li, R. Tomioka, and M. Vojnovic, "QSGD: Communication-Efficient SGD ...

  7. 论文阅读之 A Convex Optimization Framework for Active Learning

    A Convex Optimization Framework for Active Learning Active learning is the problem of progressively ...

  8. Google关于Spanner的论文中分布式事务的实现

    Google关于Spanner的论文中分布式事务的实现 Google在Spanner相关的论文中详细的解释了Percolator分布式事务的实现方式, 而且用简洁的伪代码示例怎么实现分布式事务; Pe ...

  9. 凸优化(Convex Optimization)浅析

    本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 在机器学习中, 很多情况下我们都需要求得一个 问题的全局最优值(global optimum) ...

随机推荐

  1. 使用.NET 6开发TodoList应用(填坑1)——实现当前登录用户获取

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在前面的文章里使用.NET 6开发TodoList应用(5)--领域实体创建,我们留了一个坑还没有填上,就是在数据库保存的时候 ...

  2. 云图说|DDS读写两步走,带您领略只读节点的风采

    摘要:为了扩展主节点的读请求能力,DDS提供具备独立连接地址的只读节点,适合独立系统直连访问,以缓解大量读请求给主节点造成的压力. 本文分享自华为云社区<[云图说]第235期 DDS读写两步走 ...

  3. 第05讲:Flink SQL & Table 编程和案例

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  4. web前端基础之SCC(定位-z-index模态框)

    目录 一:定位(position) 1.relative(相对定位) 2.absolute(绝对定位) 3.fixed(固定) 二:相对定位 1.相对定位 2.实现相对定位 三:绝对定位 1.实现绝对 ...

  5. Jupyter Notebook 更改字体、字体大小、行高

    (废话):今天在做实验的时候遇到了一点问题,就问了问本科的室友,结果室友推荐我使用Jupyter Notebook来写代码,以前看其他同学使用过,但是一直在用Pycharm写,需要的时候顶多是Debu ...

  6. C++ POD 类型

    POD 是 C++ 中一个比较重要的概念,POD 是英文 Plain Old Data 的缩写(通俗讲就是类或结构体通过二进制拷贝后还能保持其数据不变),用来描述一个类型(包括 class.union ...

  7. 开发升讯威在线客服系统启示录:怎样编写堪比 MSDN 的用户手册

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程. 免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com 文章目 ...

  8. chapter3——逻辑回归手动+sklean版本

    1 导入numpy包 import numpy as np 2 sigmoid函数 def sigmoid(x): return 1/(1+np.exp(-x)) demox = np.array([ ...

  9. STC8H开发(九): STC8H8K64U模拟USB HID外设

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  10. 分布式缓存——Redis

    一.Redis介绍 Redis是一个开源的使用C语言编写.开源.支持网络.可基于内存亦可持久化的日志型.高性能的key-value数据库,并提供多种语言的API.它通常被称为数据结构服务器,因为值(v ...