只需初中数学知识就能理解人工智能大语言模型

news/2025/3/15 17:50:02/文章来源:https://www.cnblogs.com/jellyai/p/18504424

全面解释人工智能LLM模型的真实工作原理(一)

人工智能 #大语言模型LLM #机器学习ML #深度学习 #数据挖掘

序言:为了帮助更多人理解,我们将分成若干小节来讲解大型语言模型(LLM)的真实工作原理,从零开始,不需额外知识储备,只需初中数学基础(懂加法和乘法就行)。本文包含理解 LLM 所需的全部知识和概念,是完全自包含的(不依赖外部资料)。我们首先将在纸上构建一个简单的生成式大语言模型,然后逐步剖析每一步细节,帮助你掌握现代人工智能语言模型(LLM)和 Transformer 架构。文中去掉了所有复杂术语和机器学习专业名词,简化为纯粹的数字乘法与加法表达。当然我们并没有舍弃细节,会在文中适当位置指出相关术语,以便你能与其他专业内容建立关联。

从懂得加法/乘法数学运算到搞清当今最先进的AI模型,意味着我们需要覆盖大量内容。这不是一个玩具版的LLM解释——有心人理论上可以从中重建一个现代LLM。我删去了一切多余的字句,因此整篇知识并不适合快速浏览式阅读。

(关注并订阅作者,您将能及时收到作者的最新更新、行业内最新技术动态以及实际动手实践的经验分享。)

本文全部内容将涵盖下列15个要点:

  1. 一个简单的神经网络

  2. 这些神经网络模型是如何训练的?

  3. 模型是如何生成输出语言的?

  4. 是什么让LLM模型效果如此出色?

  5. 嵌入(Embedding)

  6. 子词分词器

  7. 自注意力

  8. Softmax

  9. 残差连接

  10. 层归一化

  11. Dropout

  12. 多头注意力

  13. 位置嵌入

  14. GPT架构

  15. Transformer架构

我们开始吧。

首先要提到的是,神经网络只能接收数字作为输入,并输出数字。毫无例外,魔法的关键在于如何将用户的一切输入内容(文字、图像、视频、声音)转换为数字,以及对神经网络的输出数字进行解释以达到目的。最后,我们自己构建一个神经网络,使其接收你提供的输入并给出你想要的输出(基于你选择的输出解码方式)。让我们来看看如何从加法和乘法这些基本运算原理出发,实现人工智能语言模型 Llama 3.1 能力的效果。

构建一个简单的神经网络:

我们先来搞清楚一个可以对物体进行分类的简单神经网络是怎样的存在,这是讲述我们要设计的神经网络的任务背景:

• 用颜色(RGB)和体积(毫升)来描述将被神经网络识别的物体

• 要求神经网络准确分辨出物体到底是:“叶子”还是“花朵”

下图是用数字来代表“叶子”和“花朵”的示例:

叶子的颜色由 RGB 值 (32, 107, 56) 表示,体积为 11.2 毫升。花朵的颜色由 RGB 值 (241, 200, 4) 表示,体积为 59.5 毫升。图中这些数据用于训练神经网络,让它学会根据“颜色”和“体积”来识别叶子和花朵。

现在我们就构建一个神经网络来完成这个分类任务。我们先确定输入/输出的格式和对输出结果的解释方式。上图中的叶子(Leaf)和花朵(Flower)已经用数字来表示了,所以可以直接传递给神经网络中的神经元。由于神经网络只能输出数字,因此我们还需要对神经网络输出的数字进行定义(即什么样的数字代表神经网络识别出的物体类型,是“叶子”还是“花朵”,因为神经网络本身无法直接输出“叶子”和“花朵”这两个名称来告诉我们分类结果)。因此,我们需要定义一个解释方案,将输出的数字对应到物体类别上:

• 如果设计的神经网络只有一个输出神经元,可以通过正数或负数来代表识别出的物体类别。当该神经元输出正数时,我们就认为神经网络识别出该物体是“叶子”;如果输出的是负数,则表示识别出的物体是“花朵”。

• 另外,也可以设计具有两个输出神经元的神经网络,用这两个神经元分别代表不同的物体类别。例如:约定第一个神经元代表“叶子”,第二个神经元代表“花朵”。当神经网络的第一个神经元输出的数字大于第二个神经元输出的数字时,我们就说神经网络识别出当前的物体是“叶子”;反之,当第一个神经元输出的数字小于第二个神经元输出的数字时,我们就说神经网络识别出的当前物体是“花朵”。

这两种方案都可以让神经网络识别物体是“叶子”还是“花朵”。但本文我们选择第二种方案,因为它的结构更容易适应后面我们要讲解的内容。以下是根据第二种方案设计出来的神经网络。让我们详细分析它:


图中的圆圈代表神经网络中的神经元,每一竖排代表网络的一层。所有的数据从第一层进入,然后逐层逐个做乘法和加法计算,经过隐藏层(三个神经元),最终到达输出层(两个神经元),我们根据最后一层的两个神经元输出的数值来预测当前识别出的是什么物体。注意图中的箭头和数字,以及它们之间的乘法与加法关系。

蓝色圆圈中的计算如下:(32 * 0.10) + (107 * -0.29) + (56 * -0.07) + (11.2 * 0.46) = -26.6

一些行话(专业名词):

• 神经元/节点:带数字的圆圈

• 权重:箭头线上标注的数字

• 层:一组(排)神经元称为一层。可以将这个网络看作有三层:4个神经元的输入层、3个神经元的中间层和2个神经元的输出层。

要计算网络的预测/输出(称为“前向传播”),从左侧开始。把“叶子”代表的数字填入到第一层的神经元中。要前进到下一层,将圆圈中的数字与对应神经元的权重相乘并相加。我们演示了蓝色和橙色圆圈的计算。运行整个网络后,输出层第一个数字较大,因此我们可以解释为“网络将这些(RGB, Vol)值分类为叶子”。经过良好训练的网络可以处理各种(RGB, Vol)输入并正确分类物体。

这个神经网络模型本身对“叶子”、“花朵”或(RGB, Vol)没有任何概念(即它不理解“叶子”和“花朵”是什么)。它被设计出来只是为了接收4个数字并输出2个数字。我们规定4个输入数字代表物体的颜色值和体积,同时也规定2个输出神经元的值如何对应“叶子”和“花朵”。最终,网络的权重是通过训练过程自动调整得到的,以确保模型能够接收输入数字并输出符合我们解释的结果。

一个有趣的副作用是,也可以用这个神经网络来预测未来一小时的天气情况。我们将例如:云量和湿度等表示成4个不同的数字值作为输入,并将神经网络的最后输出解释为“1小时内晴天”或“1小时内下雨”。如果这个神经网络的权重校准良好,网络就可以同时完成分类叶子/花朵和预测天气的任务。我们的神经网络只是输出了两个数字,而这两个数字到底代表什么意思则完全取决于你对它的定义。例如:这两个数字可以代表对物体进行分类的结果或者预测天气等。

编写本小节时,为了让更多人理解,我省略了以下的一些技术术语。即使忽略这些术语,您依然可以理解神经网络的基本概念:

• 激活层:

神经网络通常有一层“激活层”,它对每个节点的计算结果应用一个非线性函数,以增强网络处理复杂情况的能力。一个常见的激活函数是 ReLU,它会将负数设为零,而正数保持不变。例如,在上例中,我们可以将隐藏层中的负数替换为零,然后再传递到下一层计算。没有激活层时,网络中的所有加法和乘法可以简化为单层。例如,绿色节点的输出可以直接写成 RGB 的加权和,不需要隐藏层。激活层的非线性特性使得神经网络能够处理更复杂的模式。

• 偏置:

神经网络中的每个节点通常还关联一个“偏置”值,这个值会加到节点的加权和结果中,用于调整输出。例如,如果顶层蓝色节点的偏置是 0.25,那么计算公式变成:(32 * 0.10) + (107 * -0.29) + (56 * -0.07) + (11.2 * 0.46) + 0.25 = -26.35。偏置使得网络可以更灵活地拟合数据,“参数”通常指模型中的这些权重和偏置值。

• Softmax:

在输出层,我们通常希望将结果转化为概率。Softmax 函数是一种常用的方法,它能将所有输出数值转换为概率分布(总和为 1)。Softmax 会将每个输出数值的指数除以所有输出值的指数和,使得输出层的结果可以被解读为各分类的概率。例如,如果 Softmax 处理后的值为 0.8 和 0.2,那么这表示 80% 的概率是“叶子”,20% 的概率是“花朵”。

未完待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验3 c语言函数应用编程

实验任务1 task1.c1 #include <stdio.h>2 3 char score_to_grade(int score); // 函数声明4 5 int main() {6 int score;7 char grade;8 9 while(scanf("%d", &score) != EOF) { 10 grade = score_to_grade(score); // 函数调用 11 …

Mit6.S081笔记Lab3: page tables 页表

课程地址:https://pdos.csail.mit.edu/6.S081/2020/schedule.html Lab 地址:https://pdos.csail.mit.edu/6.S081/2020/labs/pgtbl.html 我的代码地址:https://github.com/Amroning/MIT6.S081/tree/pgtbl 相关翻译:http://xv6.dgs.zone/labs/requirements/lab3.html 参考博客…

java 为什么有private关键字_2

在讨论编程语言设计时,Java语言中的`private`关键字扮演着至关重要的角色。私有访问修饰符`private`的主要目的是封装、数据隐藏。通过限制对类成员的访问,它确保了对象的内部状态不能被外部代码随意修改,从而保护了对象的完整性和一致性。这种封装机制是面向对象编程(OOP)…

为什么有开源社区版,还有那么多公司使用专业版-谈HPC调度器

开放源码与商用 HPC 工作负载管理器的成本效益比较 商用高性能计算机工作负载管理器 1 简介 高性能计算(HPC High-performance computing)为多个行业的科学发现和创新提供了动力。大型数据集、先进的仿真技术和机器学习的结合,帮助企业产生了没有现代 HPC 基础设施就无法实现…

pta答题判断程序总结blog

一、前言 本次blog是针对发布题目集1~3的的最后一题的总结。三次大作业都是模拟一个小型的在线测试系统,先由大作业1完成基本功能,后面进行迭代,不断增加功能,丰富功能。下面具体分析这三次大作业的关键点和区别。 1、答题程序-1 1)输入:题目数量:首先输入题目数量。题目…

Windows 资源管理器显示PSD、PDF、AI 等矢量格式缩略图

1、SageThumbs SageThumbs 是一个强大的 shell 扩展,允许使用 Pierre-e Gougelet 的 GFL 3.40 库(XnView Classic、XnView MP 的作者)直接在 Windows 资源管理器中预览大量图像格式。 AI、PS、EPS、PDF 支持# 要为 Adobe Illustrator (ai)、Postscript (ps, eps) 和 Ad…

第一次博客作业

一、前言: 第一个题目集: 知识点: 包括类的定义、属性(成员变量)、方法(成员函数)以及构造函数。 封装:通过私有化数据域并提供公共的访问器(getter)和修改器(setter)来保护对象内部状态。 构造函数:无参构造函数和带参数构造函数的使用。 字符串表示:重写toStrin…

第12题——入门级js

题目网址:https://match.yuanrenxue.cn/match/12解题步骤看流量包和其回显数据。只有一个流量包,那就是只要访问该网址就能获取页面数据。看下请求地址的组成。变量m一看就是base64编码,解码看下原字符串。再尝试访问第二页,看看原字符串组成的规律。比较明了了,原字符串就…

高等数学 7.10常系数线性微分方程组解法举例

在研究某些实际问题时,会遇到由几个微分方程联立起来共同确定几个具有同一自变量的函数的情况。这些联立的微分方程称为微分方程组。 如果微分方程组中的每一个微分方程都是常系数线性微分方程,那么,这种微分方程组就叫做常系数线性微分方程组。 对于常系数线性微分方程组,…

2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,要对每个 wordsQuery[i] 找到一个与其有最长公共后缀的字符串

2024-10-26:最长公共后缀查询。用go语言,给定两个字符串数组 wordsContainer 和 wordsQuery,要对每个 wordsQuery[i] 找到一个与其有最长公共后缀的字符串。如果有多个字符串与 wordsQuery[i] 有相同的最长公共后缀,则返回在 wordsContainer 中最早出现的那个。最后,返回一…

PTA第1~3次大作业分析及总结

一、前言 经过数周的努力,第三次大作业也落下了帷幕,这三次大作业从第一次到第三次难度逐渐递增,需求不断地增加,对于初学JAVA的我无疑是一个巨大的考验。 第一次大作业,主要侧重类的简单设计,老师在最后一题给出了类的参考设计,算是对我们java的一个入门考验,既是考验…