网站建设培训需要多少钱,安卓优化大师hd,装修设计公司平台,网站建设都是需要什么软件一、说明 本文介绍语言句法中#xff0c;最可能的单词填空在self-attention的表现形式#xff0c;以及内部原理的介绍。 二、关于本文概述 在我之前的博客中#xff0c;我们研究了关于生成式预训练 Transformer 的完整概述#xff0c;关于生成式预训练 Transformer (GPT) 的… 一、说明 本文介绍语言句法中最可能的单词填空在self-attention的表现形式以及内部原理的介绍。 二、关于本文概述 在我之前的博客中我们研究了关于生成式预训练 Transformer 的完整概述关于生成式预训练 Transformer (GPT) 的博客- 预训练、微调和不同用例应用程序。以及有关所有仅解码器模型的解码策略的博客。 让我们看看如何使用 Transformer 的编码器仅编码器模型来构建语言模型 就 GPT 而言我们使用因果语言模型这意味着我们从左到右输入输入当我们预测当前单词时我们只查看历史记录而不查看之后的任何其他内容但这里 BERT 是用稍微不同的意图是我们想要捕捉文本的本质在这种情况下如果我们查看当前单词之后的单词这也可能有助于建立单词之间的关系即当前单词之前的单词以及就像它之后一样。 这就是 GPT 中发生的情况例如如果我们有一个句子 我们可以为下一个单词提供不同的输出这非常适合文本生成等任务并且这在当前一代的 LLM 中比这些仅编码器模型如 BERT更流行 - 我们知道目前大多数大规模 LLM大约是仅解码器模型或仅编码器-解码器模型。 诸如命名实体识别 (NER) 之类的任务怎么样在这种情况下我们可能需要依赖当前单词之后可能出现的单词来决定它是什么类型的 NER。在这里我们需要进行双向表示或交互例如“我从德里去了果阿”。在这种情况下“前往果阿”也可能有助于确定德里的 NER 位置。因此这就是我们可以查看当前单词两侧的单词的动机如果我们查看像“主语宾语动词”这样的语言其中宾语与两侧的主语和动词都有关系。或者“主语动词宾语”其中动词与主语和宾语有关系。 假设我们有填空的任务 -
— — — — — 已将其新操作系统运送到 — — — — 手机上。 在这种情况下根据空白后面的所有内容 - 我们可以预测它是一个已经发货的公司名称并且它必须是compnay。因此此类任务需要双方的上下文因此研究允许我们使用双方输入的模型是有意义的这也是 BERT 背后的基本思想。那么我们如何从输入数据的两侧启用上下文建模为此他们提出了掩码语言建模。在GPT 的情况下我们从左到右获取上下文该建模称为因果语言建模。 我们需要查看两个方向周围的单词来预测屏蔽单词
i — — — — — 读取 — — — — -[eos] 使用两个方向的上下文单词预测屏蔽单词如 CBOW。这称为掩码语言建模 (MLM)。现在我们不能使用变压器的解码器组件因为它本质上是单向的。所以这里我们可以使用变压器的编码器部分。现在问题被转换为 我们预测的掩码是相互独立的即如果我们屏蔽了第二个和第八个标记并且我们在第二个标记处预测了某些内容那么我们不会使用该信息来预测第八个标记。对于第 8 个标记我们仍然认为第二个标记仍然是掩码对于第二个标记我们仍然认为第 8 个标记是掩码。我们可以将一个句子视为 20 个标记 - 一些 3 个标记被屏蔽我们需要通过仅查看剩余的 17 个标记来预测这 3 个标记并且我们不会按顺序执行此操作即我们不会先预测第二个标记然后再预测被屏蔽的第 8 个令牌现在识别 18 个令牌而不是最初可用的 17 个令牌。因此仅使用 17 个令牌即可预测一切。 现在让我们看看是否可以屏蔽一些输入并为这些屏蔽的单词生成输出。在仅解码器模型因果语言建模中我们看到当前单词焦点之后的单词看不到并且它们被屏蔽以进行预测第 i 个单词之后的单词或标记以顺序方式屏蔽其中具有无穷大值的超训练矩阵使用 - 请参阅之前的博客。 这里我们也可以屏蔽掉一些单词看看屏蔽掉的单词是什么我们知道在自注意力层中每个单词都会关注单词序列中的每个其他单词。我们的目标是随机屏蔽一些单词并预测被屏蔽的单词 掩码不是连续的但它们出现在随机位置我们将它们的位置放置为无穷大值它们对注意力权重解决方案的贡献为零。 我们可以像 CLM 中那样屏蔽要屏蔽的单词的注意力权重吗 假设我们要屏蔽第一个单词和第四个单词的单词或标记——我们可以有这样的掩码矩阵。我们可以像下面这样引入Mask吗没有为什么 因为我们希望模型了解注意空白是什么这样它们就不会从方程中删除。我们可以将掩码视为破坏原始输入文本的噪声。然后模型的任务是恢复原始令牌。这类似于自动编码器的去噪目标。因此掩码语言建模MLM也被称为预训练去噪目标。因此我们不能使用屏蔽自我注意力但我们可以使用称为屏蔽令牌的特殊令牌即这些成为词汇表中的单词之一与我们所使用的单词相同例如我、你、我等所以这里是“屏蔽”也是词汇表中的单词之一。 变压器的输入是带有随机屏蔽数据的序列这会将其传递给编码器编码器将在每一层生成 T 个表示直到最后一层。在最后一层的适当点我们想要预测实际的单词是什么。 假设我们只有 1 层——在这一层的末尾我们可以通过这种方式看到分布。 请注意仅预测一组 M 个屏蔽词因此计算这些预测的交叉熵损失。通常输入序列中 15% 的单词被屏蔽。非常高的掩蔽会导致服务器丢失上下文信息并且模型将无法学习良好的表示。另一方面很少的掩蔽需要很长时间才能收敛因为梯度值相对较小并且使训练效率低下。但是可以根据模型大小、掩蔽方案和优化算法进行权衡。 多层双向变压器编码器架构 BERT 基础模型包含 12 层每层 12 个注意力头 输入序列中的屏蔽词15%被均匀采样。其中80% 被替换为 [mask] token10% 被替换为随机单词其余 10% 保留原样。为什么 假设我们有 200 个标记的输入序列并且我们选择其中 15% 被屏蔽那么 200 个30 个单词中的 15% 将被屏蔽。在这 30 个单词中其中 80%24 个单词被替换为mask token 这 3 个单词30 个单词中的 10% 被随机单词替换另外 10%30 个单词3 个单词被保留为原样 —我们为什么要在保留方面这样做 在适应下游任务时特殊掩码标记不会成为数据集的一部分。 我们还有一个目标函数称为
三、下一句话预测NSP 现在让我们用一对句子 (A,B) 和指示句子 B 是否自然地跟随句子 A 的标签来扩展输入。
输入句子A
输入设置B
标签 : 下一个 我们这里有特殊的标记如“CLS”句子开头和“SEP”分隔符。原始序列将变为 T 2 个令牌因此每一层的输出也将具有 T2 表示。我们的目标是检查第二个句子是否实际上是第一个句子的下一个句子。因此首先我们将采用属于“CLS”的第一个表示从这里我们将尝试解决简单的二元任务即第二个句子是否实际上是第一个句子的下一个句子。那么我们如何创建用于创建此任务的训练数据呢我们已经有了带有 a、b 的自然句子它们是句子对和代表下一个句子标志的标签 (1/0)。在训练过程中我们传递两个输入ab和一个标签它的工作是最大化概率1/0。总的来说我们看到了两个目标第一个目标是使用词汇表上的交叉熵损失正确预测屏蔽标记第二个目标是下一个句子预测这只是一个二元分类问题。 在 50% 的情况下句子 B 是句子 A 之后的自然句子。在 50% 的情况下句子 B 是来自标记为 NotNext 的语料库的随机句子。使用 NSP 目标进行预训练可显着提高问答 (QA) 和类似任务的性能。 这是早期的发现但一年后这个 NSP 目标对下游任务并没有多大帮助之后通常会被删除 并且在 BERT 的衍生版本中只使用了屏蔽语言建模目标。 我们将有令牌嵌入其中我们得到 |v| 的所有单词的嵌入矩阵 x dmodelv — 是词汇表dmodel 是维度。除此之外我们还为每个分段提供了分段嵌入其中它是 2 x dmodel。我们还有位置嵌入将所有这些加起来为变压器提供一个统一的嵌入。 因此在上面我们可以看到很多编码器层其中最后一层将包含最终表示的详细信息。我们将对下一句预测目标进行预测并且还将预测屏蔽语言模型。所以这里的总损失是语言建模的损失下一个句子预测的损失。 四、预训练和参数 数据集 模型架构 参数计算 我们的词汇量为 30000每个单词或标记都以 768 个维度表示。 有 3 个矩阵 (Wk, Wq, Wv) 每个矩阵都有 768 维的输入12 个注意力头生成 - 12 … 64 维嵌入当我们连接它们时我们将得到 768 维。对于 Wo 矩阵一旦连接我们就得到了 768 x 768 ~0.6M 的线性层。 在 FFN 中768 向量将转换为 3072而这个 3072 将转换回 768然后我们就有偏差 (3072 768) 。
五、适应下游任务 现在我们已经完成了预训练输入来自维基百科语料库25 亿个单词和书籍语料库8 亿个单词其中我们有长度为 512 的句子或段落我们将整个内容作为输入其中一些单词被屏蔽我们知道这些屏蔽单词是什么因为它们存在于维基百科中并且我们知道正确的输出是什么样的。此训练是通过大量训练示例完成的并非针对任何特定任务问答、NER 等进行训练。这种预训练只是为了学习语言而进行的。现在我们想使用这个预训练模型我们相信它现在对语言有了更好的理解。鉴于这已经学到了很多关于我们的语言的知识我们只是希望通过合理数量的标记数据我们将在所有下游任务上获得良好的性能。当时有两种流行的方法。 六、分类基于特征 现在假设我们已经对模型进行了预训练我们有一个称为“CLS”的特殊标记当我们在每一层计算 CLS 的后续表示时它当然会看到输入句子中的所有单词因为它正在采取加权注意力。如果我们将其用于下游任务则句子中不会有任何掩码。我们可以假设“CLS”充当聚合器因为它本身没有任何意义因为它是一个特殊的代币。 假设我们已经通过情感分析对评论数据进行了标记并且希望在情感分析这一下游任务中使用这些预先训练的知识。 获取这个输入序列并将其传递给 BERT这句话的长度小于 512如果需要可以进行适当的填充在 12 层 BERT 之后它给出了所有标记的最终结果表示 - 我们只采用 CLS 标记的表示我们认为这是输入序列的丰富表示因为这种表示是基于经过训练的 BERT 模型构建的该模型已经看到了大量语言数据因此它知道语言交互是什么以及如何捕获它们然后给出一种表示。在传统的机器学习中我们有特征表示然后在其之上我们使用机器学习模型——我们可以在这里使用相同的想法只不过特征表示来自 BERT。我们从最后一层获取 CLS 最终表示并将其用作输入 - 这种表示优于仅连接单个单词的表示例如 word2vec或者例如逻辑回归或任何其他分类模型。 BERT的所有参数都被冻结只有分类头从头开始训练。 在上面的身体部分 - 我们没有在这里训练任何东西因为训练已经完成了。整个过程是静态的因为我们只进行一次训练然后将 X 与所有训练数据结合起来转换为 X 个特征然后忘记我们之前的 BERT。当然当我们在测试时有新的评论时我们将转换为 X 特征并将该特征作为输入传递给 ML 模型。 分类 微调 取一个长度小于 512 的句子并将其作为 BERT 的输入如果需要可以使用适当的填充 添加分类头同样可以是任何合适的 ML 模型。随机初始化分类头的参数。 现在训练整个模型包括新数据集预训练 BERT 的参数。但请注意我们不会屏蔽输入序列中的单词这就是我们在预训练期间用随机单词替换 10% 的屏蔽单词的原因。据观察分类头中使用的模型比基于特征的方法使用更少数量的标记训练样本来快速收敛。 我们将从整个网络反向传播——我们可以训练这里引入的新参数768 x 2并且还学习整个 Wq、Wk、Wv——实际上这里发生的事情是网络中的所有内容开始专门用于该任务情感分析意味着它将尝试调整参数并在这项任务上做得很好。我们之前讨论的另一种方法将冻结上面显示的蓝色块并且它不会通过该块进行反向传播并且该块将保持静态。 S和E都是可学习的参数。 如果觉得有帮助请点赞或者评论❤️
参考
大型语言模型简介 —讲师Mitesh M. Khapra