④ 优化思想(含 ML 优化)(20 天)

高级工程师的本质工作就是做优化:在约束条件下,找到尽可能好的方案。 这个模块把通用优化思维和 ML 优化(梯度下降、正则化)合并在一起——它们本质是同一件事。


资源

主资源:

  • 《Algorithms to Live By》(用算法思维解决生活问题,建立直觉)
  • 3Blue1Brown 神经网络系列 Ep1-Ep2(梯度下降作为优化方法的经典案例)

辅助资源:

  • LeetCode 贪心/DP 简单题(5-10 道,巩固概念,不是题海)
  • 《System Design Interview》中关于权衡的章节

第一周:优化问题的本质(Day 1-7)

Day 1-2:最优化问题怎么定义

  • [ ] 任何优化问题都只有三件事:目标函数、约束条件、可行域
  • [ ] 理解:工程决策 = 多目标优化(没有完美方案,只有权衡)
  • [ ] 实例:设计一个 API 限流器 → 目标(吞吐量最大化)+ 约束(不超过 QPS 上限)+ 可行域(算法选择)

Day 3-4:精确 vs 近似 vs 启发式

  • [ ] 精确解:能找到但代价高(NP-hard 问题)
  • [ ] 近似算法:有理论保证的"差不多最优"
  • [ ] 启发式:工程中最常用,没理论保证但跑得快
  • [ ] 理解:工程上"够好且快" > "完美但慢"

Day 5-6:经典策略直觉

  • [ ] 贪心:每步选当前最优 → 什么时候能保证全局最优?(拟阵结构)
  • [ ] 动态规划:记下子问题的答案避免重复计算 → 什么问题能用 DP?(最优子结构 + 重叠子问题)
  • [ ] 刷 3-5 道 LeetCode 贪心/DP 简单题巩固直觉

Day 7:案例 — 梯度下降(从优化视角理解)

  • [ ] 梯度下降 = 沿着目标函数值下降最快的方向走(模块②微积分的梯度在这里落地)
  • [ ] 损失函数 = 要最小化的目标函数(MSE、交叉熵等)
  • [ ] 学习率 = 每一步走多远(太大震荡、太慢收敛)
  • [ ] 正则化 = 给目标函数加约束(L1/L2 惩罚项 = 拉格朗日乘子的直觉体现)

动手: 选一个你工作中的实际问题,用"目标 + 约束 + 可行域"三要素重新描述它,写出至少三种可行方案并比较。

第二周:多目标权衡 + ML 优化 + 输出项目(Day 8-15)

Day 8-9:多目标权衡

  • [ ] 帕累托最优:不存在"全面更好"的方案,只有"在某方面更好"
  • [ ] 工程权衡实例:
    • 缓存大小 vs 命中率 vs 内存成本
    • 副本数 vs 一致性 vs 可用性
    • 批处理大小 vs 延迟 vs 吞吐量

Day 10-12:ML 优化实践

  • [ ] 用纯 Python + NumPy 实现线性回归(MSE + 梯度下降)
  • [ ] 加上 Ridge 回归(L2 正则化)和 Lasso 回归(L1 正则化)
  • [ ] 对比三者在过拟合数据上的表现,可视化权重分布差异
  • [ ] 理解:L1 为什么能做特征选择?(几何直觉:菱形 vs 圆形约束)

Day 13-15:输出项目

📦 项目:系统容量优化模拟器

用 Python 模拟一个多目标优化场景:

  1. 场景:你有 N 台服务器,M 个任务,每个任务有 CPU/内存需求和优先级
  2. 目标:最大化高优先级任务完成数 + 最小化平均等待时间
  3. 约束:总 CPU/内存不超过服务器容量
  4. 实现至少 2 种调度策略(轮询 + 贪心背包)
  5. 用 matplotlib 画出帕累托前沿散点图,找到"最优权衡点"

这个项目把贪心、多目标权衡、梯度下降的思想串起来,直接对应工作中资源调度、容器编排的底层逻辑。


不需要看

  • ❌ 数学规划论文(线性规划单纯形法证明等)
  • ❌ 凸优化教材深推导(Boyd 那本先不看)
  • ❌ 二阶优化方法(Adam 的直觉知道就行)
  • ❌ 竞赛算法题(不是刷题)

核心概念检验

  • [ ] 给你一个工程问题,能不能快速拆出"目标 + 约束 + 可行域"?
  • [ ] 梯度下降在优化框架里是什么角色?(和贪心、DP 相比呢?)
  • [ ] 正则化和拉格朗日乘子的关系是什么?
  • [ ] "权衡"的本质是什么?(用帕累托最优解释)
  • [ ] 为什么工程上经常选择近似解而非精确解?
  • [ ] L1 vs L2 正则化的几何区别是什么?

工作映射

  • API 设计 → 优化目标(性能 vs 可用性 vs 一致性)
  • 缓存策略 → 背包问题(缓存空间有限,放什么收益最大)
  • 容器编排 → 调度问题(任务分配到哪台机器)
  • 限流/降级 → 约束满足(在系统承载能力内最大化服务)
  • 数据库索引 → 权衡(查询加速 vs 写入开销 vs 存储成本)
  • 模型训练 → 梯度下降(目标:最小化损失函数 + 正则化约束)
  • 日常决策 → 资源分配(时间/精力/钱怎么投)

学习记录