今天在读论文的过程中,有些基础概念还是看的头疼,就想到让GPT-4给我做解释,效果非常好。于是想写一篇文章解读一下大模型训练中的基本概念,让各位小白同学们对大模型背后的原理有更好的了解。

【小白科普】从信息论到大模型 - 图1

信息论与熵

信息论是一门研究信息如何传输、存储、处理和量化的学科。它起源于20世纪40年代,由克劳德·香农(Claude Shannon)提出。信息论的核心概念之一是熵(entropy),它用于衡量信息的不确定性或随机性。熵的计算公式基于事件发生的概率。假设我们有一个离散随机变量X,其可能取值为{x1, x2, …, xn},对应的概率分布为{p1, p2, …, pn},其中pi是事件xi发生的概率。那么随机变量X的熵H(X)可以通过以下公式计算:

H(X) = -∑[p(x) * log2(p(x))]

其中,求和符号∑表示对所有可能的事件x进行求和。

在这个公式中,我们将每个事件发生的概率p(x)乘以该概率的对数(以2为底),然后将所有结果相加并取负值。这个公式的结果是一个非负实数,表示信息的熵。

举个简单的例子。假设我们有一个普通的硬币,正面(H)和反面(T)出现的概率各为50%。我们可以计算这个硬币的熵:

H(硬币) = -[p(H) log2(p(H)) + p(T) log2(p(T))] = -[0.5 log2(0.5) + 0.5 log2(0.5)] = 1

这个结果告诉我们,在掷这个普通硬币时,信息的不确定性(熵)为1比特(bit)。

熵的计算方法适用于各种离散随机变量,包括自然语言处理、通信系统和密码学等领域。通过研究信息的熵,我们可以更好地了解自然语言中的不确定性,从而有助于指导大语言模型的设计和优化。

交叉损失函数

在神经网络训练过程中,通常会使用到一种名为交叉熵损失函数(cross-entropy loss function)的技术。这个损失函数基于香农的信息论中的熵概念,用于衡量模型预测与真实结果之间的差异。通过最小化这个损失函数,模型可以不断调整参数以更好地学习文本数据中的语言规律。

交叉熵损失函数是用于衡量神经网络模型预测与真实答案之间差距的一种评估方法。在分类问题中,我们通常使用交叉熵损失函数来计算损失。下面是交叉熵损失函数的计算公式:

损失 = -∑[y_true * log(y_pred)]

其中,y_true表示真实答案,y_pred表示模型预测的答案。这个公式对每个可能的类别求和。

让我们通过一个简单的二分类问题(例如,猫和狗的分类)来详细解释一下这个公式。假设我们有一个图像,真实的标签是猫(用向量表示为[1, 0],表示猫的概率为1,狗的概率为0)。模型对这个图像的预测输出为[0.8, 0.2],表示模型认为这个图像是猫的概率为0.8,是狗的概率为0.2。

根据交叉熵损失函数的公式,我们可以计算损失:

损失 = -[(1 log(0.8)) + (0 log(0.2))] = -[log(0.8)] ≈ 0.22

这个结果表示模型预测与真实答案之间的差距。在训练过程中,神经网络会试图通过调整参数来最小化这个损失。

需要注意的是,交叉熵损失函数只适用于概率分布。因此,在将模型预测的输出传递给损失函数之前,通常需要对输出进行归一化处理,使其表示为概率分布。在分类问题中,这通常通过使用softmax函数来实现。

自监督学习

在训练大型语言模型(如GPT-3)时,我们确实使用交叉熵损失函数。这些模型主要是通过自监督学习进行训练的,这意味着它们利用输入数据本身作为监督信号。

对于大型语言模型的训练,我们使用的训练集通常是包含大量文本的语料库。在训练过程中,模型的任务是根据给定的上下文预测下一个单词。换句话说,模型在学习如何生成与输入数据相似的文本序列。

让我们以一个简单的例子来说明这个过程。假设我们有一个句子:“今天天气真好。”在训练模型时,我们会将这个句子划分为一系列词汇对。每个词汇对包含一个输入词汇和一个目标词汇,如下所示:

  1. (今天,天气)

  2. (今天天气,真)

  3. (今天天气真,好)

这里,输入词汇是上下文,目标词汇是我们希望模型预测的下一个词汇。在每个训练步骤中,模型会根据输入词汇生成预测输出,然后计算预测输出与目标词汇之间的交叉熵损失。通过最小化这个损失,模型可以逐渐学会如何在给定上下文的情况下生成合理的文本序列。

需要注意的是,这里的“标准答案”其实是来自训练数据本身的。模型在学习如何预测接下来的词汇时,会尝试模仿训练数据中的语言规律和结构。

温度与熵

调用过GPT API的同学应该都会注意到一个叫做temperature(温度)的参数。与熵类似,温度既是一个热力学概念,又是一个信息学概念。

在神经网络模型中,温度参数可以用来调整输出概率分布的熵。通过在模型输出层之前的激活值除以一个温度参数(通常用符号τ表示),我们可以改变输出概率分布的形状。

具体来说:

  1. 当温度参数τ接近0时,输出概率分布变得非常“尖锐”,最大概率对应的事件几乎是唯一可能的输出。这将导致输出变得非常确定性,熵降低,减少随机性。

  2. 当温度参数τ为1时,输出概率分布保持不变。这意味着模型将按照其原始预测进行抽样,熵保持不变。

  3. 当温度参数τ大于1时,输出概率分布变得更加“平滑”,各个事件的概率相对更加接近。这将导致输出变得更加随机,熵增加,增加多样性。

本文由笔者与chatgpt共同完成,配图来自Midjourney