大语言模型发展史:从规则系统到Transformer的技术演进与核心突破

1次阅读
没有评论

共计 1931 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

技术背景:NLP 发展的三个阶段

自然语言处理技术经历了三个主要发展阶段,每个阶段都有其特点和局限性:

大语言模型发展史:从规则系统到 Transformer 的技术演进与核心突破

  1. 规则系统时代(1950s-1980s)
  2. 基于人工编写的语法规则和词典
  3. 需要大量语言学专家知识
  4. 无法处理语言歧义和复杂语义
  5. 典型系统:ELIZA 聊天机器人

  6. 统计学习时代(1990s-2010s)

  7. 基于概率模型和统计方法
  8. 需要大量标注数据
  9. 难以捕捉长距离依赖关系
  10. 代表技术:n-gram 语言模型、隐马尔可夫模型

  11. 神经网络时代(2010s- 至今)

  12. 基于分布式表示和端到端学习
  13. 可以自动学习语言特征
  14. 计算资源需求大
  15. 代表技术:词嵌入、循环神经网络

里程碑模型解析

ELMo(2018):双向 LSTM 的突破

  • 首次提出上下文相关的词表示
  • 使用双向 LSTM 捕捉上下文信息
  • 解决了传统词嵌入的一词多义问题

GPT(2018):自回归模型的崛起

  • 基于 Transformer 解码器架构
  • 采用自回归生成方式
  • 在多项任务上实现零样本学习

BERT(2018):双向 Transformer 的革命

  • 引入 Masked Language Model 预训练目标
  • 使用双向 Transformer 编码器
  • 通过 Next Sentence Prediction 任务学习句子关系

关键技术对比

模型 训练目标 注意力机制 参数规模 代表论文
ELMo 语言模型 94M NAACL2018
GPT-1 语言模型 单向 117M arXiv:1801.10198
BERT MLM+NSP 双向 340M arXiv:1810.04805

现代挑战

  1. 推理成本高 :大模型推理需要大量计算资源
  2. 偏见消除难 :训练数据中的偏见难以完全消除
  3. 知识更新慢 :静态训练无法适应快速变化的知识
  4. 解释性差 :模型决策过程难以解释

实践建议

选择预训练模型时需要考虑以下指标:

  • 计算效率(FLOPS)
  • 任务准确率
  • 微调成本
  • 模型大小
  • 推理延迟

Transformer 自注意力实现

import torch
import torch.nn as nn

class SelfAttention(nn.Module):
    def __init__(self, embed_size, heads):
        super(SelfAttention, self).__init__()
        self.embed_size = embed_size
        self.heads = heads
        self.head_dim = embed_size // heads

        # 线性变换矩阵
        self.values = nn.Linear(self.head_dim, self.head_dim, bias=False)
        self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False)
        self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False)
        self.fc_out = nn.Linear(heads * self.head_dim, embed_size)

    def forward(self, values, keys, query, mask):
        N = query.shape[0]  # batch size
        value_len, key_len, query_len = values.shape[1], keys.shape[1], query.shape[1]

        # 分割多头
        values = values.reshape(N, value_len, self.heads, self.head_dim)
        keys = keys.reshape(N, key_len, self.heads, self.head_dim)
        queries = query.reshape(N, query_len, self.heads, self.head_dim)

        # 计算注意力分数
        energy = torch.einsum("nqhd,nkhd->nhqk", [queries, keys])
        if mask is not None:
            energy = energy.masked_fill(mask == 0, float("-1e20"))

        # 计算注意力权重
        attention = torch.softmax(energy / (self.embed_size ** (1/2)), dim=3)

        # 应用注意力权重
        out = torch.einsum("nhql,nlhd->nqhd", [attention, values])
        out = out.reshape(N, query_len, self.heads * self.head_dim)

        # 输出线性变换
        out = self.fc_out(out)
        return out

开放问题

在多模态趋势下,纯文本大模型的发展边界在哪里?随着视觉、听觉等多模态数据的融合,纯文本模型是否会逐渐被取代?或者它们将在特定领域继续保持优势?这是值得思考的问题。

正文完
 0
评论(没有评论)