当前位置: 首页 > news >正文

AI 语言模型发展史:统计方法、RNN 与 Transformer 的技术演进

引言

自然语言处理(NLP)是 AI 领域的重要分支,而语言模型(Language Model, LM)是 NLP 的核心技术。语言模型经历了从 统计方法RNN(循环神经网络),再到 Transformer 的演进,每一步都在提升模型的表达能力和计算效率。

本文从技术角度详细分析三种方法的核心原理、优缺点,并探讨 Transformer 如何在 AI 大模型(如 GPT-4)中发挥关键作用。


1. 统计方法(N-gram)

1.1 方法原理

统计方法基于 马尔可夫假设(Markov Assumption),认为当前词的出现仅依赖于前面 n-1 个词,而不是整个句子历史。常见的 N-gram 语言模型如下:

  • Unigram(1-gram): 仅考虑每个词的单独概率 P(w)。
  • Bigram(2-gram): 仅考虑当前词的前一个词 P(w_t | w_{t-1})。
  • Trigram(3-gram): 仅考虑当前词的前两个词 P(w_t | w_{t-2}, w_{t-1})。

语言模型的计算方式如下:
[
P(W) = P(w_1, w_2, …, w_T) = \prod_{t=1}^{T} P(w_t | w_{t-n+1}, …, w_{t-1})
]

1.2 优缺点

优点

  • 计算简单,易于实现。
  • 适用于小型数据集,能快速计算概率。

缺点

  • 长距离依赖问题:N-gram 只能考虑有限的上下文,忽略远距离词的影响。
  • 数据稀疏性:高阶 N-gram 需要大量数据,罕见短语可能无统计数据。
  • 无法泛化:仅能处理训练数据中见过的词汇,对新词无能为力。

2. RNN(循环神经网络)

2.1 方法原理

RNN 通过隐藏状态 h_t 记忆过去的信息,解决了 N-gram 只能处理短上下文的问题。RNN 的核心计算公式如下:
[
h_t = f(W_h h_{t-1} + W_x x_t + b)
]
[
y_t = W_y h_t + b_y
]
其中:

  • ( h_t ) 是当前的隐藏状态,包含了过去的信息。
  • ( W_h, W_x, W_y ) 是权重矩阵,( b ) 是偏置项。
  • ( x_t ) 是输入,( y_t ) 是输出。

2.2 变体(LSTM & GRU)

(1) LSTM(长短时记忆网络)
LSTM 通过 遗忘门(Forget Gate)、输入门(Input Gate)、输出门(Output Gate) 控制信息流动,使其能够记住长期依赖信息:
[
f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)
]
[
i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)
]
[
o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)
]
[
c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c_t}
]
[
h_t = o_t \odot \tanh(c_t)
]
其中:

  • ( f_t, i_t, o_t ) 分别为遗忘门、输入门和输出门。
  • ( c_t ) 是细胞状态,存储长期信息。

(2) GRU(门控循环单元)
GRU 结构比 LSTM 更简单,合并了输入门和遗忘门:
[
z_t = \sigma(W_z [h_{t-1}, x_t])
]
[
r_t = \sigma(W_r [h_{t-1}, x_t])
]
[
\tilde{h_t} = \tanh(W_h [r_t \odot h_{t-1}, x_t])
]
[
h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h_t}
]

2.3 优缺点

优点

  • 能处理任意长度的序列,比 N-gram 适应更长的上下文。
  • LSTM/GRU 解决了普通 RNN 的梯度消失问题。

缺点

  • 训练速度慢,难以并行化(序列计算依赖前一步)。
  • 对长序列仍存在信息遗忘问题。

3. Transformer(自注意力机制)

3.1 方法原理

Transformer 彻底抛弃了 RNN,使用 自注意力机制(Self-Attention) 计算词与词之间的关系,并行处理整个句子。

(1) 自注意力机制

给定输入序列 ( X = [x_1, x_2, …, x_n] ),我们计算每个词的 查询(Q)键(K)值(V)
[
Q = XW_Q, \quad K = XW_K, \quad V = XW_V
]
计算注意力权重:
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right) V
]

(2) 多头注意力

多个注意力头(Multi-Head Attention)并行计算:
[
\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, …, \text{head}_h) W_O
]

(3) 位置编码

由于 Transformer 没有 RNN 的时序结构,需要 位置编码(Positional Encoding) 引入位置信息:
[
PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d})
]
[
PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d})
]

3.2 优缺点

优点

  • 并行计算,提高训练速度。
  • 处理长序列时效果优于 RNN,没有梯度消失问题。

缺点

  • 计算量大,对硬件要求高。
  • 长文本处理成本较高(注意力计算复杂度为 ( O(n^2) ))。

总结

方法核心原理优点缺点
N-gram统计词频概率计算简单不能处理长距离依赖
RNN记住前面信息逐步预测适合短文本训练慢,长句信息遗忘
Transformer关注整个句子,注意力机制并行计算,高效处理长文本计算量大,训练成本高

目前,Transformer 是大模型(如 GPT-4、BERT)的核心技术,未来 NLP 发展仍围绕自注意力机制展开。


📌 如果你想深入学习,可以研究 Transformer 细节,如多头注意力、Feedforward 层等。

相关文章:

AI 语言模型发展史:统计方法、RNN 与 Transformer 的技术演进

引言 自然语言处理(NLP)是 AI 领域的重要分支,而语言模型(Language Model, LM)是 NLP 的核心技术。语言模型经历了从 统计方法 到 RNN(循环神经网络),再到 Transformer 的演进&…...

Pycharm中查找与替换

1、Edit -> Find -> Find 在当前文件中查找 2、Edit -> Find -> Find in Files 在所有文件中查找 3、Edit -> Find -> Replace 在当前文件中执行替换 4、Edit -> Find -> Replace in Files 在所有文件中执行替换...

有向图的强连通分量: Kosaraju算法和Tarjan算法详解

在上一篇文章中, 我们了解了图的最小生成树算法. 本节我们来学习 图的强连通分量(Strongly Connected Component, SCC) 算法. 什么是强连通分量? 在 有向图 中, 若一组节点内的任意两个节点都能通过路径互相到达(例如 A → B A \rightarrow B A→B 且 B → A B \rightarro…...

mac相关命令

显示和隐藏usr等隐藏文件文件 terminal输入: defaults write com.apple.Finder AppleShowAllFiles YESdefaults write com.apple.Finder AppleShowAllFiles NO让.bashrc每次启动shell自动生效 编辑vim ~/.bash_profile 文件, 加上 if [ -f ~/.bashrc ]; then. ~/.bashrc fi注…...

代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和

242.有效的字母异位词 题目链接:242.有效的字母异位词 文档讲解:代码随想录有效的字母异位词 视频讲解:LeetCode:有效的字母异位词 状态:学会了 思路: 数组其实是简单哈希表。 哈希表用来快速判断元素是否在…...

dify实现分析-rag-关键词索引的实现

概述 在dify中有两种构建索引的方式,一种是经济型,另一种是高质量索引(通过向量数据库来实现)。其中经济型就是关键词索引,通过构建关键词索引来定位查询的文本块,而关键词索引的构建是通过Jieba这个库来完…...

【小白学HTML5】一文讲清常用单位(px、em、rem、%、vw、vh)

html5中,常用的单位有px、em、rem、%、vw、vh(不常用)、cm、m等,这里主要讲解px、em、rem、%、vw。 学习了解:主流浏览器默认的字号:font-size:16px,无论用什么单位,浏览器最终计算…...

Fastgpt学习(5)- FastGPT 私有化部署问题解决

1.☺ 问题描述: Windows系统,本地私有化部署,postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions ",“ DETAIL: Permissions should be urwx (0700) or urwx,gr…...

ubuntu下安装TFTP服务器

在 Ubuntu 系统下安装和配置 TFTP(Trivial File Transfer Protocol)服务器可以按照以下步骤进行: 1. 安装 TFTP 服务器软件包 TFTP 服务器通常使用 tftpd-hpa 软件包,你可以使用以下命令进行安装: sudo apt update …...

深入解析 iText 7:从 PDF 文档中提取文本和图像

在现代开发中,PDF 文件的操作是不可避免的一部分。无论是生成报告、解析文档,还是从文件中提取信息,我们常常需要处理 PDF 文件。iText 是一个非常强大的库,广泛应用于 PDF 文件的创建、修改和解析。自 iText 7 发布以来&#xff…...

Rust编程语言入门教程 (六)变量与可变性

Rust 系列 🎀Rust编程语言入门教程(一)安装Rust🚪 🎀Rust编程语言入门教程(二)hello_world🚪 🎀Rust编程语言入门教程(三) Hello Cargo&#x1f…...

事务--实操演示

目录 一、准备工作 二、在MySQL中操作事务(重点) 第一种方式:使用命令的方式 第二种方式:设置MySQL事务不默认提交的方式 结 三、在JDBC中操作事务(掌握) 第一种方式:使用命令的方式 第…...

PHP是如何并行异步处理HTTP请求的?

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构,包含一系列功能要素,被分为大约20个模块 Spring核心容器:包含Core、Bean、Context、Expression Language模块 Core :其他组件的基本核心&#xff…...

在 Vue 3 中使用 Lottie 动画:实现一个加载动画

在现代前端开发中,动画是提升用户体验的重要元素之一。Lottie 是一个流行的动画库,它允许我们使用 JSON 文件来渲染高质量的动画。本文将介绍如何在 Vue 3 项目中集成 Lottie 动画,并实现一个加载动画效果。 如果对你有帮助请帮忙点个&#x…...

深度解析:使用 Headless 模式 ChromeDriver 进行无界面浏览器操作

一、问题背景(传统爬虫的痛点) 数据采集是现代网络爬虫技术的核心任务之一。然而,传统爬虫面临多重挑战,主要包括: 反爬机制:许多网站通过检测请求头、IP地址、Cookie等信息识别爬虫,进而限制…...

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核…...

计算机网络抄手 运输层

一、运输层协议概述 1. 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&…...

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...

【嵌入式Linux应用开发基础】特殊进程

目录 一、守护进程&#xff08;Daemon Process&#xff09; 1.1. 概念 1.2. 特点 1.3. 守护进程的命名 1.4. 创建守护进程的步骤 1.5. 守护进程的实例 1.6. 守护进程的管理 1.7. 影响与处理 二、僵尸进程&#xff08;Zombie Process&#xff09; 2.1. 僵尸进程的定义…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...