深度学习进阶
目录
生成模型与判别模型
语言模型的发展
一、统计语言模型阶段(早期)
二、神经网络语言模型阶段
三、基于Transformer的大语言模型阶段
四、主要技术路线与代表家族
五、发展趋势与挑战
Ngram和词向量
Ngram
神经网络语言模型
词向量
NNLM
Word2Vec
补充知识
RNN LSTM 和GRU
注意力机制和Transformer
序列建模
注意力机制
Transformer
生成模型与判别模型
判别模型:模型输出的结果更加确定,数据通过模型逐步降维
判别模型每个样本都有个输出,每次网络的输出只依赖于当前的输入,是独立的
生成模型:模型从原始数据分布中进行采样,生成新的样本
传统深度学习,会针对不同的任务设计不同的网络
- 用于图像分类的网络
- 用于文本分类的网络
- 用于实体抽取的网络 等等
语言模型的发展
语言模型定义:语言模型是计算语言学与自然语言处理(NLP)的核心基础,主要通过对语言序列(如词、句子、文档)的概率分布进行建模,实现对语言规律的学习与应用。(在给定上下文时给出下一个词出现概率的模型)
语言模型广泛应用于多种自然语言处理任务中
语言模型的发展经历了从早期的简单统计模型到现代大语言模型的革命性演进
一、统计语言模型阶段(早期)
统计语言模型是语言处理的早期方法,主要通过分析词序列的出现频率来预测下一个词。
- 核心原理 :基于统计学方法,利用大规模语料库中的词频信息建模语言概率分布
- 代表模型 :N-gram模型、隐马尔可夫模型(HMM)
- 特点 :简单易用,但存在数据稀疏和无法捕捉长距离依赖关系的问题
- 应用 :早期的机器翻译、语音识别等任务
二、神经网络语言模型阶段
随着深度学习的兴起,神经网络开始应用于语言建模,解决了统计模型的部分局限性。
- 核心突破 :引入神经网络结构,能够学习词的分布式表示(词嵌入)
- 代表模型 :前馈神经网络语言模型、循环神经网络(RNN)、长短期记忆网络(LSTM)
- 特点 :能够捕捉一定的上下文依赖关系,但RNN类模型在处理长序列时仍存在梯度消失/爆炸问题
- 意义 :为后续大语言模型的发展奠定了基础
三、基于Transformer的大语言模型阶段
2017年Transformer架构的提出,彻底革新了语言模型的发展方向。
1. Transformer架构的诞生(2017年)
- 核心创新 :自注意力机制(Self-Attention),能够高效捕捉长距离依赖关系
- 意义 :彻底重塑了自然语言处理领域,为大语言模型的规模化奠定了技术基础
2. 预训练语言模型的兴起(2018-2019年)
- BERT(2018年) :Google提出的仅编码器模型,通过掩码语言建模和下一句预测任务进行预训练,在理解类任务中表现优异
- GPT-1/GPT-2(2018-2019年) :OpenAI提出的仅解码器模型,通过自回归语言建模进行预训练,在生成类任务中表现出色
- RoBERTa、ALBERT等变体 :对BERT的改进,提升了训练效率和性能
3. 大语言模型的规模化(2020年)
- GPT-3(2020年) :拥有1750亿参数,展示了惊人的少样本和零样本学习能力,证明了模型规模对性能的重要影响
- 特点 :无需针对特定任务进行大量微调,通过提示工程即可适应多种任务
4. 对话式与对齐技术的发展(2022年)
- ChatGPT(2022年) :OpenAI推出的对话式模型,结合了监督微调(SFT)和基于人类反馈的强化学习(RLHF)技术
- 突破 :显著提升了模型的对话能力和安全性,减少了"幻觉"问题
5. 多模态与推理能力的扩展(2023年至今)
- GPT-4(2023年) :支持文本和图像输入的多模态模型,具备更强的推理和理解能力
- GPT-4o(2024年) :整合文本、图像、音频的全方位多模态能力
- DeepSeek-R1(2025年) :中国推出的推理模型,在复杂问题解决方面取得突破,具有超成本效益和开源特性
- 推理模型的兴起 :如OpenAI-o1和DeepSeek-R1,赋予模型更接近人类"系统2思维"的深度推理能力
四、主要技术路线与代表家族
语言模型发展形成了三大主要技术路线:
1. 仅编码器模型(如BERT系列)
- 特点 :双向编码上下文,擅长理解类任务
- 代表模型 :BERT、RoBERTa、ALBERT
2. 仅解码器模型(如GPT系列、LLaMA系列)
- 特点 :自回归生成,擅长文本生成任务
- 代表模型 :GPT系列、LLaMA、DeepSeek-R1 3. 编码器-解码器模型
- 特点 :结合两者优势,适用于翻译等任务
- 代表模型 :T5、PaLM
五、发展趋势与挑战
- 模型规模持续扩大 :参数规模从数十亿到数千亿,甚至万亿级别
- 多模态融合 :文本与图像、音频、视频等多种模态的整合
- 推理能力增强 :从模式识别到深度推理,模拟人类思维过程
- 开源与成本效益 :如DeepSeek-R1等开源模型推动技术普及
- 安全性与对齐 :解决"幻觉"问题,确保生成内容的准确性和安全性
语言模型的发展不仅改变了人工智能与人类交互的方式,也为各行业的创新应用提供了强大支持,标志着人工智能向更接近人类认知能力的方向迈进。
Ngram和词向量
Ngram
Ngram模型是一种基于统计的传统语言模型,其核心思想是将连续的n个词组合成一个整体(称为n元组),通过统计这些n元组在文本中出现的频率,来捕捉词语之间的序列关系和语言模式。
特点与应用:
- n的取值 :常见的有一元文法(Unigram,n=1)、二元文法(Bigram,n=2)、三元文法(Trigram,n=3)等
- 概率计算 :通过条件概率估算文本序列的合理性,如P(w₃|w₁,w₂)表示给定前两个词w₁和w₂时,第三个词w₃出现的概率
- 应用场景 :文本分类、信息检索、拼写纠错、机器翻译等领域
局限性 :
- 无法处理长距离依赖关系
- 存在数据稀疏问题(n越大,模型越容易遇到未见过的n元组)
- 无法直接捕捉词的语义相似性
神经网络语言模型
神经网络语言模型(Neural Network Language Model,NNLM)指的是一类利用神经网络分类器来 计算某个上下文中的单词或单词序列的概率的语言 模型。神经网络语言模型依赖于词嵌入(Word Embedding)和多层神经网络结构来完成上述概率的计算。
神经网络语言模型可以对可能出现在同一上下文中 的其他词的词嵌入进行加权组合,并以此作为未登录词的词嵌入计算未登录词的概率。另外,神经网络语言模型并不需要显式存储每个n-gram及其对应的概率,因而可以有效减轻n-gram语言模型中的维数灾难问题。
- 前馈神经网络语言模型中,将上下文中的每个单词映 射为其对应的词嵌入,然后将这些词嵌入拼接起来作 为输入,通过Softmax函数最终输出一个在词汇表上 的概率分布。
- 循环神经网络语言模型中每个隐层依赖于当前单词的 词嵌入和循环神经网络中上一个状态的隐层,通过这样的机制,循环神经网络语言模型便能利用任意长度 的上下文信息。 数灾难问题
词向量
词向量(Word Vector)是一种将词语映射到低维实数空间的技术,通过向量间的距离关系来表示词与词之间的语义关联。
发展与类型:
早期表示 :One-hot编码(独热编码),用一个高维稀疏向量表示词,但无法衡量语义相似性
现代嵌入方法 :
- Word2Vec :Google提出的模型,包括CBOW(通过上下文预测中心词)和Skip-gram(通过中心词预测上下文)两种架构
- GloVe :基于全局词共现统计的词向量模型
- FastText :考虑词的内部结构,支持处理未登录词
核心优势:
- 语义相似性 :语义相近的词在向量空间中距离相近(如"国王"-"男人"+"女人"≈"女王")
- 降维表示 :将高维稀疏的词汇空间映射到低维稠密的语义空间
- 可计算性 :支持向量运算,为后续NLP任务提供数值化输入
词向量应用
- 词义相似度计算
- 词类比关系计算
- 知识图谱补全
- 推荐系统
NNLM
NNLM(Neural Network Language Model)是一种基于 神经网络的语言模型,用于学习词向量表示。NNLM通过考 虑上下文窗口中的词来建模语言。给定一个目标词,模型会考虑其前面的若干个词作为上下文。
NNLM使用非线性映射将上下文中的词的词向量进行组合。典型的映射函数是sigmoid或tanh等。NNLM最后一层是一 个softmax层,用于预测下一个词。模型的输出是一个词汇表 中每个词的概率分布。
Word2Vec
Word2Vec通过学习文本语料库中的词语上下文关系,将每个词语表示为一个密集的向量,使得语义相似的词在向量空 间中距离较近。
Word2Vec主要有两种模型结构:Skip-gram和CBOW (Continuous Bag of Words)
- Skip-gram(跳字模型):给定一个中心词,Skip-gram 模型试图预测在其周围上下文中可能出现的其他词语。
- BOW(连续词袋模型):CBOW模型与Skip-gram相反, 它试图通过上下文中的多个词来预测中心词。
Word2Vec demo
import pandas as pd
import jieba
from gensim.models import Word2Vec# 加载数据集
dataset = pd.read_csv("../Week01/dataset.csv", sep="\t", header=None)
texts = dataset[0].tolist()# 1. 使用jieba对文本进行分词
# 这一步将每句话分解为一个词语列表。
# 这种列表的列表格式正是Word2Vec所期望的输入格式。
tokenized_sentences = [list(jieba.cut(text)) for text in texts]# 2. 训练Word2Vec模型
# 我们将使用Skip-gram模型(sg=1)来从目标词预测上下文词。
# 向量维度(vector_size)和窗口大小(window)是重要的超参数。
# min_count=1 表示我们不忽略任何词,即使它只出现一次。
model = Word2Vec(sentences=tokenized_sentences,vector_size=100, # 词向量的维度window=5, # 当前词与预测词之间的最大距离min_count=1, # 忽略总频率低于此值的词sg=1 # 1表示Skip-gram,0表示CBOW
)# 你可以保存训练好的模型,以便将来直接使用,无需重新训练。
model.save("word2vec_model.bin")
# 要加载已保存的模型:
# model = Word2Vec.load("word2vec_model.bin")# 3. 使用已训练好的模型
print("--- 使用 Word2Vec 模型 ---")# a) 查找与给定词最相似的词
# 这会返回一个 (词语, 相似度得分) 的元组列表。
similar_words = model.wv.most_similar("天气", topn=5)
print("与 '天气' 最相似的词:")
for word, score in similar_words:print(f" {word}: {score:.4f}")print("\n--------------------------")# b) 计算两个词之间的相似度
similarity_score = model.wv.similarity("天气", "下雨")
print(f"'天气' 和 '下雨' 之间的相似度: {similarity_score:.4f}")similarity_score_2 = model.wv.similarity("导航", "北京")
print(f"'导航' 和 '北京' 之间的相似度: {similarity_score_2:.4f}")# 你也可以获取特定词的向量。
vector = model.wv['导航']
print("\n'导航' 的向量:")
print(vector)
print(f"向量大小: {vector.shape}")
补充知识
FastText和Glove 也是Word2Vec 同期的语言模型,使用比较少
1. FastText
- FastText引入了n-gram的概念,将单词表示为其字符n-gram的平均值的总和。这有助于捕捉单词内的局部结构,尤其是对 于形态学丰富的语言。
- FastText使用一个简单的多层感知机作为其神经网络结构,这有助于在训练时更好地学习上下文信息。FastText采用了分层 的Softmax方法,它在训练时可以高效地处理大规模词汇。
2. GloVe
- GloVe(Global Vectors for Word Representation)是一种用于学习词向量的无监督算法,由斯坦福大学的研究团队开发。GloVe的设计目标是在全局范围内捕获词语之间的语义关系,通过将词语表示为向量来实现这一目标
- GloVe使用了文本中词语的共现矩阵,该矩阵记录了词语对在同一上下文中出现的频率。这有助于模型了解词语 之间的关系。GloVe的核心思想是通过点乘运算(element-wise product)来构建损失函数,从而使得学到的 词向量满足具有实际意义的线性关系。
- 利用“词-上下文”共现信息
- Word2vec:局部共现,只考虑当前样本中是否共现
- GloVe:利用全局统计信息,即共现频次
- 利用词向量对“词-上下文”共现矩阵进行预测(或回归)
- 构建共现矩阵:共现“强度”按照距离进行衰减
RNN LSTM 和GRU
- RNN(Recurrent Neural Network):最基本的循环神经⽹络。它通过⼀个隐藏状态 (Hidden State)来捕获序列历史信息。在处理序列的每个时间步时,RNN会将当前输 ⼊和上⼀个时间步的隐藏状态作为输⼊,并⽣成新的隐藏状态和输出。
- 循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。
- 循环神经网络比前馈神经网络更加符合生物神经网络的结构。
- 循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上
- 由于梯度爆炸或消失,实际上RNN只能学习到短周期的依赖关系。这就是所谓的长程依赖问题。
- 梯度爆炸问题方案
-
梯度截断机制
- 权重衰减机制
-
- 梯度消失问题方案
- 改进模型
- LSTM(Long Short-Term Memory):RNN的改进版,旨在解决RNN在处理⻓序列时 出现的梯度消失和梯度爆炸问题。LSTM引⼊了特殊的⻔控机制(输⼊⻔、遗忘⻔、输出⻔),来精确控制信息在隐藏状态中的流动,从⽽能够更好地捕获⻓距离依赖关系。
- GRU(Gated Recurrent Unit):LSTM的简化版。它也使⽤⻔控机制来解决⻓距离依 赖问题,但只⽤了两个⻔(更新⻔和重置⻔),参数更少,计算更⾼效,但在很多任务上 性能与LSTM相当。
注意力机制和Transformer
序列建模
序列建模应用
- 序列到类别: 文本分类
- 同步的序列到序列模式:每个对应的输入都有对应的输出(RNN)实体识别
- 异步的序列到序列模式:输入和输出长度不对等 文本翻译
Seq2Seq(Sequence-to-Sequence) 将自然语言处理中的任务(如文本摘要、机器翻译、对话系统等)看作从一个输入序列到另外一个输出序列的映射,然后通过一个端到端的神经网络来直接学习序列的映射关系。Seq2Seq也是编码器-解码器结构的雏形。
注意力机制
注意力机制(Attention Mechanism)让模型在解码时从关注全部的 语义信息切换到仅关注重点信息,从而实现更好的生成效果。
注意力机制可以由查询Q(Query)、键K(Key)和值V(Value) ,然后 计算Q和K的相关性分数、归一化权重和计算注意力值。
注意⼒机制是⼀种让模型在处理序列时,能够动态地关注(或“分配权重”)输⼊序列中不同部 分的技术。它解决了Seq2Seq模型中编码器将所有信息压缩到固定⻓度上下⽂向量时,可能导致的信息丢失问题,尤其是在⻓序列任务上。
在解码器⽣成每个输出词时,注意⼒机制会计算⼀个注意⼒分数,来衡量输⼊序列中每个词对 当前输出词的重要性。然后,它将这些分数作为权重,对所有输⼊词的编码表⽰进⾏加权求和,⽣成⼀个新的上下⽂向量。这个新的上下⽂向量包含了对当前输出最有⽤的信息,⽽不是⼀个固定不变的向量。
Transformer
Transformer是⼀种完全基于注意⼒机制的深度学习模型,使⽤⾃注意⼒机制(Self Attention)来处理序列。
- ⾃注意⼒(Self-Attention):Transformer最核⼼的组件。它使得模型能够同时处理序 列中的所有词,并计算每个词与其他所有词之间的关系。这意味着,它可以⼀次性地捕 获序列中的⻓距离依赖关系,⽽不像RNN那样需要按顺序处理。
- 位置编码(Positional Encoding):由于Transformer没有RNN那样的循环结构,它 失去了处理序列顺序的能⼒。为了弥补这⼀点,模型在输⼊中加⼊了位置编码,来提供 序列中每个词的相对或绝对位置信息。
- 编码器-解码器结构:Transformer同样采⽤了编码器-解码器架构,但每个部分都由多 个相同的层堆叠⽽成