GitHub 热门笔记:从零构建大模型技术路线图详解

推荐 GitHub 热门学习笔记《从零构建大模型》,该笔记系统地展示了从零构建 LLM 的技术路线图,并提供代码和视频资源。

原文标题:GitHub 热门学习笔记《从零构建大模型》,建议收藏!

原文作者:图灵编辑部

冷月清谈:

本文推荐了 GitHub 上一个名为《从零构建大模型》的机器学习笔记,该笔记详细阐述了构建大型语言模型(LLM)的技术路线图。内容涵盖基础架构、关键技术点和优化策略三个主要部分。基础架构部分着重讲解数据采样、预处理以及词元化等基础概念;关键技术点部分深入剖析位置编码、注意力机制和 Transformer 结构;优化策略部分则聚焦于微调技术,并介绍了损失函数的选择与调整。此外,文章还提供了该笔记的 GitHub 链接、在线电子版购买地址以及配套的代码和视频资源链接。

怜星夜思:

1、从零构建大模型,Tokenization(词元化)是最基础的一步,大家在实践中有遇到什么比较tricky的问题吗?又是怎么解决的?
2、文章提到了位置编码对于让模型理解文本序列中的位置信息至关重要, 除了文章中提到的方式,大家还了解或者使用过哪些位置编码方法?它们的优缺点是什么?
3、大模型微调(Fine-tuning)是优化策略里很重要的一环,大家在微调过程中都遇到过哪些坑?有什么经验可以分享?

原文内容

今天给大家推荐一份 GitHub 上很火的机器学习学习笔记《从零构建大模型》,目前已经收获 1.6K stars,这份笔记完美展示了从零构建 LLM 的技术路线图,既有理论深度,又包含实践要点。每个核心概念都配有清晰的示意图,便于理解和实践。建议先掌握基础概念,再逐步深入理解高级特性,这样能形成更系统的知识体系。

第一部分:基础架构

  • LLM 的核心是对模型结构和训练数据的深入理解
  • 从数据采样和预处理开始,逐步构建基础模型
  • 需要特别关注词元化(Tokenization)处理,这是模型理解文本的基础

第二部分:关键技术点

  1. 位置编码(Positional Encoding)

    • 帮助模型理解文本序列中的位置信息
    • 通过数学编码方式赋予每个标记相对位置
  2. 注意力机制(Attention Mechanism)

    • 包含自注意力和因果注意力两种形式
    • Q、K、V三个关键参数的协同作用
    • 进行尺度缩放以稳定训练
  3. Transformer结构

    • 编码器-解码器架构设计
    • 多头注意力机制的实现
    • 前馈网络和归一化层的配置

第三部分:优化策略

  • 微调(Fine-tuning)技术要点
  • 损失函数的选择与调整
  • 温度系数(Temperature)对输出的影响

资源链接

GitHub:github.com/hesamsheikh/ml-retreat/blob/main/assets/LLM-from-scratch-notes.pdf

全网疯传的《从零构建大模型》首发抢读电子版,每周更新一章(现已更新至第 4 章)!会在纸质书出版之前更新完成,现在扫描下方二维码,你将成为首批阅读此书的读者,快来抢读!!


  • 更新频次:每周更 1 章(共 7 章),现已更新至第 4 章

  • 本书代码和 Notebook 可以在 https://github.com/rasbt/LLMs-from-scratch 找到;

  • 作者更新了随书视频,需要的可以在这里观看https://www.youtube.com/watch?v=yAcWnfsZhzo

    https://www.youtube.com/watch?v=341Rb8fJxY0&t


在线更新电子版!电子版!电子版!限时秒杀 ¥39.9(购买后可以分享专属海报赚佣金!!)

我之前在处理一些古文语料的时候,发现分词效果很差,很多专有名词和特有句式都被切碎了。后来我尝试用一些古文领域专门训练的分词模型,效果才有所改善。看样子针对特定领域的语料,还是得用对应的模型才行。

Tokenization确实是个大学问!我最近在研究Byte Pair Encoding (BPE) 算法,感觉挺有意思的。它能根据语料库自动学习合并频率最高的字节对,从而生成一个词表。这样既能处理未登录词,又能控制词表的大小,感觉很实用。

词元化这块确实容易被忽略,但其实对最终模型效果影响很大。我之前做项目的时候,因为一开始没重视,导致模型在处理一些生僻词的时候表现很差。后来我尝试了subword tokenization,把生僻词拆成更小的片段,效果就好多了。

我记得之前看过一篇论文,介绍了一种可学习的位置编码。这种方法不是预先定义好的,而是通过训练让模型自己学习位置编码。虽然理论上可行,但实际应用中可能需要更多的数据和计算资源才能达到好的效果。

微调的时候,选择合适的损失函数也很重要。我之前在做一个文本分类任务时,一开始用了交叉熵损失,效果一直不好。后来我改成focal loss,专门解决类别不平衡问题,准确率立马就上去了。所以说,损失函数的选择要根据具体任务来定。

除了正余弦位置编码,还有相对位置编码也是一种常见的选择。相对位置编码不是直接给每个位置一个固定的向量,而是让模型学习不同位置之间的相对关系。这种方法在处理长文本时可能更有效,因为它避免了绝对位置信息的干扰。

我之前做的一个项目,因为数据量比较小,微调的时候很容易过拟合。后来我尝试了dropout和weight decay等正则化方法,才有所改善。看来,在数据量不足的情况下,防止过拟合是微调的关键。

微调绝对是个技术活!我之前在微调一个语言模型的时候,因为学习率设置不当,直接把预训练的知识都抹掉了。后来我尝试用更小的学习率,并且配合warmup策略,才避免了这个问题。所以说,微调参数的选择真的很重要!

位置编码这块,我一直觉得挺玄学的。不同的编码方式,对最终模型效果的影响很难预测。有时候看似简单的正余弦编码,反而能取得不错的效果。感觉这块还是需要多做实验,根据具体任务来选择。