datawhalechina / so-large-lm Goto Github PK
View Code? Open in Web Editor NEW大模型基础: 一文了解大模型基础知识
Home Page: https://datawhalechina.github.io/so-large-lm
大模型基础: 一文了解大模型基础知识
Home Page: https://datawhalechina.github.io/so-large-lm
原文
它被用来训练T5和Gopher模型。给定一个序列$x_{1:L}$,一个分词器$T$是$p\left(x_{1: L}\right)=\prod_{(i, j) \in T} p\left(x_{i: j}\right)$的一个集合。这边给出一个实例:
在这个例子中,训练数据是字符串"$𝖺𝖻𝖺𝖻𝖼$"。分词结果
似然值
请问一下 2/3⋅2/3⋅1/3 如果三个分数相乘,那么结果应该是 4/27,那么4/9到底是怎么来的,你最好解释一下。
语言模型也可以做生成任务。语言模型是一种概率模型,它可以根据给定的上下文来预测下一个词的概率分布。我们可以使用语言模型来生成一个序列,其中每个元素都是根据前面元素的条件概率分布来生成的。最纯粹的方法是从语言模型$p$中以概率$p(x_{1:L})$进行采样。表示为:
例如,如果我们的语言模型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$"的概率分布:
然后,我们根据"$x_1$"的概率分布和语言模型$p$的条件概率分布来采样得到"$x_2$"的概率分布:
接下来,我们根据"$x_1$"和"$x_2$"的概率分布以及语言模型$p$的条件概率分布来采样得到"$x_3$"的概率分布:
继续这个过程,我们可以得到"$x_4$"和"$x_5$"的概率分布:
最后,我们可以根据"$x_4$"和"$x_5$"的概率分布来生成新的序列:"$x_1:x_2:x_3:x_4:x_5$":
然而,如果我们仅将概率提高到
$\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$是一个离散的样本空间。
给定的概率分布是:
我们想要知道在温度$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$,那么这个新样本对应的概率将乘以原概率的(
所以,我们可以计算出:
$\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}$
具体来说,这个温度参数会应用于每一步的条件概率分布
NLP 中将 token 直译成“令牌”似乎并不合适,没有表达出原意,容易引起初学者的疑惑。
不得不承认,中文没有一个合适的词来翻译这个词(语言模型场景下)。为了能够达意,可以翻译成“词元”(抛砖引玉,可能有更合适的词)。
或者像 transformer 这个词一样,直接使用,不翻译。
课程中没有提AI模型的成本消耗计算,之前看到的国金证券出的研究报告,提出的测算方法,可以参考。
AI模型的成本主要由训练成本和推理成本构成:
AI模型训练成本估算:
训练成本=AI模型训练所需的浮点运算次数/AI算力集群单位时间有效浮点运算次数*AI算力集群单位时间价格
AI模型训练所需浮点运算次数计算:
AI模型训练所需浮点运算次数=6 * 模型参数规模 * 训练集大小
**AI算力集群单位时间有效浮点运算次数:**在利用GPU进行AI模型训练时,GPU算力除了用以训练模型,还被用以通信、训练数据读写等,因此有效浮点运算次数才能衡量AI算力集群的算力水平。
AI模型推理成本估算:
推理成本=AI模型推理所需的浮点运算次数/AI算力集群单位时间有效浮点运算次数*AI算力集群单位时间价格
AI模型推理所需浮点运算次数计算:
AI模型推理所需浮点运算次数=6 * 模型参数规模 * 训练集大小
具体应用场景中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)* 解决用户需求的平均对话轮次
详细的成本计算案例可参考报告
这个 repo 似乎不是那么 right,对比了下其引用的 课程,
大模型法律对应是是课程中的 Scalling Laws 吗?
如果是,那就太错了,人家说的是 模型 scaling 定律~
引用的论据或者图,能否标注一下来源?
上下文向量表征 (Contextual Embedding): 作为模型处理的先决条件,其关键是将词元序列表示炜相应的上下文的向量表征:
”表示炜相应“应该是“表示为响应”
该链接指向论文为p tuning v2,但[ ]内为"prompt tuning v2“。另外,p tuning v2与prefix tuning的联系更为”密切“(可参照p tuning v2论文摘要),建议考虑将该链接及与之相关内容归置到 7.2.3.3Prefix Tuning一节
假设我们有一个词符集的词汇表$V$。语言模型$p$为每个词元序列(此处应为“词符序列”,与上下文术语保持一致)$x_1, x_2, \dots, x_L\in V$ 分配一个概率(介于0和1之间的数字)。
这里我们是直接给出了计算的结果,对于计算具体方法我们在下一节的概率的链式法则给出具体的计算公式。(建议”概率的链式法则“给出英文原名注解(Chain rule of probability))
需要统一全文”词符“和”词元“的术语,或者说明不区分使用这两个词,以免导致混淆。
自我感觉信息熵解释不太清楚,所以自己写了一个例子:
● 熵的计算公式: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)。可见,在硬币不均匀的情况下,不确定性更小,只猜概率大的那面猜中的可能性更大。
这样理解没有问题吧
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.