Syn-GRPO: Self-Evolving Data Synthesis for MLLM Perception Reasoning¶
会议: ECCV 2026
论文: ECCV 2026
代码: https://github.com/hqhQAQ/Syn-GRPO
领域: 多模态VLM
关键词: 多模态大模型、GRPO、在线数据合成、感知推理、探索与多样性
一句话总结¶
Syn-GRPO 在 GRPO 训练里挂了一个在线图像合成服务:让 MLLM 在推理输出之外再预测"这条样本的多样性"和一句新图像的文本描述,由数据服务把原图抠出前景、按描述重绘背景生成标注依然正确的新样本替换旧数据,并用多样性奖励监督模型挑出真正值得翻新的样本,从而在三个视觉感知任务上把探索空间和最终精度同时撑住。
研究背景与动机¶
多模态大模型的感知能力(指代表达定位、开放词表检测、场景理解)是它一切下游功能的前提,而感知任务恰好与强化学习天然契合——框标注让"答对没有"可以被程序判定,于是 GRPO 这类不需要价值网络的组相对策略优化成了当前最主流的训练范式,VLM-R1、Visual-RFT、VisionReasoner 等一批工作用精心设计的任务奖励把感知指标推高了一截。但这条路线有一个被普遍忽略的前提:训练数据在整个训练过程中是固定的。作者对 REC 任务上 GRPO 的训练过程做了逐阶段的观测,发现模型输出的熵(token 预测分布的不确定性)与多样性(同一问题多条回答之间正确性奖励的方差)在训练很早就开始快速下滑——论文称之为 entropy collapse 与 diversity collapse,并把根因归结为数据质量:这批视觉感知样本的格式过于统一,无法让模型对同一条题给出多样的回答,于是组内奖励几乎没有差异,优势估计退化成噪声,探索空间被压扁,训练效率极低。
已有两条应对思路都没能治本。一条从算法侧反向约束:DAPO / Clip-Higher 放宽采样比裁剪阈值、Clip-Cov 与 KL-Cov 对高协方差 token 做裁剪或 KL 惩罚、Entropy Adv. 把熵写进优势函数——这些方法确实能延缓熵塌缩,但由于数据本身给不出多样响应,收益很快见顶,在格式更统一的视觉感知任务上尤其明显。另一条从数据侧补数据:PromptCoT、Genetic-Instruct、MetaSynth、TaskCraft 面向的是数学、代码、工具调用等文本任务,Absolute Zero 与 R-Zero 虽然把数据合成挂进了 GRPO 训练循环,但合成的仍是文本,也无法针对视觉感知任务自适应。真正的矛盾在于:感知样本是"图像 + 框",语言模型能改写题干却动不了图像,而若从零生成一张新图,框标注立刻失效,RL 奖励就变成了噪声。
本文的切入点是让图像生成只动"允许动的那一部分":只要目标物体(前景)保持原样,背景换成什么,框标注都依然正确。围绕这一点,作者提出 Syn-GRPO——一个在线数据合成框架,由数据服务与 GRPO workflow 两部分组成。数据服务用前景分割加 outpainting,把旧图的前景保留、背景重绘,生成标注仍然可用的新样本;GRPO workflow 则要求 MLLM 在原有的推理过程与最终答案之外再多预测两样东西:一个 \([0,1]\) 的多样性打分和一句描述新图像场景的文本,并用一个多样性奖励监督这两项预测——模型于是自己就知道"这条样本值不值得翻新、该翻新成什么样"。核心 idea:把样本的探索价值定义成组内正确性奖励的方差,用它当奖励去监督 MLLM 预测新图像描述,再由解耦异步的数据服务把描述渲染成保留前景的新图像,让训练数据与模型能力一起自演化。
方法详解¶
整体框架¶
Syn-GRPO 的整体流程是一条带反馈回环的循环:输入是带框标注的视觉感知样本(图像 + 真值框),输出是训练完成的 MLLM;中间由两个异步运行的模块协作,GRPO workflow 负责"训练模型并决定下一批数据长什么样",数据服务负责"把这段描述渲染成一张新图"。每个 epoch 开始时,数据池里的样本已经是被上一轮替换过的新图;workflow 对每条样本采样 \(G\) 条响应,每条响应除推理过程与答案外还要给出预测多样性和新图像描述,然后计算包含多样性项的奖励、选出多样性奖励最高的那条描述,通过统一 API 异步发给数据服务;数据服务抠出原图前景、按描述重绘背景,回传的新图像携带原有框标注进入下一轮 rollout。整个训练里图像生成模型的参数是冻结的,被优化的只有 MLLM 本身。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["原始图像 + 框标注"] --> B["多样性奖励驱动的自演化循环<br/>采样响应,预测多样性与新描述"]
B -->|真实多样性| C["多样性平滑<br/>EMA 校准下滑的多样性"]
C -->|平滑后的奖励目标| B
B -->|统一 API 异步请求| D["解耦异步的数据服务"]
D --> E["前景一致的数据合成<br/>抠前景、按描述重绘背景"]
E -->|新图像替换旧数据| B
关键设计¶
1. 多样性奖励驱动的自演化循环:让 MLLM 自己判断哪条样本值得翻新
如果只是随便挑一条样本送去合成,很可能造出来的仍是一张"给不出多样回答"的图,等于白花一次生成算力。作者的解法是把"哪条样本有探索价值"变成一个可被 RL 学会的预测任务。为此,样本的真实多样性被定义为该样本 \(G\) 条响应正确性奖励的方差:
方差越大,说明模型对这条题的作答越参差、探索价值越高;论文按方差的理论上界 \(1/4\) 把它归一化到 \([0,1]\) 以便与模型输出比较。MLLM 被要求在输出里额外给出一个预测多样性 \(v_i\in[0,1]\),多样性奖励就是拿它与(平滑后的)真实多样性做比较——预测得越准、奖励越高,且取值同样被约束在 \([0,1]\)(⚠️ 原文式 5 在缓存中只留下 \(R_{\rm diversity}(o_i)\) 与 \(v_i\)、\(\mathcal{V}(q)\) 的比较形式,比较算子未能还原,此处依据原文"把预测多样性与真实多样性作比较、结果落在 \([0,1]\)"的文字描述理解,具体形式以原文为准)。每条响应的最终奖励是三项之和:
其中精度奖励沿用各任务的定义,格式奖励约束响应必须按推理过程、预测多样性、新图像描述、最终答案四段结构输出。接下来 workflow 只挑多样性奖励最高的那条响应对应的描述送去合成(\(i^{*}=\arg\max_i R_{\rm diversity}(o_i)\))——因为那条响应最准确地判断出了这条样本能否产生多样回答,它的描述最可能造出一张真能激发多样响应的新图。
这一步之所以关键,是因为它把"数据筛选"从一个人工规则变成了模型能力的一部分:模型预测多样性越准,选出的描述越好,合成出的数据质量越高,下一轮模型学得越好、预测得越准。数据合成因此不是离线跑一遍就固定的产物,而是随训练一起迭代的自演化过程。
2. 多样性平滑:给不断下滑的奖励目标做锚定
这里有一个自举系统特有的陷阱:真实多样性本身会随训练下降(多样性塌缩),而多样性奖励又是拿它当监督目标的,于是当前模型学到的其实是"上一个模型"的多样性水平,训练越久奖励目标偏得越多——论文把这一现象叫作 diversity drift。如果不管它,模型会一路追逐一个持续下移的目标,奖励信号既不稳定也不准确。
作者的修法是给奖励目标加一层指数滑动平均校准。记第 \(k\) 步训练批次 \(B_k\) 内样本真实多样性的均值为 batch 平均,并维护一个跨批次的全局滑动平均值 \(\mathcal{V}_k^{\rm global\_avg}=\beta\,\mathcal{V}_{k-1}^{\rm global\_avg}+(1-\beta)\,\mathcal{V}_k^{\rm batch\_avg}\)(首步取 batch 平均),则样本 \(q\) 在该步的平滑真实多样性为
当这一批的多样性低于历史平均(也就是发生塌缩时),比值大于 1 会把它们整体拉回历史水平,使奖励的标尺不随训练漂移;clip 把结果夹在 \([0,1]\) 内。β 控制校准的惯性:β=0.7 时 3B/7B 都最好,β=0.9 反而掉点,因为过大的惯性让平滑值几乎不更新、等于没做校准。
3. 解耦异步的数据服务:训练与生成并行
同步的实现方式会毁掉这套方法的经济性:如果每个 batch 都要等图像生成完毕才能开始训练,训练时间几乎翻倍(Table 5:Qwen2.5-VL-3B 从 6.10 小时涨到 13.16 小时,7B 从 13.66 小时涨到 28.47 小时)。作者的解法是把数据服务做成一个与训练流程完全解耦的独立模块:用 Python 的 HTTPServer 起服务,GRPO workflow 通过一套统一的通信 API 提交生成参数(原图 + 选中的描述),服务在生成结束后回传结果,两边各自异步推进。实测异步版只比原始 GRPO 多出约 0.35 小时(3B 6.45 小时、7B 13.93 小时),生成开销基本被藏进了训练时间里。解耦还有一层好处:workflow 只认 API 不认实现,将来把 outpainting 换成别的合成方式(比如可控编辑或视频生成)不需要改训练侧代码。
4. 前景一致的数据合成:只换背景、不动标注
这是整条链路能与 RL 对接的前提。若用文生图从零造一张新图,图上的框标注立刻失效,\(R_{\rm acc}\) 就成了噪声;退一步讲,即便标注能重新标,新旧数据分布差异过大也会让训练不稳。作者的做法是先用前景分割模型 BEN2 把目标物体抠出来、遮掉真值框以外的区域,再把 MLLM 预测的新图像描述作为条件,交给一个基于 SDXL 的 ControlNet outpainting 模型去重绘背景与扩展画布。由于前景像素与目标位置原样保留,框标注在新图上依然正确,可以直接照常计算精度奖励;同时"改图"而非"造图"保证了新样本仍落在原任务的分布附近。合成用的分割与 outpainting 模型在训练全程冻结,只当作数据生成器使用,因此不引入额外的可学习参数或梯度回传。
一个完整示例¶
以 REC 的一条样本为例:原图是一只趴在客厅地板上的狗,真值框框住这只狗。GRPO workflow 采样 \(G=6\) 条响应,每条响应输出四段内容——推理过程、预测多样性(例如 0.32 / 0.55 / 0.78 …)、新图像描述(例如 "A dog in a messy living room with knit blanket, warm and soft floor lamps.")、最终答案框。作者用这 6 条响应的正确性奖励算出真实多样性 \(V(q)\),经滑动平均校准得到 \(\tilde{\mathcal{V}}(q)\),再逐条比较预测多样性与它的接近程度得到多样性奖励;三条奖励相加得到每条响应的总奖励用于 GRPO 更新,同时挑出多样性奖励最高的那条响应的描述。这句描述经统一 API 异步送到数据服务:服务抠出狗、把客厅背景换成描述里那个温暖杂乱、有针织毯和落地灯的房间,回传一张新图。这张新图带着原来的框进入下一个 epoch 的 rollout。随着 epoch 推进(论文展示到第 4 个 epoch),同一张原图被生成的场景越来越复杂、元素越来越多,这正是自演化在起作用的可见证据。
损失函数 / 训练策略¶
训练目标就是上述三项奖励之和下的 GRPO 优化:优势由组内奖励标准化得到,\(\hat{A}_{i,t} = \big(r_i-\mathrm{mean}(\mathbf{r})\big)/\mathrm{std}(\mathbf{r})\),并对参考模型做 KL 正则以防策略跑偏。任务奖励按任务定义:REC 用预测框与真值框的 IoU;OVD 用 \(s_{\rm ovd}\cdot \mathrm{mAP}\),其中 \(s_{\rm ovd}=\min(N^{\rm gt}/N^{\rm pred},1)\) 用来惩罚冗余预测;ISR 被拆成感知与精修两阶段,第一阶段与 OVD 同式,Syn-GRPO 只作用在第一阶段。实现上基于 verl 框架,rollout 用 vLLM 加速、训练用 FSDP;基座模型为 Qwen2.5-VL-3B / 7B,AdamW 优化器,学习率 \(1\times10^{-6}\),batch size 20,rollout 数 \(G=6\),训练 5 个 epoch,β=0.7;4 张 GPU 跑 GRPO workflow、1 张 GPU 跑数据服务。训练数据方面,REC 遵循 VLM-R1 使用 RefCOCO / RefCOCO+ / RefCOCOg,随机取 2,000 条训练 5 个 epoch(共 10,000 次样本更新,与 VLM-R1 的 9,600 次可比);OVD 用 D3 数据集 2,000 条;ISR 用 3D-FRONT 2,000 条。
实验关键数据¶
主实验¶
Table 1 为 REC 任务上的主结果,两个基座模型分别在域外(LISA-Grounding)与域内(RefCOCO / RefCOCO+ / RefCOCOg)评测;Table 2 为 OVD 任务结果。Syn-GRPO 在两个模型、两个任务上都超过同预算下的 GRPO 以及其他训练方法。
| 模型 | 方法 | LISA | RefCOCO | RefCOCO+ | RefCOCOg |
|---|---|---|---|---|---|
| Qwen2.5-VL-3B | Original | 56.51 | 88.70 | 81.95 | 86.05 |
| Qwen2.5-VL-3B | SFT | 54.82 | 88.70 | 82.25 | 85.95 |
| Qwen2.5-VL-3B | VLM-R1 | 63.14 | 90.55 | 84.30 | 87.10 |
| Qwen2.5-VL-3B | Visionary-R1 | 60.80 | 86.85 | 82.65 | 86.50 |
| Qwen2.5-VL-3B | GRPO | 62.24 | 89.40 | 84.10 | 86.60 |
| Qwen2.5-VL-3B | GRPO + Entropy Loss | 64.23 | 90.20 | 82.55 | 85.60 |
| Qwen2.5-VL-3B | GRPO + Entropy Adv. | 63.69 | 90.90 | 83.85 | 86.40 |
| Qwen2.5-VL-3B | GRPO + Offline Generation | 64.23 | 91.10 | 83.40 | 86.30 |
| Qwen2.5-VL-3B | Syn-GRPO (w/o \(R_{\rm diversity}\)) | 64.60 | 91.35 | 83.85 | 85.85 |
| Qwen2.5-VL-3B | Syn-GRPO | 68.28 | 92.15 | 85.30 | 87.45 |
| Qwen2.5-VL-7B | Original | 61.34 | 90.00 | 84.20 | 87.20 |
| Qwen2.5-VL-7B | SFT | 63.27 | 89.10 | 85.95 | 86.65 |
| Qwen2.5-VL-7B | VLM-R1 | 66.71 | 92.60 | 89.40 | 89.00 |
| Qwen2.5-VL-7B | Rex-Thinker | 67.49 | 91.20 | 86.35 | 87.80 |
| Qwen2.5-VL-7B | GRPO | 65.26 | 91.90 | 89.85 | 87.80 |
| Qwen2.5-VL-7B | GRPO + Entropy Loss | 66.59 | 91.40 | 87.65 | 87.95 |
| Qwen2.5-VL-7B | GRPO + Entropy Adv. | 67.25 | 92.05 | 88.30 | 87.30 |
| Qwen2.5-VL-7B | GRPO + Offline Generation | 66.95 | 91.80 | 89.85 | 88.55 |
| Qwen2.5-VL-7B | Syn-GRPO (w/o \(R_{\rm diversity}\)) | 67.67 | 92.75 | 89.50 | 88.75 |
| Qwen2.5-VL-7B | Syn-GRPO | 70.14 | 93.55 | 90.65 | 89.25 |
| 方法(OVD,Qwen2.5-VL-3B 口径) | mAP | GP (IoU=0.5) | GR (IoU=0.5) |
|---|---|---|---|
| Original | 14.20 | 56.06 | 33.79 |
| SFT | 18.50 | 53.15 | 39.40 |
| VLM-R1 | 21.10 | 67.34 | 43.84 |
| GRPO | 18.66 | 63.83 | 36.95 |
| Syn-GRPO | 23.74 | 71.42 | 46.44 |
消融实验¶
| 消融项 | 设置 | LISA 精度 | 说明 |
|---|---|---|---|
| 多样性奖励 | w/o \(R_{\rm diversity}\)(3B) | 64.60 | 去掉后仍高于 GRPO 的 62.24 与离线合成(GPT-4o 描述)的 64.23,但比完整版低 3.68 |
| 多样性奖励 | w/o \(R_{\rm diversity}\)(7B) | 67.67 | 比完整版 70.14 低 2.47,说明"选哪条描述"的判断本身贡献显著 |
| 平滑权重 β | 0.1 / 0.3 / 0.5 / 0.7 / 0.9(3B) | 67.43 / 67.31 / 67.85 / 68.28 / 67.55 | 先升后降,β 过大限制平滑值更新 |
| 平滑权重 β | 0.1 / 0.3 / 0.5 / 0.7 / 0.9(7B) | 68.88 / 69.60 / 69.84 / 70.14 / 69.24 | 与 3B 同趋势 |
| 数据规模 | REC 训练样本 400 → 2,000 | 见 Fig. 6 | 精度随数据量单调上升,呈数据 scaling 趋势 |
| 同步 vs 异步 | 训练时长(3B / 7B) | 6.10h vs 13.16h vs 6.45h / 13.66h vs 28.47h vs 13.93h | 依次为原始 GRPO、同步合成、异步合成 |
关键发现¶
- 增益最大处是域外(LISA-Grounding)而不是域内:3B 从 GRPO 的 62.24 涨到 68.28(+6.04),7B 从 65.26 涨到 70.14(+4.88),而 RefCOCO 域内只涨约 2.75 / 0.95。作者的解释是合成数据覆盖的分布更宽,因此带来更鲁棒、更全面的感知能力——这也提示这套方法的价值更偏泛化而非刷域内点。
- 熵约束类方法只是缓解症状:Entropy Loss / Entropy Adv. 相对 GRPO 的提升有限(3B 63–64 区间),且部分指标(如域内 RefCOCO+、RefCOCOg)甚至低于 GRPO,印证了"不改数据就治不了本"的判断。
- 多样性奖励是核心贡献点:去掉它(描述改为随机选)虽然仍受益于"换了新图"这一事实,但 LISA 上比完整版低 2.5–3.7,说明让模型学会判断"哪条样本值得翻新"比单纯合成本身更重要。
- 离线合成(GPT-4o 生成描述)不如在线自演化:GRPO + Offline Generation 在 3B 上 LISA 为 64.23,接近但低于 w/o \(R_{\rm diversity}\) 的 64.60,明显低于在线版本,说明"合成能力随训练进化"这一点是离线数据给不了的。
- 公平比较的 caveat:表中 GRPO 在 3B 上落后 VLM-R1(62.24 vs 63.14),原因是本文只用了 2,000 条训练样本、而 VLM-R1 用了 9,600 条,不是同一数据预算下的对比;Syn-GRPO 的增益是在这个更小的预算下取得的。
- 合成图像随 epoch 变复杂:同一张原图在第 1–4 个 epoch 被生成的场景复杂度递增(Fig. 8),是"自演化"这一说法最直观的证据;论文还展示了若干"超现实"的生成图(Fig. 9),作者认为它们能诱导新的推理路径。
- 没有观察到同任务上的能力退化:完整模型在所有评测项上都优于去掉组件的版本;但论文没有报告通用能力(如通用 VQA)的回归测试,因此"是否损害通用感知"这一点无法从现有实验判断。
亮点与洞察¶
- 把数据合成从"离线造一批"改造成"训练闭环里的一个可学习能力":样本的探索价值用组内正确性奖励的方差来定义,再用这个定义去监督模型预测——模型越会判断,选出的样本越好,下一轮模型越强,形成正反馈。这个"用统计量当监督信号、让模型自己选数据"的模板几乎可以直接搬到任何需要主动选数据的 RL 场景(如 agent 任务筛选、课程学习)。
- 前景一致性是一条极其实用的 trick:图像可以换背景,但框标注不用重标,RL 奖励直接照用。凡是"标注绑定在图像局部区域"的任务(分割掩码、关键点、计数区域)都能照搬这套"抠出标注区域 + 重绘周边"的合成法,代价只是把标注区域遮住当条件。
- 解耦异步的服务化设计把生成开销藏了起来:同步版本训练时间翻倍,异步版本只多约 0.35 小时——把"重活的模块"从训练主循环里摘出去、用统一 API 通信,这个工程决策对任何"训练 + 在线数据生成/检索"的管线都适用。
- diversity drift 的发现值得单记一笔:在自举训练里,用历史统计量监督当前模型会天然产生漂移,作者用 batch 均值与全局 EMA 的比值做重标定,是一个通用的非平稳目标校正技巧(也可以迁移到 reward model 的自训练、课程难度估计等场景)。
局限与展望¶
- 对生成质量与标注一致性的依赖没有被量化:整条链路假设 outpainting 后前景像素原样保留、框标注依然成立,但论文只给了定性可视化,没有报告合成图像的前景保真度、边缘接缝伪影或标注偏差的定量指标;对细粒度定位任务,重绘背景与前景交界处的视觉断层可能反而成为噪声。
- "长时程可扩展"目前仍是趋势性证据:实验只跑了 5 个 epoch、最长可视化到第 4 个 epoch、数据规模最大 2,000 条,虽然 Fig. 6 显示了随数据量上升的趋势,但真正的"长期自演化"(几十个 epoch 后的行为、是否最终坍缩回同质数据)并未验证。
- 真实多样性的定义有边界情况:\(V(q)\) 用组内正确性奖励的方差定义,当 \(G=6\) 条响应全对或全错时方差为 0,会被判为"没有多样性的样本";但"全错"的难题往往是探索价值最高的那类样本,这个定义把它们与"简单到没有区分度"的样本混为一谈。作者没有讨论用熵或其它响应差异度量作为替代的方案。
- 额外资源开销:训练要多占 1 张 GPU 跑数据服务,且需要一个基于 SDXL 的 outpainting 模型与 BEN2 分割模型;论文未给出单样本生成延迟随数据集规模(例如上万条)的变化,因此大规模场景下的吞吐瓶颈仍不明确。
- 任务适用范围受标注形式限制:方法要求样本有可定位的框标注且前景可被分割,对纯 VQA、计数、OCR 这类没有定位标注的任务无法直接套用;ISR 任务也只是被拆出一半(感知阶段)来适配。
- 改进思路:把选择描述的策略从"取 \(R_{\rm diversity}\) 最大的一条"换成对多条描述做组合/去重,可能进一步提升合成数据的多样性;用难度感知的调度替换固定的每 epoch 全量替换,也值得一试。
相关工作与启发¶
- vs VLM-R1 / Visual-RFT / Rex-Thinker:它们都是在 GRPO 上设计更好的任务奖励与输出格式,训练数据保持不变;本文不改奖励主体,而是让数据本身在训练中演化,因此两者正交、可以叠加使用(本文的精度奖励就直接沿用了 VLM-R1 的设定)。
- vs DAPO / Clip-Higher / Clip-Cov / KL-Cov / Entropy Adv.:这些方法从优化算法侧约束熵(放宽裁剪、裁剪高协方差 token、加 KL 惩罚、把熵写进优势),属于"让模型在被动的数据上更敢探索";本文认为熵与多样性塌缩的根因是数据同质,于是直接从数据侧补充能被多样回答的样本,实验也显示纯算法侧的收益明显小于换数据。
- vs Absolute Zero / R-Zero:这两者也把数据合成挂进了 GRPO 训练循环,思路最接近;区别在于它们合成的是文本题目(面向数学/推理),无法处理"标注绑定在图像上"的视觉感知任务,也不具备本文这套"前台保留"的图像合成机制与多样性奖励设计。
- vs PromptCoT / Genetic-Instruct / MetaSynth / TaskCraft:这些是面向文本/代码/工具任务的离线或多智能体数据合成流水线,产出的数据在训练前就固定;本文的合成是随训练在线进行、由模型当前能力驱动,并在实验中直接对比了离线生成(GPT-4o 描述)的版本。
评分¶
- 新颖性: ⭐⭐⭐⭐ 把图像合成的在线闭环接进 GRPO,并用组内奖励方差定义样本探索价值来监督"出题",这个组合是新的
- 实验充分度: ⭐⭐⭐ 覆盖三个感知任务与 3B/7B 两档模型,消融完整,但主实验的数据预算偏小(2,000 条、5 epoch),缺少通用能力的回归测试与生成质量的定量评估
- 写作质量: ⭐⭐⭐⭐ 问题—机制—实验的链条清楚,动机用熵/多样性曲线说话;公式排版在缓存中有损坏但结构清晰
- 价值: ⭐⭐⭐⭐ 提供了"训练数据与模型共同演化"的可复用范式,异步服务化与前景一致性两个工程决策对同类工作有直接借鉴意义