知识蒸馏基础概念

知识蒸馏(Knowledge Distillation)是一种模型压缩技术,旨在将复杂模型(教师模型)的知识迁移到更小、更高效的模型(学生模型)中,使其在保持性能的同时降低计算资源需求。

知识蒸馏

一.概念

1. 核心思想

知识蒸馏使用的是教师—学生模型,其中教师是“知识”的输出者,学生模型是“知识”的接受者。知识蒸馏的过程分为2个阶段:

  • 原始模型训练: 训练"教师模型", 简称为Net-T,它的特点是模型相对复杂,也可以由多个分别训练的模型集成而成。我们对"教师模型"不作任何关于模型架构、参数量、是否集成方面的限制,唯一的要求就是,对于输入X, 其都能输出Y,其中Y经过softmax的映射,输出值对应相应类别的概率值。
  • 精简模型训练: 训练"学生模型", 简称为Net-S,它是参数量较小、模型结构相对简单的单模型。同样的,对于输入X,其都能输出Y,Y经过softmax映射后同样能输出对应相应类别的概率值。

教师模型学习能力强,可以将它学到的知识迁移给学习能力相对弱的学生模型,以此来增强学生模型的泛化能力。复杂笨重但是效果好的教师模型不上线,就单纯是个导师角色,真正部署上线进行预测任务的是灵活轻巧的学生小模型。

2.简单流程

请添加图片描述

1. 输入与模型结构
  • 输入数据:向量 x i x_i xi 同时输入教师模型(Teacher Model)和学生模型(Student Model)。
  • 模型角色
    • 教师模型:预训练好的复杂模型,用于生成软标签(Soft Target)。
    • 学生模型:待训练的轻量模型,目标是模仿教师的输出。
2. 输出处理(高温Softmax)
  • 教师模型输出
    1. 原始输出通过高温Softmax(Softmax with T T T)生成软标签(Soft Target),概率分布平滑,例如 [0.7, 0.2, 0.1]
    2. 公式:
      p i teacher = Softmax ( z i / T ) = e z i / T ∑ j e z j / T p_i^{\text{teacher}} = \text{Softmax}(z_i / T) = \frac{e^{z_i / T}}{\sum_j e^{z_j / T}} piteacher=Softmax(zi/T)=jezj/Tezi/T
  • 学生模型输出
    1. 同样使用高温Softmax处理,输出概率分布 p i student p_i^{\text{student}} pistudent
3. 损失计算
  • 软损失(Soft Loss)
    • 通过KL散度衡量学生输出与教师软标签的差异:
      L soft = T 2 ⋅ KL ( p teacher ∥ p student ) \mathcal{L}_{\text{soft}} = T^2 \cdot \text{KL}(p^{\text{teacher}} \parallel p^{\text{student}}) Lsoft=T2KL(pteacherpstudent)
    • 温度 T T T 平方用于平衡梯度量级。
  • 硬损失(Hard Loss)
    • 学生输出与真实硬标签(Hard Target,如One-hot向量 y i = [ 0 , 1 , . . . , 0 ] y_i = [0, 1, ..., 0] yi=[0,1,...,0])的交叉熵损失:
      L hard = CrossEntropy ( y i , p student ) \mathcal{L}_{\text{hard}} = \text{CrossEntropy}(y_i, p^{\text{student}}) Lhard=CrossEntropy(yi,pstudent)
  • 总损失(Total Loss)
    • 加权求和:
      L total = λ L soft + ( 1 − λ ) L hard \mathcal{L}_{\text{total}} = \lambda \mathcal{L}_{\text{soft}} + (1 - \lambda) \mathcal{L}_{\text{hard}} Ltotal=λLsoft+(1λ)Lhard
      其中 λ \lambda λ 是软标签损失的权重(图中未明确数值)。
4. 训练过程
  • 仅学生模型参与梯度更新,教师模型参数固定。
  • 通过最小化 L total \mathcal{L}_{\text{total}} Ltotal,学生模型同时学习:
    • 教师模型的类别间关系(软标签)。
    • 真实标签的确定性知识(硬标签)。
5.伪代码
  1. 初始化

    • 设置教师模型 T T T 为评估模式(冻结参数)
    • 定义优化器 Optimizer S \text{Optimizer}_S OptimizerS 用于更新 S S S 的参数
  2. for e = 1 e = 1 e=1 to E E E do:

    • 将数据集 D \mathcal{D} D 划分为批量数据 { B k } k = 1 K \{\mathcal{B}_k\}_{k=1}^{K} {Bk}k=1K, K = ⌈ N / B ⌉ K = \lceil N/B \rceil K=N/B

    • for 每个批量 B k = { ( x i , y i ) } i = 1 B \mathcal{B}_k = \{(x_i, y_i)\}_{i=1}^B Bk={(xi,yi)}i=1B do:

      1. 教师模型生成软标签:
        z T ← T ( x i ) // 教师模型前向传播 \quad \mathbf{z}^T \gets T(x_i) \quad \color{grey}{\text{// 教师模型前向传播}} zTT(xi)// 教师模型前向传播
        p T ← Softmax ( z T / τ ) // 高温Softmax \quad \mathbf{p}^T \gets \text{Softmax}(\mathbf{z}^T / \tau) \quad \color{grey}{\text{// 高温Softmax}} pTSoftmax(zT/τ)// 高温Softmax

      2. 学生模型预测:
        z S ← S ( x i ) \quad \mathbf{z}^S \gets S(x_i) zSS(xi)
        p S ← LogSoftmax ( z S / τ ) \quad \mathbf{p}^S \gets \text{LogSoftmax}(\mathbf{z}^S / \tau) pSLogSoftmax(zS/τ)

      3. 计算联合损失:
        L KD ← τ 2 ⋅ KLDivLoss ( p S , p T ) // 蒸馏损失 \quad \mathcal{L}_{\text{KD}} \gets \tau^2 \cdot \text{KLDivLoss}(\mathbf{p}^S, \mathbf{p}^T) \quad \color{grey}{\text{// 蒸馏损失}} LKDτ2KLDivLoss(pS,pT)// 蒸馏损失
        L CE ← CrossEntropy ( z S , y i ) // 学生损失 \quad \mathcal{L}_{\text{CE}} \gets \text{CrossEntropy}(\mathbf{z}^S, y_i) \quad \color{grey}{\text{// 学生损失}} LCECrossEntropy(zS,yi)// 学生损失
        L ← α L KD + ( 1 − α ) L CE \quad \mathcal{L} \gets \alpha \mathcal{L}_{\text{KD}} + (1-\alpha) \mathcal{L}_{\text{CE}} LαLKD+(1α)LCE

      4. 参数更新:
        ∇ L . backward ( ) // 反向传播 \quad \nabla \mathcal{L}.\text{backward}() \quad \color{grey}{\text{// 反向传播}} L.backward()// 反向传播
        Optimizer S . step ( ) \quad \text{Optimizer}_S.\text{step}() OptimizerS.step()

  3. 返回 训练完成的学生模型 S ∗ S^* S

3. 关键技术

1. 高温Softmax(Temperature Scaling)
  • 作用:平滑教师模型的输出概率分布,增强类别间关系的表达能力。
  • 原理
    • 标准Softmax输出尖锐的概率分布(如 [0.9, 0.1, 0.0]),丢失类别间相似性信息。
    • 高温Softmax通过温度参数 T T T 调整分布:
      p i = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} pi=jexp(zj/T)exp(zi/T)
      T > 1 T > 1 T>1 时,概率分布更平滑(如 [0.7, 0.2, 0.1]),保留“次优类别”的相对重要性。
  • 示例
    • 教师模型对“哈士奇”的原始输出为 [狗:0.6, 狼:0.3, 猫:0.1],高温处理后更清晰地体现“狗与狼的相似性”。
2. 损失函数设计

知识蒸馏通过联合优化两类损失传递知识:

(1) 蒸馏损失(Distillation Loss)
  • 目标:使学生模型的输出分布逼近教师模型的高温Softmax分布。
  • 公式
    L KD = T 2 ⋅ KL ( p teacher ∥ p student ) \mathcal{L}_{\text{KD}} = T^2 \cdot \text{KL}(p_{\text{teacher}} \parallel p_{\text{student}}) LKD=T2KL(pteacherpstudent)
    • KL散度衡量两个分布的差异, T 2 T^2 T2 用于平衡温度缩放对梯度的影响。
(2) 学生损失(Student Loss)
  • 目标:确保学生模型学习真实标签的监督信号。
  • 公式
    L CE = − ∑ y true log ⁡ p student \mathcal{L}_{\text{CE}} = -\sum y_{\text{true}} \log p_{\text{student}} LCE=ytruelogpstudent
    • 交叉熵损失直接优化学生模型对真实标签的预测。
(3) 总损失

L = α L KD + ( 1 − α ) L CE \mathcal{L} = \alpha \mathcal{L}_{\text{KD}} + (1-\alpha) \mathcal{L}_{\text{CE}} L=αLKD+(1α)LCE

  • 超参数
    - α \alpha α:控制软标签与硬标签的权重(通常取0.5~0.9)。
    - T T T:控制知识传递的“清晰度”(常用4~20)。

4. 扩展和变体

3.1. 动态蒸馏(Dynamic Distillation)
  • 思想:教师模型和学生模型在训练过程中协同进化,而非固定教师模型。
  • 方法
    • 联合训练:教师和学生模型交替更新参数。
    • 在线蒸馏:多个学生模型互相学习,或教师模型随训练过程逐步更新。
  • 优势
    • 避免教师模型的知识固化。
    • 提升学生模型的最终性能(如Deep Mutual Learning)。
3.2. 多教师蒸馏(Multi-Teacher Distillation)
  • 思想:集成多个教师模型的知识,增强学生模型的泛化能力。
  • 方法
    • 概率平均:将多个教师的输出概率取平均作为软标签。
    • 加权融合:根据教师模型的表现动态分配权重。
    • 分阶段蒸馏:不同教师负责不同层次的知识迁移。
  • 示例
    • 在目标检测任务中,一个教师负责分类,另一个教师负责定位。
3.3. 自蒸馏(Self-Distillation)
  • 思想:同一模型内部不同模块或阶段的知识迁移。
  • 方法
    • 深度监督:将深层特征蒸馏到浅层(如DenseNet)。
    • 时序蒸馏:在训练过程中,用模型早期版本作为教师(如EMA模型)。
  • 优势
    • 无需额外教师模型,降低计算成本。
    • 提升模型的抗过拟合能力。
3.4. 对抗蒸馏(Adversarial Distillation)
  • 思想:引入对抗训练提升学生模型的鲁棒性。
  • 方法
    • 生成对抗网络(GAN):生成器伪造输入样本,判别器区分教师与学生的输出。
    • 对抗扰动:在输入中添加扰动,使学生模型对对抗样本的预测与教师一致。
  • 应用场景:模型需部署在对抗环境下(如人脸识别系统)。
3.5. 数据无关蒸馏(Data-Free Distillation)
  • 挑战:原始训练数据不可用时(如隐私保护),如何迁移知识?
  • 方法
    • 生成合成数据:利用教师模型生成伪样本(如通过GAN)。
    • 特征反演:从教师模型的中间层特征重建输入数据。
  • 经典工作
    • DAFL:通过对抗生成网络合成训练数据。
    • ZSKD:基于零样本学习的知识蒸馏。
3.6. 量化感知蒸馏(Quantization-Aware Distillation)
  • 目标:直接蒸馏到量化后的学生模型(如8位整型网络)。
  • 方法
    • 在蒸馏过程中模拟量化误差(如引入量化噪声)。
    • 联合优化蒸馏损失和量化损失。
  • 优势:避免“先蒸馏后量化”导致性能下降。
3.7. 中间特征对齐(Intermediate Feature Distillation)
  • 动机:仅对齐输出层可能丢失教师模型的中间层知识(如纹理、形状等低级特征)。
  • 方法
    • 特征匹配:强制学生模型的中间层特征与教师模型的对应层特征相似。
    • 损失设计
      L mid = ∥ f teacher − g ( f student ) ∥ 2 2 \mathcal{L}_{\text{mid}} = \| f_{\text{teacher}} - g(f_{\text{student}}) \|_2^2 Lmid=fteacherg(fstudent)22
      其中 g ( ⋅ ) g(\cdot) g() 为适配器(如全连接层),用于对齐特征维度差异。
  • 经典工作
    • FitNets:让学生模型的中间层直接预测教师模型的中间特征。
    • Attention Transfer:对齐教师和学生模型的注意力图。
关键技术的选择策略
场景推荐技术
学生模型容量小高温Softmax( T T T调大)+ 中间特征对齐
数据不足自蒸馏 + 标签平滑化
多模态任务中间特征对齐 + 对抗蒸馏
隐私敏感场景数据无关蒸馏
需部署到低精度设备量化感知蒸馏

5. 应用场景

  • 模型压缩:将BERT、ResNet等大模型压缩为移动端可用的小模型。
  • 提升小模型性能:学生模型在参数量减少的情况下接近教师精度。
  • 隐私保护:无需原始数据,通过生成样本进行蒸馏(数据无关蒸馏)。zhish

6. 优势与挑战

  • 优势
    • 学生模型高效且易于部署。
    • Soft Targets提供正则化,增强泛化能力。
  • 挑战
    • 教师与学生结构差异可能影响效果。
    • 超参数( T T T α \alpha α)调优复杂。
    • 依赖教师模型的质量。

二.学习中的困惑

1.高温Softmax与原本的softmax的区别在哪里,想出这个理念的人是为什么能想到?

高温Softmax与标准Softmax的核心区别在于概率分布的平滑性控制,其设计灵感来源于对模型“隐含知识”的挖掘需求。以下是详细分析:

1. 公式对比
  • 标准Softmax
    p i = exp ⁡ ( z i ) ∑ j exp ⁡ ( z j ) p_i = \frac{\exp(z_i)}{\sum_j \exp(z_j)} pi=jexp(zj)exp(zi)
    输出概率分布尖锐,最大概率值主导(如[0.9, 0.1, 0.0])。
  • 高温Softmax
    p i = exp ⁡ ( z i / T ) ∑ j exp ⁡ ( z j / T ) p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)} pi=jexp(zj/T)exp(zi/T)
    引入温度参数 T T T T > 1 T > 1 T>1),使概率分布更平滑(如[0.7, 0.2, 0.1])。
    温度 T T T 的作用
  • T → 0 T \to 0 T0:退化为One-hot向量(最大概率为1,其他为0)。
  • T = 1 T = 1 T=1:等价于标准Softmax。
  • T → + ∞ T \to +\infty T+:所有类别概率趋近于均匀分布(如三分类时为[1/3, 1/3, 1/3])。
2. 为何有效?
  • 信息熵提升:高温使概率分布的信息熵增大(更“不确定”),传递更多隐含知识(如类别间关系)。
  • 正则化效果:平滑的软标签可防止学生模型对硬标签过拟合,提升泛化能力。
  • 梯度稳定性:高温降低了正确类别的梯度幅值,缓解了学生模型训练初期的不稳定性。
3、实际应用技巧
  1. 训练阶段

    • 教师和学生使用相同的 T T T(如 T = 4 T=4 T=4)。
    • 总损失 = α ⋅ KL散度损失 + ( 1 − α ) ⋅ 交叉熵损失 \alpha \cdot \text{KL散度损失} + (1-\alpha) \cdot \text{交叉熵损失} αKL散度损失+(1α)交叉熵损失
  2. 推理阶段

    • 学生模型恢复 T = 1 T=1 T=1,确保输出概率的实用性。
  3. 调参建议

    • 学生模型容量越小, T T T 需越大(需更平滑的监督信号)。
    • 若教师模型过拟合,降低 α \alpha α 以增强真实标签的作用。

2.软标签和硬标签的区别

1. 硬标签(Hard Labels)
  • 定义
    硬标签是确定性的分类标签,通常以 One-Hot 编码 形式表示。每个样本仅属于一个类别,标签中仅正确类别的值为1,其他为0。
  • 示例
    例如,在猫、狗、鸟的三分类任务中:
    • 一张猫的图片的硬标签为 [1, 0, 0]
    • 一张狗的图片的硬标签为 [0, 1, 0]
  • 特点
    • 信息单一:只反映样本的最终类别,不包含类别间的关系(如“猫和狗可能比猫和鸟更相似”)。
    • 训练目标:模型需最大化正确类别的概率(直接优化交叉熵损失)。
    • 应用场景:传统的监督学习任务(如ImageNet分类)。
  • 优点
    • 标注简单,数据易获取。
    • 训练目标明确,适合快速收敛。
  • 缺点
    • 忽略类别间潜在的相似性(如“猫和狗的混淆性”)。
    • 可能导致模型过拟合,尤其是数据量不足时。
2. 软标签(Soft Labels)
  • 定义
    软标签是概率分布形式的标签,表示样本属于每个类别的概率(所有概率之和为1)。通常由模型生成(如知识蒸馏中的教师模型),或通过人工标注的概率分布得到。
  • 示例
    在同样的三分类任务中:
    • 一张猫的图片的软标签可能是 [0.8, 0.15, 0.05](模型认为它更像猫,但和狗有一定相似性)。
    • 知识蒸馏中教师模型输出的概率分布即软标签(如 [0.7, 0.2, 0.1])。
  • 特点
    • 信息丰富:包含类别间的相对关系(如“猫和狗的相似性高于猫和鸟”)。
    • 训练目标:模型需匹配软标签的概率分布(如KL散度损失)。
    • 应用场景:知识蒸馏、半监督学习、标签噪声处理。
  • 优点
    • 传递更多隐含知识(如类别相似性)。
    • 提供正则化效果,提升模型泛化性。
  • 缺点
    • 依赖生成软标签的模型质量(如教师模型的性能)。
    • 计算复杂度略高(需处理概率分布)。
3.区别
特征硬标签软标签
信息类型确定性(非0即1)概率性(0~1的连续值)
生成方式人工标注或直接分类结果模型预测(如教师模型)或人工概率标注
信息量低(仅正确类别信息)高(包含类别间关系)
训练目标交叉熵损失(最大化正确类概率)KL散度损失(匹配概率分布)
典型应用传统监督学习知识蒸馏、标签平滑化
4.为什么需要软标签?

(1)知识蒸馏中的软标签
在知识蒸馏中,软标签是教师模型输出的概率分布,通过以下方式提升学生模型性能:

  • 传递隐含知识:例如,教师模型对“哈士奇”图片可能给出 [0.6(狗), 0.3(狼), 0.1(猫)],表明“狗和狼的相似性”。

  • 缓解过拟合:软标签的平滑性使学生模型避免对硬标签的绝对信任。

(2)标签平滑化(Label Smoothing)
一种人工生成软标签的方法,将硬标签的One-Hot分布调整为:
y soft = ( 1 − ϵ ) ⋅ y hard + ϵ ⋅ 1 N y_{\text{soft}} = (1-\epsilon) \cdot y_{\text{hard}} + \epsilon \cdot \frac{1}{N} ysoft=(1ϵ)yhard+ϵN1
其中 ϵ \epsilon ϵ是平滑系数, N N N是类别数。例如,三分类任务中:
原始硬标签 [1, 0, 0] → 软标签 [0.9, 0.05, 0.05](设 ϵ = 0.1 \epsilon=0.1 ϵ=0.1)。

3:教师模型和学生模型必须是同类型吗?参数迁移是否困难?

教师模型和学生模型不需要是同类型,但结构差异过大会增加知识迁移的复杂度。以下是关键分析:

1. 模型类型差异的影响
场景可行性挑战与解决方案
同类型模型直接对齐输出层或中间层,迁移效率高(如ResNet-50→ResNet-18)。
不同类型模型需设计适配器或调整损失函数(如BERT→BiLSTM、CNN→Transformer)。
极简学生模型学生容量过小可能无法学习教师知识,需增大温度 ( T ) 或简化任务(如仅分类不检测)。
2. 参数迁移的应对策略
  • 适配器网络(Adapter)
    当学生和教师模型的中间层维度不匹配时,插入轻量适配层(如1x1卷积或全连接层)对齐特征维度。
    # 示例:适配器调整学生特征维度
    class Adapter(nn.Module):
        def __init__(self, in_dim, out_dim):
            super().__init__()
            self.fc = nn.Linear(in_dim, out_dim)
        
        def forward(self, x):
            return self.fc(x)
    
    # 学生中间层特征通过适配器对齐教师维度
    student_feat = adapter(student_model.intermediate_feat)
    loss = MSE_loss(teacher_feat, student_feat)
    
  • 损失函数设计
    若输出层结构差异大(如教师多任务、学生单任务),可仅迁移部分知识(如分类概率,忽略检测框)。
  • 渐进式蒸馏
    分阶段迁移知识(如先迁移低级特征,再迁移高级语义)。

4.知识蒸馏如何解决数据不足和隐私问题?

知识蒸馏通过软标签生成无数据蒸馏技术应对数据不足与隐私挑战。

1. 解决数据不足
  • 软标签作为数据增强
    教师模型生成的软标签包含更多信息(如类别间相似性),相当于扩充了监督信号。

    • 示例:100张真实图片 + 教师生成的软标签 → 等效于500张“增强数据”。
  • 半监督蒸馏
    结合少量标注数据和大量无标注数据:

    1. 用标注数据训练教师模型。
    2. 用教师对无标注数据生成软标签。
    3. 学生模型同时学习标注数据(硬标签)和无标注数据(软标签)。
2. 应对隐私敏感场景
  • 数据无关蒸馏(Data-Free Distillation)
    无需原始数据,直接通过教师模型生成合成数据:

    • 方法

      1. 对抗生成网络(GAN):训练生成器 ( G ) 产生逼真样本,使教师模型 ( T ) 对 ( G(z) ) 的输出置信度最大化。
        min ⁡ G max ⁡ T E z ∼ N [ Entropy ( T ( G ( z ) ) ) ] \min_G \max_T \mathbb{E}_{z \sim \mathcal{N}} [\text{Entropy}(T(G(z)))] GminTmaxEzN[Entropy(T(G(z)))]
      2. 特征反演(Feature Inversion):从教师模型的中间层特征重建输入数据。
    • 经典工作

      • DAFL (Data-Free Learning, CVPR 2020)
      • ZSKD (Zero-Shot Knowledge Distillation, NeurIPS 2021)
  • 联邦蒸馏(Federated Distillation)
    在分布式设备上训练,原始数据不离开本地:

    1. 各设备本地训练教师模型。
    2. 上传教师模型的输出概率(软标签)至中心服务器。
    3. 中心服务器聚合软标签训练学生模型。

5、模型设计者的关键洞见

  1. 软标签的价值:发现硬标签(One-hot)丢失了模型学习到的数据内在结构信息。
  2. 知识迁移的本质:学生模型的目标不是复现教师模型的绝对正确性,而是学习其决策边界和数据分布的“直觉”。
  3. 温度参数的物理类比:借鉴统计力学中“温度控制粒子运动混乱度”的思想,通过调节 T T T 控制知识传递的“清晰度”。

三. 知识蒸馏深入学习路径

  1. 选定一个简单任务,从基础蒸馏开始(如 MNIST 分类),用 高温Softmax + KL损失 理解软标签迁移过程。对比学生模型仅用硬标签和软硬标签联合训练的效果差异。
  2. 实现中间特征对齐(如 FitNets),在 CIFAR-10 上对齐教师和学生的中间层特征(如 ResNet-34 → 轻量CNN),观察特征分布变化。
  3. 尝试无数据蒸馏(如 GAN 生成数据),在无原始数据的情况下,仅用教师模型生成合成样本训练学生模型。
  4. 挑战复杂任务(如 BERT → TinyBERT),理解大模型压缩中的注意力迁移和层匹配技巧。
  5. 实验调参,测试不同温度 TT 和损失权重 αα 的影响,并用可视化工具(如 TensorBoard)分析收敛曲线。
  6. 部署优化,将蒸馏后的模型量化(如 INT8)并部署到边缘设备(如 Jetson Nano),测试推理速度提升效果。
    关键建议
  • 每步配合一篇经典论文(如 Hinton 2015、FitNets 2015、TinyBERT)。
  • 使用 PyTorch 或 Hugging Face 快速实验,并复现 Kaggle 相关比赛方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值