← 返回复习站

Methods and tools for big data · Summer 2026

源文件: c5.pdf

5. Optimization(优化) | 内容聚合讲解(逻辑增强版)

从回归残差与梯度下降出发,经由 PRAM 的 work-depth、batch/SGD/Hogwild!,落到 Spark 实现、PCA 降维与线性规划。

原始页数
32
知识模块
4
讲解单元
16
聚合单元
10
Example
1
逐页详解
32
5. Optimization

OVERVIEW 01

这组课件在讲什么

中心问题

如何把平方损失优化从单机梯度下降扩展到并行处理器和 Spark,同时知道 batch、SGD 与 Hogwild! 在什么条件下合适。

概念范围

回归与最小二乘、凸性和步长、PRAM/DAG/work-depth、Brent 定理、batch/SGD 复杂度、竞态与无锁稀疏更新。

系统范围

共享内存与分布式通信的差异;RDD、map、reduce、cache、broadcast 与 synchronisation barrier 对迭代算法的约束。

目标能力

能从目标函数推到每轮和总复杂度,读懂关键图与算法,并根据 m、n、ε、稀疏性和通信条件作实现选择。

OVERVIEW 02

知识如何推进

主线

残差 → 平方损失 → 梯度更新 → 并行归约 → work/depth → SGD → 竞态/Hogwild! → 分布式通信 → Spark。

完整 Example

P007-P008 在三维凸二次函数上求梯度,从 X0 算到 X1,并给出 X6、固定步长和 Hessian 的代价。

视觉节点

P004 读垂直残差;P011 读依赖 DAG;P029 读 V、M、m 的正交分解,连接 PCA 最大方差与最小残差。

真实跳转

P010 从小数据切到大数据,P024 切到应用;P028 指出共享内存 Hogwild! 不能原样搬到带 barrier 的 Spark。

OVERVIEW 03

讲解路线

单元页码类型共同任务补足 / 视觉重点
U01 · 从课程地图进入优化问题P001-P002导读建立章节范围和三段路线。源页公式与文字
U02 · 从回归残差到平方损失目标P003-P005概念 / 视觉把预测误差明确成平方和目标。上下文补足;视觉重点
U03 · 为什么不存在通吃的优化算法P006概念把视野扩到不同搜索结构并建立算法选择原则。源页公式与文字
U04 · 梯度下降、凸性与三维二次算例P007-P008EXAMPLE建立梯度下降机制并完成一个数值算例。上下文补足;源页公式与文字
U05 · Batch 与 stochastic:先看直观差异P009对比给出 batch 与 SGD 的直观对照表。源页公式与文字
U06 · DAG、work-depth 与 Brent 定理P010-P013模型建立并行算法的 work-depth 计量和有限处理器界。上下文补足;视觉重点
U07 · 平方损失的并行梯度与完整复杂度P014-P017推导 / 复杂度把该框架应用到最小二乘的目标、梯度和多轮更新。上下文补足;源页公式与文字
U08 · SGD 的更新、误差阶与总成本P018-P019对比用同一套指标量化 SGD 的收益和代价。源页公式与文字
U09 · 从竞态到 Hogwild! 的无锁稀疏更新P020-P022算法用稀疏性把竞态从必须锁定的问题改写为可容忍的低概率冲突。上下文补足;源页公式与文字
U10 · 单机并行与分布式通信的选择P023综合把算法复杂度转译成单机 GPU 与分布式集群的部署倾向。源页公式与文字
U11 · 从应用地图到 Spark 实现假设P024-P025应用导入固定 Spark 场景和 n、m 的内存假设。源页公式与文字
U12 · Spark batch 梯度下降的数据流与瓶颈P026-P027算法把 full batch 更新映射为 Spark 的 RDD、map、reduce 和同步迭代。上下文补足;源页公式与文字
U13 · Spark 为何更适合 mini-batch 而非原样 Hogwild!P028系统权衡解释共享内存 Hogwild! 与 Spark stage/barrier 的不匹配,并给出 mini-batch 折中。上下文补足;源页公式与文字
U14 · PCA:最大化投影等价于最小化残差P029应用 / 视觉从数据维数入手,在优化前减少模型与通信规模。上下文补足;视觉重点
U15 · 线性规划与 simplex 的改进方向P030应用展示线性约束下通过 pivot 改进目标的另一类优化方法。上下文补足;源页公式与文字
U16 · 用五个问题闭合本讲主线P031-P032回顾用源页五问检查从算法、复杂度到系统实现的完整掌握。源页公式与文字

OVERVIEW 04

核心公式索引

公式 / 模型变量与条件用途单元 / 页码
f(\alpha x+(1-\alpha)y)\leq\alpha f(x)+(1-\alpha)f(y)\alpha\in[0,1];凸函数保证驻点不落在非全局局部最小U04 / P007
X_{k+1}=X_k-\alpha\nabla f(X_k)X_k 参数;\alpha 步长梯度下降更新U04 / P007-P008
T_1/p\leq T_p\leq T_1/p+T_\inftyPRAM;work 与关键路径估计有限 p 处理器时间U06 / P012-P013
F(w)=\sum_i\lVert x_i^\top w-y_i\rVert_2^2m 样本;n 维模型平方损失与两层并行U07 / P014-P017
\nabla F(w)=2\sum_i x_i(x_i^\top w-y_i)强凸、可微、L-smoothbatch 完整梯度U07 / P017
O(\log(1/\varepsilon)\log mn)batch;理想并行归约完整 batch depthU07 / P017-P019
w_{k+1}=w_k-\alpha\nabla F_{s_k}(w_k)s_k 均匀随机样本SGD 单样本更新U08 / P018-P019
w^{(k)}\leftarrow w^{(k)}-\alpha[\nabla F_j(w)]^{(k)}稀疏非零坐标;无锁Hogwild! 坐标更新U09 / P022
V^2=M^2+m^2均值中心化;正交投影PCA 最大投影与最小残差等价U14 / P029
M01

小数据中的优化基础

从回归残差建立平方损失,理解梯度下降、凸性、步长和 batch/SGD 的直观差异。

P001-P009

模块衔接: 课程先在不引入分布式成本的条件下把优化对象和更新规则讲清,再进入并行模型。

U01 · 导读P001-P002 / 32

从课程地图进入优化问题

为什么合在一起讲: 封面给出课程、章节与时间,章节地图随即指出本讲将按“小数据 → 大数据 → 应用”推进;两页共同建立阅读坐标。

完整讲解

核心思想: 本讲把优化放在一条连续主线上:先定义损失,再选择更新规则,最后用并行模型与系统约束判断怎样计算;算法目标不变,计算粒度与瓶颈在变。
本章放在课程中的位置

这讲不是把优化当作孤立的数学主题。课程名指向 big data,章节名是 Optimization,因此后面所有算法都会同时接受两个标准:目标函数是否下降,以及数据规模、处理器和通信是否允许这样算。

P001 的作者与学期信息保留了来源边界。P002 则把 Optimization 放在中心,三条分支不是并列术语表,而是后续页面的真实顺序。

三段式知识路线

Small data 部分先从回归、平方误差和普通梯度下降建立更新规则。Big data 部分加入 PRAM、DAG、work、depth,再比较 batch、SGD 与 Hogwild!。Applications 部分把前面的结论带入 Spark,并连接 PCA 与线性规划。

读图时应关注分支颜色:P002 高亮 Small data,P010 改为 Big data,P024 再改为 Applications。这个视觉变化就是模块切换标记。

阅读时要守住的主线

全讲反复改变的是计算粒度:先对一个残差定义损失,再对全部样本求和;随后把总梯度拆到处理器;最后在共享内存或集群中决定同步方式。每次“扩展”都不会改变优化目标,却会改变单步成本与系统瓶颈。

本单元在知识链中的位置

承接上一单元

无;这是课程入口。

本单元任务

建立章节范围和三段路线。

组内推进

P001 定位课程,P002 给出主题地图并高亮第一段。

导向下一单元

进入回归与最小二乘,把优化目标具体化。

逐页详解P001-P002 · 2 页逐句翻译 · 本页解释
P001
课程标题
原页逐句翻译: 《Methods and tools for big data(大数据的方法与工具)》;第 5 章:Optimization(优化);Manuel,2026 年夏季。

本页解释: 封面把本讲定位为大数据课程的优化章节。黄色 Hadoop 标志是课程视觉识别,不提供额外技术结论。

P002
章节组织:小数据入口
原页逐句翻译: 章节组织:中心主题是 Optimization(优化),三个分支依次为 Small data(小数据)、Big data(大数据)和 Applications(应用)。

本页解释: 图中 Small data 分支为深色,表示本段先从单机、基础统计与普通梯度下降入手;大数据和应用将在 P010、P024 依次切换。

本单元页间主线: P001 课程标题 → P002 章节组织:小数据入口。

读完本单元应掌握: 能说出本讲三个阶段,以及为什么大数据课程中的优化必须同时讨论算法和系统。
U02 · 概念 / 视觉P003-P005 / 32

从回归残差到平方损失目标

含上下文补足

为什么合在一起讲: P003 定义回归和平方和,P004 把误差画成观测点到拟合线的垂直残差,P005 再把这一误差抽象成目标函数;三页完成“统计问题 → 几何证据 → 优化形式”的闭环。

完整讲解

核心思想: 回归把每个样本的预测残差平方后求和,并选择使总损失最小的参数;平方使正负偏差同样受罚,也会更重地惩罚大残差。关键对象是残差平方和。
\sum_i r_i^2
变量关系如何变成可计算目标

回归先区分因变量与自变量。以 P004 为例,Protein 是输入,Sugar 是响应;模型接收横坐标并给出蓝线上的预测。linear、logistic 和 polynomial 的形式不同,但给定参数后,每个样本都会产生一个预测和一个误差。

P003 用 sum of squares 评价整组预测:把每个样本的残差平方后相加。参数学习随之变成明确的最小化任务,目标是让所有样本的总误差尽量小。

如何读 P004 的残差图

红点是观测,蓝线是预测,黑色竖线是在固定 Protein 值下沿 Sugar 轴量出的预测误差。红点在线上方时残差为正,在线下方时为负;平方后两类误差都贡献正值。图中较长的黑线在平方和里权重更大,所以拟合会优先压低大的偏差。

横纵轴都以克为单位,残差沿 Sugar 方向测量。这幅图用来固定误差的定义:同一 Protein 值下,比较观测 Sugar 与蓝线预测 Sugar 的差。

objective、cost、loss 与 error 的关系

P005 把依赖输入 x 的函数 f 叫作 objective function 或 criterion;做最小化时又常叫 cost、loss 或 error function。这些词在本讲里承担同一角色:用一个标量判断当前参数好坏,梯度下降负责把它压低。

在残差均值已控制、样本数固定的回归设置中,平方和与残差方差只差比例因子或自由度修正,因此课件把最小化平方误差和写成最小化方差。

从这里到梯度下降

从一张拟合图可写出优化任务:选择模型参数,计算每个样本的预测残差,平方并求和,再寻找总和最小的位置。P007 给出寻找最小值的梯度下降机制,P015 再把同一个目标写成向量形式并拆成可并行的逐样本项。

本单元在知识链中的位置

承接上一单元

U01 给出了 Small data 作为第一入口。

本单元任务

把预测误差明确成平方和目标。

组内推进

定义变量 → 读残差图 → 抽象为目标函数和损失。

导向下一单元

进入不同优化问题和算法选择,随后学习梯度下降。

逐页详解P003-P005 · 3 页逐句翻译 · 本页解释
P003
回归分析基础
原页逐句翻译: 回归分析基础:寻找以下变量之间的关系,一类是 dependent variable(因变量),即结果变量或响应变量;另一类是 independent variables(自变量),即预测变量或解释变量。回归有许多类型,最常见的是 linear、logistic 和 polynomial regression(线性、逻辑与多项式回归)。目标是让预测误差最小。误差评估:误差常用 sum of squares(平方和)衡量,即把每个点的误差平方后求和;平方和的最小值称为 least squares(最小二乘);误差越小,模型越好。

本页解释: 这一页给出后续优化问题的来源:模型参数并非凭直觉挑选,而是由误差函数决定。这里的 logistic 原文写作 logistics,结合上下文应理解为 logistic regression;翻译保留正确术语但不把拼写错误扩展成新概念。

P004
残差图
原页逐句翻译: 横轴为 Protein (g),标出 0、50、100;纵轴为 Sugar (g),标出 5、10。图中红点表示观测值,蓝线表示拟合直线,黑色竖线连接观测值与同一蛋白质含量下的拟合值。

本页解释: 先看蓝线给出的预测,再看每个红点到蓝线的黑色竖直距离。这个有正有负的竖直差就是残差;平方和把这些距离平方后相加,因此较长残差会被更强地惩罚。图只展示几何关系,没有给出拟合方程或样本表,不能从中反推精确系数。

P005
优化问题与平方损失
原页逐句翻译: 优化回顾:目标是让依赖输入 x 的函数 f 最大或最小;函数 f 称为 objective function(目标函数)或 criterion(准则);在最小化过程中,f 也常称为 cost、loss 或 error function(代价、损失或误差函数)。关于最小二乘最小化:无论误差为正还是负,绝对值很大的误差都不好;平方会让大残差比小残差受到更重惩罚;误差常由 systematic noise 与 random noise(系统噪声与随机噪声)组成;最小化平方误差和等价于最小化方差。

本页解释: P003 的“预测误差”在这里被抽象成可优化的函数。平方既消除符号抵消,也让离群的大残差贡献按二次速度增长。最后一句应放在课件的回归设定中理解:当残差围绕零组织时,平方和与残差方差只差样本数或自由度等比例因子。

本单元页间主线: P003 回归分析基础 → P004 残差图 → P005 优化问题与平方损失。

上下文补足: 平方损失成立时的最小条件背景

上下文补足: “平方和最小”等价于“方差最小”需要残差中心和归一化口径固定。若模型带偏置、使用不同权重或比较不同样本数,比例因子和自由度需要单独处理。本补足只限制课件结论的适用范围,不改变其后续复杂度推导。

读完本单元应掌握: 能逐项解释残差图,并说明平方和为何既消除符号抵消又加重较大残差。
U03 · 概念P006 / 32

为什么不存在通吃的优化算法

为什么合在一起讲: 本页用三个结构差异很大的问题引出 No Free Lunch,单页独立回答“为什么算法选择必须依赖问题”。

完整讲解

核心思想: “最小化”只说明目标方向,不决定算法;变量、约束、目标误差和资源结构共同决定合适的方法,因此不存在对所有优化问题都最优的通用策略。
问题结构决定搜索空间

芯片布线关心几何交叉,排课关心离散冲突,旅行商关心排列与路径长度。三者都能写成最小化,却有不同的变量、约束和邻域操作;同一个搜索策略不会在三类结构上自动保持优势。

No Free Lunch 在本讲中的用法

课件的结论是:没有对所有搜索问题都最好的方法。后面的 batch、SGD、Hogwild! 也应按这个标准阅读。比较对象不是一个脱离环境的“最快算法”,而是问题曲率、数据稀疏性、目标误差、内存与通信共同决定的合适方案。

本单元在知识链中的位置

承接上一单元

U02 把回归写成一个具体最小化问题。

本单元任务

把视野扩到不同搜索结构并建立算法选择原则。

组内推进

三个例子显示结构差异,No Free Lunch 总结其后果。

导向下一单元

进入梯度下降,并在一个凸二次函数上完整执行更新。

逐页详解P006 · 1 页逐句翻译 · 本页解释
P006
优化问题举例与 No Free Lunch
原页逐句翻译: 常见优化问题示例:芯片设计,要确保计算机芯片上的线路不交叉;课程表,在已知每门课学生名单时,让冲突数最小;旅行商问题,在给定城市列表时,让访问所有城市所需距离最短。No free lunch theorem(没有免费午餐定理):不存在对所有搜索问题都最好的解法;在某些问题上表现更好的算法会在另一些问题上表现更差;通常需要投入工作来找出最适合的算法。

本页解释: 三个例子分别涉及布局、组合冲突与路径选择,决策变量和可行域完全不同。No Free Lunch 在本讲承担的是选择原则:后面比较 batch、SGD、Hogwild! 和 Spark 实现时,不能只问“谁最快”,还要同时看数据规模、稀疏性、同步与通信。

本单元页间主线: P006 优化问题举例与 No Free Lunch。

读完本单元应掌握: 能用本页三个例子说明为什么优化目标相似并不意味着求解器相同。
U04 · EXAMPLEP007-P008 / 32

梯度下降、凸性与三维二次算例

含上下文补足

为什么合在一起讲: P007 给出算法、停止条件和凸性保证,P008 立即把梯度、方向、步长和六次迭代代入具体函数;题意与解法不可拆开。

完整讲解

核心思想: 梯度给出最陡上升方向,最小化应沿负梯度更新;凸性保证不会被较差的局部极小值困住。关键是按负梯度迭代。
X_{k+1}=X_k-\alpha\nabla f(X_k)
先确定方向,再讨论终点

X=(x_1,\ldots,x_n) 而言,梯度收集各坐标偏导,指向函数增长最快方向。最小化使用负梯度,标准一步写作 X_{k+1}=X_k-\alpha\nabla f(X_k)。课件说“选择方向并继续向下”,P008 的数值更新明确了这里实际减去梯度。

梯度为零只是驻点条件。P007 加入凸性不等式,是为了排除局部低谷:凸函数任意两点之间的函数值不超过端点线性插值,因而不存在比当前局部谷底更低的隐藏区域。若进一步强凸,最小值唯一,后文还可给出误差收敛率。

把算例第一步完整算出来

目标函数 f(X)=0.5x_1^2+0.2x_2^2+0.6x_3^2 的三个偏导分别是 x_10.4x_21.2x_3。在 X_0=(-2,2,-2) 处,梯度是 (-2,0.8,-2.4)。课件把它称为最陡下坡方向,但数值更新使用的是减去该向量;严格说,梯度本身是最陡上升方向,负梯度才是下坡方向。

步长为 1 时,X_1=X_0-\nabla f(X_0):第一坐标变成 0,第二坐标从 2 降为 1.2,第三坐标从 -2 跳到 0.4。三个方向的曲率不同,所以收缩速度不同;到 X_6 时第三坐标约为 0.0000256,第二坐标仍约为 0.0569

固定步长为什么会慢或越界

沿某个坐标看,步长过小会让每次变化很少;步长过大则可能从谷底一侧跳到另一侧,甚至发散。这个例子中第三坐标系数最大,梯度对同样坐标值反应更强,固定步长最容易在高曲率方向发生过冲。

因此步长不是与问题无关的常数。P014 后面给出在 L‑Lipschitz 梯度条件下取 α<1/L 的理论界,用曲率上界限制稳定步长。

Taylor/Hessian 提示的二阶路线

P008 最后用 Taylor expansion 引出 Hessian。梯度只告诉当前斜率,Hessian 还描述各方向曲率;用曲率校正更新可把不同尺度的坐标统一起来,并允许课件所说的步长 1。代价是构造并求解二阶系统,直接求逆复杂度记为 O(n^3),当模型维数很大时未必划算。

这正呼应 U03:一阶法每步便宜但可能多走很多步,二阶法每步昂贵却可能更快靠近最小值。算法选择取决于维数、曲率和可用计算资源。

本单元在知识链中的位置

承接上一单元

U03 说明算法选择依赖问题结构。

本单元任务

建立梯度下降机制并完成一个数值算例。

组内推进

定义更新与凸性 → 求梯度 → 代入 X0 → 解释 X6、步长和 Hessian。

导向下一单元

U05 先做 batch/SGD 直观比较,随后进入并行成本模型。

逐页详解P007-P008 · 2 页逐句翻译 · 本页解释
P007
梯度下降与凸性
原页逐句翻译: 梯度下降通常用最小化来描述。对函数 f(X),其中 X=(x_1,\ldots,x_n),基本设置是:迭代地产生序列 X_i;每一步确定各个方向上的梯度;选择一个方向并继续向下;重复,直到所有方向的梯度都为 0。说明:函数 f 应为凸函数,即对任意 x,y\in\mathbb{R}^d\alpha\in[0,1],都有 f(\alpha x+(1-\alpha)y)\leq \alpha f(x)+(1-\alpha)f(y),从而保证它有全局最小值,算法不会返回局部最小值。

本页解释: 梯度指出函数增长最快的方向,所以最速下降使用负梯度。课件把停止条件写成梯度在所有方向为零;这个条件只说明到达驻点,凸性才把驻点提升为全局最小值。图中凸性不等式表达“弦在线上、函数图像在线下”。

P008
梯度下降算例
原页逐句翻译: 例:对 f(X)=0.5x_1^2+0.2x_2^2+0.6x_3^2,得到 \nabla f(x)=(x_1,0.4x_2,1.2x_3)。步长取 1,从 X_0=(-2,2,-2) 出发,最陡下坡方向为 (-2,0.8,-2.4),因此得到 X_1=(0,1.2,0.4)。若干次迭代后,得到 X_6=(0,0.0569,0.0000256)。说明:固定步长可能使算法非常缓慢,也可能越过最小值;Taylor expansion(泰勒展开)可以加速计算,这需要对 f 的 Hessian matrix(Hessian 矩阵)求逆,代价为 O(n^3)。不过这种方法允许保持步长 1,从而简化计算的其他部分。

本页解释: 更新实际使用 X_{k+1}=X_k-\nabla f(X_k)。例如第一坐标从 -2 变为 -2-(-2)=0;第二坐标变为 2-0.8=1.2;第三坐标变为 -2-(-2.4)=0.4。不同二次系数带来不同收缩速度。课件后半所说的 Taylor/Hessian 对应二阶方法的入口;求逆更贵,但曲率信息能校正各方向尺度。

本单元页间主线: P007 梯度下降与凸性 → P008 梯度下降算例。

上下文补足: 从一阶梯度到二阶曲率模型切换

上下文补足: 课件所述 Taylor/Hessian 路线可理解为 Newton 类方法。典型更新为 X_{k+1}=X_k-H_f(X_k)^{-1}\nabla f(X_k)。实际实现通常求解线性系统而非显式求逆;O(n^3) 是稠密直接法的量级,不代表所有稀疏或近似二阶方法。

读完本单元应掌握: 能独立重算 X0 到 X1,区分梯度与负梯度,并说明凸性、步长和 Hessian 各解决什么问题。
U05 · 对比P009 / 32

Batch 与 stochastic:先看直观差异

为什么合在一起讲: 这页是后续定量比较的预告,独立保留可避免把未经复杂度模型支持的直觉与 P017-P019 的结论混在一起。

完整讲解

核心思想: Batch 用全数据换稳定方向与较少迭代;SGD 用单样本换便宜的一步与随机扰动。比较时必须分开看单步成本、收敛轮数和所需解的精度。
两个“快”不是同一件事

Batch 使用全数据,一步慢但方向稳定,达到目标误差所需迭代少;SGD 一步只看随机样本,一步快却需要更多迭代。课件左右栏的“slow but fast to converge”和“fast but slow to converge”必须按这两个时间尺度理解。

解质量与局部最小值

课件把 batch 描述为最优、SGD 描述为足够好,并认为随机性有助于逃离局部最小值。对前面给定的强凸问题,局部最小值并非核心困难;这组话更像面向一般非凸优化的直觉。P019 会把可比较部分收敛到 work、depth 与 ε。

本单元在知识链中的位置

承接上一单元

U04 已建立普通梯度下降的一次更新。

本单元任务

给出 batch 与 SGD 的直观对照表。

组内推进

按数据使用、随机性、单步成本、收敛与解质量成对比较。

导向下一单元

进入 Big data 模块,用 DAG 和 work-depth 给“快慢”统一计量。

逐页详解P009 · 1 页逐句翻译 · 本页解释
P009
Batch 与 stochastic 梯度下降预览
原页逐句翻译: Gradient descent(梯度下降):使用整个数据集;是确定性方法;每步慢但收敛快;给出最优解;逃离局部最小值较慢。Stochastic gradient descent(随机梯度下降):随机选择一个样本;是随机方法;每步快但收敛慢;给出足够好的解;逃离局部最小值更快。

本页解释: 这里的“快/慢”分属两个尺度:一次迭代的成本与达到目标误差所需迭代数。后文 P017-P019 会把直觉写成 work、depth 和误差精度的数量级;“最优”与“足够好”也依赖课件所设的凸性和停止条件。

本单元页间主线: P009 Batch 与 stochastic 梯度下降预览。

读完本单元应掌握: 能区分单步速度、迭代数和总运行成本,不把“fast”当成单一指标。
M02

大数据并行模型与梯度策略

用 DAG、work-depth 和 Brent 定理分析平方损失,并比较 batch、SGD、Hogwild! 在共享内存与分布式环境中的代价。

P010-P023

模块衔接: 定性快慢被改写为 work、depth、迭代数和通信轮次,算法选择开始依赖执行架构。

U06 · 模型P010-P013 / 32

DAG、work-depth 与 Brent 定理

含上下文补足

为什么合在一起讲: P010 切换到 Big data,P011 用 DAG 表达依赖,P012 定义 T1/Tp/T∞,P013 用 Brent 定理连接有限处理器;四页共同建立后文复杂度分析的统一语言。

完整讲解

核心思想: 并行时间同时受总工作和最长依赖链限制:处理器能分摊 work,不能消除 depth。Brent 定理把两种限制合在同一个界内。
T_1/p\leq T_p\leq T_1/p+T_\infty
从章节切换到依赖图

P010 高亮 Big data,意味着问题从“更新公式怎么写”转向“哪些操作能同时做”。P011 把每条指令画成 DAG 节点;若 u 依赖 v,则必须等 v 完成后才能得到 u。图中 a 是最终结果,向下连接 b、k、c 等依赖分支。

互不相连的分支可以并行,例如 a 所需的 b、k、c 在其各自依赖满足后可同时准备;同一条链上的节点不能调换。沿图从 a 到叶节点的最长依赖链,给出了算法无法被更多处理器消除的串行部分。

T1、Tp 与 T∞分别测什么

T_1 是单处理器时间,可视为完成全部基本操作的总工作规模;T_p 是实际给 p 个处理器后的完成时间;T_\infty 假设可用处理器无限,时间由依赖链决定,因此对应 depth 或 critical path。

P012 的问题可直接从 DAG 读取:若最长依赖链有四层,即使每层所有节点同时完成,计算仍需四个单位时间。更多处理器分摊同层 work,关键路径保留顺序。

Brent 上下界的两股力量

Brent 定理给出 T_1/p\leq T_p\leq T_1/p+T_\infty。左边是容量下界:p 个处理器每单位时间最多消化 p 份工作。右边说明可以把调度做到接近理想均分,额外损失不超过一条关键路径量级。

T_1/p 远大于 T_\infty 时,增加处理器能近似线性加速;当 T_1/p 已经很小,关键路径占主导,再加处理器收益有限。于是 T_1T_\infty 缺一不可:只看总工作不知道并行上限,只看深度不知道资源不足时的代价。

理想模型与真实机器的边界

课件关于 CPU 数的结论处在 PRAM 设定中:共享内存访问等成本,不计网络、缓存一致性和锁竞争。后文的 Hogwild! 与 Spark 则把这些系统成本放回分析。

分析顺序很直接:先画依赖,算总 work,再找 depth,最后用处理器数估计 T_p。P016-P017 会把这套方法用于平方损失的求和和梯度。

本单元在知识链中的位置

承接上一单元

U05 只有定性“快/慢”,尚无统一成本尺度。

本单元任务

建立并行算法的 work-depth 计量和有限处理器界。

组内推进

模块切换 → DAG 依赖 → 三个时间量 → Brent 上下界。

导向下一单元

把平方损失与梯度拆成并行求和,计算完整 batch 梯度下降复杂度。

逐页详解P010-P013 · 4 页逐句翻译 · 本页解释
P010
章节组织:进入大数据
原页逐句翻译: 章节组织:中心主题是 Optimization(优化),三个分支为 Small data(小数据)、Big data(大数据)和 Applications(应用)。

本页解释: 与 P002 相比,深色高亮从 Small data 移到 Big data。接下来的问题不再只是更新公式是否正确,而是依赖链、处理器数、并行深度和通信能否支撑大规模数据。

P011
Directed Acyclic Graph
原页逐句翻译: 在使用 PRAM(见 slide 1.9)时:指令之间的依赖用 DAG(有向无环图)表示;每条指令表示为一个节点;一条边 (u, v) 表示 u 对 v 的依赖;根节点对应计算结果。图中根为 a,a 指向 b、k、c;b 指向 d、e,c 指向 f、g;d 指向 h,e 指向 i、j。

本页解释: 这张图的箭头从结果节点朝它所依赖的子任务画出,因此读图时从 a 向下追踪先决工作。独立分支可以同时执行,沿依赖链必须串行。最长依赖链决定即使处理器无限多也无法缩短的时间。

P012
Work-depth model
原页逐句翻译: 当最后一个处理器完成工作时,计算结束:使用一个 CPU 的时间称为 T_1;使用 p 个 CPU 的时间称为 T_p;使用无限多个 CPU 的时间称为 T_\infty。说明:算法的 depth(深度)由最后一个完成任务的 CPU 决定;算法的 work(工作量)对应完成全部任务所需时间乘以 CPU 数量。问题:T_\infty 会趋近于 0 吗?

本页解释: T_1 近似总工作量,T_\infty 是关键路径长度。无限处理器只能同时执行互不依赖的节点,不能打破 DAG 上的先后关系,所以 T_\infty 不会自动变成 0。课件把 work 写成时间乘处理器数;更一般地,它是所有基本操作的总数。

P013
Brent 上下界
原页逐句翻译: Brent 定理:
\frac{T_1}{p}\leq T_p\leq \frac{T_1}{p}+T_\infty
结果含义:如果工作在全部 p 个 CPU 之间均匀分配,就得到 T_1/pT_\infty 帮助定义实际情况离理想情况有多远。说明:T_1T_\infty 共同提供算法在 p 个 CPU 上表现的信息;增加 CPU 数量绝不会影响性能。work-depth model 有助于设计更好的并行算法。

本页解释: 下界 T_1/p 来自“总工作至少要由 p 个处理器分担”;上界说明调度开销可控制在理想均分时间再加一条关键路径。最后一句关于增加 CPU 的判断属于理想 PRAM 模型:现实机器可能受通信、缓存和同步影响,处理器更多并不保证实际运行时间单调改善。

本单元页间主线: P010 章节组织:进入大数据 → P011 Directed Acyclic Graph → P012 Work-depth model → P013 Brent 上下界。

上下文补足: 关键路径不是节点总数图示解读

上下文补足: 对 P011,work 由全部节点贡献,depth 只由最长依赖链贡献。宽而浅的图有大量并行机会;窄而深的图即使节点不多,也受串行链约束。这一区分将直接用于 P016 的树形求和。

读完本单元应掌握: 能从 DAG 找关键路径,解释 T1、Tp、T∞,并用 Brent 定理判断增加处理器何时有效。
U07 · 推导 / 复杂度P014-P017 / 32

平方损失的并行梯度与完整复杂度

含上下文补足

为什么合在一起讲: P014 建立逐样本损失和与收敛条件,P015 特化为最小二乘,P016补上并行归约,P017 才能推得一次和完整梯度下降的 work/depth;这是一个连续推导。

完整讲解

核心思想: 平方损失可按样本和坐标拆分并用树形归约合并;每轮的总工作与理想深度不同,迭代之间仍必须串行地更新参数。
\mathrm{work}=O(mn),\qquad \mathrm{depth}=O(\log mn)
经验风险如何拆成两层并行

总体目标 F(w)=\sum_{i=1}^{m}F_i(w,x_i,y_i)m 个样本贡献相加。对平方损失,单项是 \lVert x_i^\top w-y_i\rVert_2^2:先做长度 n 的内积,再形成残差与平方。不同样本之间独立,单个内积的不同乘加也能拆分,所以课件把 m 称为数据并行,把 n 称为模型并行。

目标值和梯度都需要聚合全部样本。梯度 2\sum_i x_i(x_i^\top w-y_i) 的每项是长度 n 的向量;每个处理器可先算局部向量,随后按坐标归约。两者都保留相同的 mn 总算术规模。

P016 为什么是推导中缺失的一步

若按 P016 的 Basic summation 把所有元素串行累加,work 与 depth 都是 O(n);这会浪费处理器。树形归约第一层同时算相邻两项,下一层再合并部分和,层数为 O(\log n)。总加法数没有下降,所以 work 仍为 O(n)

把同一思路用到样本和坐标,可在理想 PRAM 下把 mn 份工作安排为对数深度。P017 因而给目标值和梯度都标为 work O(mn)、depth O(\log mn)。这里的对数深度假设有足够处理器和并行归约结构。

一次更新为何仍依赖上一次

梯度算完后,参数按 w_{k+1}=w_k-\alpha\nabla F(w_k) 更新。第 k+1 次梯度必须用新的 w_{k+1} 才能计算,迭代之间形成一条串行链,不能像样本项那样同时展开。

在强凸、可微且梯度 L‑Lipschitz 的课件条件下,取 \alpha<1/L 可得到几何收敛:误差每轮按固定比例缩小,因此达到 \varepsilon 需要 O(\log(1/\varepsilon)) 轮。这个迭代数不是来自并行求和,而是来自优化误差递减。

完整 depth 如何组合

每轮 depth 是 O(\log mn),轮数是 O(\log(1/\varepsilon));由于轮与轮串行,总 depth 相乘为 O(\log(1/\varepsilon)\log mn)。总 work 同理是 O(mn\log(1/\varepsilon));P017 只把总 depth 写在页上,P019 会把总 work 一并列出。

这个推导给出一个重要分界:样本内与样本间的算术能高度并行,优化迭代链不能。后面 SGD 会通过减少每轮样本把单步 work 降低,却会付出更多迭代。

从算法基线到系统成本

这里的数量级建立在平方损失、强凸性、L‑smooth、理想 PRAM 与树形归约上。把它部署到集群后,梯度传输、参数广播和慢节点等待会进入每轮时间;P023 与 P027 接着用通信轮数和 Spark 数据流分析这些成本。

本单元在知识链中的位置

承接上一单元

U06 提供了 DAG、work、depth 与 Brent 的分析框架。

本单元任务

把该框架应用到最小二乘的目标、梯度和多轮更新。

组内推进

逐样本目标 → 并行归约 → 单轮 work/depth → 收敛轮数 → 总 depth。

导向下一单元

改成单样本随机梯度,比较降低单步成本与增加迭代数的后果。

逐页详解P014-P017 · 4 页逐句翻译 · 本页解释
P014
回到梯度下降:经验风险
原页逐句翻译: 从一般观点看,梯度下降是优化问题:
\min_w F(w)=\sum_{i=1}^{m}F_i(w,x_i,y_i)
其中 x_i\in\mathbb{R}^ny_i\in\mathbb{R} 是一个“label”,w 是希望优化的参数。梯度下降从随机初始 w 开始,通过 w_{k+1}=w_k-\alpha\nabla F(w_k) 迭代改进,其中 \alpha 较小;这里目标函数 F 是损失函数。理论上,当 F strongly convex(强凸)、可微,且 \nabla FL‑Lipschitz 连续时效果尤其好;此时取 \alpha<1/L 会以指数收敛率到达全局最小值。

本页解释: 求和形式把数据维度和模型维度分开:m 是样本数,n 是每个样本和参数的维数。强凸性给出唯一且有曲率下界的谷底,L‑Lipschitz 梯度限制曲率上界;\alpha<1/L 让每步不至于越过稳定区。后面的复杂度结论都以这些理论条件为背景。

P015
平方和损失
原页逐句翻译: 对平方和损失函数,希望最小化
F(w)=\sum_{i=1}^{m}F_i(w,x_i,y_i)=\sum_{i=1}^{m}\lVert x_i^\top w-y_i\rVert_2^2
其中 x_iy_iw 与上一页相同。当前设置说明:F 强凸且 \nabla F Lipschitz 连续;m 对应 data parallelism(数据并行);n 对应 model parallelism(模型并行)。问题:梯度下降扩展到大规模时表现如何?

本页解释: x_i^\top w 是第 i 个样本的线性预测,减去 y_i 得到标量残差;标量上的 \lVert\cdot\rVert_2^2 就是平方。按样本拆分求和可让不同处理器计算不同 F_i;单个内积的 n 个坐标也可并行归约,因此出现数据并行和模型并行两层结构。

P016
并行求和
原页逐句翻译: 如何并行地对 n 个元素求和?算法(Basic summation):输入是含 n 个元素的数组 a;输出 sa 中所有元素之和。第 1 步令 s\leftarrow0;第 2 步对 i\leftarrow1,\ldots,n 循环;第 3 步令 s\leftarrow s+a[i];第 4 步结束循环;第 5 步返回 s。基本求和的 work 为 O(n)、depth 为 O(n)。目标是 work 仍为 O(n)、depth 降为 O(\log n)

本页解释: 串行循环的每次加法都依赖上一次的 s。并行归约改成两两相加:第一层约做 n/2 次,第二层约做 n/4 次,直到剩一个和。总加法数仍是 n-1,但依赖层数只有 \lceil\log_2 n\rceil。这正是 P017 中内积与跨样本求和深度为对数级的来源。

P017
梯度下降的 work 与 depth
原页逐句翻译: 计算 F(w)=\sum_{i=1}^{m}\lVert x_i^\top w-y_i\rVert_2^2 的复杂度:work 为 O(mn),depth 为 O(\log mn)。计算 \nabla F(w)=2\sum_{i=1}^{m}x_i(x_i^\top w-y_i) 的复杂度同样是 work O(mn)、depth O(\log mn)。完成一次完整梯度下降:达到误差 \varepsilon 需要 O(\log(1/\varepsilon)) 次迭代;总 depth 为 O(\log(1/\varepsilon)\log(mn))。问题:梯度下降对并行化与大数据有多合适?

本页解释: 每个样本的长度 n 内积带来线性总工作,不同坐标和不同样本可以树形归约,所以理想深度写成对数级。完整算法的迭代之间不能同时执行,因为第 k+1 步依赖 w_k;因此总深度是“每步深度 × 迭代数”。这也解释了为什么单步高度并行仍不等于整个优化过程无串行瓶颈。

本单元页间主线: P014 回到梯度下降:经验风险 → P015 平方和损失 → P016 并行求和 → P017 梯度下降的 work 与 depth。

上下文补足: 树形归约的最小例子推导入口

上下文补足: 8 个数串行相加需要 7 个依赖步骤;树形归约分三层完成:4 次并行加法、2 次并行加法、1 次加法。work 仍是 7,depth 从 7 降为 \log_2 8=3。这就是 P016 目标复杂度的具体形状。

读完本单元应掌握: 能从平方损失推导梯度,并解释 O(mn)、O(log mn) 与 O(log(1/ε)log mn) 中每个因子来自哪里。
U08 · 对比P018-P019 / 32

SGD 的更新、误差阶与总成本

为什么合在一起讲: P018 定义随机单样本更新并给出迭代阶,P019 把它与 batch 的单轮和总 work/depth 对齐;两页共同回答“便宜的一步是否带来便宜的全过程”。

完整讲解

核心思想: SGD 以单个随机样本的梯度替代完整梯度;它减少每轮扫描的数据,却通常以更多迭代换取这一节省。
w_{k+1}=w_k-\alpha\nabla F_{s_k}(w_k)
随机梯度替代完整梯度

SGD 在第 k 轮均匀抽取索引 s_k,只算 \nabla F_{s_k}(w_k) 并更新 w_{k+1}=w_k-\alpha\nabla F_{s_k}(w_k)。由于不再遍历 m 个样本,单轮 work 从 O(mn) 降为 O(n);长度 n 的内积和向量操作可归约到 O(\log n) depth。

这一步是有噪声的完整梯度估计。不同随机样本给出不同方向,轨迹会抖动,因而课件采用的误差轮数从 batch 的 O(\log(1/\varepsilon)) 变为 O(1/\varepsilon)

总 work 的交叉点

Batch 总 work 是 O(mn\log(1/\varepsilon));SGD 总 work 是 O(n/\varepsilon)。前者随样本数 m 线性增长,后者在课件模型中与 m 脱钩,却对高精度 \varepsilon 更敏感。

例如只从数量级看,数据极大而容许中等误差时,省掉每轮全数据扫描可能占优;若要求极小误差,1/\varepsilon 的轮数会快速压过对数项。课件因此用问句收尾,而不是宣布固定赢家。

总 depth 与并行性的区别

Batch 总 depth 为 O(\log(1/\varepsilon)\log mn);SGD 为 O(\log n/\varepsilon)。SGD 单轮 depth 低,但轮数多,并且轮与轮仍依赖前一个参数。低单轮 depth 并不自动等于低总 depth。

还有一个尚未计入的系统问题:多个处理器若同时做 SGD,会读写同一 w。P020-P022 将显示,真正难点不是单个随机梯度怎么算,而是并发更新是否需要锁。

如何使用这张比较表

先确定数据规模 m、模型维度 n 和目标误差 ε,再看硬件能否提供理想归约。最后还要加入同步与通信。这样得到的是条件化选择:单机共享内存、GPU 数量、稀疏性与分布式网络会改变同一复杂度式子的实际代价。

比较时使用同一把尺

P019 把两种方法放在同一误差符号 \varepsilon 下,比较的是同一目标差或解误差的收敛阶。表中的 \log(1/\varepsilon)1/\varepsilon 说明高精度目标会显著放大 SGD 的迭代数。

随机梯度的方差和步长安排也会影响实际轨迹。本讲保留源页给出的迭代阶,下一单元转向并发写入,把复杂度表外的共享参数成本加入讨论。

本单元在知识链中的位置

承接上一单元

U07 已算出 full batch 的单轮与完整成本。

本单元任务

用同一套指标量化 SGD 的收益和代价。

组内推进

定义随机更新 → 给误差轮数 → 并列单轮与总复杂度 → 保留条件化结论。

导向下一单元

进入共享内存并发,处理竞态、锁与 Hogwild!。

逐页详解P018-P019 · 2 页逐句翻译 · 本页解释
P018
Stochastic gradient descent
原页逐句翻译: 不计算完整梯度,而把更新应用到随机选中的一个点。沿用 slide 5.14 的记号:令 s_k 为第 k 次迭代均匀采样的索引,并计算序列
w_{k+1}=w_k-\alpha\nabla F_{s_k}(w_k)
关于从 batch 到 stochastic 的变化:达到误差 \varepsilon 需要 O(1/\varepsilon) 次迭代;工作量随所考虑点数线性下降;样本点数减少时,迭代次数不会线性增加。

本页解释: SGD 用 \nabla F_{s_k} 作为完整梯度的随机估计。一次更新只看一个长度为 n 的样本,所以单步便宜,但噪声让收敛从课件给出的对数迭代阶退化为 O(1/\varepsilon)。最后两条共同表达一个折中:减少每步样本数通常能节省总计算,但节省比例不能只用“样本减少多少倍”机械推断。

P019
Stochastic 与 batch 复杂度
原页逐句翻译: Gradient descent:每次迭代的 work 为 O(mn)、depth 为 O(\log mn);总 work 为 O(mn\log(1/\varepsilon));总 depth 为 O(\log(1/\varepsilon)\log mn)。Stochastic gradient descent:每次迭代的 work 为 O(n)、depth 为 O(\log n);总 work 为 O(n/\varepsilon);总 depth 为 O(\log n/\varepsilon)。问题:梯度下降和随机梯度下降哪个最好?

本页解释: 比较必须同时代入 mn 和目标误差 \varepsilon。Batch 每步处理全部 m 个样本,却只需对数级迭代数;SGD 每步与 m 无关,却需要 1/\varepsilon 级迭代。数据规模、精度要求与硬件并行度不同,交叉点也不同,因此这一页刻意以问题收尾。

本单元页间主线: P018 Stochastic gradient descent → P019 Stochastic 与 batch 复杂度。

读完本单元应掌握: 能根据 m、n、ε 比较两种方法,并解释为什么单轮更便宜不保证总 depth 更低。
U09 · 算法P020-P022 / 32

从竞态到 Hogwild! 的无锁稀疏更新

含上下文补足

为什么合在一起讲: P020 暴露共享参数上的旧读与覆盖,P021 比较全局锁和稀疏碰撞,P022 才给出 Hogwild! 算法;三页是一条完整的问题—条件—方案链。

完整讲解

核心思想: Hogwild! 用稀疏样本降低坐标写冲突的机会,从而放弃全局锁并允许异步更新;其收益来自冲突足够少,而非竞态本身自动正确。关键是只写入相应坐标。
w^{(k)}\leftarrow w^{(k)}-\alpha[\nabla F_j(w)]^{(k)}
共享参数为何产生竞态

在 PRAM 设置中,所有 CPU 都读写同一 w。一次 SGD 更新包含读取参数、计算随机梯度、写回新参数。若两个 CPU 同时读到旧值,它们各自完成计算后再写回,后一次写入可能覆盖前一次更新;即使没有整向量覆盖,某些坐标也会丢失增量。

问题的根源不是梯度公式错误,而是 read–modify–write 缺少原子性。把 w 加全局锁可以恢复顺序语义,却会让所有处理器排队,SGD 的并行收益随之消失。

稀疏性怎样改变冲突代价

样本 x_i=(x_i^{(1)},\ldots,x_i^{(n)}) 若稀疏,单次梯度只更新与非零特征对应的少量 w^{(k)}。两个处理器随机抽到的样本支持集常常不重叠,于是它们可同时写不同坐标,无需为整向量加锁。

即使支持集偶尔重叠,课件的判断是碰撞概率在大数据稀疏场景中较低。这个判断依赖特征分布:若少数热门坐标在几乎所有样本中非零,实际冲突仍可能集中发生,Hogwild! 的优势会下降。

Hogwild! 的执行顺序

每个处理器独立重复三步:从 \{1,\ldots,m\} 随机采样 j;读取共享内存中当下可见的 w 并计算 F_j(w)\nabla F_j(w);只对样本非零坐标做 w^{(k)}\leftarrow w^{(k)}-\alpha[\nabla F_j(w)]^{(k)}。算法没有全局锁,也不等待其他 CPU 完成。

因此某个梯度可能基于稍旧的参数,写入顺序也不确定。Hogwild! 接受这种异步噪声,以换取接近 CPU 数量的线性加速;可接受的前提是目标更新稀疏、步长和延迟不会让误差失控。

索引与停止条件

P022 先采样索引 j,随后写出 x_i^{(k)}\neq0。这里应按所采样样本的非零坐标执行更新;逐页翻译保留原式,并标出这一处记号跳变。

“直到达到期望误差条件”给出停止目标。实现时可定期汇总或抽样评估当前误差;Hogwild! 取消的是参数更新的全局锁,误差监测仍可按系统需要安排。

和 batch 并行的差别

Batch 的并行点在一轮内部:各处理器算局部梯度,再同步归约。Hogwild! 的并行点跨越更新本身:处理器不等归约,直接异步改参数。两种方案分别把同步成本放在“每轮一次”和“尽量不锁”,这会直接影响单机与分布式系统的选择。

本单元在知识链中的位置

承接上一单元

U08 证明 SGD 单步便宜,但还没有说明多处理器如何共享参数。

本单元任务

用稀疏性把竞态从必须锁定的问题改写为可容忍的低概率冲突。

组内推进

竞态案例 → 全局锁代价 → 稀疏支持集 → 无锁坐标更新。

导向下一单元

U10 将共享内存结论与分布式通信并列,给出部署选择。

逐页详解P020-P022 · 3 页逐句翻译 · 本页解释
P020
并行 SGD 的共享内存风险
原页逐句翻译: PRAM 设置:把 w 保存在一块共享内存中;所有 CPU 都能访问 w 和整个数据集。可能出错的情况:某个模型被读取、变换并写回内存,但在此期间另一个 CPU 已经更新了模型;更新后的模型会被较旧的模型覆盖。问题:这种情况有多严重?

本页解释: 一次 SGD 更新不是原子操作,而是 read–compute–write 三阶段。两个处理器若读到同一旧版本 w,后写回者可能抹去先写回者的部分更新,这就是 race condition(竞态)。P021 不会先用全局锁解决,而是检查更新坐标是否足够稀疏。

P021
锁与稀疏更新
原页逐句翻译: 增加锁:可以解决 race condition;同一时刻只有一个 CPU 能访问 w;并行带来的全部收益都会丢失。问题:真的需要锁吗?在随机梯度下降中,x_i=(x_i^{(1)},\ldots,x_i^{(n)})w=(w^{(1)},\ldots,w^{(n)}) 都是 n 维向量;如果 x_i 稀疏,就只会更新少数 w^{(k)}。在大数据设置中,发生碰撞的概率很可能较低。

本页解释: 稀疏样本只触碰一小组参数坐标。不同 CPU 随机抽到的样本若支持集不重叠,它们的写入互不冲突;即便偶尔重叠,损失也可能小于锁带来的持续串行化。这里的“很可能较低”是课件提出的工作假设,不是对任意数据都成立的保证。

P022
Going Hogwild!
原页逐句翻译: 针对 p 个处理器的 Hogwild! 策略:在全部可用 CPU 上并行执行;直到满足期望误差条件,每次从 \{1,\ldots,m\} 中随机选择索引 j,并发地对共享内存中当前的 w 计算 F_j(w)\nabla F_j(w);对所有满足 x_i^{(k)}\neq0k,把 w^{(k)} 更新为 w^{(k)}-\alpha[\nabla F_j(w)]^{(k)}。说明:不使用锁,因此相对于 CPU 数量可获得近似线性的加速;处理大数据时应避免锁开销;Hogwild! 要求代价函数稀疏。

本页解释: 算法让每个处理器独立采样、读取共享参数并写回相关坐标,不设置全局同步点。稀疏性降低坐标冲突,随机性让偶发的陈旧更新可被后续迭代吸收。原页先采样 j、后在非零条件中写 x_i^{(k)};这是页内索引不一致,按算法语义应是所采样样本的坐标,但翻译保留原式并在此标出。

本单元页间主线: P020 并行 SGD 的共享内存风险 → P021 锁与稀疏更新 → P022 Going Hogwild!。

上下文补足: 无锁不等于无条件正确算法边界

上下文补足: Hogwild! 的课件结论针对稀疏代价函数。稠密特征、长时间陈旧读、过大步长或热点坐标都会增加干扰。它的工程价值来自“少量误差比持续加锁便宜”,不是把竞态本身宣称为正确同步。

读完本单元应掌握: 能画出一次丢失更新的时序,逐步叙述 Hogwild!,并说明其近线性加速依赖稀疏与低碰撞。
U10 · 综合P023 / 32

单机并行与分布式通信的选择

为什么合在一起讲: 本页把前面的 PRAM 深度、Hogwild! 与分布式通信轮数收束成一个架构选择,适合独立作为 Big data 模块结论。

完整讲解

核心思想: 同一更新规则放到不同硬件上会有不同主成本:共享内存看写冲突,分布式系统看通信轮数。Batch 用较少同步轮次换更重的每轮计算,stochastic 则相反。
共享内存中的结论

普通 SGD 单轮 depth 低,却难以让多个处理器同时更新;Hogwild! 借助稀疏性把它变成接近 embarrassingly parallel。Batch 每轮工作多,但局部梯度天然可拆分并归约。

分布式系统中的结论

跨机器时,参数或梯度需要通信。课件把通信轮数近似为迭代数:batch 为 O(\log(1/\varepsilon)),stochastic 为 O(1/\varepsilon)。因此单机多 GPU 常偏向 stochastic,共享内存和高速互联能支撑频繁更新;分布式系统更常用 batch,以较少轮次换取每轮较大的并行工作。

选择顺序

先问内存模型:同机共享参数还是跨机通信;再问数据稀疏性是否支持无锁更新;最后用 ε 对应的迭代数估算同步轮次。这个顺序比只比较每轮 FLOPs 更接近课件的最终判断。

本单元在知识链中的位置

承接上一单元

U09 给出共享内存上无锁 SGD 的条件。

本单元任务

把算法复杂度转译成单机 GPU 与分布式集群的部署倾向。

组内推进

PRAM 对照 → 通信轮数 → 单机与分布式选择。

导向下一单元

进入 Applications,用 Spark 的 RDD、broadcast 和 barrier 检验这些结论。

逐页详解P023 · 1 页逐句翻译 · 本页解释
P023
Batch、SGD 与部署环境
原页逐句翻译: 回看 PRAM 中的梯度下降:stochastic 的 depth 更低但难以并行;batch 更容易并行但更慢;Hogwild! 让 stochastic 几乎成为 embarrassingly parallel(易并行)问题。在分布式系统中比较 stochastic 与 batch:通信次数取决于迭代数,batch 为 O(\log(1/\varepsilon))、stochastic 为 O(1/\varepsilon);在一台有很多 GPU 的计算机上通常更偏好 stochastic;分布式系统上更常见 batch。

本页解释: 单机共享内存里,Hogwild! 可以让多个处理器直接更新同一参数;跨机器时,每轮更新需要传输或聚合参数,迭代次数就变成通信轮数。于是 SGD 的低单步 work 未必能抵消更多通信,而 batch 的规整归约更适合集群。

本单元页间主线: P023 Batch、SGD 与部署环境。

读完本单元应掌握: 能说明为什么同一 SGD 在共享内存机器上合适,在高通信成本的分布式系统上未必合适。
M03

Spark 实现与优化应用

把梯度更新映射到 Spark 的 RDD/map/reduce/broadcast/barrier,并用 PCA 与线性规划观察优化思想的迁移。

P024-P030

模块衔接: 在给出算法复杂度后,回到真实系统的存储、同步和通信,再扩展到降维与约束优化。

U11 · 应用导入P024-P025 / 32

从应用地图到 Spark 实现假设

为什么合在一起讲: P024 将章节高亮切到 Applications,P025 随即固定 Spark、模型可入内存且样本数不受限的场景;两页共同定义实现问题的边界。

完整讲解

核心思想: Spark 的设定是“样本数 m 很大、参数维数 n 可入内存”:数据应分区保存,较小的参数 w 才能在每轮提供给计算任务;这把算法复杂度转成存储与通信设计。
应用部分不是另起一题

前面已经知道 batch 易归约、SGD 迭代多、Hogwild! 依赖共享内存。P024 的 Applications 高亮表示现在要把这些判断放进一个真实执行框架,而不是重新介绍梯度下降。

P025 的三个决策轴

工具选择决定可用执行原语;batch 或 stochastic 决定每轮读多少样本;数据大小与稀疏性决定内存和冲突。课件指定 Spark,并假设模型维数 n 足够小可放入内存,而样本数 m 不设上限。

这意味着不能把完整数据复制到每台机器,但可以反复传递相对较小的参数 w。最终问题“如何在集群存储数据”自然导向按行分区的 RDD。

后续检查标准

实现需要回答三件事:样本分区是否复用,参数每轮发送几次,局部梯度如何聚合。P026 给出基线流程,P027 专门追问通信瓶颈,P028 再检验 SGD/Hogwild! 是否适配 Spark 的同步边界。

本单元在知识链中的位置

承接上一单元

U10 已给出单机与分布式的算法选择。

本单元任务

固定 Spark 场景和 n、m 的内存假设。

组内推进

应用切换 → 工具/算法/规模问题 → 模型可入内存、数据需分区。

导向下一单元

构造 batch gradient descent 的 RDD-map-reduce 更新循环。

逐页详解P024-P025 · 2 页逐句翻译 · 本页解释
P024
章节组织:进入应用
原页逐句翻译: 章节组织:中心主题是 Optimization(优化),三个分支为 Small data(小数据)、Big data(大数据)和 Applications(应用)。

本页解释: 深色高亮移到 Applications。前两部分建立了算法和并行成本模型;接下来把这些约束放进 Spark,并用 PCA 与线性规划说明优化思想如何连接其他方法。

P025
实现前的选择
原页逐句翻译: 首先要考虑的问题:使用什么工具?batch 或 stochastic gradient descent 哪个更合适?数据有多大或多稀疏,即 nm 能否放入内存?本讲设置预计:使用 Spark;检查两种梯度下降策略的表现;让 n 足够小以放入内存,但不限制 m。问题:如何在集群上存储数据?

本页解释: 这里明确了系统边界:模型向量维数 n 可在每台机器或 driver 端持有,样本数 m 可以很大,因此数据必须分区。接下来的 Spark 设计会按行把样本放入 RDD,并在每轮把相对较小的 w 带到计算端。

本单元页间主线: P024 章节组织:进入应用 → P025 实现前的选择。

读完本单元应掌握: 能从 n 可入内存、m 不受限推导出“分区存样本、分发参数、聚合梯度”的实现形状。
U12 · 算法P026-P027 / 32

Spark batch 梯度下降的数据流与瓶颈

含上下文补足

为什么合在一起讲: P026 给出六步 RDD 流程,P027 紧接着检查参数发送、mapper 语义和通信成本;实现与性能审查必须一起讲。

完整讲解

核心思想: Spark batch 一轮遵循“分区样本 map 成局部梯度 → reduce 求和 → 更新 w”的同步数据流;cache 复用数据,broadcast 与归约成本决定实际扩展性。
六步流程如何组成一轮

数据先按行放入 RDD,每一行对应样本 p。map 使用当前参数 w 把样本变成局部梯度 \nabla F_p(w);reduce 把所有局部梯度相加;driver 或控制端据此更新 w。然后从 map 梯度这一步开始下一轮,直到误差条件满足。

第 2 步提到 closure,表示 map 函数携带计算所需的参数环境。第 3 步 cache 让 RDD 的样本分区跨迭代复用,避免每轮重新从上游读取或重算。源页称 cache 为 action;在解释层应关注它的目的,即把迭代数据保留在内存。

map 与 reduce 分别承担什么

map 阶段没有样本间依赖,正对应 P015 的 data parallelism。每个任务只读 w 并输出梯度,不应原地修改共享参数。reduce 阶段执行树形向量求和,对应 P016 的并行归约;其输出长度是模型维数 n

更新 w 发生在聚合之后,这形成清晰的同步屏障:所有任务使用同一轮参数,完整梯度确定后才进入下一轮。这是 batch 方法确定性和易并行的系统表达。

P027 的问题如何定位瓶颈

第一组问题围绕 w:每轮是否随任务重复发送,mapper 是否只读,它相对带宽和内存有多大,以及是否应使用 broadcast。P025 的 n 可入内存假设允许保存参数;广播频率仍决定网络成本。

第二组问题转向端到端时间。样本 RDD 被 cache 后,反复扫描可留在内存;参数广播、梯度 shuffle/reduce、慢任务等待和迭代轮数共同决定瓶颈。应据 n、分区数、网络与轮数逐项估算。

通信与计算如何平衡

每轮局部计算约随本分区样本数乘 n 增长,通信至少要分发或引用 w 并归约长度 n 的向量。数据越多,局部计算越能摊薄固定广播成本;模型越大,参数与梯度传输越突出。

因此优化不是简单增加 mapper 数。任务过细会制造更多调度与归约开销,任务过粗又降低并行度。P028 进一步说明,Spark 的容错屏障让细粒度异步 Hogwild! 更难实现。

本单元在知识链中的位置

承接上一单元

U11 已固定 Spark、n 可入内存、m 可很大的场景。

本单元任务

把 full batch 更新映射为 Spark 的 RDD、map、reduce 和同步迭代。

组内推进

存储并缓存样本 → map 局部梯度 → reduce 求和 → 更新参数 → 检查广播与通信。

导向下一单元

比较 Spark 上的 SGD/Hogwild! 限制,并引出 mini-batch。

逐页详解P026-P027 · 2 页逐句翻译 · 本页解释
P026
Spark 中的 batch 梯度下降
原页逐句翻译: Spark 实现的高层思路:1. 按行组织数据并存入 RDD;2. 使用 map transformation 为每个点生成 closure;3. 使用 cache action 确保 Spark 把 RDD 保留在内存;4. 对每个点 p 使用 map,把 p 变换为 \nabla F_p(w);5. 使用 reduce 对全部 \nabla F_p(w) 求和;6. 更新 w 并从第 4 步重复,直到达到期望误差。

本页解释: 一次迭代的数据流是“分区样本 → 局部梯度 → 树形聚合 → driver 更新参数”。cache 避免每轮从原始存储重建 RDD;map 阶段彼此独立,reduce 实现 P016 的并行求和。更新后的 w 会成为下一轮 map 的只读输入,因此迭代之间仍有同步边界。

P027
Spark batch 的瓶颈问题
原页逐句翻译: 优化当前方案:w 被发送多少次?w 会被 mapper 修改吗?从带宽和内存使用看,w 有多大?应该如何在全部机器之间共享 w?基本分析:当前方案的瓶颈在哪里?通信成本究竟好还是坏?

本页解释: 这一页只提出检查项,没有在源页给出答案。结合 P025 的 n 可放入内存假设,mapper 应把 w 当只读参数;真正需要审视的是每轮分发 w、归约长度为 n 的梯度,以及迭代次数带来的重复通信。P028 会说明 Spark 的同步机制为何限制无锁 SGD。

本单元页间主线: P026 Spark 中的 batch 梯度下降 → P027 Spark batch 的瓶颈问题。

上下文补足: closure、cache 与 broadcast 的角色系统背景

上下文补足: closure 让任务获得计算环境,cache/persist 让重复迭代复用样本分区,broadcast 适合向 executors 分发只读参数。它们解决的是不同问题,不能把 cache 当作参数同步,也不能把 broadcast 当作可写共享内存。

读完本单元应掌握: 能按执行顺序描述每轮 Spark batch 梯度下降,并指出参数广播、梯度归约和迭代屏障的成本。
U13 · 系统权衡P028 / 32

Spark 为何更适合 mini-batch 而非原样 Hogwild!

含上下文补足

为什么合在一起讲: 本页独立比较 Hogwild! 的异步共享内存要求与 Spark 的 broadcast/barrier 执行,并给出随机接受和 mini-batch 两种替代。

完整讲解

核心思想: Spark 的 stage 与 barrier 为可靠的批处理而设,和 Hogwild! 所需的持续异步共享写入相冲突;mini-batch 用一次处理多个随机样本,在优化噪声与同步成本之间折中。
执行模型冲突

Hogwild! 希望处理器随时读取和写回共享参数;Spark 的 mapper 要等 broadcast 完成,下一次 broadcast 又要等当前 mapper、reducer 全部结束。每轮都存在同步屏障,正是 Hogwild! 想避免的协调。

Spark 用 lineage、stage 和重算获得容错,这要求执行边界清晰。把共享内存的无锁细粒度更新原样搬进这种模型,会失去近似连续的异步写入。

两种课件方案

第一种是尝试随机更新,只接受能降低目标的候选;第二种是 mini-batch:每轮选“许多”样本而非一个,并在这个子集上执行 batch 更新。后者在随机性与规整 map/reduce 之间折中。

mini-batch 增大单轮计算,使 broadcast 与 barrier 成本能被更多样本摊薄;同时比 full batch 少处理数据。批大小因此是系统参数,也是优化噪声参数。

与前文复杂度的连接

SGD 的 O(1/ε) 迭代倾向意味着通信轮数多,Spark 屏障会放大这一缺点。mini-batch 试图用每轮更多工作换更少或更有效的同步轮次,延续了本讲一贯的 work、depth 与通信权衡。

本单元在知识链中的位置

承接上一单元

U12 已建立 Spark batch 的同步 map-reduce 循环。

本单元任务

解释共享内存 Hogwild! 与 Spark stage/barrier 的不匹配,并给出 mini-batch 折中。

组内推进

回顾 SGD/Hogwild! → 指出 broadcast/barrier → 提出随机接受与 mini-batch。

导向下一单元

转向降维应用,用 PCA 在进入优化前减少数据维数。

逐页详解P028 · 1 页逐句翻译 · 本页解释
P028
Spark 中的 stochastic 梯度下降
原页逐句翻译: 随机梯度下降回顾:总 depth 比 batch gradient descent 大得多;数据稀疏时可用 Hogwild! 加速。Spark 上的 Hogwild!:broadcast 必须完成后 mapper 才能开始;全部 mapper 和 reducer 必须结束后才能再次 broadcast;Spark 通过 synchronisation barriers(同步屏障)实现容错。Spark 中最小化目标函数:尝试随机更新,并接受任何使目标下降的更新;使用 mini-batches,每次迭代选择“许多”样本而不是一个,再对它们应用 batch gradient descent。

本页解释: Hogwild! 依赖共享内存中的细粒度异步写入,而 Spark 的 stage/broadcast/reduce 以批次和屏障推进,不能原样复制该执行模型。mini-batch 是系统折中:每轮仍能用 map/reduce 并行,但比 full batch 少读样本;相比单样本 SGD,又能摊薄广播与同步成本。

本单元页间主线: P028 Spark 中的 stochastic 梯度下降。

上下文补足: Spark 上的“共享”不是 PRAM 共享内存系统边界

上下文补足: broadcast 变量在 worker 端是只读副本,不能让所有任务像 PRAM 那样原地改同一个 w。把两者区分开,才能理解 P028 为什么把 barrier 视为 Hogwild! 的限制。

读完本单元应掌握: 能解释 Spark 的同步容错为何阻碍原样 Hogwild!,并说明 mini-batch 如何摊薄每轮固定成本。
U14 · 应用 / 视觉P029 / 32

PCA:最大化投影等价于最小化残差

含上下文补足

为什么合在一起讲: 这一页同时给出大数据降维策略、PCA 目标和 V/M/m 几何图,完整回答“为什么 PCA 能作为梯度下降前的近似步骤”。

完整讲解

核心思想: 对中心化向量,投影与正交残差构成直角三角形;因此最大化投影能量等价于最小化重构残差,PCA 也能先降低后续优化的维数。
V^2=M^2+m^2
先降维再优化

当原始维数太大,先用 PCA 把数据投影到较低维子空间,再在近似数据上运行梯度下降。这样降低单样本向量长度 n,因而同时降低内积、梯度、参数和通信规模;代价是丢失被舍弃方向上的信息。

如何读 V、M、m

黄色 V 是均值中心化后的样本向量,绿色 M 是它在虚线候选主轴上的投影,红色 m 是从投影点到原向量端点的正交残差。三者构成直角三角形,因此 V^2=M^2+m^2

对固定 V,左侧长度不变。最大化投影 M 会自动最小化残差 m;对全部样本求和后,最大投影方差与最小平方重构误差成为同一几何选择。

矩阵表达与优化表达

课件用“最大化 \mathbb{E}[XX^\top] 的方向”概括协方差方向。均值中心化让二阶矩对应方差结构;PCA 选最大特征值对应的轴。将残差平方和写成目标后,也可用优化方法寻找重构误差最小的方向。

PCA 与本讲优化线的连接在于投影—残差关系:保留方差大的方向,同时压低正交残差。选出的轴会缩小后续模型的 n,直接改变前文含 n 的计算和通信量。

本单元在知识链中的位置

承接上一单元

U13 讨论如何在 Spark 中降低每轮同步压力。

本单元任务

从数据维数入手,在优化前减少模型与通信规模。

组内推进

降维策略 → 投影几何 → 方差最大化与残差最小化等价。

导向下一单元

最后用线性规划说明“选择改进方向”还能连接离散的 simplex pivot。

逐页详解P029 · 1 页逐句翻译 · 本页解释
P029
梯度下降与 PCA
原页逐句翻译: 数据过大时采用梯度下降的常见策略:降低大数据集的维数;在得到的近似上应用梯度下降。把梯度下降与 PCA 联系起来:寻找使方差最大的轴;寻找使 \mathbb{E}[XX^\top] 最大的方向;寻找使残差最小的方向。图中黄色向量为 V,绿色沿虚线轴的投影为 M,红色垂直残差为 m。对均值中心化数据:勾股定理给出 V^2=M^2+m^2;PCA 最大化 M;梯度下降最小化 m

本页解释: 先把总向量 V 分解为轴上投影 M 和正交残差 m。对固定样本,V^2 不变,所以增大投影能量 M^2 与减小残差能量 m^2 是同一目标的两种写法。PCA 用前者找主轴,最小二乘式优化用后者度量重构误差。

本单元页间主线: P029 梯度下降与 PCA。

上下文补足: 均值中心化为何被单独写出图示解读

上下文补足: 若数据未中心化,投影能量会混入均值偏移,主轴不再只描述围绕均值的方差。P029 明确写出 mean centered data,正是为了让方差最大化与图中的正交分解直接对应。

读完本单元应掌握: 能在图中指出 V、M、m,并从勾股关系解释 PCA 最大投影与最小重构残差的等价。
U15 · 应用P030 / 32

线性规划与 simplex 的改进方向

含上下文补足

为什么合在一起讲: 本页从线性目标、线性约束到 simplex pivot 构成一个完整应用类比,独立保留可清楚标出它与梯度下降的相同语言和不同机制。

完整讲解

核心思想: 线性规划在约束可行域中改进线性目标;simplex 通过 pivot 在基本解之间移动,而不是像梯度下降那样沿连续负梯度走。这是“问题结构决定算法”的应用例子。
线性规划问题

目标是在线性等式或不等式约束限定的可行域内最大化线性函数。最大化可以通过目标取负改写为最小化,因此能够与本讲统一使用“让目标下降”的语言。

simplex 如何改进

simplex 从一个基本解出发,通过选择 pivot 移动到更好的基本解。不同 pivot 规则会产生不同路径和收敛速度;课件把最佳 pivot 类比为寻找最能改进目标的方向。

两种方法的移动方式不同:梯度下降在连续空间按局部导数更新,simplex 沿可行多面体的边在基本解之间跳转。二者都反复改进目标,线性约束的几何结构使本页采用 pivot。

这页在全讲的位置

P006 已用旅行商等问题说明优化结构多样,P030 再次回到算法适配:即使都能写成最小化,线性约束结构会导向 simplex。它为 No Free Lunch 提供了一个具体收尾。

本单元在知识链中的位置

承接上一单元

U14 用连续投影几何连接 PCA 和平方残差。

本单元任务

展示线性约束下通过 pivot 改进目标的另一类优化方法。

组内推进

定义线性规划 → 最大转最小 → 基本解与 pivot → 最佳改进方向。

导向下一单元

进入课程回顾,按五个问题检查主线是否闭合。

逐页详解P030 · 1 页逐句翻译 · 本页解释
P030
线性规划
原页逐句翻译: 给定一个数学模型,其中目标表示为线性函数,约束表示为等式或不等式;在满足约束的同时让目标最大。用梯度下降的视角理解线性规划:任何最大化问题都可改写为最小化问题;simplex method(单纯形法)求解线性规划,先用一个 basic solution(基本解)作为起点,再用“local search(局部搜索)”寻找 pivot(主元)来改进基本解,不同主元选择导致不同收敛速度,任意主元都导向最优解;在 simplex 中找到最佳主元,等价于找到改进目标的最佳方向。

本页解释: 这页借用“沿改进方向前进”的共同语言连接梯度下降与 simplex,但两者机制不同:梯度下降沿连续空间的梯度更新,simplex 在可行多面体的基本可行解之间移动。源页把主元选择写成都会到达最优解;实际理解仍需配合可行性、终止规则及退化等条件,因此这里把它标作应用类比而非同一算法。

本单元页间主线: P030 线性规划。

上下文补足: 类比的边界模型切换

上下文补足: 原页把“任意 pivot 导向最优解”作为讲义结论。实际使用时还需合法 pivot 规则、可行起点、终止与退化处理。本补足只防止把应用类比误读成无条件实现保证。

读完本单元应掌握: 能说明 simplex pivot 与梯度下降都在改进目标,但搜索空间、可行性处理和更新机制不同。
M04

关键点回顾

用源课件五个问题检查 batch/SGD、PRAM、Hogwild! 与 Spark 的完整知识链。

P031-P032

模块衔接: 应用部分结束后不再引入新模型,直接按五项能力收束本讲。

U16 · 回顾P031-P032 / 32

用五个问题闭合本讲主线

为什么合在一起讲: P031 把学习目标整理成五问,P032 结束课程;两页共同完成回顾与收束,没有新增技术分支。

完整讲解

核心思想: 这五个问题把本讲压缩为一条判断链:从损失与更新公式出发,计算 work/depth,再把共享写冲突和集群通信加入选择;P032 只作结束,不增加新知识。
五问对应五段能力

第一、二问要求定义 batch 与 stochastic 并比较单轮和总成本;第三问要求用 PRAM、work、depth 分析并行性;第四问要求说明 Hogwild! 的随机采样、稀疏坐标和无锁更新;第五问要求把 batch/SGD 放进 Spark 的 map、reduce、broadcast 与 barrier。

一条完整回答应包含什么

完整回答从平方损失 F(w) 出发,说明 batch 与 SGD 如何取梯度,再给出 mn\varepsilon 下的 work/depth;接着把共享内存竞态和分布式通信放入选择,最后落到 Spark 的迭代数据流。

结束页的作用

P032 只显示 Thank you 和课程标志。它不提供新结论,因此本讲知识链在 P031 的五问处已经闭合。

本单元在知识链中的位置

承接上一单元

U15 完成最后一个应用类比。

本单元任务

用源页五问检查从算法、复杂度到系统实现的完整掌握。

组内推进

五个问题回收全讲,结束页不再增加内容。

导向下一单元

无;本讲结束。

逐页详解P031-P032 · 2 页逐句翻译 · 本页解释
P031
Key points
原页逐句翻译: 关键点:batch gradient descent 与 stochastic gradient descent 分别是什么?batch 与 stochastic gradient descent 如何比较?PRAM、work 和 depth 分别是什么?解释 Hogwild! 如何工作。讨论 gradient descent 在 Spark 上的实现。

本页解释: 这五问正好覆盖本讲主线:更新粒度、并行成本模型、无锁稀疏更新和 Spark 同步实现。它们要求能说明机制与条件,而不只是背出术语。

P032
结束页
原页逐句翻译: 谢谢!

本页解释: 结束页重复课程封面的 Hadoop 标志,不再引入新概念。

本单元页间主线: P031 Key points → P032 结束页。

读完本单元应掌握: 能不看课件完整回答 P031 五问,并在每个结论后说明适用条件。