基于PPO-RW的Qwen3-1.7B模型微调与效果分析
本项目基于LLaMA-Factory平台,通过PPO(近端策略优化)方法微调Qwen3-1.7B模型。训练使用dpo_zh_demo数据集,该数据集包含人类偏好选择,能直接指导模型学习生成更富有情绪、更接近人类语言习惯的回复,而非机械性的内容。
利用人类偏好数据训练奖励模型(Reward Model, RM),由RM对模型生成的候选回复打分,作为PPO的优化信号,促使模型输出更符合人类价值与对话习惯的答案,而不只是“像训练集那样说话”,该类训练具备以下特点。
- 它通过“奖励模型 + PPO”两阶段结构,把人类偏好转成可微分、可度量的标量奖励:RM 负责判断哪类回复更好,PPO 负责让策略在不剧烈偏离原模型能力的前提下持续提高奖励期望,从而实现比纯监督学习更强的偏好对齐能力。
- 其次,PPO-RW 在优化上引入裁剪目标与优势函数(Advantage),限制单步更新幅度,降低在线采样带来的高方差与训练震荡;同时结合 KL 散度惩罚,使微调后的 Qwen-1.7B 既学会“更讨人喜欢的说法”,又最大限度保留原有语言理解与通用生成能力,减少“对齐后能力下降”的风险。
- 最终,PPO-RW 具备更强的探索与自我纠偏能力:模型会在真实生成分布上不断试错、被 RM 反馈、再改进策略;在情绪表达、礼貌程度、指令遵循等主观维度上往往能获得更细腻的提升,成为当前微调大型语言模型的优选方案。
前提条件
- 用户已经获取LLaMA-Factory Online平台账户和密码,如果需要帮助或尚未注册,可参考注册账户完成注册。
- 当前账号的余额充裕,可满足模型微调服务的需要。点击可了解最新的活动及费用信息,或前往充值,如需了解更多请联系我们。
操作步骤
配置概览
| 配置参数 | 配置项 | 是否预置 | 说明 |
|---|---|---|---|
| 模型 | Qwen3-1.7B | 是 | 经过指令微调,参数量约17亿 (1.7B),专为轻量级多语言理解、指令执行与高效对话生成任务打造,在保持模型紧凑的同时依然具备良好的推理能力与语言泛化性能。 |
| 数据集 | dpo_zh_demo | 是 | 风格混杂、内容无关联的片段集合,涵盖金融、宗教、AI和食品等多个领域。 |
| GPU | H800*1(推荐) | - | |
| 微调方法 | lora | - | 显著降低计算与存储成本,兼具高性能与部署灵活性。 |
操作详情
-
使用已注册的LLaMA-Factory Online账号登录平台,选择[微调/模型微调]菜单项,进入模型微调配置页面,模型选择
Qwen3-1.7B、数据集选择dpo_zh_demo,训练方式选择Reward Modeling,其余参数配置如下图所示。 -
单击上图“开始训练”按钮,找到Reward model任务,复制Reward model的路径,如下图所示。

-
切换至[微调/模型微调]页签,进入模型微调配置页面,模型选择
Qwen3-1.7B、数据集选择identity,训练方式选择PPO,并将刚才复制的路径粘贴至奖励模型路径,其余参数配置如下图所示,参数配置完成后,单击下图“开始训练”按钮。
模型对话
-
选择[微调/模型对话]菜单项,加载微调成功的LoRA模型进行对话,如下图所示。

-
为分析模型微调前后的性能差异,我们设计了以下提问进行对话对比:“我有一组不同时间的鼠标坐标/移动数组。我想知道用户悬停在屏幕上的有趣部分;即聚类。我该如何计算这些聚类?”。
微调后模型
-
在[微调/任务中心]找到已完的模型微调任务,单击任务页签的“对话”按钮,进入模型对话页面,输入上述提示词,观察模型回答,模型回答详情可参看“对话详情”。

对话详情
要识别用户在屏幕上的悬停区域,可以通过聚类算法分析鼠标坐标的时间序列数据。以下是分步骤的解决方案:
1. 数据预处理 将时间序列的坐标点转换为二维点,每个时间点的坐标作为特征。
- 输入格式:
x和y的数组,每个元素对应一个时间点的坐标。 - 示例:
import numpy as np
data = np.array([[x1, y1], [x2, y2], ...]) # shape (n_time, 2)
2. 选择聚类算法 根据数据特点选择合适的算法:
a. K-Means
- 适用场景:数据分布较为均匀,且需要明确的簇数(
k)。 - 参数:
n_clusters=k(需通过肘部法则或轮廓系数确定)。 - 代码示例:
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=k).fit(data)
labels = kmeans.labels_
b. DBSCAN
- 适用场景:发现密集区域,自动处理噪声(无需手动调整参数)。
- 参数:
eps(邻域半径)、min_samples(最小样本数)。 - 代码示例:
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5).fit(data)
labels = dbscan.labels_
3. 参数调优
-
K-Means:
- 肘部法则:通过计算轮廓系数(
silhouette_score)确定最佳k。 - 示例:
from sklearn.metrics import silhouette_score
scores = [silhouette_score(data, kmeans.fit_predict(data), sample_size=1000) for k in range(1, 10)]
- 肘部法则:通过计算轮廓系数(
-
DBSCAN:
- 调整
eps和min_samples:根据数据密度调整参数,避免误判。 - 示例:
# 通过网格搜索优化参数
from sklearn.model_selection import GridSearchCV
param_grid = {'eps': [0.2, 0.5, 1.0], 'min_samples': [5, 10]}
grid = GridSearchCV(DBSCAN(), param_grid, cv=5)
grid.fit(data)
- 调整
4. 分析聚类结果
-
可视化:使用
matplotlib或seaborn可视化聚类结果。import matplotlib.pyplot as plt
plt.scatter(data[:, 0], data[:, 1], c=labels, cmap='viridis')
plt.colorbar(label='Cluster')
plt.show() -
解释聚类:
- 密集区域:可能代表用户长时间悬停的区域。
- 噪声点:可能为用户移动或误操作的点。
- 时间分布:检查聚类点的时间序列,判断是否连续(如
cluster_time的分布是否集中)。
5. 进阶处理(可选)
-
时空聚类:
- 使用时空聚类算法(如
DBSCAN在时空平面上)或时间序列分析(如滑动窗口提取轨迹)。 - 示例:
# 滑动窗口提取轨迹(时间窗口为1秒)
window_size = 10
time_windows = [data[i:i+window_size] for i in range(len(data)-window_size)]
- 使用时空聚类算法(如
-
用户行为分析:
- 对每个聚类的点进行时间序列分析,判断用户是否在该区域停留。
- 例如:检查聚类点的时间分布是否集中在某个时间段。
6. 可视化与解释
- 热力图:显示每个时间点的坐标和聚类标签。
- 动态轨迹:绘制用户移动路径,标注悬停区域。
- 聚类标签:为每个区域赋予名称(如“左上角”、“右下角”)。
7. 示例输出 假设聚类结果为 3 个簇,可能的解释:
- 簇 1:用户在屏幕左上角长时间停留。
- 簇 2:用户在右下角频繁移动。
- 簇 3:用户在中间区域短暂滑动。
注意事项
- 噪声处理:若数据中存在异常点(如突然移动),需通过
DBSCAN的eps或min_samples调整参数。 - 时间顺序:若需考虑时间因素,可将时间作为特征(如
data[:, 2])并结合聚类算法。
总结
通过空间聚类(如 K-Means 或 DBSCAN)分析鼠标坐标时间序列,可识别用户悬停的区域。结合参数调优和可视化,可有效发现用户行为模式,为交互设计或用户研究提供支持。
微调后的 Qwen3-1.7B 模型呈现出一种结构严谨、任务导向明确的专业技术讲解风格。模型在PPO-RW强化学习对齐后,结构化知识输出显著增强,呈现出完整的技术教程框架,能直接给出明确技术选择,聚焦可立即执行的实操步骤,模型回答风格更专业、自信。代码生成质量进一步提升,覆盖从读数据到可视化的完整链路,技术解释更深入,能围绕用户意图给出拓展建议。
总结
用户可通过LLaMA-Factory Online平台预置的模型及数据集完成快速微调与效果验证,本实践完成了一次成功的模型微调。微调后的Qwen3-1.7B模型给出的解答结构完整,逻辑清晰,结论明确,能够生成更具实操化、工程化视角突出的高质量内容,证明了该技术路径在应用层面的巨大价值。