基于 DPO 对齐的联邦大模型偏好研究——毕设探索与问题解决记录

Ryan Lu Lv4

基于 DPO 对齐的联邦大模型偏好研究——毕设探索与问题解决记录

摘要

本研究聚焦于基于 DPO(Direct Preference Optimization)对齐的联邦大模型偏好方向,旨在结合联邦学习与直接偏好优化技术,在保护用户隐私的前提下实现分布式环境下的模型对齐。本文档记录了从理论探索到代码实现过程中遇到的技术问题及解决方案,可作为毕业论文相关章节的参考资料。


第一章 研究背景与理论基础

1.1 研究背景

随着大型语言模型(Large Language Models, LLMs)的快速发展,如何使模型的输出更好地符合人类偏好成为了重要研究方向。传统的 RLHF(Reinforcement Learning from Human Feedback)方法需要训练额外的奖励模型(Reward Model),计算开销较大。DPO(Direct Preference Optimization)作为一种新兴的对齐技术,直接通过偏好数据进行优化,无需显式的奖励模型,在效率和效果上都展现出优异的表现。

与此同时,联邦学习(Federated Learning)作为一种分布式机器学习范式,能够在保护用户数据隐私的前提下实现多方协同训练。将 DPO 与联邦学习结合,可以在不暴露用户偏好数据的情况下,聚合多个客户端的偏好信号,实现全局模型的优化。这一方向具有重要的理论价值和实践意义。

1.2 DPO 核心原理

1.2.1 损失函数定义

DPO 的核心思想是最大化”好回答”与”坏回答”之间的概率差异。其损失函数定义为:

Cannot read properties of null (reading '4')Math input error

其中: - :待优化的策略模型(Policy Model) - :参考模型(Reference Model),通常保持冻结 - :输入的提示(Prompt) - :被选择的回答(Chosen/Winner) - :被拒绝的回答(Rejected/Loser) - Cannot read properties of null (reading '4')Math input error:KL 正则化系数,控制模型与参考模型的偏离程度 - :Sigmoid 函数

该损失函数可以理解为:让模型倾向于增加选择答案的对数概率,同时降低拒绝答案的对数概率,从而实现偏好的直接对齐。

1.2.2 DPO 与 RLHF 的对比

特性RLHFDPO
奖励模型需要单独训练无需奖励模型
训练复杂度高(涉及 PPO 训练)低(仅需 SFT 级别计算)
样本效率较低较高
实现难度复杂,需调参简单,开箱即用

1.3 联邦学习基本原理

联邦学习的核心思想是”数据不动,模型动”。在每一轮通信中: 1. 服务端将当前全局模型参数发送给各客户端 2. 各客户端使用本地数据对模型进行本地训练 3. 客户端将训练后的参数更新上传至服务端 4. 服务端聚合各客户端的参数更新,更新全局模型

经典的 FedAvg(Federated Averaging)算法通过加权平均来聚合客户端的模型参数:

Cannot read properties of null (reading '4')Math input error

其中 为第 个客户端的样本数量,为总样本数量。


第二章 文献综述

2.1 FedLLM: 联邦大模型微调综述

以下内容基于 Wu 等 (2025) 的论文 A Survey on Federated Fine-tuning of Large Language Models[1] 整理。

本综述首次系统性地回顾了大型语言模型(LLM)与联邦学习(FL)结合的领域——即 FedLLM。论文旨在为研究者和实践者提供该领域的全景图、核心挑战、技术方案、评估资源及应用前景。

2.1.1 核心挑战

联邦微调 LLM 面临四大主要挑战:

  1. 通信开销:LLMs 参数量巨大(如 LLaMA2-7B 有 70 亿参数),每轮训练传输完整参数会导致严重的带宽压力和延迟。
  2. 数据异构性:客户端数据通常是非独立同分布的,导致模型更新出现偏差、收敛变慢、性能下降。
  3. 内存墙:边缘设备内存有限(通常 4-12GB),无法满足 LLM 微调时的巨大存储需求(如微调 LLaMA2-7B 需约 52GB 内存)。
  4. 计算开销:LLM 的前向和反向传播计算量巨大,远超传统模型,边缘设备难以承受。

2.1.2 参数高效联邦微调

为解决上述挑战,多种参数高效微调方法被应用于 FL 框架:

  • LoRA-based: 为预训练权重引入低秩适配矩阵,只训练少量参数。联邦场景下可分为同质 LoRA、异质 LoRA、个性化 LoRA。
  • Prompt-based: 学习可训练的提示词嵌入,引导冻结的基模型适应任务。
  • Adapter-based: 在 Transformer 层中插入轻量级适配器模块。
  • Selective-based: 仅选择性地微调部分参数(如偏置项、层归一化参数)。
  • 其他方法: 零阶优化、分割学习、模型压缩、数据选择等。

2.1.3 评估资源与实际应用

FedLLM 评估覆盖通用、金融、医疗、代码、数学、法律六大领域,使用 MMLU、HumanEval 等基准。实际应用包括推荐系统(FELLRec)、生物医学(FedFMS)、金融(OpenFedLLM)等方向。


2.2 联邦学习基础理论与挑战

以下内容基于 Kairouz 等 (2021) 的论文 Advances and Open Problems in Federated Learning[2] 整理。

2.2.1 场景分类

论文将联邦学习分为两种主要场景: - 跨设备联邦学习:客户端为海量移动/物联网设备,数量极大、可靠性低、通信受限。 - 跨孤岛联邦学习:客户端为少量组织(如医院、银行),数量较少、相对可靠。

2.2.2 六大核心挑战

  1. 效率与有效性提升:数据异构性导致客户端漂移;FedAvg 及其变体的收敛理论分析;个性化与多任务学习策略。
  2. 用户数据隐私保护:涉及差分隐私、安全多方计算、同态加密、可信执行环境等技术的组合使用。
  3. 抵御攻击与故障:投毒攻击(数据投毒、模型更新投毒)与拜占庭鲁棒聚合等防御机制。
  4. 确保公平性与应对偏见:设备可用性差异可能引入系统性偏见。
  5. 应对系统挑战:跨设备场景面临部署监控困难、设备可用性动态变化等独特挑战。
  6. 新兴场景:完全去中心化学习、拆分学习等。

2.3 FedAvg: 联邦学习奠基算法

以下内容基于 McMahan 等 (2017) 的论文 Communication-Efficient Learning of Deep Networks from Decentralized Data[3] 整理。

FedAvg 是联邦学习领域的奠基性算法。其核心思想是:在每轮通信中,让选中的客户端基于全局模型和本地数据执行多轮本地 SGD 更新,然后将更新后的本地模型参数进行加权平均,以生成新的全局模型。

算法由三个关键参数控制: - C:每轮参与计算的客户端比例 - E:每个客户端在每轮中遍历其本地数据的次数 - B:客户端本地更新时使用的批大小

主要发现: 1. 通信效率提升可达 10-100 倍 2. 对非独立同分布数据具有鲁棒性 3. 模型平均具有正则化效应,可获得更高测试精度 4. 本地计算量(E)并非越大越好,过大可能导致过拟合


2.4 文献评述与研究定位

通过对上述文献的系统梳理,可以看出联邦学习与 DPO 的结合是一个具有重要价值但尚待深入探索的方向。现有工作为联邦 DPO 提供了理论基础:

  • FedAvg 算法为联邦场景下的模型聚合提供了成熟方案
  • LoRA 等参数高效微调方法解决了通信和计算瓶颈
  • DPO 本身去除了奖励模型,简化了偏好对齐流程

本研究的定位是:将 DPO 与联邦学习结合,探索在分布式、异构数据环境下实现大模型偏好对齐的技术方案,重点解决 Token 对齐、数据异构性、客户端漂移等工程与算法层面的实际问题。



第三章 技术架构与实现方案

3.1 系统总体架构

本研究采用经典的联邦学习架构,包含服务端和客户端两部分:

  • 服务端(Server):负责初始化全局模型、聚合各客户端的 LoRA 权重、更新全局模型
  • 客户端(Client):负责加载本地偏好数据、执行本地 DPO 训练、返回更新后的权重

3.2 技术栈选型

层次技术选型理由
大模型后端Hugging Face transformers生态丰富,支持主流大模型
DPO 实现trl 库的 DPOTrainer开箱即用,封装完整
参数高效微调LoRA (PEFT)显著降低通信和计算开销
模型量化BitsAndBytes (4-bit NF4)减少显存占用
基座模型Qwen2.5-7B-Instruct已具备对话能力,便于直接进行偏好对齐

3.3 模型基座选择:Base vs Instruct

在 DPO 训练中,模型基座的选择至关重要。Base 模型和 Instruct 模型的对比如下:

特性Base 模型Instruct / Chat 模型
训练阶段仅经过预训练预训练 + SFT + RLHF/DPO
能力文本续写(预测下一个词)理解指令、对话、拒绝有害请求
输入示例“北京的气候…”“请告诉我北京的气候特点。”
输出示例“…四季分明,春天干燥…”“北京属于温带季风气候…”
角色定位知识库、续写器助理、聊天机器人
DPO 适用性需先进行 SFT直接用于偏好对齐

本研究选择 Instruct 模型(Qwen2.5-7B-Instruct)作为基座,原因如下: 1. 模型已具备基本的对话和服从指令能力 2. 可直接进入偏好对齐的核心研究 3. 节省时间,无需额外进行 SFT 微调

3.4 LoRA 权重聚合方案

由于大模型全参训练通信量极大(7B 模型约 14GB),本研究采用 LoRA(Low-Rank Adaptation)进行参数高效微调。

3.4.1 LoRA 原理简介

LoRA 的核心思想是在预训练模型的权重矩阵旁边添加低秩分解矩阵:

其中 为原始权重,为低秩矩阵()。训练过程中只更新 ,原始权重 保持冻结。

3.4.2 LoRA 配置

1
2
3
4
5
6
7
8
LORA_CONFIG = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)

3.4.3 FedAvg 权重聚合实现

1
2
3
4
5
6
7
8
9
def aggregate(weights_list):
avg_weights = copy.deepcopy(weights_list[0])
num_clients = len(weights_list)
for key in avg_weights.keys():
if 'lora_' in key:
for i in range(1, num_clients):
avg_weights[key] += weights_list[i][key]
avg_weights[key] = torch.div(avg_weights[key], num_clients)
return avg_weights

第四章 实验环境配置与问题解决

4.1 云端算力平台的文件持久化问题

4.1.1 问题描述

在 AutoDL 等云端算力平台上运行训练时,发现模型文件、数据集和训练结果存储在系统缓存目录(/root/.cache),每次关机后会被清空。

4.1.2 解决方案

将所有文件操作指向挂载的持久化存储盘:

1
2
3
4
5
6
7
from pathlib import Path
PERSISTENT_DIR = Path("/autodl-fs/data")
MODEL_CACHE_DIR = PERSISTENT_DIR / "model_cache"
DATA_DIR = PERSISTENT_DIR / "data"
CHECKPOINT_DIR = PERSISTENT_DIR / "checkpoints"
for p in [MODEL_CACHE_DIR, DATA_DIR, CHECKPOINT_DIR]:
p.mkdir(parents=True, exist_ok=True)

同时在模型加载时显式指定 cache_dir

1
2
3
4
5
6
model = AutoModelForCausalLM.from_pretrained(
MODEL_ID, quantization_config=bnb_config,
torch_dtype=torch.bfloat16, device_map={"": 0},
cache_dir=str(MODEL_CACHE_DIR),
trust_remote_code=True
)

4.2 Python 环境持久化

4.2.1 问题描述

云端环境的 Python 库在关机后会丢失。

4.2.2 解决方案

使用 Conda 将环境安装到挂载盘:

1
2
3
conda create --prefix /autodl-fs/conda_envs/dpo_env python=3.10
conda activate /autodl-fs/conda_envs/dpo_env
pip install torch transformers trl peft bitsandbytes datasets flash-attn

第五章 代码实现中的问题与解决

5.1 DPOTrainer API 参数变更

5.1.1 问题描述

1
TypeError: DPOTrainer.__init__() got an unexpected keyword argument 'tokenizer'

5.1.2 问题原因

在较新版本的 trl 库中,API 发生了变更,tokenizer 参数被替换为 processing_class

5.1.3 解决方案

1
2
3
4
5
trainer = DPOTrainer(
model=model, ref_model=None,
args=training_args, train_dataset=local_data,
processing_class=tokenizer,
)

5.2 Tokenizer Mismatch 问题(核心技术难题)

5.2.1 问题描述

1
[RANK 0] Mismatch between tokenized prompt and the start of tokenized prompt+rejected

这是 DPO 训练中最常见且棘手的问题。DPO 算法要求 tokenize(prompt) 的结果必须与 tokenize(prompt + chosen) 的前缀完全一致。

5.2.2 根因分析:Token Collapsing 现象

通过编写调试脚本进行 Token 级别的分析,发现问题在于 Token 塌陷(Token Collapsing)

Qwen 使用的 Byte-level BPE 分词器对空格极其敏感。在单独分词 prompt 时,Assistant: 后面的空格被识别为独立的 Token;但在拼接分词时,分词器将”空格+A”合并成了一个新 Token,导致前缀不匹配。

5.2.3 解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 方案一:数据格式调整
def fix_alignment(example):
return {
"prompt": example["prompt"].rstrip(),
"chosen": " " + example["chosen"].lstrip(),
"rejected": " " + example["rejected"].lstrip(),
}

# 方案二:分词器配置
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"
tokenizer.add_bos_token = False
tokenizer.add_eos_token = False

# 方案三:DPOConfig 设置
training_args = DPOConfig(
bf16=True, per_device_train_batch_size=2,
gradient_accumulation_steps=4, max_steps=50,
learning_rate=5e-5, beta=0.1,
remove_unused_columns=False,
add_special_tokens=False,
force_use_chat_template=False,
)

第六章 数据处理与格式要求

6.1 DPO 数据标准格式

字段说明示例
prompt用户提出的问题或上下文“请告诉我如何煮咖啡?”
chosen更好的回答“首先磨碎咖啡豆,然后加入热水…”
rejected较差的回答“去店里买一杯就行了。”

6.2 数据集选择与处理

本研究使用 Anthropic/hh-rlhf 数据集。数据预处理流程:从 Hugging Face 加载、提取 prompt/chosen/rejected 三元组、按客户端数量分片、保存为 JSONL。

6.3 数据污染问题

Instruct 模型可能在预训练阶段已经见过相同的数据集。解决方案:使用更新的数据集、构造人工负样本、在论文中说明研究重点是”分布式环境下的增量偏好对齐”。


第七章 Non-IID 问题与研究展望

7.1 非独立同分布问题

不同用户的偏好可能完全不同。例如:客户端 A 喜欢简洁回答,客户端 B 喜欢详细回答,客户端 C 喜欢专业回答。

7.2 可设计的实验

  • 标签偏置:让不同客户端拥有不同领域的偏好数据
  • 质量偏置:让某些客户端的数据包含更明显的偏好差异

7.3 毕设潜在创新点

  1. 观察 FedAvg 聚合后模型是否会被”带偏”
  2. 讨论如何检测并剔除”差评数据”的客户端
  3. 分析 Non-IID 数据分布对联邦聚合的影响
  4. 设计个性化联邦学习策略处理偏好冲突

第八章 总结

8.1 问题解决汇总

序号问题类型问题描述关键解决方案
1环境配置云端文件关机丢失指向挂载盘路径
2环境配置Python 环境丢失Conda 安装到挂载盘
3模型选择不确定模型类型选择 Instruct 模型
4数据问题数据污染担忧使用新数据集或构造负样本
5代码实现API 参数错误使用 processing_class
6核心难题Token Mismatch空格隔离 + 关闭自动 BOS
7通信效率全量参数通信过大采用 LoRA 权重聚合

8.2 后续工作

  1. 解决 Token 对齐问题后,进行完整的联邦 DPO 训练
  2. 对比训练前后的模型偏好表现
  3. 分析 Non-IID 数据分布对联邦聚合的影响
  4. 撰写毕业论文实验部分
  • Title: 基于 DPO 对齐的联邦大模型偏好研究——毕设探索与问题解决记录
  • Author: Ryan Lu
  • Created at : 2026-03-13 00:00:00
  • Updated at : 2026-07-17 14:44:10
  • Link: http://ryan-hub.site/3927dc81455d/
  • License: This work is licensed under CC BY-NC-SA 4.0.