核 SVM 中 kernel cache 有什么作用?
简化版
核 SVM 训练频繁访问样本对的核值,kernel cache 用内存保存已计算的核行/块,减少重复计算。缓存增大通常换训练速度,但不改变模型数学结果;收益受样本数、核成本、访问局部性和内存压力影响。
详细版
-
完整 Gram 矩阵需 O(n²) 内存。
-
有限缓存通常按 LRU 等策略保存工作集。
-
缓存过小会反复重算核值。
-
缓存过大导致系统换页反而更慢。
-
预测仍需与支持向量算核,训练 cache 不自动降低上线延迟。
完整版教学
一、缓存优化的是求解器的数据访问成本
SMO 等对偶求解会多次更新一小组 α,并重复请求相关核行。
缓存命中可把昂贵核计算换成内存读取。
它不改变 C、gamma 或最优解;相同数值容差下,缓存只是系统参数。
二、底层机制与公式
full_kernel_memory≈n²*bytes
100000²*8 bytes≈80GB
三、带数字的推演
n=20,000 的 double Gram 矩阵约 20,000²×8=3.2GB。
只给 200MB cache 无法全放下,但若工作集局部性好仍可显著命中。
四、方案对比
| 方案/对象 | 核心特点 | 代价或边界 |
|---|---|---|
| 小 cache | 省内存 | 核重算多 |
| 大 cache | 训练快 | 挤压系统内存 |
| 线性/近似核 | 避免大核矩阵 | 模型假设或近似改变 |
五、执行流程
估算 n² 与可用 RAM -> 设 cache 上限 -> 监控命中/CPU/换页
-> 多档基准 -> 保证无 swap -> 记录训练时长与峰值内存
六、边界条件与工程代价
容器 memory limit 小于 cache 配置时,进程可能 OOM;cache_size 不是唯一内存,数据、梯度和求解状态也占用。
核值浮点缓存和并行实现可能产生微小数值路径差异,但不应被当作调泛化的手段。
记忆钩子:Kernel cache 是“用 RAM 买少算几次核”。
七、常见误区与追问
-
误区:增大 kernel cache 会提高准确率。 它主要改变训练效率。
-
追问:为何不能总存完整矩阵? 内存按 n² 增长。
-
误区:cache 配多大都越快。 触发换页会严重变慢。
-
追问:何时收益最大? 核计算昂贵且访问有重复局部性时。
-
追问:上线也用同一 cache 吗? 训练 cache 与推理支持向量计算是不同问题。
八、加强记忆
Kernel cache 是“用 RAM 买少算几次核”。
先算 n² 上限,再用基准找不触发换页的最大有效缓存。