← 返回复习站

大数据方法与工具 · 2026年夏季学期

源文件:c5.pdf

第5章优化:按主题组织的课程讲解

本页从回归残差和梯度下降开始,再介绍并行随机存取机(PRAM)、依赖有向无环图(DAG)、工作量—深度模型、批量梯度下降、随机梯度下降(SGD)和Hogwild!。最后,本页说明Spark实现、主成分分析(PCA)和线性规划。

原始页数
32
知识模块
4
讲解单元
16
聚合单元
10
示例
1
逐页详解
32
第5章优化

总览01

这组课件在讲什么

中心问题

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

概念范围

本页涵盖回归与最小二乘、凸性和步长、PRAM、依赖有向无环图(DAG)、工作量—深度模型、Brent定理、批量方法与SGD的复杂度、竞态和无锁稀疏更新。

系统范围

比较共享内存与分布式通信。说明弹性分布式数据集(RDD)、映射、归约、缓存、广播变量和同步屏障对迭代算法的约束。

目标能力

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

总览02

知识如何推进

内容顺序

残差 → 平方损失 → 梯度更新 → 并行归约 → 工作量与深度 → SGD → 竞态与Hogwild! → 分布式通信 → Spark。

完整示例

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

视觉节点

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

真实跳转

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

总览03

讲解路线

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

总览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;工作量与关键路径估计有限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-光滑批量方法的完整梯度U07 / P017
O(\log(1/\varepsilon)\log mn)批量;理想并行归约完整批量方法的深度U07 / 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

小数据中的优化基础

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

P001-P009

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

U01 · 导读P001-P002 / 32

从课程地图进入优化问题

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

完整讲解

核心说明: 本讲把优化放在以下顺序中:先定义损失,再选择更新规则,最后用并行模型与系统约束判断怎样计算;算法目标不变,计算粒度与瓶颈在变。
本章放在课程中的位置

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

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

三段式知识路线

小规模数据部分先从回归、平方误差和普通梯度下降建立更新规则。大规模数据部分加入PRAM、DAG、工作量、深度,再比较批量、SGD与Hogwild!。应用部分把前面的结论带入Spark,并连接PCA与线性规划。

读图时应关注分支颜色:P002高亮小规模数据,P010改为大规模数据,P024再改为应用。这个视觉变化就是模块切换标记。

阅读时要关注的概念关系

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

本单元在知识链中的位置

承接上一单元

无;这是课程入口。

本单元任务

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

组内推进

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

导向下一单元

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

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

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

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

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

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

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

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

含上下文补足

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

完整讲解

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

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

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

如何读P004的残差图

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

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

目标函数、成本、损失与误差的关系

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

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

从这里到梯度下降

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

本单元在知识链中的位置

承接上一单元

U01给出了小规模数据作为第一入口。

本单元任务

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

组内推进

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

导向下一单元

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

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

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

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

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

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

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

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

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

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

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

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

合并说明: 本页用三个结构差异很大的问题引出没有免费午餐定理,单页独立回答“为什么算法选择必须依赖问题”。

完整讲解

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

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

没有免费午餐定理在本讲中的用法

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

三个例子显示结构差异,没有免费午餐定理总结其后果。

导向下一单元

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

逐页详解P006 · 1页逐句翻译 · 本页解释
P006
优化问题举例与没有免费午餐定理
原页逐句翻译: 常见优化问题示例:芯片设计,要确保计算机芯片上的线路不交叉;课程表,在已知每门课学生名单时,让冲突数最小;旅行商问题,在给定城市列表时,让访问所有城市所需距离最短。没有免费午餐定理(No没有免费午餐定理):不存在对所有搜索问题都最好的解法;在某些问题上表现更好的算法会在另一些问题上表现更差;选择算法时必须利用目标问题的结构和评价标准。

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

本单元页间关系: P006优化问题举例与没有免费午餐定理。

读完本单元应掌握: 能用本页三个例子说明为什么优化目标相似并不意味着求解器相同。
U04 · 示例P007-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展开引出Hessian。梯度只告诉当前斜率,Hessian还描述各方向曲率;用曲率校正更新可把不同尺度的坐标统一起来,并允许课件所说的步长1。代价是构造并求解二阶系统,直接求逆复杂度记为 O(n^3),当模型维数很大时未必划算。

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

U05先做批量方法与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展开(泰勒展开)可以加速计算,这需要对 f 的Hessian矩阵(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

批量方法与随机方法:先看直观差异

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

完整讲解

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

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

解质量与局部最小值

课件把批量方法描述为最优、SGD描述为足够好,并认为随机性有助于逃离局部最小值。对前面给定的强凸问题,局部最小值并非核心困难;这组话适用于可能含局部极小点的非凸优化。P019会把可比较部分收敛到工作量、深度与 ε。

本单元在知识链中的位置

承接上一单元

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

本单元任务

给出批量方法与SGD的直观对照表。

组内推进

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

导向下一单元

进入大规模数据模块,用DAG和工作量—深度给“快慢”统一计量。

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

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

本单元页间关系: P009批量方法与随机方法梯度下降预览。

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

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

用DAG、工作量—深度和Brent定理分析平方损失,并比较批量、SGD、Hogwild!在共享内存与分布式环境中的代价。

P010-P023

内容衔接: 定性快慢被改写为工作量、深度、迭代数和通信轮次,算法选择开始依赖执行架构。

U06 · 模型P010-P013 / 32

DAG、工作量—深度与Brent定理

含上下文补足

合并说明: P010切换到大规模数据,P011用DAG表达依赖,P012定义T1/Tp/T∞,P013用Brent定理连接有限处理器;四页共同建立后文复杂度分析的统一语言。

完整讲解

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

P010高亮大规模数据,意味着问题从“更新公式怎么写”转向“哪些操作能同时做”。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 假设可用处理器无限,时间由依赖链决定,因此对应深度或关键路径。

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

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则把这些系统成本放回分析。

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

建立并行算法的工作量—深度计量和有限处理器界。

组内推进

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

导向下一单元

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

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

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

P011
依赖有向无环图
原页逐句翻译: 在使用PRAM(见幻灯片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
工作量—深度模型
原页逐句翻译: 当最后一个处理器完成工作时,计算结束:使用一个CPU的时间称为 T_1;使用 p 个CPU的时间称为 T_p;使用无限多个CPU的时间称为 T_\infty。说明:算法的深度(深度)由最后一个完成任务的CPU决定;算法的工作量(工作量)对应完成全部任务所需时间乘以CPU数量。问题:T_\infty 会趋近于0吗?

本页说明: T_1 近似总工作量,T_\infty 是关键路径长度。无限处理器只能同时执行互不依赖的节点,不能打破DAG上的先后关系,所以 T_\infty 不会自动变成0。课件把工作量写成时间乘处理器数;按工作—深度模型的定义,它等于全部基本操作数。

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数量绝不会影响性能。工作量—深度模型有助于设计更好的并行算法。

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

本单元页间关系: P010章节组织:进入大数据 → P011依赖有向无环图 → P012工作量—深度模型 → P013 Brent上下界。

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

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

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

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

含上下文补足

合并说明: P014建立逐样本损失和与收敛条件,P015特化为最小二乘,P016补上并行归约,P017才能推得一次和完整梯度下降的工作量与深度;这是一个连续推导。

完整讲解

核心说明: 平方损失可按样本和坐标拆分并用树形归约合并;每轮的总工作与理想深度不同,迭代之间仍必须串行地更新参数。
\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的基础求和把所有元素串行累加,工作量与深度都是 O(n);这会浪费处理器。树形归约第一层同时算相邻两项,下一层再合并部分和,层数为 O(\log n)。总加法数没有下降,所以工作量仍为 O(n)

把同一思路用到样本和坐标,可在理想PRAM下把 mn 份工作安排为对数深度。P017因而给目标值和梯度都标为工作量 O(mn)、深度 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)) 轮。这个迭代数不是来自并行求和,而是来自优化误差递减。

完整深度如何组合

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

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

从算法基线到系统成本

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

本单元在知识链中的位置

承接上一单元

U06提供了DAG、工作量、深度与Brent的分析框架。

本单元任务

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

组内推进

逐样本目标 → 并行归约 → 单轮工作量与深度 → 收敛轮数 → 总深度。

导向下一单元

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

逐页详解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} 是一个“标签”,w 是希望优化的参数。梯度下降从随机初始 w 开始,通过 w_{k+1}=w_k-\alpha\nabla F(w_k) 迭代改进,其中 \alpha 较小;这里目标函数 F 是损失函数。理论上,当 F 强凸、可微,且 \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 对应数据并行度(数据并行);n 对应模型并行度(模型并行)。问题:梯度下降扩展到大规模时表现如何?

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

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

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

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

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

本单元页间关系: P014回到梯度下降:经验风险 → P015平方和损失 → P016并行求和 → P017梯度下降的工作量与深度。

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

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

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

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

合并说明: P018定义随机单样本更新并给出迭代阶,P019把它与批量方法的单轮和总工作量与深度对齐;两页共同回答“便宜的一步是否带来便宜的全过程”。

完整讲解

核心说明: 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 个样本,单轮工作量从 O(mn) 降为 O(n);长度 n 的内积和向量操作可归约到 O(\log n) 深度。

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

总工作量的交叉点

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

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

总深度与并行性的区别

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

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

如何使用这张比较表

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

比较时使用同一把尺

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

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

本单元在知识链中的位置

承接上一单元

U07已算出全批量方法的单轮与完整成本。

本单元任务

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

组内推进

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

导向下一单元

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

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

本页说明: SGD用 \nabla F_{s_k} 作为完整梯度的随机估计。一次更新只看一个长度为 n 的样本,所以单步便宜,但噪声让收敛从课件给出的对数迭代阶退化为 O(1/\varepsilon)。减少每步样本数会降低单步计算量;总计算是否下降还取决于新增迭代数,不能只按样本数比例推断。

P019
随机方法与批量方法的复杂度
原页逐句翻译: 梯度下降:每次迭代的工作量为 O(mn)、深度为 O(\log mn);总工作量为 O(mn\log(1/\varepsilon));总深度为 O(\log(1/\varepsilon)\log mn)。随机梯度下降:每次迭代的工作量为 O(n)、深度为 O(\log n);总工作量为 O(n/\varepsilon);总深度为 O(\log n/\varepsilon)。问题:梯度下降和随机梯度下降哪个最好?

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

本单元页间关系: P018随机梯度下降 → P019随机方法与批量方法的复杂度。

读完本单元应掌握: 能根据m、n、ε 比较两种方法,并解释为什么单轮更便宜不保证总深度更低。
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同时读到旧值,它们各自完成计算后再写回,后一次写入可能覆盖前一次更新;即使没有整向量覆盖,某些坐标也会丢失增量。

问题的根源不是梯度公式错误,而是读取–修改–写入缺少原子性。把 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!取消的是参数更新的全局锁,误差监测仍可按系统需要安排。

和批量方法并行的差别

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

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

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

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

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

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

P022
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 Hogwild!无锁更新。

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

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

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

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

合并说明: 本页把前面的PRAM深度、Hogwild!与分布式通信轮数收束成一个架构选择,适合独立作为大规模数据模块结论。

完整讲解

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

普通SGD单轮深度低,却难以让多个处理器同时更新;Hogwild!借助稀疏性把它变成接近无需同步即可并行。批量方法每轮工作多,但局部梯度天然可拆分并归约。

分布式系统中的结论

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

选择顺序

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

进入应用,用Spark的RDD、广播和屏障检验这些结论。

逐页详解P023 · 1页逐句翻译 · 本页解释
P023
批量、SGD与部署环境
原页逐句翻译: 回看PRAM中的梯度下降:随机方法的深度更低但难以并行;批量方法可把样本梯度分配到多个处理器后归约但更慢;Hogwild!让随机方法接近无需同步即可并行。在分布式系统中比较随机方法与批量方法:通信次数取决于迭代数,批量方法为 O(\log(1/\varepsilon))、随机方法为 O(1/\varepsilon);共享内存且配有多个GPU时可采用随机方法,跨节点且通信成本高时更适合减少迭代轮数的批量方法。

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

本单元页间关系: P023批量、SGD与部署环境。

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

Spark实现与优化应用

把梯度更新映射到Spark的RDD/映射/归约/广播/屏障,并用PCA与线性规划观察优化思想的迁移。

P024-P030

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

U11 · 应用导入P024-P025 / 32

从应用地图到Spark实现假设

合并说明: P024将章节高亮切到应用,P025随即固定Spark、模型可入内存且样本数不受限的场景;两页共同定义实现问题的边界。

完整讲解

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

前面已经知道批量方法可按样本分区后归约、SGD迭代多、Hogwild!依赖共享内存。P024的应用高亮表示现在要把这些判断放进一个真实执行框架,而不是重新介绍梯度下降。

P025的三个决策轴

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

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

后续检查标准

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

构造批量梯度下降的RDD-映射-归约更新循环。

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

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

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

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

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

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

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

含上下文补足

合并说明: P026给出六步RDD流程,P027紧接着检查参数发送、映射任务语义和通信成本;实现与性能审查必须一起讲。

完整讲解

核心说明: Spark批量方法的一轮遵循“分区样本映射成局部梯度 → 归约求和 → 更新 w”的同步数据流;缓存复用数据,广播与归约成本决定实际扩展性。
六步流程如何组成一轮

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

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

映射与归约分别承担什么

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

更新 w 发生在聚合之后,这形成清晰的同步屏障:所有任务使用同一轮参数,完整梯度确定后才进入下一轮。这是批量方法确定性和“各任务可独立执行后统一归约”的系统表达。

P027的问题如何定位瓶颈

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

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

通信与计算如何平衡

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

增加映射任务数只在可并行工作量足以覆盖调度和归约开销时有效。任务过细会制造更多调度与归约开销,任务过粗又降低并行度。P028进一步说明,Spark的容错屏障让细粒度异步Hogwild!更难实现。

本单元在知识链中的位置

承接上一单元

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

本单元任务

把全批量方法更新映射为Spark的RDD、映射、归约和同步迭代。

组内推进

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

导向下一单元

比较Spark上的SGD/Hogwild!限制,并引出小批量方法。

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

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

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

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

本单元页间关系: P026 Spark中的批量梯度下降 → P027 Spark批量方法的瓶颈问题。

上下文补足: 闭包、缓存与广播的角色系统背景

上下文补足: 闭包让任务获得计算环境,缓存/持久化让重复迭代复用样本分区,广播适合向执行器分发只读参数。它们解决的是不同问题,不能把缓存当作参数同步,也不能把广播当作可写共享内存。

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

Spark为何更适合小批量方法而非原样Hogwild!

含上下文补足

合并说明: 本页独立比较Hogwild!的异步共享内存要求与Spark的广播/屏障执行,并给出随机接受和小批量方法两种替代。

完整讲解

核心说明: Spark的阶段与屏障为可靠的批处理而设,和Hogwild!所需的持续异步共享写入相冲突;小批量方法用一次处理多个随机样本,在优化噪声与同步成本之间折中。
执行模型冲突

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

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

两种课件方案

第一种是尝试随机更新,只接受能降低目标的候选;第二种是小批量方法:每轮选“许多”样本而非一个,并在该子集上执行批量更新。后者在随机性与规整映射/归约之间折中。

小批量方法增大单轮计算,使广播与屏障成本能被更多样本摊薄;同时比全批量方法少处理数据。批大小因此是系统参数,也是优化噪声参数。

与前文复杂度的连接

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

本单元在知识链中的位置

承接上一单元

U12已建立Spark批量方法的同步映射-归约循环。

本单元任务

解释共享内存Hogwild!与Spark阶段/屏障的不匹配,并给出小批量方法折中。

组内推进

回顾SGD/Hogwild! → 指出广播/屏障 → 提出随机接受与小批量方法。

导向下一单元

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

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

本页说明: Hogwild!依赖共享内存中的细粒度异步写入,而Spark的阶段/广播/归约以批次和屏障推进,不能原样复制该执行模型。小批量方法是系统折中:每轮仍能用映射/归约并行,但比全批量方法少读样本;相比单样本SGD,又能摊薄广播与同步成本。

本单元页间关系: P028 Spark中的随机梯度下降。

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

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

读完本单元应掌握: 能解释Spark的同步容错为何阻碍原样Hogwild!,并说明小批量方法如何分摊每轮固定成本。
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中降低每轮同步压力。

本单元任务

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

组内推进

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

导向下一单元

最后用线性规划说明“选择改进方向”还能连接离散的单纯形枢轴。

逐页详解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明确写出均值中心化数据,正是为了让方差最大化与图中的正交分解直接对应。

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

线性规划与单纯形的改进方向

含上下文补足

合并说明: 本页从线性目标、线性约束到单纯形枢轴构成一个完整应用类比,独立保留可清楚标出它与梯度下降的相同语言和不同机制。

完整讲解

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

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

单纯形如何改进

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

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

这页在全讲的位置

P006已用旅行商等问题说明优化结构多样,P030再次回到算法适配:即使都能写成最小化,线性约束结构会导向单纯形。它为没有免费午餐定理提供了一个具体收尾。

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

进入课程回顾,按五个问题检查各部分关系是否完整。

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

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

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

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

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

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

关键点回顾

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

P031-P032

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

U16 · 回顾P031-P032 / 32

用五个问题检查本讲内容

合并说明: P031把学习目标整理成五问,P032结束课程;两页共同完成回顾与收束,没有新增技术分支。

完整讲解

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

第一、二问要求定义批量方法与随机方法并比较单轮和总成本;第三问要求用PRAM、工作量、深度分析并行性;第四问要求说明Hogwild!的随机采样、稀疏坐标和无锁更新;第五问要求把批量方法与SGD放进Spark的映射、归约、广播与屏障。

一条完整回答应包含什么

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

结束页的作用

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

本单元在知识链中的位置

承接上一单元

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

本单元任务

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

组内推进

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

导向下一单元

无;本讲结束。

逐页详解P031-P032 · 2页逐句翻译 · 本页解释
P031
关键问题
原页逐句翻译: 关键点:批量梯度下降与随机梯度下降分别是什么?批量方法与随机方法梯度下降如何比较?PRAM、工作量和深度分别是什么?解释Hogwild!如何工作。讨论梯度下降在Spark上的实现。

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

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

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

本单元页间关系: P031关键问题 → P032结束页。

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