ImageReward: Learning and Evaluating Human Preferences for Text-to-Image Generation

Authors: Jiazheng Xu, Xiao Liu, Yuchen Wu, Yuxuan Tong, Qinkai Li, Ming Ding, Jie Tang, Yuxiao Dong Affiliations: Tsinghua University, Zhipu AI, Beijing University of Posts and Telecommunications arXiv: 2304.05977 Project Page: huggingface.co/THUDM/ImageReward GitHub: zai-org/ImageReward Venue: NeurIPS 2023

1. Motivation (研究动机)

1.1 为什么 text-to-image 需要 human preference reward model

text-to-image 模型虽然已经能生成高保真图像,但和真实用户偏好之间仍然存在系统性偏差。论文在引言里把这类偏差概括为四类:

  • Text-image Alignment:数字、属性、对象关系、语义约束经常对不齐。
  • Body Problem:人物/动物肢体容易畸形、重复或缺失。
  • Human Aesthetic:模型生成结果和主流审美并不总是匹配。
  • Toxicity and Biases:会出现有害、歧视、暴力或引发不适的内容。

这些问题的根源在于:预训练数据分布 noisy,且与真实用户 prompt 分布并不一致。仅靠改架构或扩充预训练数据,难以直接把模型往“更符合人类偏好”的方向推。

1.2 现有自动评价指标为什么不够

论文强调,现有主流自动指标并不适合作为 text-to-image 的“人类偏好代理”:

  • CLIP / BLIP / Aesthetic 更像相关性或审美 proxy,不等价于整体 human preference。
  • FID 依赖和真实图像分布的统计距离,忽略了 prompt-conditioned human preference;而且更适合数据集层面平均评估,不适合单样本筛选。
  • 对真实用户使用场景而言,模型往往是 zero-shot 使用,MS-COCO/FID 这类评估设置和真实应用存在偏差。

因此论文要解决两个问题:

  1. 能否训练一个真正对齐 human preference 的通用 reward model?
  2. 能否把 reward model 不仅用于后验筛选,还直接用于优化 diffusion model?

1.3 这篇论文要做什么

论文提出两部分贡献:

  • ImageReward:第一个通用 text-to-image human preference reward model。
  • ReFL (Reward Feedback Learning):把 ImageReward 作为反馈信号,直接优化 text-to-image diffusion model。

核心价值在于:把“人更喜欢什么图”从模糊直觉,变成可训练、可评估、可反向传播的标量信号。


2. Idea (核心思想)

论文的核心思想可以概括成两句话:

  1. 先学一个对 prompt-image pair 打分的偏好模型:这个模型不是判断图像是否“像真图”,而是判断“给定 prompt,人会不会更喜欢这张图”。
  2. 再把这个偏好模型作为 reward:不仅用于从多张候选图中挑图,也用于在 diffusion 生成过程中给梯度反馈,直接改善生成器。

与已有方法相比,它的本质差异有两点:

  • 相比 CLIP / Aesthetic / BLIP,这篇工作直接用专家排序数据学习 human preference,而不是依赖自监督 proxy。
  • 相比 Dataset Filtering、Reward Weighted、RAFT 这类通过筛数据或改样本权重来间接优化模型的方法,ReFL 是直接把 reward 回传给 diffusion model,更接近视觉领域的 RLHF 方向。

更具体地说,ImageReward 做了三件事:

  • 设计了一套针对 text-to-image 偏好的 annotation pipeline;
  • 用 BLIP backbone + cross-attention + MLP 学习 pairwise preference;
  • 把 learned reward 用作 metric 和 training signal。

而 ReFL 的关键 insight 是:在 diffusion 的后期 denoising steps,图像最终质量已经足够可辨认,这使得 reward model 可以在这些 later denoising steps 上提供有效反馈,从而绕开“diffusion generation 没有完整 generation likelihood”这一障碍。


3. Method (方法)

3.1 Overall framework

Figure 1 解读:这张图给出了整篇论文的总览。上半部分是 ImageReward 的构建流程:从真实用户 prompt 和多模型生成图像出发,经由 prompt annotation、text-image rating、image ranking,得到偏好训练数据,再训练 reward model。下半部分是 ReFL:把训练好的 ImageReward 当作 scorer,在 diffusion model 的后期 denoising step 上对当前预测图像打分,并把 reward 作为优化信号回传给生成器。也就是说,ImageReward 既是评估器,也是训练器。

整个方法可以拆成两个模块:

  • ImageReward:从 human ranking 数据学一个 reward function
  • ReFL:把 施加到 latent diffusion model 上,直接优化生成过程。

3.2 Annotation pipeline

论文的数据构建不是简单众包打分,而是一整套面向偏好学习的 annotation pipeline。

  • Prompt 来自 DiffusionDB
  • 为了保证 prompt 多样性,作者先做 graph-based prompt selection,最终选出 10,000 个候选 prompts。
  • 每个 prompt 配置 4 到 9 张候选图像,总共得到 177,304 个候选 pairs 用于标注。
  • 经过约 2 个月标注,最后得到 8,878 个 prompts 和 136,892 个有效 comparison pairs。

标注流程分 3 个阶段:

  1. Prompt Annotation:标记 prompt 的类别和问题属性。
  2. Text-Image Rating:从 alignmentfidelityharmlessness 三个维度给图像打分。
  3. Image Ranking:综合三维评分与整体偏好,给同一 prompt 下的多张图排序。

Figure 2 解读:这是 text-image rating 界面。标注员不是直接“凭感觉选最好”,而是先对图像进行维度化评估,例如图文一致性、细节保真度以及是否包含有害内容。这样做的好处是把人类偏好的来源拆开,有助于统一标注标准,并为后续 ranking 提供解释性基础。

Figure 3 解读:这是 image ranking 界面。标注员需要在同一 prompt 下对多张生成图做整体偏好排序。与简单二分类相比,ranking 更适合导出大量 pairwise preference data,因为对 张图排序后可以得到最多 个比较对。ImageReward 最终正是利用这些 better/worse pair 做 reward learning。

3.3 ImageReward reward model

论文把 reward learning 形式化为 pairwise ranking。对同一个 prompt ,若 更好,则优化目标是:

其中 是 reward model 对 prompt-image pair 的标量偏好分数。

论文在架构上使用 BLIP 作为 backbone,理由是它在 prelim experiments 中优于 CLIP。具体做法是:

  • 图像经 BLIP visual encoder 编码;
  • 文本经 BLIP text encoder 编码,并通过 cross-attention 接入图像特征;
  • 取 text encoder 的 [CLS] 表征;
  • 送入 MLP 输出单一 reward scalar。

从开源代码看,推理版实现位于 ImageReward/ImageReward.py,有几个关键实现细节:

  • 输入图像统一 resize + center crop 到 224
  • tokenizer 最大长度是 35
  • MLP 结构是 768 -> 1024 -> 128 -> 64 -> 16 -> 1,带 dropout;
  • 最终 reward 还会做一次标准化:

其中代码中固定了 mean = 0.1671736283std = 1.0333394966

伪代码 1:ImageReward 推理/排序(基于开源实现)

# from ImageReward/ImageReward.py
 
def inference_rank(prompt, image_list):
    text = blip.tokenizer(prompt, max_length=35)
    features = []
 
    for image in image_list:
        image_tensor = preprocess_224(image)
        image_embeds = blip.visual_encoder(image_tensor)
        image_atts = ones_like(image_embeds)
 
        text_output = blip.text_encoder(
            text.input_ids,
            attention_mask=text.attention_mask,
            encoder_hidden_states=image_embeds,
            encoder_attention_mask=image_atts,
        )
        cls_feature = text_output.last_hidden_state[:, 0, :]
        features.append(cls_feature)
 
    features = concat(features)
    rewards = mlp(features)
    rewards = (rewards - mean) / std
    ranking = argsort_descending(rewards)
    return ranking, rewards

伪代码 2:ImageReward pairwise 训练(基于开源实现)

# from train/src/rank_pair_dataset.py + train/src/ImageReward.py + train/src/train.py
 
def build_pair_dataset(ranked_samples):
    pairs = []
    for sample in ranked_samples:
        prompt = sample["prompt"]
        images = load_all_images(sample["generations"])
        ranking = sample["ranking"]
        for i in range(len(ranking)):
            for j in range(i + 1, len(ranking)):
                if ranking[i] == ranking[j]:
                    continue
                better, worse = select_better_worse(images[i], images[j], ranking[i], ranking[j])
                pairs.append((prompt, better, worse))
    return pairs
 
 
def reward_model_forward(prompt, better_img, worse_img):
    emb_better = encode_with_blip_cross_attention(prompt, better_img)
    emb_worse = encode_with_blip_cross_attention(prompt, worse_img)
    reward_better = mlp(emb_better)
    reward_worse = mlp(emb_worse)
    return concat([reward_better, reward_worse], dim=1)
 
 
def pairwise_loss(reward_pair):
    # better image should be class 0
    target = zeros(batch_size, dtype=long)
    return cross_entropy(reward_pair, target)

3.4 ImageReward 作为自动 metric

论文不是把 ImageReward 只当成一个 selector,而是进一步论证它可作为 text-to-image 的自动评估指标。

做法是:

  • 6 个高分辨率 text-to-image 模型(CogView 2, Versatile Diffusion, SD 1.4, SD 2.1-base, DALL-E 2, Openjourney)上做人类排序;
  • 同时比较 ImageReward, CLIP, zero-shot FID 与 human ranking 的一致性。

结果显示:

  • 在 real-user prompts 上,ImageReward 的模型排序与 human ranking 完全一致
  • 与 human ranking 的 Spearman 相关性达到 1.00
  • CLIP 只有 0.60
  • zero-shot FID 只有 0.09

这说明它不仅能做 sample-level selection,也能做 model-level comparison。

3.5 ReFL: Reward Feedback Learning

Figure 4 解读:这张图展示了 ReFL 的关键洞察:在 40-step denoising 中,越靠后的 step,ImageReward 对不同 generation seed 的质量区分越明显。论文据此认为,不必等到完整生成结束才给 reward,只要在 sufficiently late 的 denoising steps 上,reward 就已经足够可靠,可以作为训练反馈。

ReFL 要解决的问题是:diffusion model 不像 language model 那样有整句 generation likelihood,不能直接照搬 NLP 里的 PPO/RLHF。论文的方案是:

  • 从随机选择的后期 denoising step 开始保留梯度;
  • 将当前 step 预测出的 decode 成图像;
  • 用 ImageReward 评分;
  • 把 reward 映射成 loss,对 diffusion model 反传。

论文写出的最终目标包括 reward loss 和 pre-training regularization:

其中:

  • 是 ImageReward;
  • 是 diffusion model 的生成结果;
  • 是 reward-to-loss map;
  • 是原始 diffusion pretraining loss,用来 regularize 训练。

但需要注意:开源代码和论文公式并不完全一致。在当前 GitHub release 的 ImageReward/ReFL.py 中,最核心的实现是:

  • mid_timestep = random.randint(30, 39),即在 40-step scheduler 的后 10 步中采样;
  • 前面若干 denoising step 用 torch.no_grad()
  • 只在选中的一个后期 step 上保留梯度;
  • decode pred_original_sample 得到图像;
  • reward_model.score_gard(...) 计算 reward;
  • 实际 loss 写成:

即代码里能明确看到:

loss = F.relu(-rewards + 2)
loss = loss.mean() * args.grad_scale

所以更准确地说:论文中的 ReFL 是“reward loss + regularization”的完整方法,而公开代码更像一个简化版的 later-step reward backprop 实现。这一点在读论文和复现时必须区分。

伪代码 3:ReFL 训练(基于开源实现)

# from ImageReward/ReFL.py
 
def refl_train_step(batch_prompts):
    encoder_hidden_states = text_encoder(batch_prompts)
    latents = sample_gaussian_noise(shape=(B, 4, 64, 64))
 
    noise_scheduler.set_timesteps(40)
    timesteps = noise_scheduler.timesteps
    mid_timestep = random.randint(30, 39)
 
    # no-grad denoising before the selected late step
    for t in timesteps[:mid_timestep]:
        with no_grad():
            latent_input = noise_scheduler.scale_model_input(latents, t)
            noise_pred = unet(latent_input, t, encoder_hidden_states).sample
            latents = noise_scheduler.step(noise_pred, t, latents).prev_sample
 
    # keep gradient only at the selected late step
    latent_input = noise_scheduler.scale_model_input(latents, timesteps[mid_timestep])
    noise_pred = unet(latent_input, timesteps[mid_timestep], encoder_hidden_states).sample
    pred_x0 = noise_scheduler.step(noise_pred, timesteps[mid_timestep], latents).pred_original_sample
 
    image = vae.decode(pred_x0 / vae.scaling_factor).sample
    image = clamp((image / 2 + 0.5), 0, 1)
    image = resize_center_crop_normalize_for_imagereward(image)
 
    rewards = reward_model.score_gard(prompt_ids, prompt_attention_mask, image)
    loss = mean(relu(2 - rewards)) * grad_scale
 
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

3.6 Code-to-paper mapping table

Paper ConceptSource FileKey Class / Function
ImageReward 推理接口ImageReward/ImageReward.pyImageReward, score, inference_rank
reward head / 标量打分ImageReward/ImageReward.pyMLP
pairwise ranking dataset 构造train/src/rank_pair_dataset.pyrank_pair_dataset.make_data
ImageReward 训练模型train/src/ImageReward.pyImageReward.forward, encode_pair
pairwise cross-entropy 训练目标train/src/train.pyloss_func
ReFL 训练ImageReward/ReFL.pyTrainer.train
pip 包入口ImageReward/__init__.pyfrom .ReFL import *
最小推理示例example.pyRM.load, inference_rank, score

4. Experimental Setup (实验设置)

4.1 ImageReward 训练设置

  • 训练数据:8,878 prompts,136,892 image comparison pairs。
  • 测试集:466 prompts,对应 6,399 comparisons。
  • 另一组 selection 测试:371 prompts,每个 prompt 有 8 张图。
  • Backbone:BLIP(ViT-L image encoder + 12-layer text encoder)。
  • 最优设置:固定 70% backbone transformer layers,学习率 1e-5,总 batch size 64
  • 训练硬件:4 × 40GB NVIDIA A100,每卡 batch size 16

4.2 作为 metric 的评测设置

  • 比较模型:CogView 2, Versatile Diffusion, Stable Diffusion 1.4, Stable Diffusion 2.1-base, DALL-E 2, Openjourney。
  • 数据:100 real-user test prompts,每个模型每个 prompt 生成 10 张图。
  • 自动指标:ImageReward, CLIP, zero-shot FID。
  • 目标:比较自动指标和 human ranking 的一致性。

4.3 ReFL 训练与评测设置

  • baseline 生成模型:Stable Diffusion v1.4
  • pre-training regularization 数据:LAION-5B 的 625k aesthetic-selected subset。
  • ReFL prompt set:从 DiffusionDB 采样。
  • 训练硬件:8 × 40GB NVIDIA A100
  • 总 batch size:128(文中写 64 for pre-training + 64 for ReFL)。
  • 学习率:1e-5
  • 论文设置:, ,
  • 评测数据:466 real-user prompts + 90 MT Bench challenging prompts。
  • 对比方法:Dataset Filtering, Reward Weighted, RAFT, baseline SD v1.4。

4.4 评价指标

  • Preference Accuracy:在两张图中选择和 human 一致的更优图。
  • Recall@k / Filter@k:从多张候选图中 recall 最优图或过滤低质量图的能力。
  • Human Eval. WinRate:人类偏好评测中的胜率。
  • Spearman :自动指标与 human ranking 的相关性。

5. Experimental Results (实验结果)

5.1 ImageReward 明显优于传统 scorer

主结果表显示,在 human preference prediction 上,ImageReward 全面优于 CLIP / Aesthetic / BLIP:

  • Preference Accuracy:ImageReward 65.14,CLIP 54.82,Aesthetic 57.35,BLIP 57.76
  • Recall@1:ImageReward 39.62,优于 Aesthetic 30.73 / BLIP 30.73
  • Recall@2:ImageReward 63.07
  • Recall@4:ImageReward 90.84
  • Filter@1/2/4:分别达到 49.06 / 70.89 / 88.95

从 agreement analysis 看,ImageReward 和 researcher / annotator ensemble 的一致性也最高:

  • 对 researcher:64.5% ± 2.5%,高于 CLIP 57.8% ± 3.6%
  • 对 annotator ensemble:70.5% ± 18.6%,高于 BLIP 62.0% ± 16.1%

同时,ablation 说明两个结论:

  • BLIP backbone 明显优于 CLIP backbone
  • 数据越多越好:BLIP 从 1k 8k prompts,Preference Accuracy 从 63.07 提升到 65.14

5.2 作为 automatic metric,ImageReward 比 CLIP / FID 更像 human

在 6 个生成模型的 model ranking 上:

  • human ranking 前三名是:Openjourney > SD 2.1-base > DALL-E 2
  • ImageReward 的 real-user prompt 排名与 human ranking 完全一致
  • Spearman 相关:ImageReward 1.00,CLIP 0.60,zero-shot FID 0.09

这说明 ImageReward 不是“另一个相关性分数”,而是更接近 human evaluation 的偏好度量。

5.3 ReFL 在 human eval 上优于其他 diffusion 优化方法

Figure 5 解读:这张图展示了不同 selector 在 human evaluation 中选到更优图像的胜率。ImageReward 相对 random、CLIP、Aesthetic、BLIP 都有明显优势,说明它不仅能输出更高分,而且这些更高分确实对应更高的人类偏好。

ReFL 的 human evaluation 结果如下:

  • real-user prompts:ReFL 的 win count 1508,WinRate 58.79%,优于 Dataset Filtering 55.17%,显著优于 Reward Weighted 39.52% 和 RAFT。
  • MT Bench:ReFL 的 WinRate 58.49%,也优于其它对比方法。

论文进一步指出:

  • RAFT 容易随着迭代增加而 overfit;
  • Reward Weighted 因为把非偏好图也保留了正权重,难以完全消除差图干扰;
  • Dataset Filtering 虽然能减轻问题,但本质仍是间接优化;
  • ReFL 通过 reward 直接回传梯度,因此更有效。

5.4 与其他 reward model 对比

在 reward model 的横向比较中,ImageReward 也优于 HPS 和 PickScore:

  • Bo64 设置,real-user prompts:ImageReward WinRate 73.33%,HPS 67.24%,PickScore 72.16%
  • ReFL 设置,real-user prompts:ImageReward WinRate 58.38%,高于 HPS 52.86% 和 PickScore 56.91%

这说明 ReFL 的收益并不仅仅来自“有一个 reward”,而和 reward 的质量本身密切相关。

Figure 6 解读:这张图同时展示了两种收益。上半部分是“先生成很多张,再用 ImageReward 选 Top-1”;下半部分是“直接用 ReFL 训练后单次生成”。可以看到,ImageReward 一方面能把多候选中的更优图选出来,另一方面 ReFL 又能把这种偏好直接蒸馏进生成器本身,减少依赖多次采样和后验筛选。

5.5 局限性

论文明确提了三类限制:

  1. 标注规模与分布仍有限:当前约 9k prompts / 137k pairs,且 prompt 主要来自 DiffusionDB,仍可能有分布偏差。
  2. reward model 训练仍有 overfitting 问题:需要固定部分 backbone 层才能稳定训练,说明方法对 training technique 依赖较强。
  3. ReFL 还只是视觉领域 RLHF 的近似方案:虽然有效,但距离“理论上更无偏、更高效的 feedback learning”还有空间。

5.6 总结

我对这篇论文的判断是:它的重要性不只在于提出了一个分数更高的 reward model,而在于把视觉生成里的“人类偏好”第一次系统化为:

  • 可规模化采集的数据;
  • 可训练的 reward function;
  • 可直接优化 diffusion model 的反馈信号。

如果把 RLHF 在文本领域的关键中间件拆成“偏好数据 reward model policy optimization”,那么这篇工作基本给 text-to-image 领域补齐了这条链路里的前两环半,并用 ReFL 往第三环迈出了很实的一步。