专栏名称: 吴师兄学算法
和程序员小吴一起从初学者的角度学习算法,以动画的形式呈现解题的思路。每周四篇原创文章,期待你的鉴赏!
目录
相关文章推荐
51好读  ›  专栏  ›  吴师兄学算法

为什么要花80%时间在预训练?

吴师兄学算法  · 公众号  ·  · 2025-02-09 21:07

正文

请到「今天看啥」查看全文


大家好,我是吴师兄。

今天是玩转大模型训练营的第三节直播课,开始讲 预训练 ,有个同学提到了一个问题: 为什么要花80%时间在预训练?

这恰是理解大模型的核心突破口,想象教婴儿学语言:前3年大量听读(预训练),建立语言本能;后3年分科学习(微调)。

大模型的预训练正是这个构建"语言本能"的过程——用数TB文本让模型理解人类知识的基本规律。

但真正工业级的预训练远不止调参:

  • 数据清洗要处理100+种脏数据模式

  • 分布式训练需协调8卡并行时的梯度同步

  • 损失函数设计要考虑知识密度权重

  • 显存优化要平衡模型规模和训练效率

这正是我们训练营带学员 从零搭建 DeepSeek MOE架构 的原因。

什么是预训练?

在大模型(如GPT、BERT等)的开发过程中,预训练(Pretraining)是一个核心步骤。它为模型打下基础,使其具备理解和生成语言的基本能力。为了让大家更直观地理解预训练,我们可以用人生的成长阶段来比喻这个过程。

预训练:模型的“成长阶段”

  1. 出生到高中:基础知识的积累
    预训练就像是人类从出生到高中的成长过程。在这个阶段,我们通过学习大量的基础知识(如语文、数学、科学等),建立对世界的初步认知。同样,模型在预训练阶段会接触到海量的文本数据(如维基百科、书籍、新闻等),学习语言的基本结构和规律。

  2. 大学:专业知识的扩展
    继续预训练类似于大学阶段的学习。在这一阶段,人类开始接触专业领域的知识,比如金融、医疗或法律。对于模型来说,继续预训练意味着在通用语言模型的基础上,使用特定领域的数据进行进一步训练,使模型在特定领域的任务中表现得更好。

  3. 职场:指令微调(Fine-tuning)
    指令微调可以类比为进入职场后的技能提升。在这一阶段,人类会根据具体的工作需求,学习和掌握特定的技能。对于模型而言,指令微调是通过特定任务的数据集(如情感分析、机器翻译等)对模型进行调整,使其在这些任务上表现得更出色。

  4. 高管培训:强化学习(RLHF)
    RLHF(Reinforcement Learning from Human Feedback)可以看作是进入高层管理职位后的领导力培训。这个阶段不仅仅是执行任务,还要优化决策过程和策略。对于模型来说,RLHF是通过人类反馈来优化模型的输出,使其更加符合人类的预期。

从零开始预训练:构建模型的第一步

在完全随机参数的模型上进行预训练,意味着从零开始构建一个语言模型。这个过程需要大量的数据和计算资源。以下是从零开始预训练的几个关键步骤:

  1. 选择合适的预训练模型
    在开始预训练之前,首先需要选择一个基础模型架构,如Transformer、BERT或GPT。不同的架构适用于不同的任务和需求。

  2. 数据准备
    数据是预训练的核心。为了让模型具备强大的语言理解能力,需要准备多样化、高质量的大规模文本数据。对于中文模型而言,常用的数据源包括中文维基百科、新闻语料、网络小说等。

  3. Tokenizer 的作用
    Tokenizer 的主要作用是将输入的句子分割成词语或子词,并将这些分割后的词汇映射到模型可以理解的数值形式。在中文处理中,tokenizer 的设计尤为重要,因为中文的词汇边界不像英文那样明确。

  4. 参数训练
    在数据准备和Tokenizer设计完成后,就可以开始模型的参数训练。这一过程通常需要高性能的计算设备,如多GPU集群或TPU。

预训练数据处理 – 数据清洗

数据清洗是预训练数据准备中的关键步骤,它直接影响模型的训练质量和泛化能力。数据清洗的目标是去除噪声、规范格式、提升数据质量,确保模型学习到的是有用的信息而不是错误的模式。

  1. 去除噪声数据

  • 重复数据 :删除重复的文本,以防模型在特定模式上过拟合。
  • 无意义文本 :剔除乱码、广告、过度简短或无实际意义的内容。
  • 敏感信息 :去除包含个人隐私、敏感话题或不适宜内容的数据,避免法律和伦理风险。
  • 文本规范化

    • 统一编码格式 :确保所有文本使用统一的编码格式(如UTF-8),避免因编码差异导致的读取错误。
    • 统一标点和大小写 :标准化标点符号和大小写处理,确保一致性。
    • 处理特殊字符 :清理或转义特殊字符(如HTML标签、控制字符等),确保数据的纯净性。
  • 语言检测与分类 :对于多语言预训练,首先需要进行语言检测,确保不同语言的数据正确分类,避免混淆。常用的语言检测工具包括LangDetect、CLD2等。

  • 去除低质量文本

    • 拼写和语法检查 :使用拼写检查工具(如Hunspell)和语法检查工具(如Grammarly)过滤掉语法错误严重的文本。
    • 内容完整性检查 :剔除不完整或逻辑不连贯的段落,确保语料的连贯性和完整性。
  • 去除重复与冗余

    • 去重算法 :使用哈希算法或文本相似度计算(如余弦相似度)去除重复内容。
    • 冗余信息清理 :去除多次出现的模板化文本,如网页页脚、版权声明等。
  • 特定领域数据清洗 :针对特定领域(如医疗、金融、法律),需要设计专门的清洗规则,确保数据的专业性和准确性。例如,

    • 医疗领域 :去除无关的通用文本,保留诊断报告、药品说明等专业内容。
    • 金融领域 :过滤掉广告和非专业的市场评论,保留官方报告和市场数据。

    继续预训练:提升模型的领域适应能力

    继续预训练是在已有的预训练模型基础上,使用特定领域的数据进行进一步训练。这一过程可以显著提升模型在特定领域任务中的表现。

    1. 应用场景

    • 金融领域 :使用金融新闻、报告和市场数据对模型进行继续预训练,可以提升其在金融文本分析和预测中的表现。
    • 医疗领域 :使用医学文献和病例数据对模型进行继续预训练,有助于提升其在医学问答和疾病诊断中的能力。
    • 法律领域 :使用法律条文和判例对模型进行继续预训练,可以增强其在法律文本理解和法律咨询中的表现。
  • 技术要点

    • 数字处理 :为了避免模型在处理数字时出现错误(如9.9 > 9.11),可以通过特殊的标记和处理策略来改进模型的数值理解能力。
    • 词典大小控制 :词典的大小会影响模型的效率和性能。在中文处理中,一个token可能代表多个汉字,合适的词典大小可以平衡模型的表达能力和计算效率。

    数据质量与任务设计的重要性

    1. 语料的质量
      高质量的训练语料对于提升模型性能至关重要。低质量或噪声数据可能导致模型学到错误的语言模式,从而影响其在实际应用中的表现。

    2. 任务设计
      在设计训练任务时,要根据实际需求增加行业相关的词汇token,以提高模型在特定领域的表现。例如,在医疗领域,可以增加疾病名称和医学术语,以提升模型在医学问答中的能力。

    3. 词汇表和嵌入层的关系
      Tokenizer 的词汇表大小和模型的嵌入层(embedding layer)大小应合理匹配。通常需要预留一定的空间,以适应更多的新词token。

    防止灾难性遗忘

    继续预训练时,需要特别注意防止模型的灾难性遗忘(Catastrophic Forgetting)。这指的是模型在学习新任务时,丧失了之前学到的知识。

    1. 混合数据训练
      通过将新领域的数据与原有的通用数据混合训练,可以有效防止灾难性遗忘。通常,新领域数据的比例不应超过15%。

    2. 多任务学习
      采用多任务学习的方法,可以使模型在不同任务之间共享知识,从而保持原有能力的同时,提升新任务的表现。

    END

    一个人可以学得很快,但一群人才能学得更深。

    吴师兄的大模型训练营已经帮助了数百名学员成功转型,如果你也想入局大模型赛道,拿下大厂 offer,戳 链接 🔗 加入我们吧!

    这是一个 大模型实战项目 + 面试辅导 + 技术答疑 + 求职指导 的学习社区:

    • 1、1v1 问题答疑&简历修改&视频会议规划学习路线,助你快速成长!

    • 2、手撕 RLHF 实战项目,简历直通大厂!

    • 3、每周直播分享,技术难题不过夜!

    学员好评如潮,转行成功案例不断。如果你觉得内容对你有帮助,别忘了点赞、转发三连哦 🌟

    最后,送你一句话:大模型很难,但你并不孤单,吴师兄和训练营一直在你身边,共勉 💪








    请到「今天看啥」查看全文