Giter VIP home page Giter VIP logo

so-large-lm's Introduction

大模型基础

已更新

Datawhale开源大模型入门课-第一节-进击的AI:大模型技术全景

文字教程:Llama开源家族:从Llama-1到Llama-3

视频教程:Llama开源家族:从Llama-1到Llama-3

项目受众

  1. 人工智能、自然语言处理和机器学习领域的研究者和从业者:该项目旨在为研究者和从业者提供大规模预训练语言模型的知识和技术,帮助他们更深入地了解当前领域的最新动态和研究进展。
  2. 学术界和产业界对大型语言模型感兴趣的人士:项目内容涵盖了大型语言模型的各个方面,从数据准备、模型构建到训练和评估,以及安全、隐私和环境影响等方面。这有助于拓宽受众在这一领域的知识面,并加深对大型语言模型的理解。
  3. 想要参与大规模语言模型开源项目的人士:本项目提供代码贡献和理论知识,降低受众在大规模预训练学习的门槛。
  4. 其余大型语言模型相关行业人员:项目内容还涉及大型语言模型的法律和道德考虑,如版权法、合理使用、公平性等方面的分享,这有助于相关行业从业者更好地了解大型语言模型的相关问题。

项目简介

  本项目旨在作为一个大规模预训练语言模型的教程,从数据准备、模型构建、训练策略到模型评估与改进,以及模型在安全、隐私、环境和法律道德方面的方面来提供开源知识。

  项目将以斯坦福大学大规模语言模型课程李宏毅生成式AI课程为基础,结合来自开源贡献者的补充和完善,以及对前沿大模型知识的及时更新,为读者提供较为全面而深入的理论知识和实践方法。通过对模型构建、训练、评估与改进等方面的系统性讲解,以及代码的实战,我们希望建立一个具有广泛参考价值的项目。

  我们的项目团队成员将分工负责各个章节的内容梳理和撰写,并预计在三个月内完成初始版本内容。随后,我们将持续根据社区贡献和反馈进行内容的更新和优化,以确保项目的持续发展和知识的时效性。我们期待通过这个项目,为大型语言模型研究领域贡献一份宝贵的资源,推动相关技术的快速发展和广泛应用。

项目意义

在当今时代,自然语言处理(NLP)领域以及其他人工智能(AI)的分支已经迎来了一场革命性的变革,这场变革的核心驱动力是大模型 (LLMs)的出现和发展。这些模型不仅构成了许多任务中最先进系统的基础,而且已经在医疗、金融、教育等众多行业展现出了前所未有的强大能力和应用潜力。

随着这些大模型在社会层面的影响力日益扩大,它们已经成为了公众讨论的焦点,激发了社会各界对人工智能发展趋势和潜在影响的深入思考与广泛兴趣。然而,尽管这一领域引人注目,相关的讨论和文章的质量却是参差不齐,缺乏系统性和深度,这不利于公众对于这一技术复杂性的真正理解。

正是基于这一现状,本教程的编写旨在填补这一空白,提供一套不仅易于理解但也理论丰富的大模型教程: 通过本教程,我们期望让广大群体不仅能够深刻理解大模型的原理和工作机制,而且能够掌握其在实际应用中的关键技术和方法,从而能够在这一领域内继续探索和创新。

特别是对于自然语言处理领域的初学者来说,面对以大模型为核心的各种新兴技术和知识,能够快速上手并有效学习是进入这一领域的关键。当前现有的自然语言处理教程在大模型内容的覆盖上仍显不足,这无疑增加了初学者的学习难度。因此,本教程从最基础的概念讲起,逐步深入,力求全面覆盖大模型的核心知识和技术要点,使读者能够从理论到实践都有深刻的理解和掌握。

关于实战的部分,欢迎学习同样是Datawhale出品的self-llm开源课程,该课程提供了一个全面实战指南,旨在通过AutoDL平台简化开源大模型的部署、使用和应用流程。从而使学生和研究者能够更高效地掌握环境配置、本地部署和模型微调等技能。在学习完大模型基础以及大模型部署后,关于Datawhale的大模型开发课程llm-universe旨在帮助初学者最快、最便捷地入门 LLM 开发,理解 LLM 开发的一般流程,可以搭建出一个简单的 Demo。

我们坚信,通过这样一套全面而深入的学习材料,能够极大地促进人们对自然语言处理和人工智能领域的兴趣和理解,进一步推动这一领域的健康发展和技术创新。

项目亮点

  1. 项目的及时性:当前大模型发展迅速,社会和学习者缺少较为全面和系统的大模型教程
  2. 项目可持续性:当前大模型发展还在初期阶段,对行业的渗透还未全面展开,因此随着大模型的发展,该项目可持续的为学习者提供帮助

项目规划

目录

  1. 引言
    • 项目目标:目前对大规模预训练语言模型的相关知识的重点讲解
    • 项目背景:GPT-3等大型语言模型的出现,以及相关领域研究的发展
  2. 大模型的能力
    • 模型适应转换:大模型预训练往下游任务迁移
    • 模型性能评估:基于多个任务对GPT-3模型进行评估和分析
  3. 模型架构
    • 模型结构:研究和实现RNN, Transformer等网络结构
    • Transformer各层细节:从位置信息编码到注意力机制
  4. 新的模型架构
    • 混合专家模型(MoE)
    • 基于检索的模型
  5. 大模型的数据
    • 数据收集:从公开数据集中获取训练和评估所需数据,如The Pile数据集
    • 数据预处理:数据清洗、分词等
  6. 模型训练
    • 目标函数:大模型的训练方法
    • 优化算法:模型训练所使用的优化算法
  7. 大模型之Adaptation
    • 讨论为什么需要Adaptation
    • 当前主流的Adaptation方法(Probing/微调/高效微调)
  8. 分布式训练
    • 为什么需要分布式训练
    • 常见的并行策略:数据并行、模型并行、流水线并行、混合并行
  9. 大模型的有害性-上
    • 模型性能差异:预训练或数据处理影响大模型性能
    • 社会偏见:模型表现出的显性的社会偏见
  10. 大模型的有害性-下
    • 模型有害信息:模型有毒信息的情况
    • 模型虚假信息:大模型的虚假信息情况
  11. 大模型法律
    • 新技术引发的司法挑战:司法随着新技术的出现而不断完善
    • 过去司法案例汇总:过去案例的汇总
  12. 环境影响
    • 了解大语言模型对环境的影响
    • 估算模型训练产生的排放量
  13. 智能体(Agent)
    • 了解Agent各组件细节
    • Agent的挑战与机遇
  14. Llama开源家族:从Llama-1到Llama-3
    • Llama进化史(第1节)/ 模型架构(第2节)/训练数据(第3节)/训练方法(第4节)/效果对比(第5节)/社区生态(第6节)

核心贡献者

  • 陈安东:哈尔滨工业大学自然语言处理方向博士在读(发起人,项目负责人,项目内容构建)
  • 张帆:天津大学自然语言处理方法硕士(项目内容构建)

参与者

  • 王茂霖:华中科技大学博士在读 (解决issues问题)

项目负责人

陈安东 联系方式: [email protected]

so-large-lm's People

Contributors

andongblue avatar mlw67 avatar relph1119 avatar tangent-90c avatar zhangfantju avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

so-large-lm's Issues

第一章内容细节修改建议

  • 假设我们有一个词符集的词汇表$V$。语言模型$p$为每个词元序列(此处应为“词符序列”,与上下文术语保持一致)$x_1, x_2, \dots, x_L\in V$ 分配一个概率(介于0和1之间的数字)。

  • 这里我们是直接给出了计算的结果,对于计算具体方法我们在下一节的概率的链式法则给出具体的计算公式。(建议”概率的链式法则“给出英文原名注解(Chain rule of probability))

  • 需要统一全文”词符“和”词元“的术语,或者说明不区分使用这两个词,以免导致混淆。

补充新章节的提议

  1. 涉及模型推理及加速的,如KVCache,vLLM
  2. 涉及普惠大众的开源大模型生态的,比如fastChat,llama.cpp等

3.3 中的错别字

上下文向量表征 (Contextual Embedding): 作为模型处理的先决条件,其关键是将词元序列表示炜相应的上下文的向量表征:
”表示炜相应“应该是“表示为响应”

10.1.1.3节约计算

IMG_2488

门控函数g(x)的近似是进行了什么操作描述得不够清晰,是进行了把除最大n个量外其他全归零,然后再做归一化吗?

引言篇信息熵解释

自我感觉信息熵解释不太清楚,所以自己写了一个例子:
● 熵的计算公式:H(X) = - Σ P(x) * log2(P(x)),其中,H(X)表示随机变量X的熵,P(x)表示X取值为x的概率。
● 以骰子为例,每面出现的概率如下:P(1) = 1/6;P(2) = 1/6;P(3) = 1/6;P(4) = 1/6;P(5) = 1/6;P(6) = 1/6
● 带入公式得到:H(X) = - log2(1/6),大约为2.58496比特(bits)
● 这个结果表示了骰子的信息熵,由于骰子是均匀的,所以熵到达了最大值,如果骰子不均匀,某个面的概率更高,那么熵就会减少,不确定性降低了。
● 硬币均匀的信息熵为:H(X) = - (0.5) * log2(0.5) - (0.5) * log2(0.5),计算结果约为1比特(bits);假设不均匀,其中一面概率是0.8,则:H(X) = - (0.8) * log2(0.8) - (0.2) * log2(0.2),计算结果约为0.721928比特(bits)。可见,在硬币不均匀的情况下,不确定性更小,只猜概率大的那面猜中的可能性更大。
这样理解没有问题吧

ch07:7.2.3.2Prompt Tuning中“Prompt tuning v2”链接

该链接指向论文为p tuning v2,但[ ]内为"prompt tuning v2“。另外,p tuning v2与prefix tuning的联系更为”密切“(可参照p tuning v2论文摘要),建议考虑将该链接及与之相关内容归置到 7.2.3.3Prefix Tuning一节

第七章,请问为什么似然值是 4/9

原文

它被用来训练T5和Gopher模型。给定一个序列$x_{1:L}$,一个分词器$T$是$p\left(x_{1: L}\right)=\prod_{(i, j) \in T} p\left(x_{i: j}\right)$的一个集合。这边给出一个实例:

  • 训练数据(字符串):$𝖺𝖻𝖺𝖻𝖼$
  • 分词结果 $T={(1,2),(3,4),(5,5)}$ (其中$V={𝖺𝖻,𝖼}$)
  • 似然值:$p(x_{1:L})=2/3⋅2/3⋅1/3=4/9$

在这个例子中,训练数据是字符串"$𝖺𝖻𝖺𝖻𝖼$"。分词结果 $T={(1,2),(3,4),(5,5)}$ 表示将字符串拆分成三个子序列:$(𝖺,𝖻),(𝖺,𝖻),(𝖼)$。词汇表$ V={𝖺𝖻,𝖼} $表示了训练数据中出现的所有词汇。

似然值 $p(x_{1:L}) $是根据 unigram 模型计算得出的概率,表示训练数据的似然度。在这个例子中,概率的计算为 $2/3⋅2/3⋅1/3=4/9$。这个值代表了根据 unigram 模型,将训练数据分词为所给的分词结果 $T $的概率。

请问一下 2/3⋅2/3⋅1/3 如果三个分数相乘,那么结果应该是 4/27,那么4/9到底是怎么来的,你最好解释一下。

第一章1.2.1.2 翻译建议

image
原句:”因此,语言模型被限制在如语音识别和机器翻译等任务中,其中声音信号或源文本提供了足够的信息,只捕获局部依赖关系(而无法捕获长距离依赖关系)并不是一个大问题。“
建议改成:“因此,在语音识别和机器翻译等任务中,由于声音信号或源文本提供了足够的信息,只捕获局部依赖关系(无法捕获长距离依赖关系),对语言模型来说并不是一个大问题。”
这样翻译更符合中文的表达方式。不然,想我一样,第一次读就被绕晕了。

第一章:引言 翻译错误

这块凭空冒出来了非自回归生成任务的表述,在CS324中并不存在这样的表述,应该是翻译错了

c520145ee48be90a0bcff7659ef8ef0

AI模型训练及多场景推理成本测算


课程中没有提AI模型的成本消耗计算,之前看到的国金证券出的研究报告,提出的测算方法,可以参考。

AI模型的成本主要由训练成本和推理成本构成:

  • 训练成本:衡量从头开发一个AI模型的算力费用,或是对现有AI模型知识库进行迭代更新所需的算力费用。
  • 推理成本:衡量用户使用AI模型时产生的算力费用。

1、AI模型训练成本估算

AI模型训练成本估算:

训练成本=AI模型训练所需的浮点运算次数/AI算力集群单位时间有效浮点运算次数*AI算力集群单位时间价格

AI模型训练所需浮点运算次数计算:

AI模型训练所需浮点运算次数=6 * 模型参数规模 * 训练集大小

**AI算力集群单位时间有效浮点运算次数:**在利用GPU进行AI模型训练时,GPU算力除了用以训练模型,还被用以通信、训练数据读写等,因此有效浮点运算次数才能衡量AI算力集群的算力水平。

2、通用AI模型推理成本估算

AI模型推理成本估算:

推理成本=AI模型推理所需的浮点运算次数/AI算力集群单位时间有效浮点运算次数*AI算力集群单位时间价格

AI模型推理所需浮点运算次数计算:

AI模型推理所需浮点运算次数=6 * 模型参数规模 * 训练集大小

3、多应用场景下ChatGPT推理成本估算

具体应用场景中AI模型完成一次任务所需成本:

场景成本=场景任务所需Tokens推理成本(1-缓存命中率)*1/(1-计算集群闲置率)*模型压缩因子

场景任务所需Tokens: 其指在具体应用场景中,为了完成给定的场景任务,如搜索信息、文书修改撰写等,AI模型需要处理的Tokens数量。这既包括向AI模型输入的信息, 也包括AI模型自主生成的信息。
推理成本: ChatGPT每处理1000Tokens信息需要花费0.177美分。如果自建AI算力中心,推理成本将降至0.053美分/1000Tokens。
缓存命中率: 用户的任务需求存在重叠性,如果任务需求在之前已经被AI模型解决,则无需再次进行推理,仅依靠输出缓存信息可解决任务。
计算集群闲置率: 当AI模型应用至具体场景时,为保证能够及时响应用户需求,AI算力集群需要采用冗余配置方式,会导致算力闲置。
模型压缩因子: 可以通过模型压缩技术,来压缩模型的参数规模,从而降低具体场景下的推理成本。

典型具体应用场景所需的Tokens估算:

1、搜索引擎场景

场景任务所需Tokens = 用户输入 + (模型从每个信源中读取的Tokens*每次搜索的信源数量)+模型输出Tokens

2、办公软件场景

场景任务所需Tokens = (用户输入 + 模型输出Tokens)* 满足用户需求的平均响应轮次

3、AI客服场景

场景任务所需Tokens = (用户输入 + 模型输出Tokens)* 解决用户需求的平均对话轮次

详细的成本计算案例可参考报告

ChatGPT训练及多场景推理成本测算

大模型法律是指的 Scalling Laws?

这个 repo 似乎不是那么 right,对比了下其引用的 课程,
大模型法律对应是是课程中的 Scalling Laws 吗?
如果是,那就太错了,人家说的是 模型 scaling 定律~

第一章公式格式问题

  1. 交叉熵部分中的 H(p,q) <= H(p) 可以写为 H(p,q) \leq H(p) 或 H(p,q) \leqslant H(p)
  2. 神经语言模型一小节中的 some-large-language-model 应放在 \text{} 或 \mathrm的括号中,否则连字符将被渲染成减号
  3. 部分公式没有渲染成功

[typo] ch06 的 6.2.6 节描述错误

typo 位置:

image

超链接中的代码:

image

按 CS324 和代码里的意思,by an additional,指的应该是自乘,而不是增加。建议将这里的描述清晰化,以下是我的修改版本。

image

引言篇可以补充一下生成任务和模拟退火的推导

语言模型也可以做生成任务。语言模型是一种概率模型,它可以根据给定的上下文来预测下一个词的概率分布。我们可以使用语言模型来生成一个序列,其中每个元素都是根据前面元素的条件概率分布来生成的。最纯粹的方法是从语言模型$p$中以概率$p(x_{1:L})$进行采样。表示为:

$x_{1:L} \sim p$

例如,如果我们的语言模型p表示"$x_{1:L}$"的条件概率分布为:

$\begin{aligned}
&P(x_1) = 0.2 \
&P(x_2 | x_1) = 0.3 \
&P(x_3 | x_1, x_2) = 0.1 \
&P(x_4 | x_1, x_2, x_3) = 0.05 \
&P(x_5 | x_1, x_2, x_3, x_4) = 0.01
\end{aligned}$

那么我们可以按照以下方式生成新的序列:"$x_1:x_2:x_3:x_4:x_5$":

  • 首先,我们从语言模型$p$中采样得到"$x_1$"的概率分布:

    • $P(x_1) = 0.2$
  • 然后,我们根据"$x_1$"的概率分布和语言模型$p$的条件概率分布来采样得到"$x_2$"的概率分布:

    • $P(x_2 | x_1) = 0.3$

    • $P(x1,x2​)=P(x2​∣x1​)×P(x1​)=0.3×0.2=0.06$

  • 接下来,我们根据"$x_1$"和"$x_2$"的概率分布以及语言模型$p$的条件概率分布来采样得到"$x_3$"的概率分布:

    • $P(x_3 | x_1, x_2) = 0.1$

    • $P(x1,x2,x3) = P(x_3 | x_1, x_2) \times P(x1,x2​) = 0.3 \times 0.2 \times 0.1$

  • 继续这个过程,我们可以得到"$x_4$"和"$x_5$"的概率分布:

    • $P(x_4 | x_1, x_2, x_3) = 0.05$

    • $P(x1,x2,x3,x4) = P(x4 \mid x1,x2,x3) \times P(x1,x2,x3) = 0.2 \times 0.3 \times 0.1 \times 0.05$

  • 最后,我们可以根据"$x_4$"和"$x_5$"的概率分布来生成新的序列:"$x_1:x_2:x_3:x_4:x_5$":

    • "$x_1:x_2:x_3:x_4:x_5$"的概率分布为:$\begin{aligned}
      P(x_1:x_2:x_3:x_4:x_5) &=P(x_1) \times P(x_2 | x_1) \times P(x_3 | x_1, x_2) \times P(x_4 | x_1, x_2, x_3) \& \times P(x_5 | x_1, x_2, x_3, x_4) \
      &=0.2 \times 0.3 \times 0.1 \times 0.05 \times 0.01
      \end{aligned}$

然而,如果我们仅将概率提高到 $1/T$ 的次方,概率分布可能不会加和到 1。我们可以通过重新标准化分布来解决这个问题。我们将标准化版本 $p_{T}(x_{i}∣x_{1:i−1})∝p(x_{i}∣x_{1:i−1})^{1/T}$ 称为退火条件概率分布。例如:

$\begin{array}{cl}
p(\text { cheese })=0.4, & p(\text { mouse })=0.6 \
p_{T=0.5}(\text { cheese })=0.31, & \left.p_{T=0.5} \text { (mouse }\right)=0.69 \
\left.p_{T=0.2} \text { (cheese }\right)=0.12, & p_{T=0.2} \text { (mouse) }=0.88 \
\left.p_{T=0} \text { (cheese }\right)=0, & \left.p_{T=0} \text { (mouse }\right)=1
\end{array}$

这是一个模拟退火算法中的"Metropolis准则"的计算过程。Metropolis准则是一种随机搜索方法,用于在概率空间中寻找函数的全局最小值。在这个问题中,我们要找的是使得某个目标函数$p(x)$最小的$x$值,其中$x$是一个离散的样本空间。

给定的概率分布是:

$p(cheese)=0.4, p(mouse)=0.6$

我们想要知道在温度$T=0.5$时,$p_T=0.5​(cheese)$和$p_T=0.5​(mouse)$的值。根据Metropolis准则,我们需要计算以下概率:

$p_T={0.5}​(cheese∣x{1:i−1}​)∝p(xi​∣x_{1:i−1}​)^{1/T}$

这里,$x_{1:i−1}$​表示在当前迭代之前的样本集合,$x_i$​表示当前的样本。

这个公式的意思是,在新的温度下,假设我们接受一个新的样本$x_i$,那么这个新样本对应的概率将乘以原概率的($1/T$)次方。

所以,我们可以计算出:

$\begin{aligned}
p_T&={0.5}​(cheese∣x{1:i−1}​)∝p(x_i​∣x_{1:i−1}​)^{1/T} \&=p(cheese)^{1/T}×p(x_i​∣cheese)
\&=0.4^{1/0.5}×0.4
\&=0.31
\end{aligned}$

同理,我们也可以计算出:

$\begin{aligned}
p_T&={0.5}​(mouse∣x{1:i−1}​)∝p(x_i​∣x_{1:i−1}​)^{1/T}
\&=p(mouse)^{1/0.5}×p(xi​∣mouse)
\&=0.6^{1/0.5}×0.6
\&=0.69
\end{aligned}$

具体来说,这个温度参数会应用于每一步的条件概率分布 $p(x_{i}∣x_{1:i−1})$ ,将其幂变为 $1/T$

引言篇 token 翻译

NLP 中将 token 直译成“令牌”似乎并不合适,没有表达出原意,容易引起初学者的疑惑。
不得不承认,中文没有一个合适的词来翻译这个词(语言模型场景下)。为了能够达意,可以翻译成“词元”(抛砖引玉,可能有更合适的词)。
或者像 transformer 这个词一样,直接使用,不翻译。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.