预训练与微调:大模型如何“学习知识”?

引言:知识的两阶段习得

Transformer架构的千亿参数模型(如GPT、BERT)并非直接针对具体任务训练,而是通过预训练(Pre-training)与微调(Fine-tuning)两阶段实现知识的泛化与迁移。预训练阶段从海量无标注数据中学习语言的通用模式,微调阶段则针对下游任务进行参数校准。本文将从数学原理和代码实现角度,拆解这一过程的底层逻辑。


一、预训练:无监督学习的知识沉淀

  1. 核心目标函数

    预训练的核心是通过自监督任务(Self-supervised Learning)从无标注数据中提取语义特征。以BERT为例,其采用掩码语言模型(MLM)和下一句预测(NSP)双任务驱动:
    • MLM:随机掩码输入token(如15%概率),模型预测被掩码部分:

    LMLM=−∑i∈MlogP(xi∣x\M)
    其中 M 为掩码位置集合,x\M​ 为未掩码上下文。
    • NSP:判断两个句子是否为连续关系:

    LNSP=−logP(y∣CLS)
    其中 y∈{0,1} 表示是否为相邻句,CLS为分类标记的嵌入向量。

    数学意义:MLM迫使模型理解双向上下文,NSP增强句子级语义建模能力。

  2. 代码实现(MLM损失函数)

    class MLMLoss(nn.Module):  
        def __init__(self, vocab_size):  
            super().__init__()  
            self.criterion = nn.CrossEntropyLoss(ignore_index=-100)  
    
        def forward(self, logits, masked_labels):  
            # logits: (batch_size, seq_len, vocab_size)  
            # masked_labels: (batch_size, seq_len),未掩码位置为-100  
            loss = self.criterion(logits.view(-1, logits.size(-1)), masked_labels.view(-1))  
            return loss  

    关键点:仅计算被掩码位置的损失,忽略其他位置。


二、微调:任务适配的参数校准

  1. 微调策略

    • 全参数微调:直接更新所有参数,适用于数据量充足的任务(如GLUE)。

    • 参数高效微调(Parameter-Efficient Fine-tuning, PEFT):

    ◦ Adapter:在Transformer层中插入小型神经网络模块,仅训练新增参数。

    ◦ LoRA(Low-Rank Adaptation):对权重矩阵进行低秩分解,优化低秩增量矩阵:

    $$ W = W_0 + \Delta W = W_0 + BA^T \quad (B \in \mathbb{R}^{d \times r}, A \in \mathbb{R}^{r \times d}) $$  
    其中 $ r \ll d $,参数量减少至 $ 2rd $。  
  2. LoRA的代码实现

    class LoRALayer(nn.Module):  
        def __init__(self, in_dim, out_dim, rank=8):  
            super().__init__()  
            self.A = nn.Parameter(torch.randn(in_dim, rank))  
            self.B = nn.Parameter(torch.zeros(rank, out_dim))  
            self.original_weight = nn.Parameter(torch.Tensor(out_dim, in_dim))  # 预训练权重  
    
        def forward(self, x):  
            delta_W = torch.matmul(self.A, self.B)  # (in_dim, out_dim)  
            return F.linear(x, self.original_weight + delta_W.T)  

    优势:冻结原始参数,仅优化 A 和 B,显存占用降低90%以上。


三、知识迁移的数学本质







扫描下方二维码,关注公众号:程序进阶之路,实时获取更多优质文章推送。


扫码关注

评论