#016. 常用算法直觉:输入、输出、步骤与失效条件
#学习目标与概念起点
本章不是把算法背成公式,而是把公式翻译成“机器能执行、人也能解释”的流程。面试里真正要讲清楚的是:算法拿什么作为输入、想优化或估计什么、每一步为什么这样走、最后输出什么、哪些情况下输出会不可信。
学习目标
你应该能用同一套语言解释梯度下降、Newton、最小二乘、PCA、MLE/MAP、Monte Carlo、CVaR:输入、输出、目标、步骤、最小例子、失效条件。
概念起点
算法通常只做三类事:优化一个函数、把高维数据压成更清楚的结构、用样本估计未知量。不同算法的差异,主要在于“局部信息怎么用”和“误差来自哪里”。
面试表达顺序
先说对象,再说目标,再说更新规则,最后说边界。不要先甩公式,因为公式本身不说明样本、初始值、数值稳定性和失败场景。
统一直觉:优化算法问“下一步往哪里走”;线性代数算法问“数据主要沿哪些方向变化”;统计算法问“哪些参数或样本平均最能解释我看到的数据”;风险算法问“最坏的一小段世界长什么样”。把这个问题问对,算法就不再只是符号。
#梯度下降:只看当前位置的一阶斜率
梯度下降用于最小化一个可导目标函数。它不试图一次算出最优解,而是在当前位置看局部斜率,然后沿着让函数下降的方向走一小步。
输入
目标函数 \(f(x)\)、梯度 \(\nabla f(x)\)、初始点 \(x_0\)、学习率 \(\eta\)、停止条件,例如梯度足够小或迭代次数达到上限。
输出
一个候选解 \(x_T\),通常希望它接近局部最小值。非凸问题中,它不保证是全局最小值。
目标
让 \(f(x)\) 尽量小。机器学习里 \(f\) 常是训练 loss;量化里也可能是拟合误差、风险惩罚或交易成本后的负收益。
最小例子:最小化一维二次函数
令 \(f(x)=(x-3)^2\),梯度是 \(f'(x)=2(x-3)\)。从 \(x_0=0\) 出发,学习率 \(\eta=0.1\)。
第 0 步:\(x_0=0\),梯度 \(f'(0)=-6\),所以
第 1 步:\(x_1=0.6\),梯度 \(f'(0.6)=-4.8\),所以
可以看到 \(x\) 从 0 往最优点 3 靠近,但不是一步到位。学习率越小越稳但慢,越大越快但可能越过最优点来回震荡。
| 失效条件 | 表现 | 应对思路 |
|---|---|---|
| 学习率过大 | loss 震荡、发散,参数来回跳。 | 减小学习率、使用 warmup、line search 或自适应优化器。 |
| 学习率过小 | loss 下降很慢,训练看似卡住。 | 调大学习率,或用动量、Adam、预条件方法。 |
| 曲率病态 | 某些方向很陡,某些方向很平,更新呈“之”字形。 | 标准化特征、使用二阶近似或预条件。 |
| 非凸鞍点 | 梯度接近 0,但不是好解。 | 随机扰动、不同初始化、动量和更好的优化器。 |
#Newton 法:用二阶曲率直接估计最优点
Newton 法比梯度下降更“贪心”:它不仅看斜率,还看弯曲程度。它在当前位置用一个二次函数近似原函数,然后直接跳到这个二次近似的最小点。
输入
目标函数 \(f(x)\)、梯度 \(g(x)=\nabla f(x)\)、Hessian \(H(x)=\nabla^2 f(x)\)、初始点 \(x_0\)。
输出
候选极值点 \(x_T\)。如果 Hessian 在最优点附近正定,Newton 法通常会很快收敛。
目标
利用二阶局部模型减少迭代次数,尤其适合维度不太高、Hessian 可计算且比较稳定的问题。
最小例子:Newton 法一步解二次函数
还是 \(f(x)=(x-3)^2\)。梯度 \(g(x)=2(x-3)\),Hessian \(H(x)=2\)。从 \(x_0=0\) 开始。
因为原函数本身就是二次函数,Newton 的局部二次模型就是原函数,所以一步到达最优点。实际问题通常不是完美二次函数,因此需要多次迭代,也常加 damping:\(x_{t+1}=x_t+\alpha\Delta\),其中 \(0<\alpha\le 1\)。
为什么会失效:Newton 法相信二次近似。如果 Hessian 不正定,二次模型可能往下开口或鞍形,解出来的方向未必下降;如果 Hessian 接近奇异,\(H^{-1}\) 会放大噪声;如果维度很高,显式形成和求逆 Hessian 也可能太贵。
#最小二乘:把观测投影到特征能解释的空间
最小二乘用于拟合线性关系。它假设目标 \(y\) 可以被特征矩阵 \(X\) 的列线性组合解释,选择参数 \(\beta\),让预测 \(X\beta\) 尽量靠近真实 \(y\)。
输入
设计矩阵 \(X\in\mathbb{R}^{n\times d}\)、目标向量 \(y\in\mathbb{R}^n\)。每一行是一个样本,每一列是一个特征。
输出
参数 \(\hat\beta\in\mathbb{R}^d\),以及预测值 \(\hat y=X\hat\beta\)、残差 \(r=y-\hat y\)。
目标
最小化平方残差和:\(\min_\beta\|X\beta-y\|_2^2\)。平方会惩罚大误差,也让问题有清晰的线性代数解。
最小例子:拟合过原点的直线
假设模型是 \(y=\beta x\),两个样本是 \((1,2)\)、\((2,3)\)。此时 \(X=[1,2]^T\),\(y=[2,3]^T\)。
预测为 \(\hat y=[1.6,3.2]^T\),残差为 \([0.4,-0.2]^T\)。这个解的直觉是:直线不能同时穿过两个点,所以选择一个让总平方误差最小的折中斜率。
| 失效条件 | 为什么出问题 | 面试可说的修正 |
|---|---|---|
| 特征共线 | \(X^TX\) 接近不可逆,小噪声会导致参数大幅变化。 | 用 Ridge、SVD、删掉重复特征或做正则化。 |
| 异常值严重 | 平方损失会放大大残差,少数点能主导结果。 | 使用 Huber loss、分位数回归或稳健估计。 |
| 关系非线性 | 线性组合解释不了真实结构。 | 加非线性特征、核方法或换模型。 |
| 噪声异方差 | 不同样本误差方差不同,普通最小二乘不再高效。 | 用加权最小二乘或重新建模噪声。 |
#PCA:找数据波动最大的正交方向
PCA 是降维方法,但“降维”只是结果,不是解释。更准确地说,PCA 在中心化后的数据里寻找方差最大的方向。第一个主成分解释最大波动,第二个主成分在与第一个正交的前提下解释剩余最大波动。
输入
数据矩阵 \(X\in\mathbb{R}^{n\times d}\),通常先对每个特征减去均值。也可以输入协方差矩阵。
输出
主成分方向、每个方向的解释方差、低维坐标 \(Z=XW_k\)。
目标
在 \(k\) 维子空间里尽量保留原数据的方差,也等价于在平方重构误差意义下找最佳线性低维近似。
最小例子:四个点的第一主成分
中心化后的样本是 \((1,1)\)、\((-1,-1)\)、\((1,-1)\)、\((-1,1)\)。协方差矩阵为
两个方向的方差一样大,所以 PCA 没有唯一的第一主成分。任意单位正交方向都同样好。这说明 PCA 的主方向不是“真实因子”的保证,它只是样本方差结构的结果。
为什么会失效:PCA 对尺度敏感。收入用“元”表示、收益率用“小数”表示时,数值尺度大的特征会主导协方差。PCA 也只看线性方差,不知道标签、不知道因果、不知道未来分布是否变化;异常值会把主方向拉歪。
#MLE 与 MAP:从“最能解释数据”到“带先验的解释”
MLE 和 MAP 都是在估计模型参数。MLE 只看观测数据:哪个参数让这批数据出现的概率最大,就选哪个参数。MAP 在此基础上再加入先验:如果某些参数本来就更可信,就给它们额外加分。
输入
数据 \(D=\{x_1,\ldots,x_n\}\)、概率模型 \(p(D\mid\theta)\)。MAP 还需要先验分布 \(p(\theta)\)。
输出
参数点估计:MLE 输出 \(\hat\theta_{\mathrm{MLE}}\),MAP 输出 \(\hat\theta_{\mathrm{MAP}}\)。
目标
MLE 最大化数据似然;MAP 最大化后验概率。实际计算通常最大化 log 形式,因为乘法会变加法,更稳定。
最小例子:硬币正面概率
投硬币 5 次,观察到 4 次正面、1 次反面。令正面概率为 \(p\)。
MLE 的似然为 \(L(p)=p^4(1-p)\),log-likelihood 为
求导并令 0:
所以 \(\hat p_{\mathrm{MLE}}=0.8\)。如果 MAP 使用 Beta 先验 \(p\sim\mathrm{Beta}(2,2)\),相当于先验里有“1 次正面、1 次反面”的平滑,MAP 会被拉向 0.5,避免小样本下过度自信。
| 失效条件 | 表现 | 关键解释 |
|---|---|---|
| 模型错设 | 估计很稳定,但解释错了。 | MLE 只能在你给定的模型族里选最像数据的参数。 |
| 样本太少 | 估计极端,例如 1 次正面就估 \(p=1\)。 | MAP 或正则化可以降低过拟合,但依赖先验。 |
| 局部最优 | 复杂模型训练结果依赖初始化。 | 需要多次初始化、优化诊断和验证集。 |
| 先验不合理 | MAP 被拉向错误区域。 | 先验是信息也是偏见,不能无条件认为更好。 |
#Monte Carlo:用随机样本平均近似期望
Monte Carlo 的核心很朴素:如果一个量可以写成期望,但积分或枚举太难,就通过反复采样来平均。它的优点是通用,缺点是收敛慢,尤其对尾部事件很吃样本。
输入
可采样的随机变量 \(X\)、要估计的函数 \(f(X)\)、样本数 \(n\)、随机数生成方式。
输出
期望 \(\mathbb{E}[f(X)]\) 的估计值,以及可选的不确定性估计,例如样本标准误。
目标
用样本平均替代难算的积分、求和或未来情景枚举。
最小例子:估计一次随机收益的均值
假设模拟得到 5 个收益样本:\(-1\)、\(2\)、\(0\)、\(3\)、\(1\)。用 Monte Carlo 估计期望收益。
这个 1 只是随机估计,不是真理。如果重新采样,结果会变。样本数越大,平均值通常越稳定,但误差按 \(1/\sqrt n\) 缩小:想把误差降到原来的十分之一,通常需要约 100 倍样本。
为什么会失效:如果样本不是从正确分布来,平均得再多也只是稳定地错;如果目标是极端尾部事件,普通随机采样很可能根本抽不到关键场景;如果样本强相关,表面样本数很大,有效样本数却很小。
#CVaR 风险估计:不要只问阈值,还要问尾部平均有多坏
VaR 和 CVaR 都用于描述损失尾部。VaR 是分位数:在置信水平 \(\alpha\) 下,损失通常不会超过多少。CVaR 进一步看超过这个阈值之后,平均损失是多少。面试中要强调:VaR 是门槛,CVaR 是门槛之后的平均严重程度。
输入
损失样本 \(L_1,\ldots,L_n\),其中损失越大越坏;置信水平 \(\alpha\),例如 \(95\%\) 或 \(99\%\)。
输出
\(\mathrm{VaR}_\alpha\) 和 \(\mathrm{CVaR}_\alpha\)。VaR 是损失分位数,CVaR 是尾部条件平均损失。
目标
估计极端坏情景下的损失水平,服务于仓位控制、保证金、止损线和压力测试。
最小例子:从 10 个损失样本估计尾部风险
损失样本排序后为 \(0,1,1,2,2,3,4,5,8,12\),取 \(\alpha=0.8\)。
80% 分位数大约落在第 8 个样本附近,所以经验 VaR 可取 \(5\)。超过或达到该阈值的尾部样本是 \(5,8,12\),因此一个保守的经验 CVaR 为
VaR 只告诉你“80% 情况下损失不超过 5 左右”,CVaR 告诉你“一旦进入最坏尾部,平均损失约为 8.33”。后者更能反映尾部厚度。
| 失效条件 | 为什么危险 | 修正方向 |
|---|---|---|
| 尾部样本太少 | 95% 或 99% 风险只由少数点决定,估计方差很大。 | 增加历史窗口、情景模拟、压力测试、极值理论。 |
| 历史不代表未来 | 平静期估出来的 VaR/CVaR 会低估危机。 | 加入 regime 判断、波动率缩放、压力情景。 |
| 损失方向弄反 | 把收益分位数当损失分位数,风险解释完全反。 | 先统一定义 \(L=-R\) 或明确损失为正。 |
| 组合相关性变化 | 危机时相关性上升,分散化失效。 | 用条件相关、压力相关矩阵和组合级回测。 |
#完整数值例子:从拟合到风险估计的一条链
下面把多个算法放在一个小链路里:先用最小二乘拟合一个简单收益模型,再用梯度下降看同一个目标如何迭代优化,最后用模拟残差估计尾部风险。
题目
有 3 天的特征 \(x\) 和收益 \(y\):\((1,1)\)、\((2,2)\)、\((3,2)\)。用无截距模型 \(y=\beta x\) 拟合;然后从 \(\beta_0=0\) 用梯度下降做两步;最后假设策略损失样本为 \(0,1,1,2,4\),估计 80% VaR 和 CVaR。
1. 最小二乘解析解。
预测为 \(0.786,1.571,2.357\),残差约为 \(0.214,0.429,-0.357\)。这个模型只用一条过原点的直线解释三个点,所以只能折中。
2. 同一个目标用梯度下降。目标函数为
梯度为
从 \(\beta_0=0\) 出发,取学习率 \(\eta=0.05\)。
两步后 \(\beta\) 已经靠近解析解 \(0.786\),但还没到。梯度下降是逐步靠近,最小二乘解析解是在条件好时直接解线性方程。
3. 用损失样本估计风险。损失样本排序后为 \(0,1,1,2,4\),80% 分位数取第 4 个附近,VaR 约为 \(2\)。尾部样本取 \(2,4\),则
这个风险估计非常粗糙,因为只有 5 个样本。它适合教学,不适合真实交易决策。
#常见误区
| 误区 | 为什么错 | 正确说法 |
|---|---|---|
| 梯度下降一定找到全局最优 | 非凸目标可能有局部最优、鞍点和平坦区。 | 凸问题有更强保证;深度学习通常依赖经验优化和泛化验证。 |
| Newton 一定比梯度下降好 | 二阶信息贵,Hessian 不正定或病态时方向可能错。 | Newton 在合适条件下快,但常需要 damping、trust region 或拟牛顿。 |
| 最小二乘就是求逆 | 显式求逆数值不稳定,且 \(X^TX\) 可能不可逆。 | 理解为投影;工程上优先 QR/SVD/正则化。 |
| PCA 找到“最重要因子” | PCA 只看方差,不看标签、因果或业务收益。 | 它找最大线性波动方向,不保证可解释或可预测。 |
| MLE 总是客观,MAP 总是主观 | MLE 也依赖模型假设;MAP 的先验可能是领域知识,也可能是偏见。 | 两者都要说明模型、数据和先验来源。 |
| Monte Carlo 多采样就没问题 | 分布错、尾部抽不到、样本相关时,多采样不能消除系统偏差。 | 区分随机误差和偏差;必要时做重要性采样、方差缩减和诊断。 |
| VaR 足够描述风险 | VaR 不告诉超过阈值后会亏多惨。 | CVaR 更关注尾部平均损失,但也依赖样本和分布假设。 |
#LLM 与 Quant 连接
同一个算法,在 LLM 和量化面试中关注点不同。LLM 更关心训练目标、梯度信号、表示压缩和采样估计;Quant 更关心估计误差、稳定性、尾部风险和分布漂移。
| 算法 | LLM 面试连接 | 量化面试连接 |
|---|---|---|
| 梯度下降 | 训练 loss 通过反向传播给每个参数方向;学习率、batch 噪声和曲率影响训练稳定性。 | 优化组合权重、拟合因子模型或校准策略参数;过拟合和交易成本会改变目标。 |
| Newton | 完整 Hessian 在大模型中太贵,但二阶直觉解释预条件、自然梯度和曲率校正。 | 均值方差优化、凸风险目标和小维度校准中常见;Hessian 病态会导致仓位极端。 |
| 最小二乘 | 线性 probe、embedding 回归、logit lens 的基础直觉都是线性解释。 | 因子暴露估计、收益预测、风险归因;共线性和非平稳是核心问题。 |
| PCA | 理解 embedding 或 activation 的低维结构,但不能直接等同语义因子。 | 收益协方差降维、风险因子提取、噪声过滤;危机期主成分可能变化。 |
| MLE/MAP | 语言模型最大化 token 条件似然;交叉熵就是负 log-likelihood 的常见形式。 | 估计分布参数、波动率模型、状态转移概率;MAP 可加入先验或正则。 |
| Monte Carlo | 采样估计生成质量、RL rollout 回报、pass@k 或不确定性。 | 路径模拟、期权定价、风险情景;误差收敛慢,尾部要特别处理。 |
| CVaR | 可类比安全评估中“最坏输出尾部”的平均严重性,而不是只看平均表现。 | 仓位风控、止损、保证金和压力测试;比 VaR 更关注尾部损失大小。 |
面试 insight:强回答不是“这个算法叫什么”,而是能指出它依赖的局部信息、统计假设和样本质量。比如梯度下降依赖局部一阶近似,PCA 依赖方差代表信息,MLE 依赖模型族正确,CVaR 依赖尾部样本可信。能说出这些依赖,就能自然说出失效条件。