电子商务网站建设商城网站深圳家具定制
电子商务网站建设商城网站,深圳家具定制,dedecms网站入侵,做个人博客的网站一、说明 变形金刚是一种深度学习架构#xff0c;为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段#xff0c;但也有点复杂。截至今天#xff0c;变形金刚上有很多很好的资源#xff0c;那么为什么要再制作一个呢#xff1f;两个原因#xff… 一、说明 变形金刚是一种深度学习架构为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段但也有点复杂。截至今天变形金刚上有很多很好的资源那么为什么要再制作一个呢两个原因 我精通自学根据我的经验能够阅读不同的人如何描述相同的想法极大地增强了理解。我很少读一篇文章并认为它的解释足够简单。技术内容创作者总是倾向于过度复杂化或解释不足的概念。应该很清楚没有什么是火箭科学甚至火箭科学也不是。你可以理解任何事情你只需要一个足够好的解释。在本系列中我试图做出足够好的解释。 本系列将尝试为那些对人工智能几乎一无所知的人和那些知道机器学习的人提供一个合理的指导。在本系列中我打算假设你知道的比我在准备本系列时阅读的变形金刚文章要精炼。 此外我将结合直觉、数学、代码和可视化使该系列的设计像糖果店一样——适合每个人。考虑到这是一个相当复杂的领域的高级概念我会冒着你的想法的风险“哇这太慢了停止解释明显的东西”但如果你对自己说“他到底在说什么 二、变形金刚值得你花时间吗 有什么大惊小怪的真的有那么重要吗好吧因为它是世界上一些最先进的人工智能驱动技术工具例如GPT等的基础所以它可能是。 尽管与许多科学进步一样之前已经描述了一些想法但对架构的实际深入完整的描述来自“注意力是你所需要的一切”论文该论文声称以下内容是“简单的网络架构”。 图片来自 原始论文 如果你像大多数人一样你不会认为这是一个简单的网络架构。因此我的工作是努力当你读完这个系列时你会想这仍然不简单但我确实明白了。 那么这个疯狂的图表到底是什么 我们看到的是一个深度学习架构这意味着这些方块中的每一个都应该被翻译成一段代码所有这些代码一起将做一些事情到目前为止人们真的不知道该怎么做。 变压器可以应用于许多不同的用例但最著名的可能是自动聊天。一个可以谈论许多主题的软件就好像它知道很多一样。在某种程度上类似于矩阵。 我想让人们更容易只阅读他们真正需要的东西这样这个系列就会根据我认为变形金刚故事应该被讲述的方式进行分解。第一部分在这里它将是关于架构的第一部分 - 输入。 三、输入
龙从蛋中孵化婴儿从肚子里冒出来人工智能生成的文本从输入开始。我们都必须从某个地方开始。 什么样的输入这取决于手头的任务。如果你正在构建一个语言模型一个知道如何生成相关文本的软件变形金刚架构在各种场景中很有用输入是文本。尽管如此计算机能否接收任何类型的输入文本、图像、声音并神奇地知道如何处理它其实不然。
我相信你认识一些不太擅长文字但擅长数字的人。计算机就是这样。它不能直接在CPU/GPU计算发生的地方中处理文本但它肯定可以处理数字正如您很快就会看到的将这些单词表示为数字的方式是秘诀中的关键成分。 图片来自VaswaniA.等人的原始论文。
3.1 分词器 标记化是将语料库您拥有的所有文本转换为机器可以更好地利用的较小部分的过程。假设我们有一个包含 10,000 篇维基百科文章的数据集。我们获取每个字符并对其进行转换标记化。有很多方法可以标记文本让我们看看OpenAI的标记器如何使用以下文本来实现
“许多词映射到一个令牌但有些则不是不可分割。
像表情符号这样的 Unicode 字符可以拆分为许多包含基础字节的标记
通常彼此相邻的字符序列可以组合在一起1234567890
这是标记化结果 图片来自OpenAi取自此处 如您所见大约有 40 个单词取决于您的计数方式标点符号。在这 40 个单词中生成了 64 个令牌。有时标记是整个单词如“Manywordsmap”有时它是一个单词的一部分如“Unicode”。为什么我们要把整个单词分成更小的部分为什么还要分句我们本可以让他们保持联系。最后无论如何它们都会转换为数字那么如果令牌的长度是 3 个字符还是 30 个字符计算机的观点有什么区别 令牌有助于模型学习因为文本是我们的数据所以它们是数据的特征。设计这些功能的不同方法将导致性能变化。例如在句子“滚出去!!!!!!”中我们需要确定多个“”是否与一个不同或者它是否具有相同的含义。从技术上讲我们可以将句子作为一个整体但是想象一下单独观察人群与每个人在哪种情况下你会得到更好的见解 现在我们有了令牌我们可以构建一个查找字典使我们能够摆脱单词并使用索引数字。例如如果我们的整个数据集是句子“上帝在哪里”。我们可以构建这种词汇表它只是单词的键值对和表示它们的单个数字。我们不必每次都使用整个单词我们可以使用数字。例如{其中0是1上帝 2}。 每当我们遇到“是”这个词时我们都会用1代替它。有关更多代币化器的示例您可以查看Google开发的令牌器或使用OpenAI的TikToken玩更多内容。
3.2 从字到矢量 直觉 我们在将单词表示为数字的旅程中取得了很大进展。下一步是从这些标记生成数字语义表示。为此我们可以使用一种名为Word2Vec的算法。细节目前不是很重要但主要思想是你取一个向量我们现在将简化考虑一个常规列表任何大小的数字论文的作者使用了512这个数字列表应该代表一个单词的语义含义。想象一个数字列表如[-2,4-3.7,41...-0.98]它实际上保存了一个单词的语义表示。它应该以这样的方式创建如果我们在 2D 图上绘制这些向量则相似项将比不同项更接近。 正如你在图片中看到的从这里拍摄“婴儿”接近“aw”和“睡着”而“公民”/“州”/“美国”也在某种程度上组合在一起。 *2D词向量又名2个数字的列表即使对于一个单词也无法保持任何准确的含义如前所述作者使用了512个数字。由于我们无法绘制具有 512 个维度的任何内容因此我们使用一种称为 PCA 的方法将维度数量减少到两个希望保留大部分原始含义。在本系列的第 3 部分中我们将深入了解这种情况是如何发生的。 Word2Vec 2D演示文稿 - 图片来自Piere Mergret。 它有效您实际上可以训练一个模型该模型将能够生成具有语义意义的数字列表。计算机不知道婴儿是一个尖叫的剥夺睡眠的超级甜蜜的小人但它知道它通常会在“aw”周围看到婴儿这个词比“国家”和“政府”更常见。我会写更多关于这种情况是如何发生的但在那之前如果你有兴趣这可能是一个查看的好地方。 这些“数字列表”非常重要因此它们在 ML 术语中有自己的名称即嵌入。为什么要嵌入因为我们正在执行嵌入如此有创意这是将术语从一种形式单词映射到另一种形式数字列表的过程。这些是很多。 从这里开始我们将调用单词嵌入正如所解释的那样它们是数字列表这些数字包含它被训练表示的任何单词的语义含义。
3.3 使用 Pytorch 创建嵌入 我们首先计算我们拥有的唯一代币的数量为简单起见假设为 2。嵌入层的创建是 Transformer 体系结构的第一部分就像编写以下代码一样简单
*一般代码备注 — 不要将此代码及其约定视为良好的编码风格它是专门为使其易于理解而编写的。
代码
import torch.nn as nnvocabulary_size 2
num_dimensions_per_word 2embds nn.Embedding(vocabulary_size, num_dimensions_per_word)print(embds.weight)
---------------------
output:
Parameter containing:
tensor([[-1.5218, -2.5683],[-0.6769, -0.7848]], requires_gradTrue) 我们现在有一个嵌入矩阵在这种情况下是一个 2 x 2 矩阵由从正态分布 N0,1 派生的随机数生成例如均值为 0 且方差为 1 的分布。 请注意requires_gradTrue这是Pytorch语言表示这4个数字是可学习的权重。它们可以并且将在学习过程中进行自定义以更好地表示模型接收的数据。 在更现实的情况下我们可以期待更接近 10k x 512 的矩阵它以数字表示我们的整个数据集。
vocabulary_size 10_000
num_dimensions_per_word 512embds nn.Embedding(vocabulary_size, num_dimensions_per_word)print(embds)
---------------------
output:
Embedding(10000, 512) *有趣的事实我们可以想到更有趣的事情你有时会听到语言模型使用数十亿个参数。这个初始的不太疯狂的层包含 10_000 x 512 个参数即 5 万个参数。这个LLM大语言模型是困难的东西它需要大量的计算。 这里的参数是这些数字-1.525 等的一个花哨的词只是它们可能会发生变化并且在训练期间会发生变化。 这些数字是机器的学习这就是机器正在学习的。稍后当我们给它输入时我们将输入与这些数字相乘我们希望得到一个好的结果。你知道什么数字很重要。当你很重要时你会得到自己的名字所以这些不仅仅是数字这些是参数。 为什么使用多达 512 而不是 5因为更多的数字意味着我们可以产生更准确的含义。太好了别想小了那就用一百万吧为什么不呢因为更多的数字意味着更多的计算更多的计算能力更高的训练成本等等512被发现是中间的好地方。
3.4 序列长度 在训练模型时我们将把一大堆单词放在一起。它的计算效率更高并且有助于模型学习因为它将更多的上下文放在一起。如前所述每个单词都将由一个 512 维向量包含 512 个数字的列表表示每次我们将输入传递给模型也称为正向传递时我们将发送一堆句子而不仅仅是一个。例如我们决定支持 50 个单词的序列。这意味着我们将在一个句子中取 x 个单词如果 x 50 我们拆分它并只取前 50 个如果 x 50我们仍然需要大小完全相同我很快就会解释为什么。为了解决这个问题我们在句子的其余部分添加了填充这是特殊的虚拟字符串。例如如果我们支持一个 7 个单词的句子并且我们有句子“上帝在哪里”。我们添加 4 个填充因此模型的输入将是“上帝在哪里PAD PAD PAD PAD”。实际上我们通常会添加至少 2 个特殊的填充以便模型知道句子的开始位置和结束位置因此它实际上是类似于“StartOfSentence上帝在哪里PAD PAD EndOfSentence”。 * 为什么所有输入向量的大小必须相同因为软件有“期望”矩阵有更严格的期望。你不能做任何你想要的“数学”计算它必须遵守某些规则其中一个规则是足够的向量大小。
3.5 位置编码 直觉 我们现在有一种方法可以在我们的词汇表中表示和学习单词。让我们通过对单词的位置进行编码来使其变得更好。为什么这很重要因为如果我们取这两句话
1. 男人玩我的猫 2.猫和我的男人一起玩 我们可以使用完全相同的嵌入来表示这两个句子但句子的含义不同。我们可以想到这样的数据其中顺序无关紧要。如果我计算某事的总和我们从哪里开始并不重要。在语言中——顺序通常很重要。嵌入包含语义含义但没有确切的顺序含义。它们在某种程度上确实保持了秩序因为这些嵌入最初是根据某种语言逻辑创建的婴儿看起来更接近睡眠而不是状态但同一个词本身可以有多个含义更重要的是当它处于不同的上下文中时它的含义不同。 将单词表示为没有顺序的文本是不够的我们可以改进这一点。作者建议我们在嵌入中添加位置编码。我们通过计算每个单词的位置向量并将其相加求和两个向量来做到这一点。位置编码向量必须具有相同的大小以便可以添加它们。位置编码的公式使用两个函数正弦表示偶数位置例如第 0 个单词、2d 单词、第 4 个、第 6 个等和余弦表示奇数位置例如第 1、3、5 个等。 可视化 通过查看这些函数红色的sin蓝色的余弦你也许可以想象为什么特别选择这两个函数。函数之间存在一些对称性就像单词和它前面的单词之间存在对称性一样这有助于建模表示这些相关位置。此外它们输出从 -1 到 1 的值这是非常稳定的数字它们不会变得超大或超小。 Formula image from the original paper by Vaswani, A. et al. 在上面的公式中上行表示从 0 i 0 开始的偶数并继续为偶数 2*1、2*2、2*3。第二行以相同的方式表示奇数。 每个位置向量都是一个 number_of_dimensions在我们的例子中为 512向量数字从 0 到 1。
代码
from math import sin, cos
max_seq_len 50
number_of_model_dimensions 512positions_vector np.zeros((max_seq_len, number_of_model_dimensions))for position in range(max_seq_len):for index in range(number_of_model_dimensions//2):theta pos / (10000 ** ((2*i)/number_of_model_dimensions))positions_vector[position, 2*index ] sin(theta)positions_vector[position, 2*index 1] cos(theta)print(positions_vector)
---------------------
output:
(50, 512)
如果我们打印第一个单词我们看到我们只能互换得到 0 和 1。
print(positions_vector[0][:10])
---------------------
output:
array([0., 1., 0., 1., 0., 1., 0., 1., 0., 1.])
第二个数字已经更加多样化。
print(positions_vector[1][:10])
---------------------
output:
array([0.84147098, 0.54030231, 0.82185619, 0.56969501, 0.8019618 ,0.59737533, 0.78188711, 0.62342004, 0.76172041, 0.64790587]) *代码灵感来自这里。 我们已经看到不同的位置导致不同的表示。为了将部分输入作为一个整体下图中以红色平方我们将位置矩阵中的数字添加到输入嵌入矩阵中。我们最终得到一个与嵌入大小相同的矩阵只是这次数字包含语义顺序。 图片来自VaswaniA.等人的原始论文。
四、总结 本系列的第一部分红色矩形到此结束。我们讨论了模型获取其输入。我们看到了如何将文本分解为其特征标记将它们表示为数字嵌入以及为这些数字添加位置编码的智能方法。 下文将将重点介绍编码器块第一个灰色矩形的不同机制每个部分描述一个不同颜色的矩形例如多头注意力添加和规范等。陈玛格丽特
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89226.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!