生成模型笔记(七):自回归模型

news/2024/5/5 7:00:41/文章来源:https://blog.csdn.net/D_Trump/article/details/127313524

有鸟止南方之阜,三年不翅,不飞不鸣,嘿然无声,此为何名?

第七部分 深度自回归模型(Deep Autoregressive Model, DARM)

参考内容

https://jmtomczak.github.io/blog/2/2_ARM.html
Attention is all you need(Transformer原始文章)

5.1 概率基础

有条件的生成模型需要建模分布 P(X,Y)P(X, Y)P(X,Y) ,无条件的生成模型需要建模分布 P(X)P(X)P(X) 。之后的内容都考虑是无条件的生成模型的情况。那么如何去求 P(X)P(X)P(X)
先从概率的角度来看如何求得 P(X)P(X)P(X) 。设 x∈χD\pmb{x} \in \pmb{\chi^D}xxχDχD 为一个 DDD 维随机向量,这样, P(x)P(\pmb{x})P(xx) 可以看作是所有维度的联合分布 P(x1,x2,...,xD)P(x_1, x_2, ..., x_D)P(x1,x2,...,xD) 。那么根据概率的乘法法则可以得到:
P(x)=P(x1,x2,...,xD)=P(x1)∏d=2DP(xd∣x<d)(1)P(\pmb{x}) = P(x_1, x_2, ..., x_D) = P(x_1)\prod_{d=2}^DP(x_d | \pmb{x}_{<d}) \qquad \text{(1)} P(xx)=P(x1,x2,...,xD)=P(x1)d=2DP(xdxx<d)(1)
通过这个乘法法则,我们可以得到 P(x)P(\pmb{x})P(xx) ,但是如果用模型来实现这个式子的话,会是什么情况呢?我们需要对乘法法则的每个条件分布全都要建立模型,所以就需要 DDD 个独立的模型。能不能用一个模型呢?能但是很难,每个模型输入数量不一样,越往后的模型输入的条件信息越多,相应的模型也就更复杂。不过这给了我们一个很好的思路,能不能加入一些限制,能够用一个模型来实现。

5.2 深度自回归神经网络

通过对式子(1)加入一些限制条件,可以用一个共享的模型来表示所有的条件分布。

5.2.1 Finite memory

第一种最简单的思路就是,既然问题在于每个条件分布条件信息数量不同,那就加入限制,让条件数量相同就好了,这样每个模型输入数量也就一样,就能共享模型了。比如,限制每个维度的变量只与前两步的有关,而与更之前的独立。(如果限制成只与前一个有关,那就是著名的马尔科夫链(Markov Chain))
p(x)=p(x1)p(x2∣x1)∏d=3Dp(xd∣xd−1,xd−2)p(\pmb{x}) = p(x_1)p(x_2 | x_1)\prod_{d=3}^Dp(x_d | x_{d-1}, x_{d-2}) p(xx)=p(x1)p(x2x1)d=3Dp(xdxd1,xd2)
在这里插入图片描述

图中蓝色的节点表示输入信息,黄色的点为中间表示,绿色的点为输出的概率分布。

通过这种假设,可以用一个共享的模型来实现,但是也带来了一个很大的缺陷,当前的节点只能看到有限长度之前的信息,也就是 Limited memory 的问题。可是这种实现思路确实是可取的,能不能再次基础上加上更长的记忆信息?

5.2.2 RNN

RNN的方式就是在 Finite memory 的基础上加入 long range memory。做法就是把之前的所有memory进行统一的操作,得到固定形式的量 hhh,然后用来计算下一步的结果。这样,既可以固定模型输入形式一致,又可以得到long range memory。
P(xd∣x<d)=P(xd∣RNN(xd−1,hd−1)P(x_d | \pmb{x}_{<d}) = P(x_d | RNN(x_{d-1}, h_{d-1}) P(xdxx<d)=P(xdRNN(xd1,hd1)
其中 hd=RNN(xd−1,hd−1)h_d = RNN(x_{d-1}, h_{d-1})hd=RNN(xd1,hd1),其中 hdh_dhd 作为隐藏内容,就相当于是记忆存储的单元,来存储long-range dependencies。

在这里插入图片描述

通过RNN可以得到 long range memory。但是RNN也有其缺陷:

  1. 显而易见,RNN只能是串行的处理的,所以速度很慢,这也是RNN饱受诟病的地方,也是改进的重要方向。
  2. 同样因为是串行处理的,很容易出现梯度爆炸或者梯度消失的情况,所以模型不好训练。这也同样限制了RNN去获取 long range memory。

5.2.3 Causal Convolution

另一种能让模型得到 long range memory 的方法是Causal Convolution。这种卷积操作通过堆叠多层的卷积,而自下而上每层卷积的步长逐渐增大,来达到获得long range memory的效果。

一维 Causal Convolution

一维的 Causal Convolution 如下图所示。
在这里插入图片描述

二维 Causal Convolution

同样的对于二维数据,也有 Causal Convolution。也就是将二维数据,比如图像看做从上到下,从左到右的序列,然后给卷积核加入mask。
在这里插入图片描述

在这里插入图片描述

Causal Convolution 在学习 long-range dependencies 上比RNN要好,而且可以并行的训练,不会由于串行导致梯度爆炸或者消失的问题。在很多应用上, Causal Convolution 的表现也比 RNN 要好。但是,Causal Convolution 也有其弊端。虽然在训练的时候可以并行的训练,但是在用其生成新的样本的时候,序列还是要一个一个的串行的生成的,这也是自回归模型的一个通病,也是由式子(1)所决定的。不过这也是一个重要的改进的方向。

5.2.4 GPT(Transformer Decoder)

这个部分写的比较简略,如果对Transformer不了解可以先看看Transformer相关的内容就一目了然了 。这里只是看Transformer Decoder部分,因为GPT就是在Transformer Decoder的基础上实现的。现在很多把Tranformer的encoder和decoder分开来实现不同的应用的成果。)
另一种更加直接更加暴力的方法,直接的实现了式子(1),那就是Transformer Decoder及其用到的Masked Multi-head self-attention。Transformer在机器翻译上效果拔群,但是不可否认的是,其需要大量的数据,而且处理的序列长度也是有限的,正是因为直接计算式子(1),越靠后的,需要计算的条件信息越多,计算量也就越大。
Multi-head self-attention 的操作如下:
Attention(q,k,v)=softmax(qkTd)vMultiHeadAttention(Q,K,V)=Concat(head1,head2,...,headh)WO其中headi=Attention(QWiQ,KWiK,VWiV)\begin{aligned} Attention(q, k, v) &= softmax(\frac{qk^T}{\sqrt{d}})v \\ MultiHeadAttention(Q, K, V) &= Concat(head_1, head_2, ..., head_h)W^O \\ \text{其中} \qquad head_i &= Attention(QW_i^Q, KW_i^K, VW_i^V) \end{aligned} Attention(q,k,v)MultiHeadAttention(Q,K,V)其中headi=softmax(dqkT)v=Concat(head1,head2,...,headh)WO=Attention(QWiQ,KWiK,VWiV)
Transformer结构如下
在这里插入图片描述

而Masked Multi-head self-attention中的mask与之前的二维的Causal Attention的mask功能一样,就是为了实现并行的训练,而加入mask使得当前位置之后的序列内容不参与当前内容的计算。

5.3 DARM的优化目标

设数据集 D={x1,x2,...,xN}\mathscr{D} = \lbrace \pmb{x_1}, \pmb{x_2}, ..., \pmb{x_N} \rbraceD={x1x1,x2x2,...,xNxN} ,其中 xn={xn,1,xn,2,...,xn,D}∈χD\pmb{x_n} = \lbrace x_{n,1}, x_{n, 2}, ..., x_{n,D} \rbrace \in \pmb{\chi^D}xnxn={xn,1,xn,2,...,xn,D}χDχD 为一个 DDD 维随机向量,其中 xi,j∈χ={1,2,...,L}x_{i,j} \in \chi = \lbrace 1, 2,..., L \rbracexi,jχ={1,2,...,L} ,其中 LLL 为每个 xi,jx_{i,j}xi,j 的候选值的个数。模型的参数为 θ\thetaθ ,模型对序列每个位置的输出为 Od∈OL\mathscr{O_d} \in \mathrm{O}^LOdOL ,是一个概率分布, ∑l=1LOd,l=1\sum_{l = 1}^L \mathscr{O_{d,l}} = 1l=1LOd,l=1 。其中 Od=θ(x<d)\mathscr{O_d} = \theta(x_{<d})Od=θ(x<d)Od,xn,d=P(xn,d∣θ(x<d))\mathscr{O}_{d, x_{n,d}} = P(x_{n,d} | \theta(x_{<d}))Od,xn,d=P(xn,dθ(x<d))
在最理想的情况下,对于每一个 xn={xn,1,xn,2,...,xn,D}\pmb{x_n} = \lbrace x_{n,1}, x_{n, 2}, ..., x_{n,D} \rbracexnxn={xn,1,xn,2,...,xn,D} 中的每一个 xn,dx_{n, d}xn,d 都有,模型的输出
Od,l={1,l=xn,d0,l≠xn,d\mathscr{O}_{d, l} = \left\{ \begin{aligned} 1, \qquad l = x_{n, d} \\ 0, \qquad l \ne x_{n, d} \end{aligned} \right. Od,l={1,l=xn,d0,l=xn,d

那么根据之前的最大后验概率,我们的目标就是:
argmax⁡θP(D∣θ)=argmax⁡θ∑nlog(P(xn∣θ))+Regularizationargmax⁡θ∑nlog(P(xn∣θ))=argmax⁡θ∑nlog(∏dP(xn,d∣θ))=argmax⁡θ∑n∑dlog(P(xn,d∣θ))=argmax⁡θ∑n∑dlog(Od,xn,d)=argmax⁡θ∑n∑dlog(θ(x<d))\begin{aligned} \underset{\theta}{\operatorname{argmax}} P(\mathscr{D} | \theta) &= \underset{\theta}{\operatorname{argmax}} \sum_{n} log(P(\pmb{x_n} | \theta)) + Regularization \\ \underset{\theta}{\operatorname{argmax}} \sum_n log(P(\pmb{x_n} | \theta)) &= \underset{\theta}{\operatorname{argmax}} \sum_{n} log(\prod_{d} P(x_{n,d} | \theta)) \\ &= \underset{\theta}{\operatorname{argmax}} \sum_n \sum_d log(P(x_{n, d} | \theta)) \\ &= \underset{\theta}{\operatorname{argmax}} \sum_n \sum_d log(\mathscr{O}_{d, x_{n,d}}) \\ &= \underset{\theta}{\operatorname{argmax}} \sum_n \sum_d log(\theta(x_{<d})) \end{aligned} θargmaxP(Dθ)θargmaxnlog(P(xnxnθ))=θargmaxnlog(P(xnxnθ))+Regularization=θargmaxnlog(dP(xn,dθ))=θargmaxndlog(P(xn,dθ))=θargmaxndlog(Od,xn,d)=θargmaxndlog(θ(x<d))
一句话,也就是模型输出的序列要与真实序列一样。

5.4 总结

深度自回归模型(DARM)也是基于似然的模型(Likelihood-based model),但是DARM对于输入有比较严格的要求,那就是输入必须是以序列的形式,所以DARM天生就适合处理像机器翻译这种问题,但是对于其他问题也可以通过一定的转化,使用DARM解决。

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

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

相关文章

第二十三:Fiddler抓包教程(23)-Fiddler如何优雅地在正式和测试环境之间来回切换-上篇

一.简介 1.在开发或者测试的过程中&#xff0c;由于项目环境比较多&#xff0c;往往需要来来回回地反复切换&#xff0c;那么如何优雅地切换呢&#xff1f; 二.实际工作场景 1.问题场景 1.1.已发布线上APP出现接口错误&#xff0c;如何测试线上APP访问本地请求&#xff1f;…

QFramework v1.0 使用指南 介绍篇:01. 简介

01. 简介 大家好&#xff0c;我是 QFramework 的作者 凉鞋&#xff0c;QFramework 从第一次代码提交到现在快 7 年了&#xff08;2015 年 12 月 ~ 2022 年 10 月&#xff09;了&#xff0c;而经过了 7 年时间的打磨&#xff0c;我们终于迎来了 v1.0 版本。 此教程&#xff0c…

Macos/linux g++ 安装OpenCV环境

本文前半部分主要翻译官方文档的东西 https://docs.opencv.org/4.x/d0/db2/tutorial_macos_install.html 依赖&#xff1a; CMake 3.9 or higher Git Python 2.7 or later and Numpy 1.5 or later大家都是程序员自己安装一下吧 在 relese 这里下载一下源代码&#xff1a; htt…

第三章:为组件库添加规范【前端工程化入门-----从零实现一个react+ts+vite+tailwindcss组件库】

第三章&#xff1a;为组件库添加规范 本章我们会用 eslint、prettier以及Husky 为组件库添加规范&#xff1b; 前置知识&#xff1a; eslint、prettier和husky各有什么作用&#xff1f; eslint是代码检查工具&#xff0c;你可以配置eslint&#xff0c;然后通过lint命令检测…

打游戏哪款蓝牙耳机好?四款适合打游戏的蓝牙耳机推荐

现在年轻人最离不开的就是手游&#xff0c;蓝牙耳机可谓是手机游戏的最佳搭档&#xff0c;一副好的蓝牙耳机可以为游戏带来很完美的助力&#xff0c;延迟低的蓝牙耳机可以实现更好的游戏体验感&#xff0c;那么接下来推荐四款适合打游戏的蓝牙耳机。 1、南卡小音舱蓝牙耳机 佩…

2022年全国大学生数学建模美赛E题NPP数据获取

今年的数学建模美赛终于开始了&#xff01;令我感到欣喜的是&#xff0c;今年E题竟然和地理遥感专业息息相关。E题是分析生态环境方面的&#xff01;因此&#xff0c;有很多小伙伴来询问咨询如何解决这道题目。有些小伙伴&#xff0c;还咨询如何使用CASA软件来计算NPP数据&…

Flink SQL使用Catalog消费Kafka时,多个Source读取同一主题解决方案

一、Catalog定义 Catalog 提供了元数据信息&#xff0c;例如数据库、表、分区、视图以及数据库或其他外部系统中存储的函数和信息。数据处理最关键的方面之一是管理元数据。 元数据可以是临时的&#xff0c;例如临时表、或者通过 TableEnvironment 注册的 UDF。 元数据也可以是…

apollo在虚拟机下部署遇到的坑

目录问题描述解决方法编译问题总结问题描述 ​   其实在虚拟机下部署apollo网上是有线程教程的。可以参考在虚拟机上安装运行百度Apollo 6.0&#xff0c;Apollo 6.0 安装完全指南。我依靠这两个指南准备部署的是apollo 7.0&#xff0c;事实证明虽然版本不同&#xff0c;但部…

1、6边距复合属性

提示&#xff1a;文章写完后&#xff0c;padding可以有到四个值。 1、语法&#xff1a; div{ padding&#xff1a;“50px”&#xff1b; padding&#xff1a;“5px 10px”&#xff1b; padding&#xff1a;“5px 10px 20px”&#xff1b; padding&#xff1a;“5…

flex竖排列元素排列方向

flex竖排列元素排列方向一、flex-direction: (元素排列方向) ※ flex-direction:row (横向从左到右排列==左对齐)※ flex-direction:row-reverse (与row 相反)※ flex-direction:column (从上往下排列==顶对齐)※ flex-direction:column-reverse (与column 相反) 二…

基于导频的信道估计实现

目录 零、前言 一、为什么要信道估计 二、导频的概念 &#xff08;1&#xff09;为什么要有导频 &#xff08;2&#xff09;导频在信道估计中作用 &#xff08;3&#xff09;关于导频序列的补充 三、最小二乘法估计 &#xff08;1&#xff09;LS信道估计算法分析 &…

24.登录form的显示

1.概括 本次博客的代码就不自己去写输入框了&#xff0c;直接去引用element官网中的就好。 具体如何实现可以去订阅Vue专栏中的最后两节课噢&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;2.操作方法 打开element官网 https://element.eleme.cn/…

TRC丨艾美捷TRC 那非那韦亚砜说明书

艾美捷TRC Nelfinavir Sulfoxide 是 Nelfinavir Mesylate (N389750) 的杂质。Nelfinavir USP 相关化合物 A。 艾美捷TRC 那非那韦亚砜化学性质&#xff1a; 目录号N389770 化学名称那非那韦亚砜 同义词(3S,4aS,8aS)-N-(1,1-二甲基乙基)十氢-2-[(2R,3R)-2-羟基-3-[(3-羟基-2-…

合宙AIR32F103CBT6刷回CMSIS-DAP固件以及刷ST-LINK V2-1固件方法

合宙AIR32F103CBT6刷回CMSIS DAP固件以及刷ST-LINK V2-1固件方法&#x1f4cc;官方介绍文档:https://wiki.luatos.com/chips/air32f103/index.html&#x1f4cd;原理图&#xff1a;https://cdn.openluat-luatcommunity.openluat.com/attachment/20220605164915340_AIR32CBT6.pd…

从零备战蓝桥杯——动态规划(递推篇)

双非刷leetcode备战2023年蓝桥杯&#xff0c;qwq加油吧&#xff0c;无论结果如何总会有收获&#xff01;一起加油,我是跟着英雄哥的那个思维导图刷leetcode的&#xff0c;大家也可以看看所有涉及到的题目用leetcode搜索就可以哦&#xff0c;因为避让添加外链&#xff0c;一起加…

简历石沉大海?来围观月薪 20k 的软件测试工程师真实简历...

​前言&#xff1a;面试的重要性 在互联网公司&#xff0c;你面试的时候能拿到多少 k 薪资&#xff0c;基本上决定了你未来 1-2 年的工资&#xff0c;这个非常现实。软件测试工程师在企业中俩内年想涨工资非常难的&#xff0c;就算有涨&#xff0c;涨幅也不大。当然不排除你待…

前置句与倒装句练习题

1. 特殊语序&#xff1a;前置 1.All the information you need I am putting in the post today. 2.Any item in our catelogue we can supply and deliver 3.How she got the gun through customs they never found out. 4.The kitchen we are planning to redecorate in the…

Day25Linux获取命令帮助,压缩与解压缩,vim编辑器使用,Linux系统下载软件,通过yum方式安装软件

命令字的帮助信息的查询 rm -fr fdisk -l ls ls -l ls -出现许多.开头的文件隐藏文件 Linux命令字格式 命令字 [选项] 命令字 [选项] 文件或目录 ls哪些选项&#xff1f; 1.如何查看一个命令字的帮助手册&#xff1f; man man ls 按q退出 ls -a显示隐藏文件 ls -l显示文件的详…

Chap4 循环结构 学习总结 第五小组

1、为什么需要循环?: 在 c语言中需要重复执行某些操作时,需要用到循环结构 2、循环的三个语句: for循环、while循环、do-while循环。 下列是while循环和for循环的流程图3、三种循环语句的表达式: (1)while(进入循环条件)循环体语句; (2)do {循环体语句;}while(进…

LVS负载均衡—DR模式

内容预知 1.DR模式的特点 2.LVS-DR中的ARP问题 2.1 问题一&#xff1a;VIP地址相同导致响应冲突 问题原因&#xff1a; 解决方法&#xff1a; 2.2 问题二&#xff1a;返回报文时源地址使用VIP&#xff0c;导致网关设备的ARP缓存表紊乱 问题原因&#xff1a; 解决方法&…