首页 > 其他分享 >语言模型与神经网络

语言模型与神经网络

时间:2024-08-25 18:37:29浏览次数:3  
标签:dots frac 语言 模型 神经网络 注意力 mathrm

语言模型与神经网络

语言模型(Language Model)

Chat GPT 流畅的语言生成能力

自然语言是一种上下文相关的信息表达和信息传递方式。

定义:语言模型是衡量一句话出现在自然语言中的概率的模型。

image-20240813170939082

数学形式上,给定一句话 \(s=\{w_1,\dots,w_n\}\) ,它对应的概率为:

\[\begin{align} \mathrm{P}(s) &= \mathrm{P}(w_1,\dots,w_n) \\ &= \mathrm{P}(w_1)\times \mathrm{P}(w_2|w_1) \times \dots \times \mathrm{P}(w_n|w_1,\dots ,w_{n-1}) \\ &= \prod_{i=1}^n\mathrm{P}(w_i|w_1,\dots,w_{i-1}) \end{align} \]

语言模型的核心在于根据前文预测下一个词出现的概率

image-20240813175643127

如何计算语言模型的概率?

统计语言模型

马尔科夫假设:当前词出现的概率之和它前面的k个词相关。

\[\begin{align} \mathrm{P}(w_i|w_1,\dots,w_{i-1}) &= \mathrm{P}(w_i|w_{i-k},\dots,w_{i-1}) \tag{马尔可夫假设}\\ &= \mathrm{P}(w_i) \tag{k=0, Unigram Model}\\ &= \mathrm{P}(w_i|w_{i-1}) \tag{k=1, Bigram Model}\\ &= \mathrm{P}(w_i|w_{i-2},w_{i-1}) \tag{k=2, Trigram Model} \end{align} \]

用频率估计概率

\[\begin{align} \mathrm{P}(w_i|w_1,\dots,w_{i-1}) &= \mathrm{P}(w_i|w_{i-k},\dots,w_{i-1}) \tag{马尔可夫假设}\\ &= \frac{\mathrm{P}(w_{i-k},\dots,w_{i-1},w_i)}{\mathrm{P}(w_{i-k},\dots,w_{i-1})} \tag{条件概率}\\ &\approx \frac{\mathrm{count}(w_{i-k},\dots,w_{i-1},w_i)/\mathrm{count}(all~grams)}{\mathrm{count}(w_{i-k},\dots,w_{i-1})/\mathrm{count}(all~grams)} \\ &= \frac{\mathrm{count}(w_{i-k},\dots,w_{i-1},w_i)}{\mathrm{count}(w_{i-k},\dots,w_{i-1})} \tag{概率估计, N gram Model} \end{align} \]

语言模型评价方法

  • 困惑度(Perplexity)

    • 用来度量一个概率分布或概率模型预测样本的好坏程度;
    • 可以用来比较两个概率模型,低困惑度的概率模型能更好地预测样本。

    在测试数据上

\[\begin{align} \mathrm{Perplexity}(s) &=2^{H(s)} \\ &=2^{-\frac{1}{n}\log_2\mathrm{P}(w_1,\dots,w_n)} \\ &=2^{\log_2\mathrm{P}(w_1,\dots,w_n)^{-\frac{1}{n}}} \\ &=\mathrm{P}(w_1,\dots,w_n)^{-\frac{1}{n}} \\ &=\sqrt[n]{1/\mathrm{P}(w_1,\dots,w_n)} \end{align} \]

参数规模问题:随着k的增大,参数数目呈指数增长,无法储存。

神经网络(Neural Network)

人工神经网络(Artificial Neural Network, ANN)从信息处理角度对人脑神经元网络进行抽象,建立某种算法数学模型,从而达到处理信息的目的。

  • 神经元之间进行连接,组成网络;
  • 网络通常是某种算法或者函数的逼近,也可能是一种逻辑策略的表达。

image-20240813204819193

基于4-GRAM的神经网络语言模型

image-20240813205318119

优点:

  • 不会有稀疏性问题;
  • 不需要存储所有的n-grams。

不足:

  • 视野有限,无法建模长距离语义;
  • 窗口越大,参数规模越大。

能否构建处理任意长度的神经网络模型?

循环神经网络(Recurrent Neural Network, RNN)

  • 重复使用隐层参数

  • 可处理任意序列长度

\[h_t = f(W_hh_{t-1} + W_xx_t + b) \]

image-20240814103622998

image-20240814103808156

优点:

  • 能处理任意长度序列;
  • 能够使用历史信息;
  • 模型参数量不随序列长度增加。

不足:

  • 逐步计算,速度较慢;
  • 长期依赖问题。

RNN-LM模型训练

  • 给定长度为 \(T\) 的输入文本:\(x_1,\dots,x_T\) ;
  • 将文本输入到RNN-LM,计算每一步预测的单词分布 \(\hat{y}^t\) ;
  • 计算每一步预测单词的概率分布 \(\hat{y}_t\) 和真实单词 \(y_t\)(one-hot向量)之间的交叉熵:

\[\mathrm{J}^t(\theta) = \mathrm{CE}(y^t,\hat{y}^t) = -\sum_{w\in V}y_w^t\log\hat{y}_w^t = -\log\hat{y}^t_{x_t+1} \]

  • 模型在输入文本上的训练损失为:

\[\mathrm{J}(\theta) = \frac{1}{T}\sum_{t=1}^T\mathrm{J}^t(\theta) = \frac{1}{T}\sum_{t=1}^T-\log\hat{y}^t_{x_t+1} \]

image-20240814105320186

RNN:梯度爆炸、梯度消失

image-20240814105607087

长短期神经网络(Long Short-Term Memory, LSTM)

引入三个门和一个细胞状态来控制神经元的信息流动:

  • 遗忘门 \(f_t\) :控制哪些信息应该从之前的细胞状态中遗忘;
  • 输入门 \(i_t\) :控制哪些信息应该被更新到细胞状态中;
  • 输出门 \(o_t\) :控制哪些信息应该被输出到隐层状态中;
  • 细胞状态 \(C_t\) :容纳神经元信息。

\[\begin{align} f_t &= \sigma(W_fh_{t-1} + U_fx_t + b_f)\\ i_t &= \sigma(W_ih_{t-1} + U_ix_t + b_i)\\ o_t &= \sigma(W_oh_{t-1} + U_ox_t + b_o)\\ \hat{C}_t &= \tanh(W_ch_{t-1} + U_cx_t + b_c)\\ C_t &= f_t \times C_{t-1} + i_t \times \hat{C}_t\\ h_t &= o_t \times \tanh(C_t) \end{align} \]

image-20240814111250054

线性变换,缓解远程梯度爆炸和梯度消失问题。

Attention机制(Attention Mechanism)

神经机器翻译(Neural Machine Translation)

  • 端到端(end-to-end)的神经网络来求解机器翻译任务。
  • 编码器-解码器框架(Encoder-decoder)
    • Seq2Seq;
    • 编码器(encoder):用来编码源语言的输入;
    • 解码器(decoder):用来生成目标语言的输出。

编码器-解码器框架

image-20240814112510174

通用性:

  • 文本摘要(Summarization):长文本 \(\rightarrow\) 短文本;
  • 对话生成(Dialogue generation):之前的对话 \(\rightarrow\) 下一句对话;
  • 代码生成(Code generation):自然语言 \(\rightarrow\) 编程代码;
  • \(\dots\dots\)

前后依赖性太强,且翻译过程不具有可解释性!

目标端解码某个特定单词时,应该重点关注源端相关的单词。

注意力机制

Attention Mechanism [Bahdanau et al., 2015]

  • 目标端解码时,直接从源端句子捕获对当前解码有帮助的信息,从而生成更相关、更准确的解码结果。

优点:

  • 缓解RNN中的信息瓶颈问题;
  • 缓解长距离依赖问题;
  • 具有一定的可解释性。

基于注意力机制的编码器-解码器框架

image-20240814113809425

编码器-解码器中如何计算注意力?

  • 编码器的隐层状态为 \(h_1,\dots,h_w\in \R^h\)
  • \(t\) 时刻,解码器的隐层状态为 \(s_t\in\R^h\)
  • 对于 \(t\) 时刻,编码器隐层状态的注意力打分为:

\[e^t = \big[s_t^Th_1,\dots,s_t^Th_N\big]\in\R^N \]

  • 利用softmax函数将注意力打分转换成概率化的注意力权重:

\[\alpha^t=\mathrm{softmax}(e^t)\in\R^N \]

  • 利用注意力权重α得到编码器隐层状态的加权输出:

\[a^t = \sum_{i=1}^N\alpha_i^th_i\in\R^h \]

机器翻译中的注意力可视化

image-20240814114454010

基于注意力机制的文本分类模型

image-20240814115117449

文本分类模型注意力可视化

image-20240814115315798

视觉问答中的注意力

image-20240814115439435

Transformer网络

循环神经网络的问题

有限的信息交互距离:

  • RNN能捕捉局部信息,但无法很好地解决长距离依赖关系(long-distance
    dependency)
  • 不能很好地建模序列中的非线性结构关系

无法并行:

  • RNN的隐层状态具有序列依赖性
  • 时间消耗随序列长度的增加而增加。

Self Attention

image-20240814120025353

Attention Is All You Need

Transformer [Vaswani et al., 2017]

  • 完全基于attention机制构建的神经网络模型;
  • 直接建模输入序列的全局依赖关系;
  • 并行计算。

image-20240814154710455

Transformer编码器

image-20240814155058276

  • 输入编码 + 位置编码;
  • 多头注意力机制;
  • 残差连接 & 层正则;
  • 前馈神经网络;
  • 残差连接 & 层正则。

位置编码

为什么需要位置编码?

  • 注意力计算:加权和;
  • 无法考虑相对位置关系。

将位置编码 \(p_i\) 注入到输入编码中:\(x_i=x_i+p_i\)

  • 三角函数表示:直接根据正弦函数计算位置编码,不需要从头学习,直接计算得出。

\[p_i=\left[\begin{matrix} sin(i/10000^{2\times1/d})\\ cos(i/10000^{2\times1/d})\\ \vdots \\ sin(i/10000^{2\times d/d})\\ cos(i/10000^{2\times d/d})\\ \end{matrix} \right] \]

  • 从头学习:随机初始化位置编码 \(p_i\) ,并跟随网络一起训练,能更好地拟合数据。

自注意力机制

image-20240814160939284

  • 计算attention所需要的queries,keys,values:

\[Q = XW_Q\quad K = XW_K\quad V = XW_V \]

  • 根据queries和keys计算attention打分 \(E\) :

\[E = QK^T \]

  • 计算attention权重 \(A\) :

\[A = \mathrm{softmax}\Big(\frac{E}{\sqrt{d_k}}\Big) \]

  • 根据attention权重 \(A\) 和values计算attention输出 \(O\) :

\[O = AV \]

多头自注意力机制

image-20240814161415578

  • 并行地计算多个自注意力过程,并拼接输出结果:

\[O_i = \mathrm{softmax}\Big(\frac{Q_iK_i^T}{\sqrt{d_k}}\Big)V_i \\ O = \big[O_1,\dots,O_M\big] \]

残差连接

Residual connections [He et al., 2016]

  • 将浅层网络和深层网络相连,有利于梯度回传;
  • 使深处网络的训练变得更加容易。

\[X^l = \mathrm{MultiHeadAttn}(X^{l-1}) + X^{l-1} \]

层正则

Layer Normalization [Ba et al., 2016]

  • 对输入进行标准化;
  • 加速收敛,提升模型训练的稳定性。

\[均值:\mu^l = \frac{1}{d}\sum_{i=1}^dx_i^l \\ 方差:\sigma^l = \sqrt{\frac{1}{d}\sum_{i=1}^d(x_i^l-\mu^l)^2} \\ 归一化:x'^l = \frac{x^l-\mu^l}{\sigma^l} \]

前馈网络

两层前馈神经网络

\[\mathrm{FFN}(X) = \max(0,XW_1 + b_1)W_2 + b_2 \]

Transformer解码器

  • Cross Attention:解码时需要关注源端信息。

image-20240814162915508

  • Masked Attention:解码时(训练)不应该看到未来的信息。

image-20240814163657889

image-20240814163552582

Transformer

  • 机器翻译

image-20240814163803226

  • 图像领域

image-20240814163837055

  • Alphafold2

image-20240814163905907

标签:dots,frac,语言,模型,神经网络,注意力,mathrm
From: https://www.cnblogs.com/imyhy/p/18379288

相关文章

  • 自然语言处理与情绪智能
    自然语言处理(NLP)基础:语言模型ChatGPT能力语言理解和生成能力抽象能力强大的学习和泛化能力自然语言处理交叉学科:计算机科学、人工智能/机器学习、语言学等自然语言理解:理解文字的含义自然语言生成:用文字表达特定的意图和思想利用计算机对自然语言进行各种加工处理、信息......
  • 【python】时间序列模型(ARIMA)
    文章目录前言一、示例二、代码实现----python全部数据的平稳性检验划分训练集平稳性检验确定p,q结果分析和模型检验模型预测前言接上一篇博客,用python完成代码编写。一、示例已知一个上市公司一段时期的开盘价,最高价,最低价,收盘价等信息,要求建立模型,预测股价。这......
  • 自然语言处理与情绪智能简介
    自然语言处理(NLP)基础:语言模型ChatGPT能力语言理解和生成能力抽象能力强大的学习和泛化能力自然语言处理交叉学科:计算机科学、人工智能/机器学习、语言学等自然语言理解:理解文字的含义自然语言生成:用文字表达特定的意图和思想利用计算机对自然语言进行各种加工处理、信息......
  • 反汇编和汇编的区别 怎么用汇编让C语言更小
    在计算机编程的世界中,反汇编和汇编这两个概念往往令人感到深奥而神秘。究竟反汇编和汇编之间有何异同?这是程序员们经常探讨的话题。汇编语言作为一种底层编程语言,与计算机硬件密切相关,而反汇编则是将机器码还原为可读的汇编语言的过程。本文将深入研究反汇编和汇编的区别,帮助......
  • 【逐行注释】基于CV/CT模型的IMM|MATLAB程序|源代码复制后即可运行,无需下载
    订阅专栏后可以直接查看完整的源代码(和注释),无需付费下载或其他的操作。代码复制到MATLAB上面可以得到和我一样的运行结果。文章目录程序概述完整代码与逐行注释运行结果解释按模块分析代码程序概述基于EKF的多模型交互。以CV和CT两个模型进行交互,这里对代码进......
  • go语言免杀-garble混淆
    题记“愿先生心境,四季如春”作者回答:剑来之所以最大宗旨,是“我们不要轻易对这个世界失望”,因为道理太简单不过了,我们每个人在现实生活当中,太容易对人对事,产生大大小小的失望。而“愿先生心境四季如春”这句话,以后在书中会被主角回答一句“愿学生心境如春”,我会有意去掉四季......
  • 微调Qwen2:7B模型,加入未知信息语料
    对于QWen2这样的模型,在微调的时候,语料的投喂格式满足ChatML这样的格式!!!OpenAI-ChatML下面是ChatML格式的介绍:https://github.com/openai/openai-python/blob/release-v0.28.1/chatml.md传统上,GPT模型使用非结构化文本。ChatGPT模型需要一种结构化格式,称为ChatMarkupL......
  • 图伸神经网络GCN实现图内点云分类任务(物体的部件分类)
    点云分类任务数据集下载关键代码数据集结构网络模型模型训练测试模型+可视化结果可能会出现的问题pyg没有配置好懒人专属(代码链接)本项目是一个简单的使用图中点分类代码,内涵完整的网络搭建、模型训练、模型保存、模型调用、可视化、的全过程。可以帮助初学者快速熟......
  • C语言函数介绍(上)
    函数概念库函数标准库和头文件库函数的使用方法头文件包含库函数文档的一般格式自定义函数函数的语法形式函数例子形参和实参实参形参实参和形参的关系return语句数组做函数参数函数概念数学中我们其实就见过函数的概念,比如:一次函数y=kx+b,k和b都是常数,给⼀个......
  • Unet改进7:在不同位置添加SimAM注意力机制||无参数的卷积神经网络注意模块
    本文内容:在不同位置添加SimAM注意力机制目录论文简介1.步骤一2.步骤二3.步骤三4.步骤四论文简介在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道智能和空间智能注意力模块相比,我们的模块在不向原始网络添加参数的情况......