> projects / grpo-compression
GRPO 数据压缩算法
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%。
02设计四原则
GRPO 通过组内相对奖励更新策略,对样本的难度与对比度尤为敏感:困难样本(模型易错、低频攻击手法)产生的奖励信号梯度大,驱动策略改善最有效;边界样本(成败特征模糊)帮模型精准刻画分类边界;冗余样本(泛化生成的高度相似流量)只贡献重复梯度,删掉无损性能。既然 SFT 已完成基础分布拟合,RL 阶段的压缩就从「均匀覆盖」转向「信息密度优先」:
保护困难
模型易错、低频攻击手法等困难样本优先保留;攻击结果「不确定」的 350 条作为典型困难样本全额纳入。
平衡分布
黑白比例、攻击结果与攻击类型配额全部对齐原始分布,避免数据偏斜;子类配额不足时优先向同类型高难度子类转移。
去除冗余
64 位 SimHash 指纹识别近似重复(汉明距离 ≤ 3),MMR 贪心选择保证入选样本特征多样,泛化冗余被有效剥离。
时间偏新
业务流量随版本演进,候选按 batch_tag 降序(新版本优先)排序;版本滑动策略让旧样本优先级随时间自动降低。
03分层配额与数据画像
压缩的第一步不是选样本,而是先把 14690 条按「黑白 & 攻击结果 & 攻击类型」逐层切片,每层按配额精确抽取,目标总量锁定 4000 条:
注:各层先按原始占比计算配额;「不确定」350 条属典型困难样本,初始配额仅 95,评估后全额保留,超出部分由成功 / 失败类等比让渡——调整后黑样本为:失败 1788(65.2%)、成功 606(22.1%)、不确定 350(12.7%),黑样本总量 2744 不变;白样本 1256 条维持原始占比 31.4%。
黑样本的攻击类型内部再分两层:
长尾保护层
原始数量 ≤ 25 的低频攻击类型直接全部纳入 D_c,守住稀有攻击手法:URL 重定向、登录绕过、弱口令、SSI 注入、CRLF 注入、C2 加密通信、CSRF、NoSQL 注入等。
高频压缩层
高频类型按统一压缩比等比抽取,内部再按原始「失败/成功/不确定」子比例细分配额:SQL 注入 1716 至 438、系统命令注入 1678 至 428、目录遍历 1046 至 267、webshell 上传 747 至 191 等。
04执行流程
配额定好后,按「长尾先保 & 指纹建库 & 高频配额抽样 & 白样本反选 & 总量微调 & 校验闭环」六步执行,把 1.46 万条收敛到 4000 条:
长尾全保留
20 种长尾攻击类型(原始数量 ≤ 25)共 230 条直接纳入 D_c 并移出候选池——低频攻击手法样本稀缺,先锁定再压缩,防止稀有信号被「压没」。
指纹与元数据建库
对全部候选样本解析字段并做 SFT 推理,提取请求方法、URL 路径(数字 / UUID 归一化)、参数名列表、Content-Type、响应状态码与响应体长度分桶等结构特征,生成 64 位 SimHash 指纹(黑样本 8 维;白样本额外引入 Host、以流量结构为主),连同版本、黑白、攻击结果、SFT 预测与置信度建成元数据表,供判重与选样使用。
高频类型配额抽样
对 20 种高频攻击类型逐一执行:候选先按 batch_tag 降序(新版本优先)、难度得分降序(「不确定」=3.0、SFT 预测错误 =2.0、低置信度 <0.8 =1.5、其余 =1.0)排序;再在「失败 / 成功 / 不确定」子类内独立运行 MMR 多样性选择——贪心选取与已选集汉明距离 ≥ 3 的样本,遍历后不足配额则阈值按 3、2、1、0 逐级放宽,子类候选不足时剩余配额转给同类型内难度更高的子类;最后汇总各类型选中样本,共 2514 条。
白样本反向筛选
全量白样本按 batch_tag 降序 > SFT 困难度权重降序(被 SFT 误判为「攻击」的白样本 =3.0、判「正常」但置信度 <0.8 =1.5、高置信正确识别 =1.0)排序,再跑 MMR 多样性筛选,目标 1256 条——既去冗余,又专门留住模型容易看错的「困难正常流量」,守边界、压误报。
总量微调
合并三层选中样本后核对总量:多于 4000 条时,优先从白样本与黑样本「失败」类中剔除汉明距离最小的冗余;不足 4000 时,放宽白样本与高频类型的去重阈值重新采样,或从低版本样本中补足。
一致性校验与人工确认
统计校验黑白比例(允许偏差 ±1%)、黑样本内子类比例(±2%)、高频类型配额(±10%)、长尾零遗漏;再由安全专家确认白样本业务场景覆盖(登录认证、上传 / 下载、SQL 查询、API 调用、运维操作,响应状态码 2xx~5xx 齐全),关键场景缺失则从原始数据定向补充并替换等量冗余。
05对比实验与验收
固定测评集、三组模型对照:SFT 阶段均使用全量数据,只有 RL 阶段训练集不同,以隔离「压缩」这一变量:
基线组 π_full
参照基准:全量数据上训练的效果上限,所有指标退化都相对它度量。
实验组 π_4k
方案验证组:验收「是否攻击 Acc / 攻击结果 Acc / 标签分数」下降 <1%,漏报率、白判黑、失败判成功上升 <1%(核心指标,必须通过)。
消融组 π_random_4k
随机降采样对照,证明「分层 + 去重 + 难度加权」的选样优于随机抽,排除运气成分。
测评集固定为蓝军 Benchmark:不参与任何训练,覆盖全攻击类型与业务场景,保证评估客观与泛化能力。验收指标分两级:核心指标(必须通过)——π_4k 相对 π_full 的「是否攻击 Acc / 攻击结果 Acc / 标签分数」下降 <1%,漏报率、白判黑、失败判成功上升 <1%;辅助指标(重点观察)——黑样本各攻击类型粒度下降 <5%。验证通过后固化 D_c 选取结果与随机种子,输出最终 RL 训练集(train_4k.jsonl)、采样配置报告(sampling_report.json:配额/版本分布/去重阈值/SFT 难度参数)与三组模型全量指标对比表(evaluation_comparison.xlsx),全程可复现。
06成果与指标
07长期可扩展
框架以「分层自适应抽样 + SimHash 多样性筛选 + 难度加权」为核心,不依赖 1.46 万的特定规模,数据增长、标注精细化后可平滑适配:
规模无关
数据量增长到 3 万、5 万,目标调至 6000、8000、1 万,只需重算分布与配额即可零改动复用;高频统一压缩比 = (黑样本目标 − 长尾总量) / (黑样本总量 − 长尾总量)。
种子 / 泛化分层
标注区分种子与泛化样本后,排序扩展为「batch_tag > 种子优先 > 难度得分」;泛化样本可收紧汉明阈值更激进去重,种子配额不足只用同类型泛化样本补充。
版本滑动
固定保留最新 N 个版本段作为高版本区间(如最新 3 段),旧版本优先级逐步降低;长尾保护阈值可随数据量上调(如总量翻倍时调整到 ≤ 50)。