Files
llmiotsafe/refine-logs/EXPERIMENT_PLAN.md
2026-05-12 17:01:39 +08:00

209 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/)
- [ ] 新增安全设备类型(门窗传感器、运动检测器、智能门锁、烟雾报警器、水浸传感器、安防面板)
- [ ] 实现故障注入引擎(传感器故障、执行器故障、通信故障)
- [ ] 实现行为模式生成器(正常行为模板 + 异常行为场景)
- [ ] 新增安全相关 APIget_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 episodesSQ1: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** |