语言模型与神经网络

news/2024/9/21 12:22:46/文章来源:https://www.cnblogs.com/imyhy/p/18379288

语言模型与神经网络

语言模型(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

春秋云镜 网鼎杯2022半决赛

春秋云镜 网鼎杯2022半决赛现用fscan扫一下访问发现是个wordpress,wpscan一下版本为6.2.6,使用了twentytwentyone theme 后台弱密码admin/123456登录 由于存在theme file editor,因此可以写马 随便找一个php文件,写入木马.使用蚁剑连接,路径之前wpscan给出来了.得到了第一个fla…

Windows提权方式汇总

windows 提权 一、土豆(potato)家族提权 原理 土豆提权就是通过 windows 的 COM(Component Object Model,组件对象模型)类。向指定的服务器端口发送 NTLM 认证,捕获认证数据包,并修改数据包内容使其认证成功,从而获得 system 权限的 token。在通过高权限的令牌执行反弹…

AxureRP原型图软件常见报错问题汇总

做Axure教程有一段时间了, 很多小伙伴在使用软件的时候就遇到很多问题,甚至还有在初始安装软件的时候就困难重重。这篇文章在你使用Axure软件过程中绝对可以用得到,赶紧点赞收藏起来~本期我们分为软件安装、和软件使用问题。本期只分享一些高频问题,如果你还遇到什么别的奇…

Triangle: The Data Structure(优秀の二维 ST 表)

link. 这种 RMQ 对像我这样萌新来说只有两种比较直观的方案:线段树 ST 表首先考虑线段树,如果是朴素的一维线段树,那么我们只能一行一行地扫,显然相比暴力优化了一些,但不多,最终还是会愉快地 T 掉(亲测)。 然后我不会超冷门的数据结构二维线段树。 所以蒟蒻只能用好写…

Python3.11二进制AI项目程序打包为苹果Mac App(DMG)-应用程序pyinstaller制作流程(AppleSilicon)

众所周知,苹果MacOs系统虽然贵为Unix内核系统,但由于系统不支持N卡,所以如果想在本地跑AI项目,还需要对相关的AI模块进行定制化操作,本次我们演示一下如何将基于Python3.11的AI项目程序打包为MacOS可以直接运行的DMG安装包,可以苹果系统中一键运行AI项目。 MacOs本地部署…

2.MapReduce论文总结

一. 介绍很多业务逻辑很简单,主要难点是数据量太大,可使用分布式处理提高速度。 传统分布式程序,计算逻辑和分布式任务分发、故障恢复混在一起,原本简单的计算逻辑变得模糊不清,难以处理。 MapReduce将两者分离,任务分发,容错,恢复等逻辑由模型完成,程序员只需要专注计…

Lab1 记录

一、非并行版本分析 1.非并行版本MapReduce流程通过第一个参数,传入Map和Reduce 函数 之后的参数为待处理文件名 读取文件 调用Map函数,对文件内容进行处理,生成KV对 对KV对进行sort 按照Key进行分组,然后对每组数据调用Reduce 将结果写入文件二、Lab思路 概述:Worker向Co…

JMeter:性能测试利器全解析

目录JMeter:性能测试利器全解析一、JMeter 的基础概念(一)什么是 JMeter(二)主要功能特点二、使用 JMeter 测试 Web 应用的步骤(一)安装与启动(二)创建测试计划(三)配置 Web 应用测试场景(四)运行测试(五)分析测试结果三、案例分析(一)案例背景(二)测试步骤…

ZBlogPHP迁移网站错误提示:Permission denied(请确保你的网站有写入权限777)

解决方案:设置你的网站目录为777 写入权限即可【注意:如果755可能会不行,最好直接使用777搞定】扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题…

zblog网站提示MySQL数据库无法连接

前天搭建好的博客网站,在睡了一觉之后,网站竟然出现故障无法正常运行了,在此期间,没有进行任何的操作。就连主页都无法进入,页面一直提示“MySQL 数据库无法连接”。不管怎样刷新页面,还是重启服务器,都毫无作用。 最终,从中午 1 点一直忙活到凌晨 2 点,还好皇天不负有…

20-学习卷积核

import torch import torch.nn as nnX = torch.rand((6, 8)) Y = torch.rand((6, 7))# (批量⼤⼩、通道、⾼度、宽度) X = X.reshape((1, 1, 6, 8)) Y = Y.reshape((1, 1, 6, 7)) lr = 3e-2# 构造卷积层 PyTorch 会使用默认的初始化方法,例如 Xavier 初始化或 Kaim 初始化…

这下罄竹难书了

/ /由四个金牌命制的联赛模拟试卷,使我校高二高三竞赛班取得了一试最高 84 分,加试最高 160 分的好成绩! 一试 一、填空题如图是一个 \(4\times 4\) 的正方形方格表,则最少需要 \(\text{_____}\) 条直线,才能使得每个方格都被至少一条直线穿过。设复数 \(z\) 满足:\(\fra…