> projects / grpo-compression

GRPO 数据压缩算法

强化学习 数据压缩 效率优化 2026.03 · 深信服

01背景与目标

安全研判正从人工与规则走向模型化:模型对单条 HTTP 请求输出「是否攻击」与攻击结果(成功 / 失败 / 不确定)。在 XDR 单包研判模型的迭代中,该能力由 SFT + GRPO 训练链路支撑;其中 RL 阶段每轮需在 14690 条样本上训练约 30 小时,数据冗余高、迭代代价大,已成为模型快速迭代的主要瓶颈。本方案针对该瓶颈独立设计:数据压缩至 4000 条(压缩率 72.8%),单轮训练时间压缩至约 7 小时,核心指标下降 <1%。

问题定义。在已完成 SFT 微调的基座 π_SFT 上,从 D_train(14690 条)构造压缩子集 D_c(|D_c| = 4000),使在其上 GRPO 训练所得 π_GRPO 与全量训练所得 π_full 的判别性能差异 Δ_perf 理想 <1%。

分层自适应抽样SimHash 语义去重MMR 多样性选择SFT 难度加权

02设计四原则

GRPO 通过组内相对奖励更新策略,对样本的难度与对比度尤为敏感:困难样本(模型易错、低频攻击手法)产生的奖励信号梯度大,驱动策略改善最有效;边界样本(成败特征模糊)帮模型精准刻画分类边界;冗余样本(泛化生成的高度相似流量)只贡献重复梯度,删掉无损性能。既然 SFT 已完成基础分布拟合,RL 阶段的压缩就从「均匀覆盖」转向「信息密度优先」:

🛡️

保护困难

策略改进的主信号源

模型易错、低频攻击手法等困难样本优先保留;攻击结果「不确定」的 350 条作为典型困难样本全额纳入。

难例优先不确定样本全保留
⚖️

平衡分布

防止策略退化

黑白比例、攻击结果与攻击类型配额全部对齐原始分布,避免数据偏斜;子类配额不足时优先向同类型高难度子类转移。

黑白分层类型分层子类覆盖
🧹

去除冗余

删重复而不损信息

64 位 SimHash 指纹识别近似重复(汉明距离 ≤ 3),MMR 贪心选择保证入选样本特征多样,泛化冗余被有效剥离。

SimHashMMR汉明距离 ≤ 3
🕒

时间偏新

训练数据持续新鲜

业务流量随版本演进,候选按 batch_tag 降序(新版本优先)排序;版本滑动策略让旧样本优先级随时间自动降低。

batch_tag 降序版本滑动

03分层配额与数据画像

压缩的第一步不是选样本,而是先把 14690 条按「黑白 & 攻击结果 & 攻击类型」逐层切片,每层按配额精确抽取,目标总量锁定 4000 条:

原始 D_train 14,690 条带标签 HTTP 流量 压缩后 D_c 4,000 条 · 压缩率 72.8% 白样本 · 正常流量 4,608 1,256 黑样本 · 攻击失败 7,261 1,788 黑样本 · 攻击成功 2,471 606 黑样本 · 结果不确定 350 全保留 350

注:各层先按原始占比计算配额;「不确定」350 条属典型困难样本,初始配额仅 95,评估后全额保留,超出部分由成功 / 失败类等比让渡——调整后黑样本为:失败 1788(65.2%)、成功 606(22.1%)、不确定 350(12.7%),黑样本总量 2744 不变;白样本 1256 条维持原始占比 31.4%。

黑样本的攻击类型内部再分两层:

🐢

长尾保护层

20 种 · 230 条 · 全量保留

原始数量 ≤ 25 的低频攻击类型直接全部纳入 D_c,守住稀有攻击手法:URL 重定向、登录绕过、弱口令、SSI 注入、CRLF 注入、C2 加密通信、CSRF、NoSQL 注入等。

阈值 ≤ 25 全保留防长尾消失
⚡

高频压缩层

20 种 · 9852 至 2514 条 · r ≈ 0.255

高频类型按统一压缩比等比抽取,内部再按原始「失败/成功/不确定」子比例细分配额:SQL 注入 1716 至 438、系统命令注入 1678 至 428、目录遍历 1046 至 267、webshell 上传 747 至 191 等。

统一压缩比 r ≈ 0.255配额取整锁定 2514

04执行流程

配额定好后,按「长尾先保 & 指纹建库 & 高频配额抽样 & 白样本反选 & 总量微调 & 校验闭环」六步执行,把 1.46 万条收敛到 4000 条:

01

长尾全保留

20 种长尾攻击类型(原始数量 ≤ 25)共 230 条直接纳入 D_c 并移出候选池——低频攻击手法样本稀缺,先锁定再压缩,防止稀有信号被「压没」。

20 种 · 230 条先锁定,再压缩
↓
02

指纹与元数据建库

对全部候选样本解析字段并做 SFT 推理,提取请求方法、URL 路径(数字 / UUID 归一化)、参数名列表、Content-Type、响应状态码与响应体长度分桶等结构特征,生成 64 位 SimHash 指纹(黑样本 8 维;白样本额外引入 Host、以流量结构为主),连同版本、黑白、攻击结果、SFT 预测与置信度建成元数据表,供判重与选样使用。

黑样本 8 维白样本含 Host64-bit SimHash
↓
03

高频类型配额抽样

对 20 种高频攻击类型逐一执行:候选先按 batch_tag 降序(新版本优先)、难度得分降序(「不确定」=3.0、SFT 预测错误 =2.0、低置信度 <0.8 =1.5、其余 =1.0)排序;再在「失败 / 成功 / 不确定」子类内独立运行 MMR 多样性选择——贪心选取与已选集汉明距离 ≥ 3 的样本,遍历后不足配额则阈值按 3、2、1、0 逐级放宽,子类候选不足时剩余配额转给同类型内难度更高的子类;最后汇总各类型选中样本,共 2514 条。

排序:版本 > 难度子类内 MMR阈值放宽 3 至 0合计 2514 条
↓
04

白样本反向筛选

全量白样本按 batch_tag 降序 > SFT 困难度权重降序(被 SFT 误判为「攻击」的白样本 =3.0、判「正常」但置信度 <0.8 =1.5、高置信正确识别 =1.0)排序,再跑 MMR 多样性筛选,目标 1256 条——既去冗余,又专门留住模型容易看错的「困难正常流量」,守边界、压误报。

困难 3.0 > 模糊 1.5 > 简单 1.0目标 1256 条
↓
05

总量微调

合并三层选中样本后核对总量:多于 4000 条时,优先从白样本与黑样本「失败」类中剔除汉明距离最小的冗余;不足 4000 时,放宽白样本与高频类型的去重阈值重新采样,或从低版本样本中补足。

多退:剔除最近冗余少补:放宽阈值 / 低版本补足
↓
06

一致性校验与人工确认

统计校验黑白比例(允许偏差 ±1%)、黑样本内子类比例(±2%)、高频类型配额(±10%)、长尾零遗漏;再由安全专家确认白样本业务场景覆盖(登录认证、上传 / 下载、SQL 查询、API 调用、运维操作,响应状态码 2xx~5xx 齐全),关键场景缺失则从原始数据定向补充并替换等量冗余。

黑白 ±1%子类 ±2%类型 ±10%人工场景确认

05对比实验与验收

固定测评集、三组模型对照:SFT 阶段均使用全量数据,只有 RL 阶段训练集不同,以隔离「压缩」这一变量:

🧪

基线组 π_full

原始 1.46 万全量 · SFT + GRPO

参照基准:全量数据上训练的效果上限,所有指标退化都相对它度量。

⚗️

实验组 π_4k

压缩后 4000 条 · SFT + GRPO

方案验证组:验收「是否攻击 Acc / 攻击结果 Acc / 标签分数」下降 <1%,漏报率、白判黑、失败判成功上升 <1%(核心指标,必须通过)。

🔬

消融组 π_random_4k

随机采样 4000 条 · SFT + GRPO(可选)

随机降采样对照,证明「分层 + 去重 + 难度加权」的选样优于随机抽,排除运气成分。

测评集固定为蓝军 Benchmark:不参与任何训练,覆盖全攻击类型与业务场景,保证评估客观与泛化能力。验收指标分两级:核心指标(必须通过)——π_4k 相对 π_full 的「是否攻击 Acc / 攻击结果 Acc / 标签分数」下降 <1%,漏报率、白判黑、失败判成功上升 <1%;辅助指标(重点观察)——黑样本各攻击类型粒度下降 <5%。验证通过后固化 D_c 选取结果与随机种子,输出最终 RL 训练集(train_4k.jsonl)、采样配置报告(sampling_report.json:配额/版本分布/去重阈值/SFT 难度参数)与三组模型全量指标对比表(evaluation_comparison.xlsx),全程可复现。

06成果与指标

72.8%数据压缩率(14690 至 4000)
约 7h单次训练(30h 缩短至约 7h)
<1%核心指标下降(验收线)
约 4.3×训练提速(相对 30h 基线)

07长期可扩展

框架以「分层自适应抽样 + SimHash 多样性筛选 + 难度加权」为核心,不依赖 1.46 万的特定规模,数据增长、标注精细化后可平滑适配:

📈

规模无关

数据量增长到 3 万、5 万,目标调至 6000、8000、1 万,只需重算分布与配额即可零改动复用;高频统一压缩比 = (黑样本目标 − 长尾总量) / (黑样本总量 − 长尾总量)。

🌱

种子 / 泛化分层

标注区分种子与泛化样本后,排序扩展为「batch_tag > 种子优先 > 难度得分」;泛化样本可收紧汉明阈值更激进去重,种子配额不足只用同类型泛化样本补充。

🔄

版本滑动

固定保留最新 N 个版本段作为高版本区间(如最新 3 段),旧版本优先级逐步降低;长尾保护阈值可随数据量上调(如总量翻倍时调整到 ≤ 50)。