中学生就能看懂:从零开始理解LLM内部原理【三】|神经网络如何生成语言?

本系列文章是原作者Rohit Patel的长篇雄文《Understanding LLMs from Scratch Using Middle School Math-A self-contained, full explanation to inner workings of an LLM》的深度学习与解读笔记。本篇是系列第三篇。我们强烈建议您在开始前阅读并理解前文(点击下方目录)。

全文目录:

1. 一个简单的神经网络

2. 这些模型是如何被训练的?

4. 嵌入(Embeddings)

5. 子词分词器(Sub-word tokenizers)

6. 自注意力机制(Self-attention)

7. Softmax

8. 残差连接(Residual connections)

9. 层归一化(Layer Normalization)

10. Dropout

11. 多头注意力(Multi-head attention)

12. 位置嵌入(Positional embeddings)

13. GPT 架构

14. Transformer 架构

3

这些模型如何生成语言?

借助基本的中学数学知识,我们已经了解到什么是神经网络模型,以及一个神经网络模型大致是如何被训练的。这个训练好的神经网络可以被用于预测一组数据代表的是“叶子”还是“花”,如果你愿意,它甚至可以被训练用来预测“未来一小时的天气”,只要有正确的权重设置:

但我们需要研究的是语言模型(LLM),而不是一个预测模型。那么问题来了:

这个可以预测“叶子”与“花”的神经网络模型如何用来生成自然语言呢?

方法很简单。上图已经展示了神经网络的本质:输入一些数字,经过模型内部的数学计算(基于训练好的参数,主要是权重,即各层之间连线上的数字),输出另一些数字。 而这些输入和输出的数字代表什么,完全取决于你如何解释和训练。例如:

  • 在之前的例子中:输入的数字代表一个事物的4个属性(RGB,以及体积),输出的数字则被解释为该物体是“叶子”还是“花”的概率

  • 你也可以训练另一个神经网络,将输入的数字代表当前的天气数据如云量、湿度等,而输出的数字则被解释为未来一小时内会“下雨“还是”转晴“

所以,你当然也可以训练一个神经网络模型,将输入的数字代表一个句子的前几个字符,而输出的数字则被解释为这个句子的下一个字符的概率。

这里有一些关键问题要解决,逐个来看:

【输出层的扩展】

与预测叶子或花的二分类不同,自然语言输出的字符要多得多,以英文字符为例,数量远多于 2。假设我们需要预测下一个英文字符是什么,那么可以设计神经网络的 输出层至少要包含 26 个神经元(其实还需要考虑一些符号如空格、句号等),让每个神经元对应一个英文字母(或符号),并将输出层每个神经元的数字解释为对应字母的概率。即:

输出层中数值最大的神经元对应的字母就是预测的下一个字符。

举一个例子,假设输入的内容是 “I love y”,经过我们的训练并设置好正确的权重,现在神经网络的输出如下:

输出层神经元的数值及其对应的字母为:

a=0.11, b=0.23,c=0.08 …, o=0.80**,…**

我们选择数值最大的神经元(0.80),对应字母 “o”,也就是预测的下一个字符就是 “o”,于是现在我们可以把内容变成:

”I love yo”

【输入层的扩展】

由于神经网络只能接收数字输入,无法直接理解字符。因此需要将输入的字符序列(如 “I love y”)转化为数字。一种简单的方法是:

给每个输入字符分配一个数字,比如 a=1, b=2, …, z=26,空格用 27 表示等等。那么如果你需要输入“I love y",则对应输入层神经元的各个值为:

[9,27,12,15,22,5,27,25]

现在,我们已经拥有了一个设置好权重的神经网络,能够准确预测下一个字符。这里我们输入了字符"I love y"(实际输入[9,27,12,15,22,5,27,25]),预测了下一个字符“o“(实际输出是每个字符的概率,o的概率最大)。那么如何生成完整的句子呢?

【生成完整句子】

聪明如你,一定会想到借助递归生成一个完整的句子:

  1. 输入“I love y”,模型预测输出 “o”。

  2. 将预测的 “o” 加入输入中,形成新的序列 “I love yo”。

  3. 将新的序列“I love yo"输入到神经网络,预测出下一个字符“u"。

  4. 依此类推,不断重复这个过程,最后我们递归生成了一个句子“I love you so much"。

这种方式下,神经网络就具备了生成自然语言的能力,成为一个非常基础的生成式 AI 语言模型。

【上下文长度的问题】

你可能会敏锐的发现一个问题,由于神经网络的输入层大小是固定的,比如只能接受 8 个字符,也就是可以接受"I love y"的每一个字符。但是当我们预测了第一个字符"o"以后,就无法把完整的"I love yo"这9个字符输入到神经网络,除非你重新修改整个神经网络并训练出权重,但很显然这是不可行的。

解决方法是:**用类似队列(queue)“先进先出”的方式保持固定的队列大小,也可以想象成一种“滑动窗口”。**就是把最开始的第一个字符"I"踢出去,只发送最近的8个字符,即“_love_yo",然后预测出"u";接着再输入"love_you",预测出空格…。类似下图(为了方便查看,这里空格用_表示),输入的灰色字符表示在本轮被丢弃:

因此,如果最后生成 “I love you so much”,到最后生成"h"时,前面的"i_love_yo"字符在输入时已经被丢弃。所以,这样的设计会导致神经网络逐渐“遗忘”早期的信息,尤其在生成长句子时,会影响预测质量。**这种固定的输入到神经网络的长度也被称为上下文长度,即提供给神经网络模型用来预测的最大输入长度。**现代神经网络已经显著提高了上下文长度(数千上万个单词),因此模型可以参考更多上下文来生成更连贯的文本。

【输入和输出的不同解释:为何不对称?】

这里还有一个问题:当输入字符时,我们用简单的数字编码(如 “i” = 9);而在输出时,神经网络需要输出多个数字(即代表不同字符概率的数值),并挑选最大的那个,为什么不使用相同的编码方式呢?比如预测出"o",那么就直接输出数字15?

原因是:不同的输入和输出解释,更有助于模型的训练和表现。 而事实证明,目前已知的最有效的输入输出的解释方式也是不同的。这是因为:

  • 输入 **:**在输入时,通常希望信息尽可能精确并方便处理,事实上,这里的简单输入数字的方式也不是最优的,一些更复杂的编码方式(如嵌入向量)能更有效地表达字符之间的关系,后面还会介绍。

  • 输出 **:**使用多个神经元,每个代表一个可能的字符(概率),能更灵活地让模型量化每个候选字符的输出情况,也更容易优化。

**所以,输入的重点是表达清楚,方便模型理解复杂的关系;而输出的重点是表达不确定性,让模型更好的预测多种可能性并不断优化。**因为自然语言中充满复杂关系,灵活地选择输入输出的解释方式,能让模型更容易应对这些复杂性。

这种不对称设计,是现代语言模型(如 GPT 等)获得高效性能的关键。

【总结】

最后总结下神经网络生成自然语言的过程:

  1. 神经网络的核心任务是“输入一些信息,输出预测结果”。

  2. 如果输入是 “I love y”,神经网络就预测 “o”。一旦预测出 “o”,它会把“o”加入原字符,接着输入,继续预测出后续字符。

  3. 神经网络通过不断预测下一个字符,像“接龙”一样,逐步”生成“完整的句子。

  4. 虽然神经网络固定了每次输入的字符长度,但现代技术已经能让它记住更多上下文,从而生成更连贯的文本。

这个过程,从简单的分类预测,延伸到了语言生成,构成了现代语言模型的核心思想。当然,这个能力还远远不够,还需要大量的创新来使得这种简单的生成式AI迈向更像人类的智能对话模型。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值