RLHF、DPO与软偏好标签:大模型对齐技术实战演进路径

Node.js之npm单独与批量升级依赖包的方式 阅读详情

1. 这不是调参,是让AI真正“听懂人话”的底层工程

你有没有遇到过这样的情况:模型输出语法完美、逻辑严密、知识丰富,但读完就是觉得“不对味”?它像一个背熟所有教科书答案的优等生,却答非所问、缺乏共情、回避风险、甚至一本正经地胡说八道。这不是模型能力不足,而是它的训练目标和人类真实偏好之间存在一道看不见的鸿沟——它被优化的是“预测下一个词的概率”,而不是“让人愿意继续对话、信任结论、感到被理解”。这篇内容讲的,就是如何系统性地跨越这道鸿沟。核心关键词是: RLHF(基于人类反馈的强化学习) 、 DPO(直接偏好优化) 和 Soft Preference Labels(软偏好标签) 。它们不是三个并列的技巧,而是一条技术演进路径:从早期依赖复杂强化学习框架的RLHF,到绕过奖励建模、直接在偏好数据上优化策略的DPO,再到更精细刻画人类判断模糊性的Soft Preference Labels。这篇文章适合三类人:一是正在微调大模型、但发现SFT(监督微调)效果遇到瓶颈的算法工程师;二是想深入理解当前主流对齐方法差异、为技术选型提供依据的技术负责人;三是关注AI伦理与可用性、希望从工程视角理解“对齐”到底在做什么的研究者或产品经理。它不讲抽象理论推导,只聚焦于每个方法“为什么这样设计”、“实际落地时卡在哪”、“参数怎么调才不翻车”,以及我亲手跑通十几个偏好数据集后总结出的、文档里绝不会写的实操细节。

2. 从“猜中答案”到“答得舒服”:对齐技术演进的底层逻辑拆解

2.1 为什么SFT之后必须做对齐?——SFT的三大结构性缺陷

很多人以为,只要用高质量的问答对(Instruction Tuning)把模型“喂饱”,它就能自然学会人类偏好。我在2023年用Llama-2-7B在Alpaca数据集上做过完整对比实验,结果非常明确:SFT模型在标准评测(如MT-Bench)上得分提升显著,但在真实用户测试中,其“回答是否让人愿意继续提问”的比例仅比基座模型高8.3%,远低于预期。问题出在SFT自身的三个硬伤上:

第一, 单点最优陷阱 。SFT的损失函数(通常是交叉熵)要求模型对每个输入,精确复现唯一一个标注好的“黄金答案”。但现实中,对同一个问题,人类可能有多个合理回答:简洁版、详细版、带示例版、带免责声明版。模型被强制收敛到那个特定答案的分布上,丧失了根据上下文灵活调整风格的能力。就像教一个厨师只按菜谱做一道指定口味的红烧肉,他永远学不会根据客人是老人还是小孩来调整咸淡。

第二, 隐式偏好不可见 。SFT数据里藏着大量未被显式标注的偏好信号。比如,一个标注员在写“请解释量子纠缠”时,本能地避开了数学公式,用了比喻;另一个在写“如何重装Windows”时,第一步就强调“先备份重要文件”。这些行为背后是“可理解性”和“安全性”的强偏好,但SFT的标签只是最终文本,这些决策过程完全丢失了。

第三, 长程一致性缺失 。SFT是逐token训练的,模型无法感知整个回答的宏观质量。它可能前半段逻辑清晰,后半段突然跑题,或者在多轮对话中忘记初始约束。这种“局部正确、整体失焦”的现象,在需要连贯推理的场景中尤为致命。

提示:SFT不是错的,它是必要但不充分的一步。把它看作给模型打下“知识地基”,而对齐技术则是给这座建筑装上“人类使用的门窗和电梯”。

2.2 RLHF:用“人类打分”给模型装上“价值方向盘”

RLHF是第一个系统性解决上述问题的框架,它的核心思想非常朴素: 不告诉模型“答案是什么”,而是告诉它“哪个答案更好” 。这就像驾校教练不手把手教你打多少度方向盘,而是不断告诉你“刚才那一下太急了,下次缓一点”。整个流程分为三步:奖励建模(Reward Modeling)、强化学习(PPO)、以及可选的拒绝采样(Rejection Sampling)。

奖励建模是RLHF最耗神也最关键的环节。你需要收集大量成对的比较数据(Pairwise Data),例如,对同一个问题,给出两个不同回答A和B,让标注员判断哪个更优。然后,用一个独立的奖励模型(通常是一个轻量级的Transformer)去学习这个判断逻辑。这里有个极易被忽略的细节: 奖励模型的输入不是原始问题+回答,而是问题+回答的拼接,并且必须加入特殊的分隔符(如<|startoftext|>) 。我最初没加这个,导致模型在训练后期出现严重的“位置偏差”——它总给出现在第二个位置的回答打更高分,跟内容好坏完全无关。后来查论文才发现,这是Hugging Face的TRL库默认要求的预处理步骤。

强化学习阶段,主流方案是PPO(近端策略优化)。它的优势在于稳定,但代价是工程复杂度高。你需要同时维护四个网络:策略模型(即你要优化的大模型)、价值网络(估计状态价值)、旧策略网络(用于计算KL散度约束)、以及奖励模型(固定不动)。我在用Qwen-1.5-4B跑PPO时,显存占用峰值达到48GB(A100),其中价值网络和旧策略网络各占12GB。很多团队卡在这里,不是因为算法不懂,而是被分布式训练的通信开销和梯度同步搞崩溃了。一个实操心得是: 把价值网络和旧策略网络都设为 torch.float16 ,但策略模型保持 bfloat16 ,能降低15%显存且不掉点 。这个细节,官方文档里根本没提。

2.3 DPO:砍掉奖励模型,让优化过程“直截了当”

DPO的出现,是对RLHF工程复杂性的直接回应。它的论文标题《Direct Preference Optimization》已经说得很清楚:我们要绕过中

RLHF、DPO与软偏好标签:让大模型真正理解人类偏好的工程路径 人类偏好是大语言模型对齐(Alignment)的核心目标,它既非静态标签,也非单一打分,而是情境依赖、连续可度量的主观判断。其技术本质是将模糊的人类反馈转化为可优化的数学信号——从RLHF通过奖励建模引入强化学习框架,到DPO绕开奖励建模实现端到端偏好优化,再到Soft Preference Labels支持细粒度强度建模,三者共同构成从粗粒度对齐走向高保真共情的演进逻辑。这一路径不仅降低训练不稳定性与误差累积风险,更支撑对话系统、智能助手、教育生成等需深度语义理解与情绪适配的落地场景。本文聚焦真实行为日志 阅读详情

相关推荐

软偏好建模:从RLHF到GDPO的人类偏好对齐演进

在大模型对齐领域,‘人类偏好’并非非黑即白的二元判断,而是连续、概率化、带置信度的灰度信号。理解这一本质是构建高拟人化AI的前提:其原理在于将模糊主观判断转化为可优化的数学目标;技术价值体现在降低标注成本、提升泛化鲁棒性、增强语气与情感的细腻表达能力;典型应用场景覆盖智能客服、教育助手、创意协作者等需深度共情的交互系统;而软偏好标签与GDPO正是当前最前沿的落地路径,它让模型不再只学‘选哪个’,而是学会‘为什么更喜欢这个程度’。

wyjvip333的专栏 386

RLHF、DPO与软偏好标签:AI偏好对齐的工程化进阶路径

在大语言模型落地实践中,‘正确但不自然’的输出已成为核心瓶颈——这本质是人类偏好未被精准建模的技术问题。偏好对齐并非调参技巧,而是从离散打分(RLHF)到连续优化(DPO),再到细粒度量化(软偏好标签)的系统性演进。其原理在于将模糊的人类判断转化为可计算、可迭代、可审计的信号流;技术价值体现在显著降低标注成本、提升模型鲁棒性与业务契合度;典型应用于金融客服的情绪-准确平衡、医疗问诊的解释可信度强化、法律文书的动态合规适配等高敏场景。本文聚焦RLHF与DPO的范式差异及软偏好标签的工程落地,提供可复现的标注协

技术百科 305

大模型对齐技术:从RLHF到DPO,构建更懂你的AI助手

在人工智能领域,大语言模型(LLM)的训练与优化是核心技术之一。其核心原理是通过海量数据学习语言规律,并利用深度学习算法生成连贯文本。这项技术的价值在于让机器能够理解和生成人类语言,从而在智能客服、内容创作、代码编程等场景中发挥作用。然而,传统训练方法往往侧重于模型的知识容量和生成流畅度,忽视了与人类意图和价值观的一致性,导致模型输出可能偏离用户真实需求。为了解决这一问题,对齐(Alignment)技术应运而生,它通过优化训练方法、设计智能数据策略和建立科学评估体系,使模型输出更符合人类期望。其中,基于人类

weixin_30340819的博客 404

大模型对齐实战:SFT、RLHF与DPO的核心逻辑与工程取舍

大模型对齐是让AI从‘能说人话’走向‘说对人话’的关键技术环节,其本质是在语言能力、人类价值观与业务约束之间构建可计算的平衡机制。监督微调(SFT)负责将通用语言能力锚定到具体任务坐标系,解决‘能不能做’;基于人类反馈的强化学习(RLHF)则建模多维价值函数(安全性、诚实性、有用性),解决‘该不该这么做’;而直接偏好优化(DPO)作为新兴范式,以更轻量方式实现偏好对齐,但牺牲了可解释性与多目标协同能力。在金融、政务、医疗等高风险场景中,SFT数据质量、RLHF标注一致性、DPO的β参数调控等实操细节,直接决

weixin_29057237的博客 278

DPO直接偏好优化:取代RLHF的工业级对齐新范式

大语言模型对齐(Alignment)是确保AI输出符合人类价值观与意图的核心技术,其本质是将模糊、高维的人类偏好转化为可计算、可优化的模型行为约束。传统RLHF依赖奖励模型(RM)与强化学习(PPO)构成间接反馈闭环,但RM泛化弱、标注成本高、训练不稳定,严重制约工程落地。DPO(Direct Preference Optimization)跳过奖励建模,直接在logits空间建模人类二元选择偏好,将对齐问题降维为鲁棒性强、数据效率高的分类任务。它显著降低对标注质量与计算资源的依赖,提升训练稳定性与线上效果

dicha7140的博客 1479

大模型对齐技术全解析:SFT、RLHF与DPO/KTO实战指南

大语言模型对齐(LLM Alignment)是确保AI行为符合人类意图、价值观与安全边界的核心工程。其本质在于从预训练的通用能力出发,通过监督微调(SFT)建立行为锚点,再借助人类反馈机制(如RLHF、DPO、KTO)实现偏好建模与策略优化,最终达成事实准确、安全可控、可解释可信的输出。SFT强调高质量指令-响应对的数据构建与LoRA参数精调;RLHF依赖奖励建模与强化学习协同,但正被更稳定高效的DPO和更鲁棒的KTO逐步补充;而Constitutional AI与Self-Reflection则推动对齐从

weixin_30335353的博客 384

【Vue】下载依赖包node_modules & 打包项目

Vue下载依赖包node_modules

weixin_48596030的博客 1万+

【顾邦小讲堂】第十九期 RC Snubber吸收电路详解:抑制MOSFET振铃现象与过冲的设计技巧!

通过RC Snubber电路有效抑制MOSFET DS端的过冲及振铃现象,帮助工程师们在设计中提升电路的稳定性和可靠性

GBupupup的博客 3766

给大一新生的蓝桥杯EDA备赛规划:从电路分析到立创EDA,如何用一年时间高效备赛?

本文为大一新生提供了一份系统的蓝桥杯EDA备赛规划,从电路分析基础到立创EDA实战操作,分阶段指导如何高效备赛。内容涵盖理论学习、软件操作、PCB设计专项提升及冲刺优化策略,帮助学生在一年内全面提升电子设计能力,为竞赛做好充分准备。

weixin_31476015的博客 283

Calpuff模型实战:从气象数据预处理到污染物扩散模拟全流程指南

本文提供了一份详尽的Calpuff模型实战指南,涵盖从气象数据预处理、地形处理到污染物扩散模拟与结果可视化的全流程。重点解析了Calmet气象场构建、Calpuff核心参数配置,并与AERMOD模型进行对比,帮助环境工程师与科研人员掌握这一强大的三维非稳态拉格朗日扩散模型,以应对复杂地形、海岸熏烟等实际模拟挑战。

s4t5u6v7的博客 452

【TCN回归预测】TCN时间卷积神经网络数据回归预测(多输入单输出)【含Matlab源码 2317期】

TCN时间卷积神经网络数据回归预测 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 818

使用 SAP 自家的 AI 工具 Joule 辅助 SAP Fiori 应用开发

SAP Joule 不请自答,解释说标记了接口的 UI Component,具备进行异步内容创建的能力,比如其通过 rootView 分配的视图,在运行时可以异步创建。目前 SAP Business Application Studio 里的 SAP Joule 支持下面这八种上下文,绝大部分都和 SAP UI5 开发相关,剩下的则是代码仓库和 SAP 帮助文档的搜索。SAP Joule 回答的大意是:我只负责回答 SAP UI5 开发相关的问题,不要和我扯其他有的没的。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1087

EB配置I2c - 实现与PF8200的读写操作

①,基于硬件实现IIC通信(硬件GPIO引脚配置为I2c复用引脚)②,基于软件模拟IO实现IIC通信(代码控制SDA和SCL两个IO引脚的电平来模拟IIC时序)本文章基于64pin的恩智浦S32K146型号的芯片作为主机,从机是NXP的供电芯片。在本次实验中,我们将以使用EB工具链来配置硬件IIC通信。1,EB配置2,代码编写3,测试验证话不多说,走你~写操作比较简单,只需要申明一个I2c配置结构体变量即可。

weixin_48498880的博客 3763

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

【数字IC刷题】华为海思数字IC笔试题(1)详细解析版

MoorePlus的博客 4199

SAP RAP学习系列合集介绍

《SAP RAP学习系列合集:从入门到部署的完整指南》摘要: 本文介绍了作者创建的SAP RAP学习系列合集,涵盖RAP开发从基础概念到实战部署的全流程。系列目前包含17篇文章,系统讲解了RAP核心开发技术:从数据建模、UI构建到行为定义(包括并发控制、草稿功能、授权验证等),最后详细演示了应用部署到Fiori Launchpad的两种方案(OP版和ES版)。

DeveloperMrMeng的博客 1474

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: 飞腾D2000开发板GPIO引脚不够用?手把手教你解锁Uboot模式下隐藏的16个引脚
下一篇: Context-Aware AI Agent:基于LLaMA 3 70B的生产级采购自动化系统
aefg95955
博客等级 码龄12年 3粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值