LLM 工程师入门 生成式AI的繁难指南

  • 电脑网络维修
  • 2024-11-15

作者 | Miguel Grinberg

编译|岳扬

毫无不懂,随着大言语模型[1](LLMs)的资讯不时出如今咱们的日常生存,生成式人工自动[2](GenAI)曾经成为了咱们无法漠视的存在。或许你早已体验过 ChatGPT[3] ,甚至把它当作日常生存的小助理了。

面对这场 GenAI 改革,许多人心中都有一个不懂:这些模型外表上的自动(intelligence)终究源自何处? 本文将试图用深刻易懂的言语,不触及复杂数学公式,来揭秘生成式文本模型的上班原理,让你看法到它们并非魔法,而是计算机算法的产物。

01 What Does An LLM Do?

首先,我要廓清人们对大言语模型上班原理的一个严重曲解。人们通常以为,这些模型能够回答咱们的疑问或与咱们启动对话,但实践上,它们所能做的是基于咱们提供的文本输入,预测下一个单词(更准确地说,是下一个 token)。

如今,让咱们一步步揭开 LLMs 奥秘面纱面前的“真面目”,从 token 开局探求。

token 是大言语模型(LLM)处置文本时的基本单元。 只管咱们可以便捷地将 token 视为单个单词,但 LLM 的目的是以最高效的方式对文本启动编码。因此在很多状况下,token 或许是比单个单词短或长的字符序列。 标点符号和空格雷同以 token 的方式存在,它们可以独自示意为一个 token,也可以与其余字符组合。

LLM 所经常使用的一切 token 构成了它的词汇表(vocabulary),这个词汇表能够用来表白一切或许的文本内容。大言语模型通常驳回 BPE(Byte Pair Encoding)[4]算法来依据输入数据集创立 token 词汇表。以 GPT-2 言语模型[5](开源模型,可供深化钻研)为例,其词汇表领有 50,257 个 token。

每个 token 在 LLM 的词汇表中都有一个唯一无二的标识符(通常是一个数字编号)。LLM 经过火词器将惯例文本字符串转换为一系列 token 编号。 假设您对 Python 有所了解,并且想要尝试对 token 启动操作,可以装置 OpenAI 提供的 tiktoken 软件包:

而后请在 Python 命令行中尝试以下操作:

在本试验中,咱们可以观察到,GPT-2 言语模型的词汇表中,token 464 对应的是单词"The",而 token 2068 则对应" quick",这个 token 包括了单词之前的空格。在该模型中,句号由 token 13 示意。

由于 token 是经过算法来选择的,因此咱们或许会遇到一些奇怪的状况,比如 GPT-2 会将单词"the"的以下三种方式编码为不同的 token:

BPE 算法并不会总是将整个单词间接转化为一个 token。理想上,那些经常使用频率较低的单词不会被独自示意为一个 token,而是须要经过多个 token 的组合来启动编码。下文这个例子,展现了 GPT-2 模型是如何用一个由两个 token 组成的序列来编码某个单词的:

1.2 Next Token Predictions

如上文所述,言语模型会依据给定文本预测之后或许出现的 token。假设用 Python 伪代码来展现这个环节,下文就演示了如何经常使用这些模型来预测下一个 token:

这个函数将用户输入的提醒词转换成的 token 列表作为模型输入。这里假定每个单词都是一个独自的 token。为了便捷起见,此处经常使用了每个 token 的文字方式,但实践上,每个 token 都是以数字的方式传递给模型的。

该函数前往的是一种特有的数据结构,它为词汇表中的每个 token 调配了一个在输入文本后紧接着出现的概率。假设经常使用的是 GPT-2 模型,那么前往的将是一个蕴含 50,257 个浮点数的列表(list),列表中每个数字代表相应 token 紧接着文本内容出现的概率。

在上述案例中,可以想象训练效果良好的言语模型会为"jumps"这个 token 调配一个较高的概率,以接续短语"The quick brown fox"[6]。雷同地,假设模型训练切当,那么像"potato"这样的随机单词接在这个短语前面的概率就会低很多,简直凑近于0。

为了做出正当的预测,言语模型须要经过一个训练环节。在训练时期,模型会学习少量文本内容。 训练完结后,模型就能应用它从训练文本中构建的特有数据结构,来计算给定 token 序列的下一个 token 的概率。

这与你的预期能否有所不同?我宿愿如今这个概念看起来不再那么奥秘了。

1.3 生生长文本序列

由于模型只能预测下一个出现的 token,因此要想让它生成完整的句子,就必定在 for 循环中屡次运转模型。每一次性循环迭代,都会依据前往的概率列表选用一个新的token。这个新 token 会被参与到下一次性循环迭代中模型的输入序列中,如此周而复始,不时继续到生成足够的文本为止。

上方是一个更完整的 Python 伪代码示例,演示了这个环节:

generate_text() 函数须要用户提供提醒词内容,比如可以是一个疑问。

tokenize() 这个辅佐函数担任将用户的提醒词转换成一系列 token,这个环节会用到 tiktoken 或相似的库。在 for 循环中,get_token_predictions() 函数担任调用AI模型,失掉下一个 token 的概率列表,与上文案例中形容的环节相反。

select_next_token() 函数的作用是依据模型给出的下一个 token 的概率列表,从候选 token 中筛选出最适合的 token 来放入输入序列。这个函数可以采取最便捷的方法,即选用概率最高的 token ,这在机器学习中被称为“greedy selection”。但是,为了参与生成文本的多样性,该函数通常会驳回更初级的战略,经常使用一个随机数生成器来选用 token,即使是在随机选用 token 的状况下,也会优先选用那些概率较高的 token。经过这种方式,即使是给出相反的输入提醒词,模型也能生成不同的文本照应。

为了进一步参与 token 选用环节的灵敏性,可以经过调整超参数来扭转 LLMs 前往的概率散布。 这些超参数为传递给文本生成函数的参数,能够协助用户控制 token 选用环节的“greediness”(译者注:模型在选用下一个 token 时所体现出的偏差性,是偏差于选用概率最高的token(即最或许的token),还是准许一些不太或许的token(即概率较低的token)被选中。)。假设你以前经常经常使用 LLMs,那么就很或许对 “temperature” 超参数比拟相熟。当 temperature 值较高时,token 的概率散布会被 flattened out(译者注:模型会思索更多的token,包括那些概率较低的token,使得概率散布愈加平均。),这样做的结果是,之前不太或许被选中的 token 如今有更大的时机被选中,从而使生成的文本看起来更具发明性和陈腐性。 除了 temperature 之外,还有两个超参数 top_p 和 top_k,它们区分用来控制在选用环节中高概率 token 被选中的数量。 经过调整这些超参数,可以进一步影响文本生成的格调和多样性。

一旦模型选定了下一个token,循环就会继续迭代。此时,模型将接纳到一个新的输入序列,这个输入序列的末尾参与了新 token(译者注:上一次性迭代选用的 token)。num_tokens 参数选择了循环的迭代次数,也就是生成文本的长度。生成的文本或许会(并且经常)在句子两边完结,由于大言语模型(LLM)并没有句子或段落的概念,它只是一一处置 token。为了防止生成的文本内容在句子两边就完结了,咱们可以将 num_tokens 参数视为一个最大数量值,而不是一个确切的 token 数量。在这种状况下,咱们可以在模型生成一个句号 token 时完结循环。

假设你曾经阅读到此处,并且了解了前文的一切内容,那么祝贺你,你如今对 LLMs 的上班原理曾经有了较为深化的了解。各位读者能否对更多技术细节感兴味?在下一节中,我将引见更多技术细节,同时尽量防止提及关于这项技术的复杂数学常识。

02 Model Training

可怜的是,要想不触及数学常识就讨论模型的训练环节,真实是件不容易的事。接上去,我将首先向大家展现一种十分便捷的训练方法。

咱们的指标是预测 token 前面或许出现的其余 tokens,因此,训练模型的简双方法就是从训练数据集中提取一切延续的 tokens 对,而后用这些数据来构建一个概率表(table of probabilities)。

让咱们用一个冗长的词汇表(vocabulary)和数据集(dataset)来做这件事。假定模型的词汇表有以下五个 token :

为了使这个例子扼要简要,咱们不把空格和标点符号算作 token。

咱们经常使用以下三个句子组成的训练数据集:

咱们可以制造一个 5x5 的表格,每个单元格记载的是该行 token 前面跟着该列 token 的频次。表格如下:

该数据集中,“I like” 出现了两次,“you like” 一次性,“like apples” 一次性,而 “like bananas” 则是两次。

如今咱们知道了训练数据集中每对 tokens 的出现频率,就可以推算出它们相互追随的概率。做法是将表格中每一行的数字转换成概率。比如,表格里“like”这一行,咱们看到它前面跟着 “apples” 一次性,跟着 “bananas” 两次。这象征着在“like”之后出现 “apples” 的概率是33.3%,而出现 “bananas” 的概率则是66.7%。

上方是计算出一切概率的完整表格。那些空白单元格代表的概率人造就是0%。

关于 “I”、“you” 和 “like” 这些行的概率计算比拟轻松、间接,但 “apples” 和 “bananas” 这两行就有点难办了,由于数据集中并没有 “apples” 和 “bananas” 前面跟着其余 token 的状况。这就好比在咱们的训练数据中出现了“缺口”。为了确保模型在遇到这种未训练的状况时也能有所输入,我选择将 “apples” 和 “bananas” 后续 token 的概率平均调配给其余四个 tokens。这种做法或许会造成一些不太人造的输入结果,但至少模型在处置这两个 token 时不会卡壳。

训练数据中的这种“缺口”疑问不容小觑。在真正的 LLMs 中,由于训练数据集规模十分宏大,咱们不太或许遇到像本文这个便捷例子中这么显著的缺口。但是,由于训练数据的笼罩面无余,那些较小的、较难发现的缺口确实是存在的,并且相当经常出现。 LLMs 在这些训练无余的区域所做的 tokens 预测品质或许会不高,而且这些疑问往往不易被发觉。这也是 LLMs 有时会出现“幻觉[7]”(即生成的文本只管朗朗上口,但或许蕴含与理想不符的内容或前后矛盾之处。)的要素之一。

借助上方的概率表,你如今可以构思一下 get_token_predictions() 函数的成功方法。以下是用 Python 伪代码示意的一种成功方式:

是不是比想象中还要便捷些呢?这个函数可以接纳来自用户提醒词的 tokens 序列。它提取出这个序列中的最后一个 token ,并找到概率表中对应的那一行。

假设你用 [‘you’, ‘like’] 作为 input tokens 调用这个函数,它会给出 “like” 对应的那一行,这使得 “apples” 有 33.3% 的或许性放入句子的下一局部,而 “bananas” 则有 66.7% 的或许性。依据这些概率值可以得悉,上方提到的 select_next_token() 函数在三次中有一次性会筛选 “apples”。

当 “apples” 被选为 “you like” 的后续词时,咱们失掉了句子 “you like apples”。这个句子在训练数据集中并不存在,但它却是齐全正当的。宿愿这个小例子能让您开局看法到,这些模型是如何经过从新应用训练中学到的 patterns(译者注:在数据集中识别和学习的重复出现的 tokens 序列组合。) 和拼接不同的消息片段,来构成看似原创的想法或概念的。

2.1 高低文窗口(The Context Window)

在上一局部,我用来训练那个微型言语模型的方法,称为马尔可夫链[8](译者注:Markov chain,一种数学系统,用于形容一系列或许的事情,其中每个事情的出现概率只依赖于前一个事情。)。

这种技术存在的疑问是,它只依据一个 token(输入序列中的最后一个 token)来预测接上去的内容。在此之前的文本在选择如何延续文本内容时并不起作用,因此咱们可以以为这种方法的高低文窗口仅限于一个 token,这是十分小的。 由于高低文窗口太小,模型会不时“遗记”自己的思绪,从一个词跳到下一个词,显得横七竖八。

为了提高模型的预测才干,咱们可以构建一个更大的概率表。假构想经常使用两个 token 的高低文窗口,就须要在概率表中参与代表一切两个 token 组合的新行。以前文的例子来说,五个 token 将会在概率表参与 25 行两个 token 组合的新行,再加上原有的 5 个单 token 行。这次除了思索两个 token 的组合外,还须要思索三个 token 的组合,因此必定再次训练模型。在 get_token_predictions() 函数的每次循环迭代中,假设条件准许,将经常使用输入序列的最后两个 tokens 来在一个更大的概率表中找到与这两个 tokens 相对应的行。

但是,两个 tokens 的高低文窗口依然不够。为了让生成的文本不只在结构上能够自洽,还能在必定水平上具有一些意义,须要一个更大的高低文窗口。假设没有足够大的高低文窗口,重生成的 token 就无法与之前的 tokens 所表白的概念(concepts)或想法(ideas)建设咨询。那么咱们应该如何是好? 将高低文窗口裁减到 3 个 tokens 会在概率表中参与 125 行新内容,但品质或许依然不尽人意。咱们又须要多大的高低文窗口呢?

OpenAI 的开源模型 GPT-2 经常使用的高低文窗口其大小为 1024 个 tokens。假设咱们要用马尔可夫链(Markov chains)成功这样一个大小的高低文窗口,概率表的每一行都须要代表一个长度在 1 到 1024 个 tokens 之间的序列。以前文例子中经常使用的 5 个 tokens 的词汇表为例,1024 个 token 长度的序列共有 5种或许的 token 组合。我在 Python 中启动了计算:

这个行数多得吓人!这还只是整个概率表的一小局部,由于咱们还须要长度从 1023 个 tokens 到 1 个 token 的一切序列,以确保在模型输入中没有足够 token 时,较短的 token 序列也能被处置。只管马尔可夫链很幽默,但它们也确实存在很大的可裁减性疑问。

而且,1024 个 tokens 的高低文窗口如今也曾经不算特意大了。在 GPT-3 中,高低文窗口参与到了 2048 个 tokens,而后在 GPT-3.5 中参与到了 4096 个 token。GPT-4 最开局领有 8192 个 tokens 的高低文窗口,起初参与到了 32K,再起初又参与到了 128K(没错,128,000 个 tokens !)。如今,具有 1M 或更大高低文窗口的模型也开局出现了,更大的高低文窗口准许模型更好地理解和应用之前输入的文本消息,从而在生成新的文本时坚持更高的连接性和准确性。

总之,马尔可夫链让咱们以正确的方式思索文本生成疑问,但它们也存在一些严重疑问,使得咱们无法将其视为一个可行的处置打算。

2.2 从马尔可夫链到神经网络

显然,咱们必定丢弃经常使用概率表的想法,由于一个正当高低文窗口的概率表须要的 RAM 大得惊人。咱们可以采取的替代打算是用函数(function)来替代表格(table),这个函数是经过算法生成的,而不是存储在一个大表格中。这正是神经网络长于的畛域。

神经网络是一种不凡的函数,它接受 inputs ,对其启动计算,并前往 output 。关于言语模型来说,input 代表提醒词转换的 tokens,output 是对下一个 token 的预测概率列表。

我说过神经网络是一种“不凡”的函数,是由于除了函数的逻辑之外,它们对 input 启动的计算还遭到一系列外部定义参数的控制。一开局,神经网络的参数是未知的,因此,函数发生的输入是齐全无用的。 神经网络的训练环节包括寻觅参数,找到使函数在对训练数据集启动评价时体现最佳的参数,其假定是,假设函数在训练数据上体现良好,那么它也会在其余数据上体现良好。

在训练环节中,神经网络的参数会经过反向流传算法[9],以极小的增量启动迭代调整。这个环节触及少量的数学计算,因此在这里不会具体开展。每次调整后,神经网络的预测才干都会略有优化。降级参数后,神经网络会再次评价其在训练数据集上的体现,并依据评价结果启动下一轮的调整。这个环节会不时继续下去,直到神经网络在训练数据集上对下一个 token 的预测到达令人满意的效果。

上方协助各位读者了解一下神经网络的规模,GPT-2 模型大概有 15 亿个参数,而 GPT-3 将参数数量参与到 1750 亿,GPT-4 听说有大概 1.76 万亿个参数。经常使用目前这一代配件来训练这样大规模的神经网络须要相当长的时期,通常是几周甚至几个月。

幽默的是,由于参数数量泛滥,而且都是经过长时期的迭代环节计算进去的,没有人类干预,因此很难了解模型是如何上班的。训练好的大言语模型就像一个黑盒子,十分难以调试,由于模型的大局部“思想”都暗藏在参数中。即使是那些训练它们的人,也很难解释其外部的上班原理。

2.3 模型层、Transformers 和留意力机制

你或许十分想知道,神经网络函数外部终究启动了哪些神奇的运算,使得它们在这些经过精心调优的参数的协助下,能够接纳 input tokens 列表,并以某种方式“猜”出下一个 token 的正当概率。

神经网络就像是一套复杂的操作链条⛓,链条的每个链环都被称为一个“模型层”。第一层接纳 inputs (译者注:神经网络接纳的初始数据。),对其启动某种方式的转换。经过转换的 input 接着进入下一层,再次启动转换。这一环节不时继续到数据最终抵达最后一层,并在这里启动最后一次性转换,从而发生最终的模型输入。

机器学习专家们设计了各种类型的模型层,它们能够对输入数据执行数学转换。同时,他们还找到了模型层的不同组织方式和分组方法,以到达预期的效果。有些模型层是通用的,实用于多种类型的输入数据;而有些模型层则是专门为处置特定类型的数据而设计的,比如图像数据或大言语模型中的经过火词后的文本。

在大言语模型的文本生成场景中,目前最盛行的神经网络架构是 Transformer[10]。经常使用这种架构设计的 LLM(大言语模型)被称为 GPT,即 Generative Pre-Trained Transformers[11]。

Transformer 模型的共同之处在于它们执行的一种称为 Attention[12] 的模型层计算方式,这使得它们能够从高低文窗口中的 tokens 中推断出它们之间的相关(relationships)和形式(patterns),随后将这些相关和形式反映在下一个 token 的预测概率中。

Attention 机制最后被用于言语翻译场景,是一种找出输入序列中哪些 tokens 对了解其意义最为关键的方法。这种机制使现代翻译器能够经过关注(或集中“留意力”于)关键的单词或tokens,从基本上“了解”一个句子。

03 Do LLMs Have Intelligence?

您或许曾经开局思索,大言语模型(LLMs)在生成文本时能否展现出某种自动了?

我团体并不以为 LLMs 具有推理或发明原创思想的才干,但这并不象征着它们一无是处。 由于 LLMs 对高低文窗口中的 tokens 启动了奇妙的计算,所以 LLMs 能够识别出用户提醒词中存在的 patterns,并将它们与训练时期学到的相似 patterns 相婚配。 它们生成的文本大局部都是由系统的训练数据组成的,但它们将单词(实践上是 tokens)拼接在一同的方式十分复杂,在很多状况下,它们生成的模型输入结果既有原创感,又十分有用。

鉴于 LLM 容易发生幻觉,我不会信赖未经人工验证的状况下,任何间接将 LLMs 的 output 发送给用户的上班流程。

在未来的几个月或几年里,能否会有更大的 LLM 出现?它们能够成功真正的自动吗?由于 GPT 架构的诸多限度,我感觉这是不太或许成功的,但谁知道呢,兴许随着未来翻新成绩的不时涌现,咱们会成功这一指标。

感谢您与我一同坚持到最后!我宿愿本文曾经能够激起你的学习兴味,让你选择继续学习大模型相关常识,并最终面对那些令人畏惧的数学常识,假设您想具体了解每一个细节的话,就无法逃避这些数学常识。在这种状况下,我剧烈介绍 Andrej Karpathy 的《Neural Networks: Zero to Hero》[13]系列视频。

Thanks for reading!

Hope you have enjoyed and learned new things from this blog!

About the authors

Hi, my name is Miguel. I'm a software engineer, but also tinker with photography and filmmaking when I have time. I was born in Buenos Aires, Argentina, but I lived most of my adult life in Portland, Oregon, USA, the place that comes to mind when I think of home. As of 2018 I'm living in Ireland.

本期互动内容

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/5806.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号