深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化

从简单的RNN到复杂的LSTM/GRU,再到引入注意力机制,研究者们一直在努力解决序列建模的核心问题。每一步的进展都为下一步的突破奠定了基础,最终孕育出了革命性的Transformer架构和GPT大模型。

1. 从n-gram到循环神经网络(RNN)的诞生

1.1 N-gram 模型

在深度学习兴起之前,处理序列数据主要依靠统计方法,如n-gram模型。

N-gram 是一种基于统计的语言模型,它的核心思想是:一个词出现的概率只与它前面的 n-1 个词有关。

举个例子,假设我们有一个句子:“我喜欢吃苹果”

  • 1-gram (unigram): 只考虑单个词的概率,如 P(苹果)
  • 2-gram (bigram): 考虑相邻两个词,如 P(苹果|吃)
  • 3-gram (trigram): 考虑相邻三个词,如 P(苹果|喜欢吃)

n-gram 模型的工作原理:

  1. 统计训练语料中各种 n-gram 组合出现的次数
  2. 根据统计结果计算条件概率
  3. 预测时,使用这些概率来估计下一个词或整个句子的可能性

优点:

  • 简单直观,计算效率高
  • 在一些简单任务中效果不错

缺点:

  • 无法捕捉长距离依赖
  • 数据稀疏问题:n 越大,出现未见过的组合的概率就越高
  • 没有语义理解,纯粹基于统计

1.2 循环神经网络 (RNN)

RNN 是一种能够处理序列数据的神经网络,它的核心思想是在处理序列的每一步都保持一个"内部状态"。

想象 RNN 是一个处理信息的工人:

  • 他有一个记事本(隐藏状态),记录了之前看到的重要信息
  • 每次他接收新信息时,都会结合记事本上的内容来理解
  • 然后他会更新记事本,并给出一个响应
  • 这个过程不断重复,直到处理完整个序列

优点:

  • 能够处理变长序列
  • 理论上可以捕捉长距离依赖
  • 参数共享,模型更紧凑

缺点:

  • 实际中难以学习很长的依赖关系(梯度消失/爆炸问题)
  • 计算是顺序的,难以并行化

1.3 n-gram到RNN的进化

  • n-gram 是一种"死记硬背"的方法,它只能记住固定长度的词组
  • RNN 更像是"理解"了语言,它可以灵活地处理不同长度的输入,并尝试捕捉更长距离的关系

n-gram 模型简单高效,但缺乏灵活性和对长距离依赖的理解。RNN 引入了"记忆"的概念,使模型能够更好地处理序列数据,但也带来了新的挑战。

这两种方法代表了自然语言处理从纯统计方法到神经网络方法的演进,为后续的深度学习模型(如 LSTM、Transformer 等)铺平了道路。

2. 从RNN到LSTM/GRU

2.1 RNN的问题

简单的RNN存在严重的问题:
a) 梯度消失/爆炸
想象一下,你在玩传话游戏。如果链条很长:

  • 梯度消失就像每个人都小声说话,到最后几乎听不见了
  • 梯度爆炸就像每个人都大声喊叫,到最后变成了刺耳的噪音

在RNN中,这个问题体现为:

  • 长序列中,早期信息对后期的影响会变得极小(消失)或极大(爆炸)
  • 这使得网络难以学习长期依赖关系

b) 长期依赖难以捕捉
RNN理论上可以记住长序列的信息,但实际上:

  • 新信息不断覆盖旧信息
  • 久远的信息很容易被"遗忘"

这就像你试图记住一本长篇小说的所有细节,但到最后可能只记得最近看的几章。

2.2 LSTM (长短期记忆网络)

LSTM通过引入"门"机制来解决上述问题。想象LSTM是一个更智能的记事本系统:

a) 结构
LSTM有三个门:

  • 遗忘门: 决定丢弃哪些信息
  • 输入门: 决定存储哪些新信息
  • 输出门: 决定输出哪些信息

还有一个单元状态(cell state),作为长期记忆。

b) 工作原理

  1. 遗忘门决定从单元状态中删除什么信息
  2. 输入门决定向单元状态添加什么新信息
  3. 更新单元状态
  4. 输出门决定基于单元状态输出什么

c) 如何解决RNN的问题

  • 长期记忆: 单元状态可以长期保存重要信息,不易被新信息覆盖
  • 梯度流动: 门机制允许梯度更容易地流过网络,缓解梯度消失/爆炸问题

2.3 GRU (门控循环单元)

GRU是LSTM的简化版本,性能相当但计算更高效。

a) 结构
GRU只有两个门:

  • 更新门: 决定保留多少旧信息和添加多少新信息
  • 重置门: 决定忽略多少过去的信息

b) 工作原理

  1. 更新门决定保留多少过去的信息和加入多少新信息
  2. 重置门帮助决定如何将新输入与先前的记忆组合
  3. 计算候选隐藏状态
  4. 最终更新隐藏状态

c) 与LSTM的比较

  • 简化结构: 没有单独的单元状态,直接更新隐藏状态
  • fewer参数: 计算更高效
  • 性能: 在许多任务上与LSTM相当

比喻理解:

  • 如果说简单RNN是一个只会机械记录的秘书
  • 那么LSTM就像一个有条理的管理者,懂得取舍、分类和整理信息
  • 而GRU则像一个精简版的管理者,用更少的步骤完成类似的工作

3. 从注意力机制到Transformer的演变

3.1 注意力机制的引入

在注意力机制被引入之前,序列到序列(Seq2Seq)模型通常采用编码器-解码器结构:

  • 编码器读取整个输入序列,将其压缩成一个固定长度的向量
  • 解码器基于这个向量生成输出序列

这种方法的问题是:

  • 信息瓶颈: 所有信息都被压缩到一个固定长度的向量中
  • 长序列困难: 对于很长的序列,难以保留所有重要信息

**注意力机制的核心思想: **

注意力机制的本质是"从关注全部到关注重点"。就像人类在阅读长文本时会自然地聚焦于关键信息一样,注意力机制使得机器学习模型能够在处理大量输入数据时,将计算资源更多地分配给重要的部分。

  1. 人类认知过程的启发

想象你正在翻译一本书:

  • 你不会先读完整本书,把所有内容记在脑子里,然后开始翻译
  • 相反,你会一边读一边译,每翻译一个词或一个句子时,你都会回看原文的相关部分

这就是注意力机制的灵感来源。它模仿了人类处理复杂信息的方式:有选择性地关注最相关的部分。

  1. 权重分配

注意力机制通过分配"权重"来决定关注度:

  • 相关性高的部分获得更高的权重
  • 相关性低的部分获得更低的权重

这就像你在阅读时,重要的内容你会多看几眼,不重要的则可能略过。

  1. 突破长度限制

注意力机制有效地解决了处理长序列的问题:

  • 不再受固定长度向量的限制
  • 理论上可以处理任意长度的输入
  • 长距离依赖可以直接建立,而不需要通过多个时间步传递

3.2 查询-键-值(Query-Key-Value)机制

QKV机制是实现注意力的一种具体方法。这里的Q代表Query(查询),K代表Key(键),V代表Value(值)。

在这个机制中,模型会计算Query和每个Key之间的相似度,然后用这些相似度作为权重来对Value进行加权求和。这样,与Query更相关的内容就会得到更多的"注意力"。

想象你在一个大型图书馆里:

  1. 查询(Query)就像你脑海中的问题或需求。比如,“我想了解人工智能”。

  2. 键(Key)就像每本书的标题或目录。它们是书籍内容的简要概括。

  3. 值(Value)就是书籍的实际内容。

现在,注意力机制的工作方式是:

  1. 你带着你的问题(Query)在图书馆里走动。

  2. 你快速浏览每本书的标题和目录(Key),看看哪些可能与你的问题相关。

  3. 对于看起来相关的书,你会多花些时间翻阅其内容(Value)。

  4. 最后,你综合了所有相关书籍的信息,形成了对你问题的答案。

在这个过程中:

  • "注意力"体现在你对不同书籍投入的时间和精力不同。与你问题相关度高的书,你会更加关注。

  • Query和Key的匹配度决定了你对某本书的关注程度。

  • Value是你最终获取的信息。

在机器学习中:

  1. 系统计算Query和每个Key的相似度。

  2. 用这些相似度作为权重,对所有Value进行加权求和。

  3. 得到的结果就是系统"关注"后的输出。

这种机制允许模型动态地决定要关注输入的哪些部分,从而更好地处理序列数据(如文本或时间序列)。

总的来说,Query-Key-Value机制是实现注意力的一种聪明方法,它模仿了人类有选择性地关注信息的过程。

3.3 自注意力(Self-Attention)的提出

自注意力(Self-Attention)是注意力机制的一种特殊形式,它允许输入序列中的每个元素都能和序列中的其他元素进行交互。

想象一群人在开会讨论问题。每个人发言时,都会根据之前其他人说的内容来调整自己的发言。这就像自注意力的工作方式。

简单来说:

  • 注意力机制主要用于处理输入和输出序列之间的依赖关系。
  • 自注意力机制则专注于处理序列内部的依赖关系。

让我们深入了解它们的区别:

  1. 应用场景:

    • 注意力机制通常在编码器-解码器结构中使用,作为连接两者的桥梁。例如,在机器翻译任务中,它帮助模型在生成目标语言时关注源语言的相关部分。
    • 自注意力机制可以在同一个模型中多次使用,是网络结构的一个组成部分。它在处理长序列时特别有效,如长文本理解或图像处理。
  2. 工作原理:

    • 注意力机制计算输入序列和输出序列之间的相关性,为输入的不同部分分配不同的权重。
    • 自注意力机制计算序列内部各元素之间的相关性,允许每个元素与序列中的所有其他元素进行交互。
  3. 信息处理方式:

    • 注意力机制像人类大脑一样,在面对大量信息时,能够筛选出最重要的部分进行处理。
    • 自注意力机制更像是序列中的每个元素都在相互"交谈",互相理解彼此的重要性。
  4. 计算复杂度:

    • 注意力机制的计算复杂度通常较低,因为它只在编码器和解码器之间进行一次计算。
    • 自注意力机制的计算复杂度较高,因为它需要计算序列中每个元素与其他所有元素的关系。
  5. 灵活性:

    • 自注意力机制比传统的注意力机制更加灵活,能够捕捉到更复杂的序列内部依赖关系。

自注意力的一个典型应用是Transformer模型,它完全基于自注意力机制,在多个NLP任务上都取得了优秀的效果。

3.4 多头自注意力

多头自注意力机制是自注意力的一个扩展,它允许模型同时从不同的角度来关注信息。

想象你在看一部复杂的电影。你可能会同时关注多个方面:人物的表情、对话的内容、场景的布置等。多头自注意力就是让模型也能够同时从多个角度来"看"输入数据。

可以把自注意力机制比作一个高效的会议:

  • 每个与会者(输入元素)都有机会发言(Query)。
  • 其他人根据自己的专业(Key)来决定是否应该仔细听(给予高的注意力分数)。
  • 最后,每个人根据听到的内容(加权的Value)来更新自己的观点。

多头自注意力则像是同时进行多场平行的小组讨论

  • 每个小组关注不同的主题
  • 最后汇总所有小组的成果

3.5 Transformer在自注意力基础上的创新

  1. 整体架构

Transformer由编码器(Encoder)和解码器(Decoder)两部分组成,类似于传统的序列到序列(Seq2Seq)模型。但不同的是,Transformer不使用循环神经网络(RNN),而是完全基于注意力机制。

可以将Transformer比作一个高效的翻译团队:

  • 编码器团队先仔细阅读并理解源文本,每个成员(层)都会反复审视文本,相互交流(自注意力),形成深入理解。
  • 解码器团队负责翻译,他们一边参考编码器团队的理解(编码器-解码器注意力),一边讨论已翻译的部分(掩码自注意力),逐步产出翻译。
    transformer

Transformer在自注意力的基础上引入了几个重要创新:

a) 多头注意力(Multi-Head Attention)

  • 原理:同时从多个角度理解信息
  • 比喻:像是多个专家同时分析同一问题,每个专家关注不同的方面

b) 位置编码(Positional Encoding)

  • 原理:由于没有使用RNN,Transformer需要额外的位置信息。位置编码会被加到词嵌入上,以表示词在序列中的位置。
  • 比喻:给圆桌会议的每个参与者一个编号,让大家知道谁在哪个位置说话

c) 前馈神经网络(Feed-Forward Neural Network)

  • 原理:在注意力层后增加非线性变换
  • 比喻:像是在每轮讨论后,给每个参与者一些时间来独立思考和总结

5. 从Transformer到GPT

5.1 Transformer作为基础

Transformer就像是一个革命性的语言处理引擎,它有几个关键特点:

a) 强大的特征提取能力
Transformer能够捕捉语言中的复杂模式和长距离关系。

比喻:想象Transformer是一个超级阅读专家,它不仅能理解每个句子,还能轻松地连接文章开头和结尾的信息。

b) 并行处理能力
Transformer可以同时处理输入的多个部分。

比喻:这就像是有多个人同时阅读一本书的不同章节,然后快速交换信息,大大提高了阅读效率。

c) 灵活的架构设计
Transformer可以根据需要调整和扩展。

比喻:它就像一套高级乐高积木,可以根据不同任务搭建成各种形状。

d) 自监督学习的"游乐场"
Transformer特别适合进行自监督学习。

比喻:想象Transformer是一个智能游乐场,语言就是游戏。模型在这个游乐场中玩各种语言游戏(如猜词、续写故事),通过玩耍自然而然地学会了语言规律。

5.2 预训练的兴起

预训练的核心思想是让模型在大量数据上学习通用知识,然后再针对特定任务进行调整。这个过程有几个关键点:

a) 通用知识学习
模型在大规模、多样化的数据上学习。

比喻:这就像让一个学生在进入大学之前,先在一个巨大的图书馆中自由阅读各种书籍,建立广泛的知识基础。

b) 无监督学习
预训练通常不需要人工标注的数据。

比喻:这就像学生自主阅读,不需要老师时刻在旁指导。

c) 迁移学习
预训练获得的知识可以应用到多个具体任务中。

比喻:就像一个精通多国语言的人,可以很快适应不同国家的生活。

d) 微调过程
预训练后,模型可以针对特定任务进行小规模调整。

比喻:这就像一个全能运动员,在掌握了基本体能后,可以快速适应不同的运动项目。

5.3 Transformer和预训练的结合

Transformer和预训练的结合,创造了一个强大的AI语言处理系统:

  • Transformer提供了高效学习和处理语言的"大脑"
  • 预训练提供了获取广泛知识的方法

比喻:这就像给了AI一个超级大脑(Transformer)和一个无限的图书馆(大规模数据),让它能够自主学习,快速成长,并适应各种语言任务。

这种结合极大地推动了NLP的发展:

  • 模型可以理解更复杂的语言现象
  • 可以更好地处理新的、未见过的任务
  • 大大减少了对标注数据的需求

比喻:这就像培养出了一个博学多才的语言天才,它不仅知识渊博,而且学习能力超强,可以快速适应各种新的语言挑战。

Transformer和预训练的结合,就像是给了AI一个强大的学习系统和丰富的学习资源。这使得AI在语言处理方面有了质的飞跃,能够更好地理解和生成人类语言,为各种NLP应用打开了新的可能性。

  • 随着预训练模型参数的增加,性能呈现出惊人的提升。
  • 这些大模型展现出了惊人的多任务处理能力。
  • 当模型达到一定规模时,会出现一些意想不到的能力。

5.4 从Transformer到GPT

GPT 是 Transformer 架构的一个特定实现和应用,核心思想是利用大规模无标注文本数据进行预训练,然后在特定任务上进行微调。

  • GPT专注于生成任务,是一个自回归语言模型: 预测序列中的下一个词
  • GPT 只使用了 Transformer 的解码器部分。
  • GPT 采用了 Transformer 的核心机制,如自注意力、多头注意力等,并使用因果掩码(causal mask),确保只看到过去的信息
  • GPT 开启了大规模预训练 + 微调的范式,通过大规模预训练和任务特定微调,扩展了 Transformer 的应用范围。

GPT工作流程:

  1. 预训练阶段:

    • 在大规模文本语料上训练,学习预测下一个词
    • 模型学到语言的一般知识和模式
  2. 微调阶段:

    • 在特定任务的数据上进行微调
    • 调整模型以适应特定任务(如问答、摘要等)
  3. 推理阶段:

    • 给定提示(prompt),模型逐词生成后续内容
    • 每次生成一个词,将其加入序列,继续预测下一个词

GPT 已经经历了多个版本的演进:

  • GPT-1:首次引入 GPT 架构。
  • GPT-2:增加了模型规模,展示了强大的零样本学习能力。
  • GPT-3:进一步扩大规模,展示了惊人的少样本学习能力。
  • GPT-4:最新版本,具有更强的理解和生成能力。

参考

从感知机到Transformer,一文概述深度学习简史:https://www.jiqizhixin.com/articles/2022-05-24-6
图解NLP模型发展:从RNN到Transformer: https://developer.aliyun.com/article/1229038

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

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

相关文章

【JWT】jwt实现HS、RS、ES、ED签名与验签

JWT 实现 HS、RS、ES 和 ED 签名与验签 签名方式算法密钥类型签名要点验签要点HSHMAC-SHA256对称密钥- 使用 crypto/hmac 和对称密钥生成 HMAC 签名- 将 header.payload 作为数据输入- 使用同一密钥重新计算 HMAC 签名- 比较计算结果与接收到的签名是否一致RSRSA-SHA256公钥 …

地址栏信息location

获取信息 页面跳转 location.href当前地址栏信息 location.assign()设置跳转新的页面 location.replace() location.reload()刷新页面

程序员转型测试:解锁漏洞挖掘新旅程

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 程序…

08-ArcGIS For JavaScript-通过Mesh绘制几何体(Cylinder,Circle,Box,Pyramid)

目录 概述代码实现1、Mesh.createBox2、createPyramid3、Mesh.createSphere4、Mesh.createCylinder 完整代码 概述 对于三维场景而言,二位的点、线、面,三维的圆、立方体、圆柱等都是比较常见的三维对象,在ArcGIS For JavaScript中我们知道点…

直线拟合例子 ,岭回归拟合直线

目录 直线拟合,算出离群点 岭回归拟合直线: 直线拟合,算出离群点 import cv2 import numpy as np# 输入的点 points np.array([[51, 149],[122, 374],[225, 376],[340, 382],[463, 391],[535, 298],[596, 400],[689, 406],[821, 407] ], dtypenp.float32)# 使用…

SVN客户端使用手册

目录 一、简介 二、SVN的安装与卸载 1. 安装(公司内部一般会提供安装包和汉化包,直接到公司内部网盘下载即可,如果找不到可以看下面的教程) 2. 查看SVN版本 ​编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…

衡量算法性能的量级标准:算法复杂度

今天开始数据结构的学习!作为一大重点,拿出态度很重要,想要真实掌握,博客笔记自然少不了!重点全部上色!避免疏忽 下面我们从0基础开始学习今天的第一节!不用担心看不懂,拒绝枯燥的理…

Spring Boot Starter介绍

前言 大概10来年以前,当时springboot刚刚出现并没有流行,当时的Java开发者们开发Web应用主要是使用spring整合springmvc或者struts、iBatis、hibernate等开发框架来进行开发。项目里一般有许多xml文件配置,其中配置了很多项目中需要用到的Be…

Java面试题2025-Spring

讲师:邓澎波 Spring面试专题 1.Spring应该很熟悉吧?来介绍下你的Spring的理解 1.1 Spring的发展历程 先介绍Spring是怎么来的,发展中有哪些核心的节点,当前的最新版本是什么等 通过上图可以比较清晰的看到Spring的各个时间版本对…

浅谈Redis

2007 年,一位程序员和朋友一起创建了一个网站。为了解决这个网站的负载问题,他自己定制了一个数据库。于2009 年开发,称之为Redis。这位意大利程序员是萨尔瓦托勒桑菲利波(Salvatore Sanfilippo),他被称为Redis之父,更…

element tbas增加下拉框

使用Tabs 标签页的label插槽,嵌入Dropdown 下拉菜单,实现Tabs 标签页增加下拉切换功能 Tabs 标签页 tab-click"事件"(这个事件当中到拥有下拉框的tab里时,可以存一下Dropdown 第一个菜单的id,实现点击到拥有…

SQL-leetcode—1179. 重新格式化部门表

1179. 重新格式化部门表 表 Department: ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中,(id, month) 是表的联合主键。 这个表格有关…

【Address Overfitting】解决过拟合的三种方法

目录 1. 收集更多数据实践方法:适用场景:优缺点: 2. 特征选择方法介绍:实践示例:适用场景:优缺点: 3. 正则化(Regularization)正则化类型:实践示例&#xff1…

面向通感一体化的非均匀感知信号设计

文章目录 1 非均匀信号设计的背景分析1.1 基于OFDM波形的感知信号1.2 非均匀信号设计的必要性和可行性1.2 非均匀信号设计的必要性和可行性 3 通感一体化系统中的非均匀信号设计方法3.1 非均匀信号的设计流程(1)均匀感知信号设计(2&#xff0…

【深度学习】搭建PyTorch神经网络进行气温预测

第一步 数据加载与观察 ①导包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import torch import torch.optim as optim import warnings warnings.filterwarnings("ignore") %matplotlib inline ②加载数据 features pd.read_csv(…

ESP8266 NodeMCU与WS2812灯带:实现多种花样变换

在现代电子创意项目中,LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能,我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程,实现从基础到高级的灯光效果&#xff…

pycharm踩坑(1)

由于我重装系统,导致我的pycharm需要进行重装,因此我觉得需要记录一下,pycharm的正确使用方法 汉化 汉化很重要,除非你从小就双语教学,不然你看着那些英文就是会消耗大量的精力 我使用的pycharm版本是pycharm-commun…

OpenCV2D 特征框架 (11)特征检测与描述用于检测二值图像中连通区域(即“斑点”或“blob”)的类cv::SimpleBlobDetector的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::SimpleBlobDetector 是 OpenCV 中用于检测二值图像中连通区域(即“斑点”或“blob”)的类。这些连通区域可以是白色前…

Unity自学之旅05

Unity自学之旅05 Unity学习之旅⑤📝 AI基础与敌人行为🥊 AI导航理论知识(基础)开始实践 🎃 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 🤗 总结归纳 Unity学习之旅⑤ 📝 AI基础与敌…

浅谈Unity中Canvas的三种渲染模式

Overview UGUI通过 Canvas 组件渲染和管理UI元素。Canvas 是 UI 元素的容器,它决定了 UI 元素的渲染方式以及它们在屏幕上的显示效果。Canvas 有三种主要的渲染模式,每种模式有不同的用途和特点。本文将介绍这三种渲染模式 1. Screen Space - Overlay 模…