所有文章 > 日积月累 > 一文彻底搞懂大模型RNN、NNLM、人工神经网络与贝叶斯网络

一文彻底搞懂大模型RNN、NNLM、人工神经网络与贝叶斯网络

一、RNN – 模型架构(Model Architecture)

RNN是一种特殊的神经网络结构,它通过在时间上的展开来处理序列数据中的依赖关系。在每个时间步(time step),RNN都会接收一个输入(比如句子中的一个单词),并输出一个结果(比如下一个单词的预测)。与传统的前馈神经网络(Feedforward Neural Network, FNN)不同,RNN在每个时间步都会保留一个隐藏状态(hidden state),这个隐藏状态包含了之前所有时间步的信息,并用于计算当前时间步的输出和下一个时间步的隐藏状态。

RNN vs FFNN

FFNN(前馈神经网络)的局限性

前馈神经网络(Feedforward Neural Network, FFNN):前馈神经网络(FFNN),也称为多层感知机(MLP),通过多个隐藏层将输入数据映射到输出数据。它主要由输入层、一个或多个隐藏层以及输出层组成,数据在网络中只能单向流动,即从输入层经过隐藏层最终到达输出层,没有反馈环路。

FFNN

FFNN的局限性:FFNN这种结构在处理序列数据时存在明显的局限性,因为每个输入都是独立处理的,并且没有考虑它们之间的顺序或上下文关系。这意味着无法有效处理顺序数据并捕获输入之间的依赖关系。例如语言建模、机器翻译语音识别、时间序列分析以及许多其他需要顺序处理的应用程序。

Sequence Data

RNN(循环神经网络)

RNN的核心思想为了解决FFNN在处理序列数据时的局限性,循环神经网络(RNN)被引入。RNN的核心思想是在隐藏层之间引入循环连接,使得每个时间步的隐藏状态不仅取决于当前时间步的输入,还取决于前一个时间步的隐藏状态

RNN 最主要也是最重要的特征是它的隐藏状态,它可以记住有关序列的一些信息。该状态也称为记忆状态,因为它会记住网络的先前输入。

RNN的隐藏状态

RNN的模型架构:RNN通过其隐藏层的隐藏状态捕捉输入序列的时序依赖性,并基于当前输入和前一隐藏状态来生成输出序列的预测结果。

  • 输入层:接收输入数据,并将其传递给隐藏层。输入不仅仅是静态的,还包含着序列中的历史信息
  • 隐藏层:隐藏状态是核心部分,捕捉时序依赖性。隐藏层的输出不仅取决于当前的输入,还取决于前一时刻的隐藏状态
  • 输出层:根据隐藏层的输出生成最终的预测结果。

输入层- 隐藏层 – 输出层

RNN的工作原理通过一个具体的案例来看看RNN的工作原理。例如,用户说了一句“what time is it?”,需要判断用户的说话意图,是问时间,还是问天气?

  • 输入层:先对句子“what time is it ?” 进行分词,然后按照顺序输入。

对句子进行分词

  • 隐藏层:在此过程中,我们注意到前面的所有输入都对后续的输出产生了影响。圆形隐藏层不仅考虑了当前的输入,还综合了隐藏状态存储的之前所有的输入信息,能够利用历史信息来影响未来的输出

Hidden State存储了之前所有的输入信息

  • 输出层:生成最终的预测结果:Asking for the time。

输出结果:Asking for the time

RNN(循环神经网络)的局限性

RNN的局限性在于梯度问题导致难以学习长期依赖,长期记忆能力不足,且并行处理能力差。

1. 梯度消失和梯度爆炸问题

  • 梯度消失:在RNN中,由于参数共享和多次连乘的特性,在反向传播过程中,梯度值可能会随着时间步的增加而指数级衰减,最终趋近于0。这导致RNN难以学习到长期依赖关系,因为较早时间步的输入在反向传播时其梯度几乎为0,无法对这些输入进行有效的权重更新。
  • 梯度爆炸:与梯度消失相反,梯度爆炸是指在反向传播过程中,梯度值可能会随着时间步的增加而快速增长到非常大,导致模型训练不稳定甚至无法收敛。

2. 长期依赖捕捉能力有限

  • 由于梯度消失的问题,RNN在处理长序列时难以有效地捕捉到长期依赖关系。这意味着如果输入序列中的某个元素与输出之间存在长时间的间隔,RNN可能无法有效地学习到这两者之间的关系,从而限制了其在处理长序列数据时的性能。

3. 并行处理能力较差

  • RNN的计算是顺序进行的,即每个时间步的输出都依赖于前一个时间步的计算结果。这种顺序计算的方式限制了RNN的并行处理能力,使得在大规模数据集和复杂模型的情况下,RNN的训练和推理速度相对较慢。


梯度消失和梯度爆炸

二、神经网络语言模型(NNLM)

神经网络语言模型(Neural Network Language Model, NNLM)是一种利用神经网络架构来预测文本序列中下一个词的语言模型。NNLM通过学习大量文本数据中的词汇之间的概率关系,能够捕捉到语言的结构和语境,从而生成连贯且符合上下文的文本。本文旨在结合经典论文《A Neural Probabilistic Language Model》的内容,详细解析NNLM的基本原理、网络架构及模型训练。

NNLM的基本原理

Yoshua Bengio及其团队在2003年的论文《A Neural Probabilistic Language Model》中首次展示了如何使用神经网络(特别是多层感知器MLP)来构建语言模型,这一工作不仅为后续的深度学习在NLP中的应用奠定了基石,还意外地催生了词嵌入(word embedding)这一重要概念。
NNLM的核心思想:利用神经网络来建模自然语言中的词语序列,从而预测给定上下文条件下下一个词出现的概率。与传统的n-gram模型相比,NNLM能够捕捉更长的上下文依赖关系,并且通过词嵌入技术将词语映射到连续的向量空间中,使得相似的词语在向量空间中具有相近的表示。

NNLM开山之作NNLM中的Distributed Representation(分布式表示)是Embedding(嵌入)最早的理论支撑之一,它代表了一种将单词或文本表示为连续向量空间的技术。这种表示方法相比传统的独热编码(One-Hot Encoding)具有显著的优势,能够捕捉到单词之间的语义关系。

  • 减少维度灾难:传统的独热编码方式在词汇表很大时会导致向量维度极高,而分布式表示则通过低维向量表示单词,大大减少了计算复杂度。
  • 捕捉语义信息:分布式表示能够捕捉到单词之间的语义相似性,使得在向量空间中相似的单词具有相近的表示,这对于处理NLP任务至关重要。
  • 提高模型泛化能力:由于分布式表示能够捕捉到单词之间的语义关系,因此模型在处理未见过的单词或句子时具有更好的泛化能力。

distributed representation vs one-hot representation

NNLM的网络架构

NNLM的目标:NNLM是一个用于语言建模的神经模型,该模型旨在学习一个函数f,该函数可以根据给定的前置词汇预测序列中的下一个词汇。

函数f模型 f 分解为两个主要部分:词嵌入层(C)和概率函数(g)。词嵌入层将词汇转换为向量表示,而概率函数则利用这些向量预测文本序列中下一个词汇的概率分布。

  1. 词嵌入层(C):将词汇表中的每个词汇转换成一个实值向量。这些向量代表了词汇的分布式特征,即它们不仅仅表示词汇本身,还包含了词汇在不同上下文中的语义信息。
  2. 概率函数(g):根据给定的上下文信息来预测下一个词汇出现的概率。由多个词汇组成的上下文(比如前面的n-1个词汇),概率函数g会利用这些词汇的向量表示(即词嵌入层输出的向量)来估计下一个词汇出现的概率分布。

词嵌入层(C)和概率函数(g)

NNLM的网络架构:根据《A Neural Probabilistic Language Model》中的描述,NNLM主要由输入层、隐藏层及输出层三部分组成。通过输入层接收前文单词序列的向量表示,在隐藏层中捕捉复杂的语言结构,最后在输出层输出每个单词作为下一个词出现的概率分布。

NNLM的网络架构

输入层

输入层

  • 作用:输入层负责接收原始数据,并将其转换为神经网络可以处理的格式。在自然语言处理中,输入层通常接收的是词汇的向量表示,即词嵌入(word embedding)。
  • 上下文词汇向量:如上文所述,输入层连接的是上下文词汇向量x = (C(wt-1), C(wt-2), …, C(wt-n+1)),其中C(wt-i)表示在时间步t-i时词汇wt-i的词嵌入向量。这些向量共同构成了神经网络的输入。

隐藏层

隐藏层

  • 作用:隐藏层是神经网络中的核心部分,负责学习数据的复杂特征表示。在自然语言处理中,隐藏层通常包含多个神经元,并且这些神经元之间以及与前一层和下一层之间都有连接。
  • 非线性激活函数:为了引入非线性,隐藏层中的神经元通常使用非线性激活函数,如双曲正切函数(tanh)。激活函数使得神经网络能够学习非线性关系,从而捕捉数据的复杂模式。
  • 权重和偏置:隐藏层中的每个神经元都与其前一层的神经元通过权重矩阵U和H(以及偏置向量d)相连接。这些权重和偏置在训练过程中被学习,以最小化预测误差。

输出层

输出层

  • 作用:输出层是神经网络的最后一层,负责产生最终的预测结果。在自然语言处理中,输出层通常使用softmax函数将隐藏层的输出转换为概率分布,以便在每个时间步预测下一个词汇。
  • softmax函数:softmax函数将隐藏层的输出转换为概率分布P^(wt | wt-1, …, wt-n+1)。这个概率分布表示在给定上下文条件下,每个词汇作为下一个词汇的概率。
  • 预测:最终,神经网络通过选择概率最高的词汇作为预测结果。

NNLM的网络架构

NNLM的模型训练

NNLM的模型训练:NNLM的训练过程旨在最大化训练数据中序列的联合概率,即最大化给定前文单词的条件下,下一个单词出现的概率。在训练过程中,分布式表示(即词嵌入)是作为模型的训练参数之一进行更新的。

NNLM

NNLM训练过程:通过前向传播计算输出,利用损失函数评估差异,然后反向传播更新权重,迭代优化直至收敛或达到预设迭代次数。这通常通过最小化负对数似然(negative log-likelihood)损失函数来实现。

最小化负对数似然

其中 R( θ) 是正则化项(例如,权重衰减),使用随机梯度上升法更新参数 θ

更新参数 θ

其中 ϵ 是学习率。

三、人工神经网络与贝叶斯网络

大模型,特别是那些拥有数十亿甚至更多参数的深度学习模型,往往是以人工神经网络为基础的。这些模型通过堆叠多个隐藏层、增加神经元数量和使用复杂的非线性激活函数,来构建能够处理复杂任务(如自然语言处理、图像识别等)的深度神经网络。

大模型与人工神经网络的关系

什么是人工神经网络(ANN)?人工神经网络(ANN)是一种模仿生物神经网络结构和功能的计算模型。它由多个层组成,包括输入层、隐藏层(可能有多层)和输出层。每一层都包含多个神经元(或称为节点),这些神经元通过带权重的连接相互连接。

ANN 输入层接收外部数据,隐藏层对数据进行处理,输出层则产生最终的输出。神经元的激活通常通过一个非线性函数(如sigmoid、ReLU等)来实现,这使得网络能够学习复杂的非线性关系。

ANN 
大模型与人工神经网络的关系:LLM的核心是ANN(人工神经网络),基于人工神经网络构建更大规模和复杂度更高的深度学习模型。

  1. PLM(预训练模型):预训练语言模型通常使用互联网上的海量文本数据作为训练语料,这些语料库可能包含数十亿甚至数千亿个单词。这些模型通过在大量的未标注文本数据上进行学习,掌握了语言的共性和规律,进而能够应用于各种NLP下游任务。
  2. 数据 + 算力:算力作基础,数据为驱动;无监督预训练(Pre-training),有监督微调(Fine-tuning)。
  3. 权重w和偏置b:模型参数包括每一层的权重(weight)和偏置项(bias)。这些参数在训练过程中通过反向传播算法进行调整,以最小化损失函数。

LLM 》DL 》ANN

人工神经网络与贝叶斯网络的关系

什么是贝叶斯网络(BN)?贝叶斯网络(Bayesian Network,简称BN)是一种基于概率推理的图形模型,用于表示变量之间的依赖关系。它由一个有向无环图(Directed Acyclic Graph,DAG)和条件概率表(Conditional Probability Table,CPT)组成。

Bayesian Network

  • 有向无环图(DAG):用于表示变量之间的依赖关系。图中的节点代表变量,有向边(或称为弧)则表示变量之间的依赖关系。如果两个节点之间存在有向边,则意味着一个节点的状态会影响另一个节点的状态。
  • 条件概率表(CPT):与DAG中的每个节点相关联,用于描述节点与其父节点之间的概率关系。条件概率表详细列出了在给定父节点状态下,当前节点取各个可能值的概率。

Bayesian Network

人工神经网络与贝叶斯网络的关系:两者都是有向图模型,其中每个节点的取值或状态仅依赖于其直接前驱节点,即遵循马尔可夫假设。这种结构使得模型能够清晰地表示变量之间的依赖关系。

ANN vs Bayesian Network

  • 有向图模型:一种使用有向图来表示变量之间关系的数学模型。在有向图中,节点代表变量,而有向边则代表变量之间的依赖关系。

Direction Graph

  • 马尔可夫假设:一种简化模型复杂性的假设,它指出一个节点的状态(或取值)仅依赖于其直接前驱节点的状态(或取值),而与更前面的节点状态无关。

Markov Chain

四、语言模型的发展历程

语言模型的发展历程

语言模型(LM,Language Model)的发展历程可以清晰地划分为三个主要阶段:统计语言模型、神经网络语言模型以及基于Transformer的大语言模型。每个阶段的模型都在前一个阶段的基础上进行了改进和优化,使得语言模型的性能得到了显著提升。

语言模型的发展历程

统计语言模型

什么是统计语言模型?统计语言模型是早期自然语言处理(NLP)中的重要工具,它们主要通过分析词序列的出现频率来预测下一个词。这种方法基于统计学的原理,利用大规模语料库中的词频信息来建模语言的概率分布。代表模型:N-gram模型、隐马尔可夫模型(HMM)

  1. N-gram模型:这是最常见的统计语言模型之一,它基于马尔可夫假设,认为一个词出现的概率仅与其前面的n-1个词有关。N-gram模型简单易用,但存在数据稀疏和无法捕捉长距离依赖关系的问题。
  2. 隐马尔可夫模型(HMM):另一种重要的统计语言模型,通过引入隐藏状态来捕捉序列数据中的潜在结构。

统计语言模型

N-gram模型:N-gram模型是一种基于统计语言模型的文本分析算法,它用于预测文本中下一个词出现的概率,基于前面出现的n-1个词的序列。这里的n代表序列中元素的数量,因此称为N-gram。

  • Unigram:N=1,每个单词的出现概率独立计算,不考虑上下文。
  • Bigram:N=2,基于前一个单词预测当前单词的联合概率模型。
  • Trigram:N=3,考虑前两个单词来预测当前单词的联合概率模型,更复杂但可能更准确。

N-gram

N-gram模型的工作原理:N-gram模型通过统计语料库中n-gram序列的频率,估计给定前n-1个元素后下一个元素出现的概率,从而实现文本预测。

  1. 语料库准备:首先,需要有一个大型的文本语料库,用于训练N-gram模型。
  2. 计算频率:然后,计算语料库中所有可能的n-gram序列的频率。
  3. 概率估计:根据这些频率,可以估计出给定n-1个词后,下一个词出现的概率。
  4. 预测:在预测阶段,给定一个词序列的前n-1个词,模型可以输出下一个词的概率分布,从而可以选择最可能的词作为预测结果。

N-gram

神经网络语言模型

什么是神经网络语言模型?随着深度学习技术的发展,神经网络开始被应用于语言建模任务中。神经网络语言模型通过引入神经网络结构来捕捉词与词之间的复杂关系,从而提高了语言模型的性能。代表模型:NNLM、RNN、LSTM、GRU

  1. 神经网络语言模型(NNLM):由Bengio等人提出,通过嵌入层将单词映射到连续的向量空间中,并通过多个隐藏层来学习语言的内部结构。NNLM能够捕捉词与词之间的语义关系,提高了语言模型的预测能力。
  2. 循环神经网络(RNN)及其变体(LSTM、GRU):RNN通过引入循环连接来处理序列数据中的长期依赖关系。LSTM和GRU是RNN的改进版本,通过引入门控机制来解决梯度消失或梯度爆炸问题。

神经网络语言模型

NNLM:一种基于神经网络的方法来建模自然语言中的词语序列。与传统的统计语言模型(如n-gram模型)相比,NNLM能够捕捉更复杂的语言结构和语义信息,因为它利用了神经网络强大的非线性建模能力。

  • 原理:利用神经网络来预测文本序列中下一个词或字符出现的概率的模型。
  • 目的:通过建模词汇之间的概率关系,实现自然语言文本的生成或理解。

NNLM

NNLM的工作原理:通过嵌入层将输入的固定长度前文单词序列转换为连续向量表示,然后利用一个或多个隐藏层学习这些向量的语言结构,最后由输出层输出下一个单词的概率分布,以最大化给定前文条件下的单词预测准确性。

  • 输入:NNLM的输入是一个固定长度的前文单词序列,用于预测下一个单词。每个单词通常由其词嵌入(word embedding)表示,即将单词映射到连续的向量空间中。
  • 结构:NNLM通常包含一个嵌入层(embedding layer),用于将输入的单词转换为连续向量表示;一个或多个隐藏层(hidden layers),用于学习输入序列的语言结构;以及一个输出层(output layer),输出下一个单词的概率分布。
  • 训练目标:最大化给定训练数据中序列的联合概率,即最大化给定前文单词的条件下,下一个单词出现的概率。这通常通过最小化负对数似然(negative log-likelihood)来实现。

NNLM

基于Transformer的大语言模型

什么是基于Transformer的大语言模型?基于Transformer的大语言模型在预训练阶段利用大规模语料库进行训练,然后在特定任务上进行微调,取得了惊人的效果。代表模型:BERT、GPT系列

  1. BERT:由Google提出的一种基于Transformer的双向编码器表示模型。BERT在预训练阶段采用了遮蔽语言模型(Masked Language Model)和下一句预测(Next Sentence Prediction)两个任务来训练模型,提高了模型的语言表示能力。
  2. GPT系列:由OpenAI开发的基于Transformer的生成式预训练模型。GPT系列模型在预训练阶段采用了自回归语言建模任务来训练模型,能够生成连贯、自然的文本。随着模型规模的增大(如GPT-3、GPT-4等),GPT系列模型在多个NLP任务上取得了优异的表现。

基于Transformer的大语言模型

Transformer模型:Transformer模型由Vaswani等人在2017年提出,是一种基于自注意力机制的深度学习模型。它彻底摒弃了传统的循环神经网络结构,通过自注意力机制和位置编码来处理序列数据中的长期依赖关系和位置信息。

Transformer

  1. Encoder-Decoder Architecture(编码器-解码器架构)
    • Transformer模型通常包含编码器和解码器两部分。
    • 编码器负责将输入序列转化为上下文向量(或称为隐藏状态),这些向量包含了输入序列的语义信息。
    • 解码器则利用这些上下文向量生成输出序列。在生成过程中,解码器会逐步产生输出序列的每个token,并在每一步都考虑之前的输出和编码器的上下文向量。
  2. Embedding(向量化)
    • 自然语言处理(NLP)中,输入的文本内容(如句子、段落或整个文档)首先被拆分成更小的片段或元素,这些片段通常被称为词元(tokens)。
    • Embedding层负责将这些tokens转换为固定大小的实数向量,以捕捉这些tokens的语义信息。这个过程是通过查找一个预训练的嵌入矩阵来实现的,其中每一行代表一个token的向量表示。
  3. Attention(注意力机制)
    • 注意力机制的核心是计算查询向量(Q)、键向量(K)和值向量(V)之间的相互作用。对于每个token,它有一个对应的查询向量,而整个输入序列的tokens则共享一套键向量和值向量。
    • 通过计算查询向量与每个键向量的相似度(通常使用缩放点积注意力),得到一组注意力权重。这些权重表示了在生成当前token的表示时,应该给予其他token多大的关注。
    • 最后,将注意力权重应用于值向量,并进行加权求和,得到当前token的自注意力输出表示。
  4. Position Encoding(位置编码)
    • 由于Transformer模型本身无法识别序列中token的位置顺序,因此需要引入位置编码来补充这一信息。
    • 位置编码可以是预定义的(如正弦和余弦函数)或可学习的参数。这些编码被添加到每个token的嵌入向量中,以帮助模型区分不同位置的token。
  5. Multi-Head Attention(多头注意力机制)
    • 多头注意力机制是自注意力机制的扩展,它允许模型在不同的表示空间中同时关注信息的多个方面。
    • 通过将输入序列的嵌入向量分割成多个头(即多个子空间),并在每个头中独立计算自注意力,然后将这些头的输出拼接在一起,最后通过一个线性变换得到最终的输出表示。
    • 多头注意力机制能够捕获更复杂的语义关系,增强模型的表达能力。
  6. Feed-Forward Network(前馈网络)
    • Transformer中的编码器和解码器都包含前馈网络(也称为全连接层)。
    • 前馈网络用于进一步处理和转换注意力机制提取的特征,提取和整合更多有用的信息,以生成最终的输出表示。
  7. Residual Connection and Layer Normalization(残差连接和层归一化)
    • 在Transformer的每个子层(如多头注意力层、前馈网络层)之后,都会添加残差连接和层归一化操作。
    • 残差连接有助于缓解深层网络中的梯度消失问题,而层归一化则有助于加速训练过程并提高模型的稳定性。

Transformer

文章转自微信公众号@架构师带你玩转AI