【大语言模型入门】—— 浅析LLM基座—Transformer原理

【大语言模型入门】—— 浅析LLM基座—Transformer原理

  • 解密GPT核心技术:Transformer架构深度解析
    • 被反复强调的核心概念意味着什么?
  • GPT预测机制解析:从Next Token Prediction到任务推理
    • 核心机制的本质
    • 案例驱动的机制解析
    • 解构策略:分层突破法
    • 串联概念:经典概率模型
    • 摸清流程:Transformer 架构及流程图
    • 业务视角的逻辑流程
      • 示例数据
      • Transformer 的工作原理
    • 程序视角的逻辑:矩阵计算
    • Transformer 核心算法和结构
      • Token 和 Token 词表
    • 输入模块的核心:Embedding 向量
  • 参考文献

解密GPT核心技术:Transformer架构深度解析

被反复强调的核心概念意味着什么?

在各类技术文档中,我们总能看到这样的描述:

“GPT-3作为生成式语言模型的代表,具备1750亿参数规模,基于Transformer架构,通过海量无监督学习掌握语言统计规律与语义表示能力,可支持文本生成、分类、问答等多种NLP任务…”

这些高频出现的概念并非偶然,它们实际上构成了现代大语言模型的技术支柱。理解这些概念的价值在于:

  • 参数规模:模型容量与能力的物理载体
  • Transformer:当代大模型的底层架构范式
  • 无监督学习:突破标注数据瓶颈的关键方法
  • 语义表示:模型智能的本质体现

GPT预测机制解析:从Next Token Prediction到任务推理

核心机制的本质

GPT的核心预测原理可以表述为:

给定输入文本序列,模型通过计算所有可能候选token的概率分布,选择最可能成为下一个token的预测结果。

案例驱动的机制解析

以翻译任务为例:

输入:"翻译:今天天气真好"
输出:"The weather is nice today"

在这里插入图片描述

解构策略:分层突破法

嘿,小伙伴们!想一下子把Transformer搞得明明白白?那可太难啦,简直比在迷宫里找到出口还难!不过别怕,我这有妙招。咱们先不急着一头扎进Transformer的核心地带,就像当年“农村包围城市”一样,先从外围入手。先来剖析一个经典概率模型,把那些重要的外围辅助概念,像输入、输出、词表这些家伙先搞清楚。这些概念在Transformer里可是通用的,理解了它们,再去攻克Transformer里那三个最核心的算法和数据结构,就会轻松很多啦!

串联概念:经典概率模型

这个经典概率模型比Transformer简单10倍,非常易于理解。

假设我们要做一个汪星人的大模型,汪星人只有睡觉、跑步、吃饭三个行为,汪星语也只有下面这一种句式:

我 刚才 跑步,我 现在 吃饭
我 刚才 睡觉,我 现在 吃饭
……

我们的目标和GPT是一样的,都是用已有的文本预测下一个字,比如下面的例子:

我 刚才 跑步,我 现在 ___

要预测上面例子的横线里应该填什么,只要计算“跑步”这个行为之后哪个行为的概率最大就可以了。比如:P(吃饭|跑步) 表示汪星人在“跑步”之后,下一个行为是“吃饭”的概率。

从程序视角实现这个“大模型”,显然需要先建立一个词表(Vocabulary),存储所有的汪星词汇。看下面这张图,一共有六个词:我、刚才、现在、吃饭、睡觉、跑步。那这个词表的长度 L 就等于 6。

在这里插入图片描述
然后,根据汪星语料,计算每一个词的概率 P ( w n ∣ w i ) P(wn|wi) P(wnwi),这也就是汪星大模型的模型训练过程。在模型运行时,可以根据输入的文本, 遍历词表获取每个词的概率,输出一个结果向量(长度也为 L)。

[0, 0, 0, 0.6, 0.3, 0.1]

比如上面的向量里 4 号词概率最高,是 0.6,所以下一个字要输出“吃饭”。整个模型的程序流程图如下。
在这里插入图片描述

摸清流程:Transformer 架构及流程图

甚至你可以用 Python 代码实现这个“大模型”。接下来的 Transformer 程序流程虽然比这个复杂,但是和外围辅助概念 输入、输出、词表 相比,结构和功能是一样的,只是概率计算方法不同。所以,我们完全可以在这个流程图的基础上进一步细化理解 Transformer 程序流程。

在真正开始细化这个流程之前,我们必须先搞清 Transformer 的整体架构。我引用了一张 Transformer 论文里的架构图,这张图对熟悉机器学习的朋友来说逻辑非常清晰。

在这里插入图片描述

从这张图中,我们可以看到 Transformer 的核心组件包括编码器(Encoder)和解码器(Decoder),它们通过自注意力机制(Self-Attention)和多头注意力机制(Multi-Head Attention)来处理输入和输出。每一个编码器和解码器都由多个层组成,每一层都包含多个子层,这些子层协同工作,实现了对输入序列的深度学习和特征提取。

我们可以用“分治法”把 Transformer 架构先用红框分为 3 大部分,输入、编解码、输出,更容易一步步理解它。

在这里插入图片描述

业务视角的逻辑流程

示例数据

You:我爱你
GPT:i love you

Transformer 的工作原理

Transformer 是怎么做到通过输入一段文本,GPT 模型就能预测出最可能成为下一个字的字的呢?这个问题,我想下面的图已经表示得非常清楚了。

在这里插入图片描述

第一步,当 Transformer 接收到“我爱你”这个输入,经过 1- 输入层2- 编解码层,输出下一个字符 i

关键是第二步,此时的输入变为了“我爱你”加上第一步的输出 iTransformer 预测的输出是 love

总的来说,就是 Transformer 架构的输入模块接收用户输入并做内部数据转换,将结果输出给编解码模块,编解码模块做核心算法预测概率,输出模块根据计算得到的概率向量查词表得到下一个输出字符。其中,输出模块和刚才的经典概率模型一致,后续我们重点细化理解 “1- 输入模块”“2- 编解码模块” 就可以了。

Transformer 架构图里,每一个方框代表一个算法。对普通工程师而言,Transformer 架构图不好理解的部分无非就是每个方框里的算法细节,这也是我们下面要学习的知识点。

程序视角的逻辑:矩阵计算

Transformer 架构里的所有算法,其实都是矩阵和向量计算。先看一个 N x M 的矩阵数据结构例子。可以理解为程序中的 n 行 m 列 的数组。
在这里插入图片描述
其中,当 N = 1 时,就叫做 M 维向量

在这里插入图片描述
简单起见,我们可以把每一个方框里的算法统一描述为下图。这张图可能有点复杂,我来说明一下。
在这里插入图片描述

你看,每一个算法的输入都是 N1 x M1 的矩阵,每个算法都是在这个输入基础上和其他矩阵进行计算。假设有 i 个相关参数矩阵,那么最后都会输出矩阵 N2 x M2,它也会成为下一个算法的输入。

这些在箭头上的 Ni x Mi 矩阵的每次计算都是动态的,而作为运算参数的 Ci x Di 矩阵都是模型提前训练好的。Ni x Mi 矩阵是用户输入和算法的中间结果,Ci x Di 里的具体参数其实就是模型参数。

编解码层数为 Nx,表示同样的算法要做 Nx 次,但是要注意,每一层里的 Ci x Di 参数矩阵具体数值是不同的,也就是有 Nx 套这样的参数。

这样说的话,例 1 的实现逻辑就是:“我爱你” 字符串通过 Transformer 已经训练好的一系列矩阵参数通过多层计算后,就能获得最大概率的下一字 i

OK,这样抽象出来之后,我们接下来就不用再关注非核心的算法流程,只要重点理解 输入模块编解码模块 的过程就好了。

Transformer 核心算法和结构

我们集中注意力,依次细化最核心的三个算法和结构:Token 词表Embedding 向量Self-Attention 算法,并且在经典模型的程序流程图上进行细化。先从相对更好理解的 TokenToken 词表 开始说起。

Token 和 Token 词表

Transformer 中的 Token 词表和前述的词表作用相同,但 Token 是一个比词更细的单位。比如输入:“我叫xx”,会被拆成 4 个 Token:我 / 叫 / x / x。

拆分成 Token 的目的是控制词表的大小,因为在自然语言中,类似“xx”的长尾词占到了 90%。

比照经典模型的词表,刚才的例子都可以做成一张图表示 Token 词表

Token 在 Transformer 里会作为基本运算单位,用户的输入“我爱你”和“i”转换成 Token 表示就是 [ 我, 爱,你,#i ]。注意,Transformer 里的每个 Token 并不仅仅只有一个序号,而是会用一个 Embedding 向量表示一个 Token 的语义。

通过这种方式,Transformer 能够高效地处理各种输入,同时控制词表的大小,避免因长尾词导致的词表膨胀问题。

输入模块的核心:Embedding 向量

Embedding 向量 具体形式如下。

#i --> [0.1095, 0.0336, ..., 0.1263, 0.2155, ...., 0.1589, 0.0282, 0.1756]

长度为 M,则叫 M 维向量。对应的,它的 Token 词表 在逻辑上可以细化为下图。

在这里插入图片描述

Transformer 架构输入部分第一个流程就是 Embedding。以这个例子里的输入 Token [我, 爱, 你, #i] 为例,你可以把这个过程理解为:Token 挨个去词表抽取相应的 Embedding,这个过程我用图片表示出来了。
在这里插入图片描述

你看,假设词表总长度是 L,比如“我”这个 TokenEmbedding 就可以直接从词表里取出来。这个例子输入的总 Token 数量 N = 4Embedding 向量的维度是 M,此时抽取的矩阵是一个 4 x M 的矩阵。

GPT-3 里,Embedding 的维度 M = 12288,这个例子里 N = 4,所以最终输入模块得到的矩阵就是下面这样的。

在这里插入图片描述

这个矩阵将作为 Transformer 架构中后续处理的基础输入。

一个 Embedding 维度代表一个 Token 的语义属性,维度越高,训练成本就越高,GPT-3 的经验是 M = 12288 维,就足够涌现出类似人类的智能。好了,到此为止,我们已经把输入模块做了足够细化,下面是第一次细化后对应的程序流程图。
在这里插入图片描述

参考文献

  1. 原理:一个例子讲清楚Transformer原理

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

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

相关文章

Django打造智能Web机器人控制平台

Django 实现 Web 机器人控制 以下是关于 Django 实现 Web 机器人控制管理的实例思路和关键代码片段,涵盖多个常见场景。由于篇幅限制,剩余的可通过类似模式扩展。 基础机器人模型定义 # models.py from django.db import modelsclass Robot(models.Model):name = models.C…

周赛98补题

题目意思: 给定一个数字判断加上自身任意因子数,是否能成为一个奇数。 思路: 我们想一个最简单的判断方法, 任意的数字的因子数都有1,故,最简单的方法就是判断奇偶。 奇数1成偶数,偶数1成奇…

【STM32】 STM32低功耗模式详解:睡眠模式与唤醒机制【待测试】

本篇知识点基于F0讲解 一、STM32三种低功耗模式参考表格 模式功耗唤醒时间保持状态典型应用场景睡眠模式中等 (mA级)最短 (μs级)CPU停止,外设保持短暂待机,快速响应停止模式低 (μA级)中等 (ms级)RAM保持,时钟停止长时间待机,电…

【Vue入门学习笔记】Vue核心语法

目录 准备工作删除不需要的代码 模版语法文本插值使用JavaScript表达式无效写法原始HTML 属性绑定简写布尔型Attribute动态绑定多个值 准备工作 删除不需要的代码 删除components下的文件 进入App.vue 删掉代码&#xff0c;只保留如下内容 <template></template&g…

ClickHouse 窗口分析 argMax() / argMin()

argMin() 是 ClickHouse 中一个非常有用的聚合函数&#xff0c;它可以找出某个列的最小值&#xff0c;并返回该最小值对应的另一个列的值 函数语法 argMin(arg, val) arg&#xff1a;要返回的列&#xff08;当找到最小值时返回该列的值&#xff09; val&#xff1a;用于比较的…

k8s client 通过KubeConfig和证书方式连接api server

一、背景 本文以kubePi这样一个k8s客户端为示例,使用证书方式,怎么连接k8s集群。 然后告诉你证书是如何生成的, 最后通过一个Python编程示例,在程序里如何使用。 api server地址:比如https://110.206.56.308:6443 Certificate:证书内容 Certificate Key:证书的私钥 先…

(2025.07)解决——ubuntu20.04系统开机黑屏,左上角光标闪烁

前面一些碎碎念&#xff1a; 电脑装的双系统&#xff0c;之前都还好着&#xff0c;今天突然ubuntu开机的时候黑屏了&#xff0c;左上角有光标在闪烁&#xff0c;也查了一些资料&#xff0c;基本上大家的都是驱动有问题&#xff0c;还有内存问题。&#xff08;个人建议&#xff…

一文讲清libmodbus在STM32上基于FreeRTOS的移植

libmodbus 开发库概述 libmodbus是一个免费的跨平台支持RTU和TCP的Modbus库&#xff0c;遵循LGPL V2.1协议。libmodbus支持Linux、 Mac Os X、 FreeBSD、 QNX和Windows等操作系统。 libmodbus可以向符合Modbus协议的设备发送和接收数据&#xff0c;并支持通过串口或者TCP网络进…

go语言安装达梦数据完整教程

一、安装 go-dm 驱动 1. 使用 go get 命令安装 # 打开PowerShell或命令提示符 go get github.com/dmdbms/go-dm# 若网络问题&#xff0c;配置代理 go env -w GOPROXYhttps://goproxy.cn,direct2. 验证驱动安装 go list -m github.com/dmdbms/go-dm# 预期输出类似 github.com…

华为云Flexus+DeepSeek征文|基于Dify构建音视频内容转录工作流

华为云FlexusDeepSeek征文&#xff5c;基于Dify构建音视频内容转录工作流 一、构建音视频内容转录工作流前言二、构建音视频内容转录工作流环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建音视频内容转录工作流实战3.1 配置Dify环境3.2 配置Dify工具…

Pandas6(数据清洗2)——置换和随机采样、get_dummies、扩展数据类型、字符串处理函数

数据清洗2 一、置换和随机采样&#xff08;permutation,sample&#xff09; 随机置换&#xff08;打乱排序&#xff08;洗牌&#xff09;&#xff09;函数&#xff1a;numpy.random.permutation &#xff0c;可以对一个序列进行随机排序&#xff0c;常用于数据集随机划分等场景…

按月设置索引名的完整指南:Elasticsearch日期索引实践

按月设置索引名的完整指南:Elasticsearch日期索引实践 在时序数据场景中,按月设置索引名(如logs-2024-01)是优化查询效率、降低管理成本的关键策略。以下是三种实现方案及详细步骤: 方案一:索引模板 + 日期数学表达式(推荐) 原理:利用ES内置的日期数学表达式动态生成…

西南交通大学【机器学习实验7】

实验目的 理解和掌握朴素贝叶斯基本原理和方法&#xff0c;理解极大似然估计方法&#xff0c;理解先验概率分布和后验概率分布等概念&#xff0c;掌握朴素贝叶斯分类器训练方法。 实验要求 给定数据集&#xff0c;编程实现朴素贝叶斯分类算法&#xff0c;计算相应先验概率&a…

java生成pdf文件

1.依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itext-core</artifactId><version>8.0.4</version><type>pom</type></dependency> 2.代码 package org.example;import com.itextpdf.io.image…

macOS挂载iOS应用沙盒文件夹

背景 工具 libimobiledevice: linux&#xff0c;macOS等与ios设备通信是的工具 macFUSE 是 macOS 文件系统扩展的“引擎”&#xff0c;支持开发者创建各类虚拟文件系统。 iFUSE 是专为 iOS 设备设计的“连接器”&#xff0c;需依赖 macFUSE 实现功能。 若需访问 iPhone/iP…

嵌入式软件面经(四)Q:请说明在 ILP32、LP64 与 LLP64 三种数据模型下,常见基本类型及指针的 sizeof 值差异,并简要解释其原因

从事嵌入式开发深入理解 ILP32、LP64、LLP64 三种主流数据模型及其在平台上的实际表现&#xff0c;可以帮助我们避免诸如类型越界、结构错位、指针截断等致命错误。 一、何为数据模型&#xff1f;为何重要&#xff1f; 数据模型&#xff08;Data Model&#xff09;是指在某一编…

计算机组成原理与体系结构-实验二 ALU(Proteus 8.15)

目录 一、实验目的 二、实验内容 三、实验器件 四、实验原理 五、实验步骤 六、思考题 一、实验目的 1、了解算术逻辑运算器&#xff08;74LS181&#xff09;的组成和功能。 2、掌握基本算术和逻辑运算的实现方法。 二、实验内容 设计算数逻辑运算器系统的通路&#x…

ubuntu下免sudo执行docker

前言 在ubuntu中&#xff0c;默认是无法使用root账号的&#xff0c;安装完docker后&#xff0c;不可避免的要使用sudo来执行docker命令&#xff0c;这就让运维变得很麻烦 避免sudo # 添加当前用户到 docker 组 sudo usermod -aG docker $USER# 刷新组权限 newgrp docker# 验…

微处理原理与应用篇---STM32寄存器控制GPIO

在 ARM 架构下使用 C 语言控制 32 位寄存器实现 GPIO 操作&#xff0c;需结合芯片手册进行寄存器映射和位操作。以下以 STM32F103&#xff08;Cortex-M3 内核&#xff09;为例&#xff0c;详细介绍实现方法&#xff1a; 一、STM32F103 GPIO 控制&#xff08;标准外设库&#x…

基于OPUS-MT模型的中译英程序实现

这是我的kaggle账号名“fuliuqin” 代码参考如下&#xff1a; nlp.paperflq | KaggleExplore and run machine learning code with Kaggle Notebooks | Using data from [Private Datasource]https://www.kaggle.com/code/fuliuqin/nlp-paperflq 目录 绪论 研究背景与意义 研究…