复杂系统 | 考前知识点总结(不完全)


这份知识点总结(cheat sheet),是基于 21 级直博师兄的押题(因为我没太听课🥶);
然而教学大纲比较与时俱进,导致他押题不太准(或许放到两年前是准的叭),所以这份笔记有很多考点没有覆盖(如事件驱动优化 EBO、RL 基础 policy gradient TRPO PPO 等)。

相关链接:



1 序优化 Ordinal Optimization

OO 考一个概率或证明指数收敛。

1.1 关于 OO 的概率计算

正态分布的概率密度函数: \(f(x)=\frac1{\sqrt{2πσ^2}}\exp(-\frac{(x-μ)^2}{2σ^2})\)

正态分布相加后的分布:\(N(\mu_1+\mu_2,\sigma_1^2+\sigma_2^2)\)

正态分布取 N 均值后的分布:\(N(\mu,\sigma^2/N)\)

正态分布相乘后的分布:\(N(\mu_1\mu_2,\sigma_1^2\mu_2+\sigma_2^2\mu_1)\)

1.2 order 相对 value 的指数收敛

何教授的 OO 课本的 21 / 33 页。

(每个 design 都满足 \(N(J_i,\sigma_i^2)\) 的分布。)

放缩:当 k = min(g,s) 时,去证 \(\Pr\{|G\bigcap S_n|\ge k\}=1-e^{n\beta}\) ,即 \(\{|S_n\bigcap G|\lt\min(g,s)\}\le Ce^{-n\beta}\)

定义 Event A 为 达不到完美: \(\{|S_n\bigcap G|\lt\min(g,s)\}\) ,就是上面所说的。

定义 Event B 为 循规蹈矩的反面:存在一个 i 使得 \(|\hat J_i-J_i|\ge\delta\) ,δ 是 Δ/2,Δ 是 min |J_i - J_j| 。

若满足 !Event B,就完全没有 misalignment;不过,即使发生 Event B,也可能完全没有 misalignment。

因此,Pr A ≤ Pr B。\(\Pr[B]=\sum\Pr\{|\hat J_i-J_i|\ge\delta\}\le2Ne^{-n\beta}\) 。这里取 β 为各个 β 中最小的。这一步是大偏差理论。

这样就得到了。

1.3 good enough 相对 optimal 的指数收敛

何教授的 OO 课本的 26 / 38 页。

对 blind pick 的 selection rule,希望证明, \(Pr\{|S\bigcap G|\ge1\}=1-O(e^{-gs\beta})\) ,即在 top k 的要求下,k 越松,selection 数量越多,就指数级地越容易。

首先,有 \(Pr\{|S\bigcap G|=0\}=C_{N-g}^s/C_N^s\) 。然后,有 \(Pr\{|S\bigcap G|\ge1\}=1-Pr\{|S\bigcap G|=0\}\)

\(Pr\{|S\bigcap G|=0\}=C_{N-g}^s/C_N^s\) 去进行放缩,得到 \((N-g)!(N-s)!/N!(N-g-s)!\le(1-\frac gN)^s\le\exp(-\frac{gs}{N})\)

因此得到 \(Pr\{|S\bigcap G|\ge1\}\ge 1-\exp(-\frac{gs}{N})\) 。得证。

对 horse racing 的 selection rule,貌似也可以得到上面的结论。(别看了,就用上面的结论吧。)

2 Policy Iteration & Value Iteration 的收敛性证明

value iteration:https://www.cnblogs.com/moonout/p/17783506.html

policy iteration:https://www.cnblogs.com/moonout/p/17804874.html

DP 收敛到最优解的证明:只要是 MDP、满足无后效性(?),就有 Bellman 最优性原理,最优策略的子策略一定也是最优的。

3 排队论 Queueing Theory

另一个课件,可参考:https://lrita.github.io/images/posts/math/排队论及其应用浅析.pdf

3.1 Memoryless Triangle

好像就是 possion 分布的相关。

我 t 时刻到达车站等车,距前一辆车离开的时间是(听说)什么截尾的指数分布,距后一辆车到来的时间是 指数分布。

证明两辆车到来的时间差 X 满足指数分布,等价于 那是个泊松随机过程。

顾客到达的时间间隔呈指数分布与系统状态呈泊松分布是等效的

基础知识:

  • Poisson 分布:一种离散概率分布。
    • \(P(X=k) = e^{-λ}λ^k/{k!}\) 。参数 λ 是单位时间内随机事件的平均发生次数。期望和方差均为 λ 。
    • 适合于描述单位时间内随机事件发生的次数,排队时一定时间内到达的人数。
  • Poisson 过程:
    • 一种累计随机事件发生次数的,最基本的独立增量过程。
    • 需要满足三个条件:
    • ① P(X(0)=0)=1。
      ② 不相交区间上增量相互独立,即对一切 \(0≤t_1<t_2<…<t_n\) , $ X(t_1), X(t_2)-X(t_1),\cdots ,X(t_n)-X(t_{n-1})$ 相互独立。
      ③ 增量 \(X(t)-X(s)\) (t>s) 的概率分布为泊松分布。
    • 重要性质:在区间 [t, t + τ] 内发生的事件的数目的概率分布为:\(P\big[(N(t+\tau)-N(t))=k\big]=e^{-\lambda\tau}(\lambda\tau)^k/k!\) ,满足 Poisson 分布。
  • Poisson 过程的 Inter-arrival time:
    • 【Poisson 的 memoryless】接下来 t 秒发生事件的概率(无论之前 t0 秒有无发生事件) \(P=1-e^{-\lambda t}\)
    • 【Constant Arrival rate】接下来 Δt 秒发生事件的概率为 \(\lambda\Delta t+o(\Delta t)\) ,对于过小的 Δt,o(Δt) 忽略不计。
    • 【Exponential Inter-arrival time】计算前 t 秒内都没有发生事件的概率(或接下来 t 秒都没有发生事件的概率),把 0-t 的事件拆成无穷个 Δt , \(P(t_a\gt t)=\lim_{N\rightarrow\infty}(1-\lambda\Delta t)^N=\lim_{N\rightarrow\infty}(1-\lambda\frac tN)^N=e^{-\lambda t}\)
    • 【Poisson Arrival in [0,t) 】在 interval [0,t] 内发生事件数量,满足 Poisson 分布,有 P(t+Δt 内发生 n 个事件) = P(t 内发生 n 个事件) P(Δt 内没发生事件) + P(t 内发生 n-1 个事件) P(Δt 内发生 1 个事件) 。

Memoryless Triangle - 三者等价:

  • Constant Arrival rate;Poisson Arrival in [0,t) ;Exponential Inter-arrival time。

3.2 简单 M/M/1 系统

A:到达时间间的分布。B:服务时间分布。A 和 B 取以下符号集的值,这些符号对应于括号中的分布:M(指数);Er(r-stage Erlangian);HR(R-stage 超指数);D(确定性);G(一般)。
m:server 数量。K:系统的 storage 容量。M: size of customer population。

MM1:

https://zhuanlan.zhihu.com/p/639097677

基本定义:

  • 到达速率和服务速率都是指数分布的;系统中只有一台服务器;缓冲区大小是无限的。
  • 到达速率:A,单位时间内到达请求数量 λ,\(f_a(\tau)=\lambda \exp(-\lambda\tau)\)
  • 服务速率:B,单位时间内处理请求数量 μ,\(f_b(\tau)=\mu \exp(-\mu\tau)\)
  • ρ = λ/μ 。

分布:

  • 在时间 t 内到达的顾客总数 k,是一个泊松事件过程。在时间 t 到达的顾客呈泊松分布。
  • img

重要公式:

  • Average number of customers in the system N = ρ/(1-ρ)
  • Average time in system τ_d = 1/(μ-λ)
  • Average waiting time W = ρN/λ
  • Average time in system = average waiting time + average service time (1/μ).

应用 Little's Law 做计算:

N = λ * 1/(μ-λ) ,N = average time in system * customer arrival 。

3.3 Little's Law

在一个稳定的系统中,长期的平均顾客人数(N),等于长期的有效抵达率(λ),乘以顾客在这个系统中的平均时间(T)。或者,我们可以用一个代数式来表达:N = λT。

(队列长度 = 平均到达率 单位时间到多少人 × 人在系统内的平均时间)

虽然此公式看起来直觉性的合理,它依然是个非常杰出的推导结果,因为此关系式“不受到货流程分配、服务分配、服务顺序,或任何其他因素影响”。

直观证明:

  • t 内的最后一个到达将在 (t+ε) 离开系统。所以 arrival(t) = departure(t+ε) 。(a 和 d 是现在到达 / 离开的总人数)
  • 因此,N(t) = a(t) - d(t) = d(t+ε) - d(t)。
  • 在稳定状态下,ε=T(即平均通过排队系统的时间(排队时间?)为 T),出发率 = 到达率 = λ 。
  • 所以 N(t) = d(t+ε) - d(t) = λ(t+ε) - λ(t) = λT。

写公式来证明:

\[\int_0^t N(\tau)d\tau=\sum_{i=1}^{a(t)}T_i-\epsilon \\ T = \lim_{t\rightarrow \infty}\frac{\sum_{i=1}^{a(t)}T_i}{a(t)}; ~~ \lambda = \lim_{t\rightarrow \infty}\frac{a(t)}{t}; ~~ N = \lim_{t\rightarrow \infty}\frac{\int_0^t N(\tau)d\tau}{t}; \\ \lim_{t\rightarrow \infty}\frac{\int_0^t N(\tau)d\tau}{t} = \lim_{t\rightarrow \infty}\frac{\sum_{i=1}^{a(t)}T_i}{a(t)}\times \lim_{t\rightarrow \infty}\frac{a(t)}{t} - \lim_{t\rightarrow \infty}\frac{\epsilon}{t}; \\ \lim_{t\rightarrow \infty}\frac{\epsilon}{t} = 0 \]

  • 第一行:N(tau) 是 tau 时刻系统内的人数。a(t) 是来人的函数,单调递增。ε 是 最后一个人还有多久走(见 slides 57 页的图)。第一行的意思是,系统内人数的积分(即 从 0 到 t 都来了多少人) = a(t) 个来的人都分别呆了多久 - ε。
  • 第二行:每个人平均在系统内呆的时间 T 的计算。λ:长远来看(t → 无穷)平均每时刻来多少人。N:每一时刻在系统内的人数 / 总共过去的时间 = 每时刻平均有多少人在系统内(感觉像平均值)。
  • 第三行:假装可以拆成这样的极限相乘吧(不会证)。
  • 第四行:是显然的。ε 再大也是有限量,跟 lambda mu 是一个量级的(大概)。

4 No Free Lunch

直接看课件吧。问题:简单解释 No Free Lunch 定理。

回答:

1 我们考虑简单的 状态空间离散化且有限的 问题场景。假设 x(N 维)是优化变量,f 是性能函数(简化考虑,只可能输出两个值,1 好 0 坏),y = f(x) 为性能。我们希望寻找 x,使得 f(x) = 1。

所有的 f 有 2^N 种。可以列一个 x × f(x) 的 N × 2^N 维度的矩阵,代表所有的 f。如果我们对我们的问题的结构一无所知,那么就不知道 f 在矩阵的哪一列,可以视为对矩阵的所有列求平均的期望。这样的话,无论如何选择 x,其性能的期望都不会比 blind pick 更好。对于连续的情况,也是一样的。

2 更危险的情况是,如果我们知道一些关于最优解的先验。比如说,我们听说 f 矩阵左边的列是相对更优的,去选择左边的列作为问题结构的先验。如果这一知识是正确的,那么情况是好的。如果这一知识错误,相对更优的列在其他位置,那么左边的列其实会相对更差,会导致我们的性能比 blind pick 更差。

3 同时,若想寻找最优解,那么会受到维度灾难的影响:寻找最优解的复杂度,随着问题规模而指数增加。

4 因此,优化是复杂的,利用启发式的先验来解决问题,也是脆弱的。有两个方法可以缓解这种问题:1. 比较序而非值,2. 选择足够好而非最优。同时,可以利用问题结构,将问题建模成分层或分模块的形式,以简化空间。

5 嵌套分区 Nested Partition

估计会考 nested partition 找最优解的模拟。

一个部分错误的算法:https://www.cnblogs.com/moonout/p/17962129

Nested Partition 算法:

  • 第一步,初始化。选择一个初始的可行解空间 X,设定分区的层数 d 和每层的分区数 M,设定停止条件。
  • 第二步,分区(partitioning)。将当前的可行解空间 X 分解为 M 个子区域,记为 X_1, X_2, ..., X_M,并保留一个补充区域 X_M+1,包含 X 中剩余的解。
  • 第三步,采样。在每个子区域中随机生成(按一定规则生成)若干个可行解,记为 x_1, x_2, ..., x_M,以及 x_M+1。
  • 第四步,评估。计算每个可行解的目标函数值 f(x_i),并根据一定的规则(课件上直接采取最佳值 min f(x) ),确定每个子区域的期望指标(promising index)g(X_i),用于衡量子区域的优劣。
  • 第五步,选择。比较每个子区域的期望指标 g(X_i),找出最大(或最小)的一个,记为 g(X_j),并将对应的子区域 X_j 作为最有希望的区域。
  • 第六步,更新。
    • 如果满足停止条件(达到最大迭代次数、最优解的改善量小于阈值、最 promising 的区域已不能再分解),则停止算法,输出当前的最优解 x_j 。
    • 如果当前 promising index 比之前找到的最大(最小)值小(大),则回溯到之前最 promising 的区域。
    • 否则,将可行解空间 X 更新为 X_j,回到第二步,继续分区。

6 Alias 算法

别名算法 Alias 算法,必考,证明和操作。出条件,把 r 和 a 写出来。

证明一定能把 \(\sum_{i=1}^Np_i=N\) 分到 N 个桶里,使得每一个桶最多有两种东西。

  • K = 1 显然。
  • K → K+1:若 pi = 1 则每个桶一个。
  • 否则,一定存在一个 \(p_{K+1}\lt1\),并且存在 \(p_1\) 使得 \(p_{K+1}+p_1\ge 1\) ,否则 \(\sum_{i=1}^Np_i\le\sum_{i=1}^N(p_i+p_{K+1})\lt\sum_{i=1}^N1=N\) ,又有 \(p_{K+1}\lt1\),无法满足 \(\sum_{i=1}^Np_i=N\)
  • \(p_{K+1}\) 去掠夺 \(p_1\) ,使得第 K+1 个桶被填满。然后对前 K 个桶执行 K=K 的算法。数归得证。

更快的证明:

def create_alias_table(area_ratio):
    # 根据概率分布乘以 N 的结果,构建 accept 和 alias 数组
    l = len(area_ratio)
    accept, alias = [0] * l, [0] * l
    small, large = [], [] # 存储面积小于 1 和大于 1 的事件的索引
    for i, prob in enumerate(area_ratio):
        if prob < 1.0:
            small.append(i)
        else:
            large.append(i)
    while small and large: # 将大于 1 的事件的多余部分分配给小于 1 的事件
        small_idx, large_idx = small.pop(), large.pop()
        accept[small_idx] = area_ratio[small_idx]
        alias[small_idx] = large_idx
        area_ratio[large_idx] = area_ratio[large_idx] - (1 - area_ratio[small_idx])
        if area_ratio[large_idx] < 1.0:
            small.append(large_idx)
        else:
            large.append(large_idx)
    while large: # 处理剩余的大于 1 的事件,将其 accept 设为 1
        large_idx = large.pop()
        accept[large_idx] = 1
    while small: # 处理剩余的小于 1 的事件,将其 accept 设为 1
        small_idx = small.pop()
        accept[small_idx] = 1
    return accept, alias

7 OCBA

7.1 OCBA 算法

  • 总的 budget 是 T。先为每个 design 分配 n0 个 simulation。
  • 然后,设置每次的新 budget allocation:
    • "将计算预算(即额外模拟的数量)增加 A",比如 10 个 10 个增加。
    • 对 i ≠ j ≠ b,设置 \(\frac{N_i}{N_j} = (\frac{\sigma_i/\delta_{b,i}}{\sigma_j/\delta_{b,j}})^2\) 。(signal-noise ratio rule)
    • 对当前的最优 design b( \(\bar J_b\le\bar J_i, i\neq b\) ),计算 \(N_b=\sigma_b\sqrt{\sum_{i=1,i\neq b}^k N_i^2/\sigma_i^2}\)
    • 大概是,先对所有 i j ≠ b 设置 budget allocation(可以设置那个比值 = k),然后再计算 b 的 budget allocation(= 常数 × k)。(应该是可以做到的)
  • 然后,分配 simulation budget:新增 \(\max⁡(0,N_i^{l+1}-N_i^l)\)

7.2 OCBA 的证明

OCBA 证明:希望在有限次 simulation 下最大概率找到最优解,1. 放缩找到最优解的概率,得到一个下界,2. KKT 条件 拉格朗日松弛 得到 N(计算量)如何分配。

假设 tilde J 是给定了观测的均值方差的 真实 performance 的后验分布。

第一步,放缩:\(P\{CS\}=P\{\bigcap_{i=1,i\neq b}^k(\tilde J_b-\tilde J_i\lt 0)\}\ge 1-\sum_{i=1,i\neq b}^kP\{\tilde J_b\gt\tilde J_i\}=APCS\) ,approximate PCS。

然后转化问题,把 Ni ≥ 0 的约束条件去掉(?),让 Ni 可以取任意实数值。

第二步,Lagrange 松弛:(F 其实就是 Lagrange 函数 L)

\[\max_{N_1,\cdots,N_k} 1-\sum_{i=1,i\neq b}^kP\{\tilde J_b\gt\tilde J_i\} \\ s.t. \sum_{i=1}^k N_i=T. \\ F=1-\sum_{i=1,i\neq b}^k \int_{-\frac{\delta_{b,j}}{\sigma_{b,j}}}^\infty\frac{1}{\sqrt{2\pi}}e^{-\frac{t^2}{2}}dt-\lambda (\sum_{i=1}^k N_i-T) \]

然后直接硬写 KKT 条件:

\[\frac{\partial F}{\partial N_b}=\frac{-1}{2\sqrt{2\pi}} \sum_{i=1,i\neq b}^k \exp[\frac{-\delta_{b,i}^2}{2\sigma_{b,i}^2}]\frac{ \delta_{b,i}\sigma_{b}^2 }{N_b^2(\sigma_{b,i}^2)^{3/2}}-\lambda=0 \]

考察 Nb 与 Ni 的关系,可以直接得到 \(N_b=\sigma_b\sqrt{\sum_{i=1,i\neq b}^k\frac{N_i^2}{\sigma_i^2}}\)

考察 Ni 与 Nj 的关系,令 T 趋于无穷,可以得到 \(\frac{N_i}{N_j}=(\frac{σ_i/\delta_{b,i}}{σ_j/\delta_{b,j}})^2\)

(具体公式懒得抄,感觉也背不过…)



posted @ 2024-02-06 10:37  MoonOut  阅读(36)  评论(0编辑  收藏  举报