209 lines
6.8 KiB
Markdown
209 lines
6.8 KiB
Markdown
# SafeHome 实验计划
|
||
|
||
## 实验追踪器
|
||
|
||
| 实验ID | 阶段 | 状态 | 依赖 | 预计时间 | GPU 需求 |
|
||
|--------|------|------|------|---------|---------|
|
||
| E1 | 仿真器开发 | 待开始 | 无 | 3-4周 | 无 |
|
||
| E2 | Benchmark构建 | 待开始 | E1 | 2-3周 | 无 |
|
||
| E3 | 基线评估 | 待开始 | E2 | 1-2周 | API调用 |
|
||
| E4 | SFT基线 | 待开始 | E2,E3 | 1-2周 | 1-2×A100 |
|
||
| E5 | GRPO训练 | 待开始 | E4 | 2-3周 | 4×A100 |
|
||
| E6 | 消融实验 | 待开始 | E5 | 1-2周 | 2×A100 |
|
||
| E7 | 分析与论文 | 待开始 | E3-E6 | 2-3周 | 无 |
|
||
|
||
---
|
||
|
||
## E1: 仿真器开发
|
||
|
||
### 任务清单
|
||
- [ ] Fork SimuHome 代码库 (https://github.com/holi-lab/SimuHome/)
|
||
- [ ] 新增安全设备类型(门窗传感器、运动检测器、智能门锁、烟雾报警器、水浸传感器、安防面板)
|
||
- [ ] 实现故障注入引擎(传感器故障、执行器故障、通信故障)
|
||
- [ ] 实现行为模式生成器(正常行为模板 + 异常行为场景)
|
||
- [ ] 新增安全相关 API(get_security_log, get_entry_history, get_device_health)
|
||
- [ ] 新增环境变量(occupancy_pattern, entry_log, device_health_score)
|
||
- [ ] 单元测试:验证每种故障注入和行为模式的正确性
|
||
|
||
### 验收标准
|
||
- 所有新设备类型通过 Matter 协议接口正常工作
|
||
- 故障注入在仿真中正确影响设备状态和环境变量
|
||
- 行为模式生成器能生成逼真的24小时活动日志
|
||
|
||
---
|
||
|
||
## E2: Benchmark 构建
|
||
|
||
### 任务清单
|
||
- [ ] 设计 SQ1-SQ5 的目标模板和评估条件
|
||
- [ ] 实现 episode 自动生成流程(参考 SimuHome 的 3 步流程)
|
||
- [ ] 生成 600 episodes(SQ1:100, SQ2:100, SQ3:150, SQ4:150, SQ5:100)
|
||
- [ ] 人工验证:每种类型随机抽查 20%,确保质量
|
||
- [ ] 实现评估脚本(仿真器验证 + LLM-as-a-Judge)
|
||
- [ ] 编写 Agent 系统 prompt(安全推理版)
|
||
|
||
### Query 生成示例
|
||
|
||
**SQ1 (设备健康诊断) — TP 示例**:
|
||
```
|
||
初始状态: 客厅温度传感器读数过去3小时固定在22.00°C(注入Stuck-at故障)
|
||
Query: "你能检查一下客厅的温度传感器是否正常工作吗?最近好像温度一直没变过。"
|
||
Goal: Agent 应识别传感器读数异常固定,推断传感器故障
|
||
Prerequisite: get_room_devices(living_room), get_attribute(temp_sensor, history)
|
||
```
|
||
|
||
**SQ2 (单事件安全判断) — TP 示例**:
|
||
```
|
||
初始状态: 凌晨2:30AM, 安防系统Armed, 书房窗户传感器从Closed变为Open
|
||
Query: [系统自动触发] "窗户传感器触发:书房窗户已打开。当前时间凌晨2:30,安防系统处于布防状态。"
|
||
Goal: Agent 应识别为可能的入侵,建议触发警报
|
||
```
|
||
|
||
**SQ3 (行为序列分析) — TP 示例**:
|
||
```
|
||
初始状态: 提供过去6小时的设备状态日志
|
||
日志中隐藏的异常: 21:00正常下班回家→21:30正常活动→22:00卧室灯关→22:15客厅意外出现运动→22:16厨房窗户打开→22:20客厅灯打开(非常规操作模式)
|
||
Query: "请分析过去6小时的设备活动日志,检查是否有任何异常。"
|
||
Goal: Agent 应识别22:15后的活动模式异常(居住者已入睡但有人在客厅活动)
|
||
```
|
||
|
||
---
|
||
|
||
## E3: 基线评估
|
||
|
||
### 模型列表(对标 SimuHome Table 1)
|
||
|
||
| 组别 | 模型 | API 来源 |
|
||
|------|------|---------|
|
||
| 小模型 | Llama3.2-1B-it, Llama3.2-3B-it, Gemma3-4B-it | OpenRouter |
|
||
| 中模型 | Llama4-Scout, Llama4-Maverick, Qwen3-32B, Qwen3-235B-A22B, Gemma3-12B-it, Gemma3-27B-it | OpenRouter |
|
||
| 闭源 | Gemini-2.5-Flash-Lite, Gemini-2.5-Flash, GPT-4.1-nano, GPT-4.1-mini, GPT-4.1 | OpenRouter |
|
||
| 推理 | Gemini-2.5-Pro, GPT-5.1 | OpenRouter |
|
||
|
||
### 评估指标
|
||
- Detection Accuracy (DA)
|
||
- Miss Rate (MR) — 安全关键指标
|
||
- False Alarm Rate (FAR)
|
||
- F1-Security
|
||
- Reasoning Quality (LLM-Judge, 1-5 scale)
|
||
- Response Latency (秒)
|
||
|
||
---
|
||
|
||
## E4: SFT 基线
|
||
|
||
### 数据生成
|
||
- 使用 GPT-5.1 在 SafeHome 环境中生成成功交互序列
|
||
- 目标: 400 条成功轨迹(覆盖所有 SQ 类型)
|
||
- 过滤: 仅保留仿真器验证通过的轨迹
|
||
|
||
### 训练配置
|
||
- 模型: Qwen3-4B, Qwen3-8B
|
||
- Epochs: 3
|
||
- Learning Rate: 2e-5
|
||
- Batch Size: 8
|
||
- 评估: SafeHome Benchmark 全评
|
||
|
||
---
|
||
|
||
## E5: GRPO 训练
|
||
|
||
### 奖励函数设计
|
||
```python
|
||
def security_reward(prediction, ground_truth, reasoning_chain):
|
||
base_reward = 0
|
||
|
||
# 检测准确性奖励
|
||
if ground_truth.is_threat:
|
||
if prediction.detected_threat:
|
||
base_reward = +3.0 # True Positive
|
||
else:
|
||
base_reward = -5.0 # Missed threat (严重惩罚)
|
||
else:
|
||
if prediction.detected_threat:
|
||
base_reward = -2.0 # False alarm
|
||
else:
|
||
base_reward = +1.0 # True Negative
|
||
|
||
# 推理链质量奖励(可验证步骤)
|
||
verified_steps = verify_reasoning_steps(reasoning_chain)
|
||
chain_reward = 0.5 * len(verified_steps)
|
||
|
||
# 威胁类型识别奖励
|
||
if prediction.threat_type == ground_truth.threat_type:
|
||
type_reward = +1.0
|
||
else:
|
||
type_reward = 0
|
||
|
||
return base_reward + chain_reward + type_reward
|
||
```
|
||
|
||
### 训练配置
|
||
- 模型: Qwen3-4B (主), Qwen3-8B (副)
|
||
- Group Size: 8 (每个prompt生成8个候选)
|
||
- KL Penalty: 0.05
|
||
- 训练步数: 5000-10000
|
||
- 学习率: 5e-7
|
||
- Gradient Accumulation: 4
|
||
- 数据: 2000 episodes 自动生成
|
||
|
||
### 对比方法
|
||
- DPO: 使用 GPT-5.1 生成的 preferred/rejected pairs
|
||
- RLHF: 训练单独的 reward model
|
||
- REINFORCE: 简单策略梯度
|
||
|
||
---
|
||
|
||
## E6: 消融实验
|
||
|
||
### A1: 奖励设计消融
|
||
| 变体 | 奖励函数 | 对比目的 |
|
||
|------|---------|---------|
|
||
| R-binary | 只有正确/错误 (+1/-1) | 最简单的奖励 |
|
||
| R-safety | 区分 TP/FP/TN + miss 惩罚 | 安全感知奖励 |
|
||
| R-chain | R-safety + 推理链奖励 | 过程奖励的影响 |
|
||
| R-full | R-chain + 威胁类型奖励 | 完整奖励 |
|
||
|
||
### A2: 场景复杂度消融
|
||
| 变体 | 训练场景 | 评估场景 |
|
||
|------|---------|---------|
|
||
| Simple-only | SQ1+SQ2 | SQ1-SQ5 |
|
||
| Complex-only | SQ3+SQ4 | SQ1-SQ5 |
|
||
| All | SQ1-SQ5 | SQ1-SQ5 |
|
||
|
||
### A3: 训练数据量消融
|
||
| 变体 | Episodes 数量 |
|
||
|------|--------------|
|
||
| 100 | 最少 |
|
||
| 500 | 少量 |
|
||
| 2000 | 标准 |
|
||
| 5000 | 大量 |
|
||
|
||
### A4: 模型规模消融
|
||
| 模型 | 参数量 |
|
||
|------|--------|
|
||
| Qwen3-1.7B | 1.7B |
|
||
| Qwen3-4B | 4B |
|
||
| Qwen3-8B | 8B |
|
||
| Qwen3-32B | 32B |
|
||
|
||
---
|
||
|
||
## 最先启动的 3 个实验
|
||
|
||
1. **E1: Fork SimuHome + 扩展安全设备** — 立即开始,无依赖
|
||
2. **E3-pilot: 用 GPT-4.1 测试 10 个手写安全场景** — 验证安全推理的难度假设
|
||
3. **E4-data: 用 GPT-5.1 生成安全推理示例** — 为 SFT 和 GRPO 准备数据
|
||
|
||
---
|
||
|
||
## 计算资源估算
|
||
|
||
| 阶段 | GPU 类型 | 数量 | 时间 | 总 GPU 小时 |
|
||
|------|---------|------|------|-----------|
|
||
| E3 | API calls | - | 1周 | - |
|
||
| E4 | A100 80GB | 2 | 1周 | ~336 |
|
||
| E5 | A100 80GB | 4 | 2周 | ~1344 |
|
||
| E6 | A100 80GB | 2 | 1周 | ~336 |
|
||
| **总计** | | | | **~2016** |
|