4. OpenAI GPT算法原理解析
1. 语言模型
2. Attention Is All You Need(Transformer)算法原理解析
3. ELMo算法原理解析
4. OpenAI GPT算法原理解析
5. BERT算法原理解析
6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质
1. 前言
本文对2018年OpenAi提出的论文《Improving Language Understanding
by Generative Pre-Training》做一个解析。
一个对文本有效的抽象方法可以减轻NLP对监督学习的依赖。大多数深度学习方法大量的人工标注信息,这限制了在很多领域的应用。在这些情况下,可以利用来未标记数据的语言信息的模型来产生更多的注释,这可能既耗时又昂贵。此外,即使在可获得相当大的监督的情况下,以无人监督的方式学习良好的表示也可以提供显着的性能提升。到目前为止,最引人注目的证据是广泛使用预训练词嵌入来提高一系列NLP任务的性能。
2. OpenAI GPT原理
本文提出一种半监督的方式来处理语言理解的任务。使用非监督的预训练和监督方式的微调。我们的目标是学习一个通用的语言标示,可以经过很小的调整就应用在各种任务中。这个模型的设置不需要目标任务和非标注的数据集在同一个领域。模型有两个过程。
- 使用语言模型学习一个深度模型
- 随后,使用相应的监督目标将这些参数调整到目标任务
3. OpenAI GPT模型结构
3.1 非监督预训练
处理非监督文本\((x_1,x_2,...,x_m)\)的普通方法是用语言模型去最大化语言模型的极大似然。
\[
L_1(X)=\sum_ilogP(x_i|x_{i-k},...,x_{i-1}:\theta)
\]
文章中使用的是多层Transformer的decoder的语言模型。这个多层的结构应用multi-headed self-attention在处理输入的文本加上位置信息的前馈网络,输出是词的概念分布。
\[
h_0=UW_e+W_p
\]
\[
h_l=transformer\_block(h_{l-1})
\]
\[
P(u)=softmax(h_nW^T_e)
\]
3.2 监督微调fine-tuning
这个阶段要对前一个阶段模型的参数,根据监督任务进行调整。我们假设有标签数据集\(C\),里面的结构是\((x_1,x_2,...,x_m,y)\)。输入\((x_1,x_2,...,x_m)\)经过我们预训练的模型获得输出向量\(h_l^m\),然后经过线性层和softmax来预测标签。
\[
P(y|x_1,x_2,...,x_m)=softmax(h_l^m{W_y})
\]
\[
L_2(C)=\sum_{x,y}logP(y|x_1,...,x_m)
\]
我们增加了语言模型去辅助微调,提高了监督模型的结果。最后的损失函数可以标示为
\[
L_3(C)=L_2(C)+\lambda{L_1(C)}
\]
模型结构如下:
3.3 特殊任务的输入变换
对于有些任务,像文本分类,我们能够直接用上文的模型进行微调。另外的任务,问答系统,需要构造输入的句子对,或者三个文档。由于我们的预训练模型需要连续的文本序列,我们需要改变这种多句文本的输入。
- 文本含义:用$链接前后两个文本
- 相似度:对于相似度的问题,由于没有文本内部的先后顺序。我们可以有两个输入\(Text1\$Text2\)和\(Text2\$Text1\),输出的表示向量在加起来。
- 问答系统:有\(Context\)和\(Answer_1,...,Answer_N\),我们可以组合成\(N\)个\(Context\$Answer_i\)输入,获得N个输出,在通过linear后softmax出概率分布。
4. 总结
论文中介绍了一通过预训练学习和有针对性的微调的个强有力的框架。通过预训练是不同的长文本连续的数据集,模型能够有能力去处理长而广的依赖关系,这个是解决问答系统、语义相似度、文本分类中的关键点。
4. OpenAI GPT算法原理解析的更多相关文章
- 2. Attention Is All You Need(Transformer)算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 3. ELMo算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 5. BERT算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- PhotoShop算法原理解析系列 - 像素化---》碎片。
接着上一篇文章的热度,继续讲讲一些稍微简单的算法吧. 本文来讲讲碎片算法,先贴几个效果图吧: 这是个破坏性的滤镜,拿美女来说事是因为搞图像的人90%是男人,色色的男人. 关于碎 ...
- PhotoShop算法原理解析系列 - 风格化---》查找边缘。
之所以不写系列文章一.系列文章二这样的标题,是因为我不知道我能坚持多久.我知道我对事情的表达能力和语言的丰富性方面的天赋不高.而一段代码需要我去用心的把他从基本原理-->初步实现-->优化 ...
- FastText算法原理解析
1. 前言 自然语言处理(NLP)是机器学习,人工智能中的一个重要领域.文本表达是 NLP中的基础技术,文本分类则是 NLP 的重要应用.fasttext是facebook开源的一个词向量与文本分类工 ...
- LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...
- 最全排序算法原理解析、java代码实现以及总结归纳
算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过 ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
随机推荐
- 树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序
一.前言 将做好的Python软件运行在树莓派上时,不想公开源码,就需要对文件进行封装(或称打包),本文主要介绍使用pyinstaller封装Python代码为可执行程序. Python是一个脚本语言 ...
- Java 复习
基础: JAVA基础扎实,理解io.多线程.集合等基础框架,对JVM原理有一定的了解: 熟读Java SDK源码: 框架: 对Spring,ibatis,struts等开源框架熟悉:
- Java中十个常见的违规编码
摘要:作者Veera Sundar在清理代码工作时发现一些常见的违规编码,因此,Veera Sundar把针对常见的一些违规编码总结成一份列表,以便帮助Java爱好者提高代码的质量和可维护性. 最近, ...
- Orleans高级功能
一.Reentrant Grains二.请求上下文三.激活垃圾收集四.外部任务和Grains五.序列化六.代码生成七.在Silo内的应用程序引导八.拦截器九.取消令牌十.Powershell客户端十一 ...
- VB.NET 编程元素支持更改总结
Visual Basic 2005 更改了它支持各种编程元素的方式,主要是为了提供与公共语言运行库的互操作性.许多 Visual Basic 6.0 元素被重新命名,重新分类或与 Visual Bas ...
- 安卓工作室android studio 美化 ,设置背景图片。
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com sexy Editor 点击file-> ...
- prufer序列计数的一些结论
\(prufer\)序列和完全图的生成树一一对应(考虑构造) 完全图的生成树个数为\(n^{n - 2}\) 满足第\(i\)个点的度数为\(d_i\)的生成树为\(\frac{n!}{\prod ( ...
- CAD常用的快捷键命令
CAD常用的快捷键命令大全,主要包括快捷键命令的键盘操作和所对应的快捷命令,方便查找和使用,对cad初学者能够快速提高绘图速度.图文并茂,非常实用. 一:常用功能键 F1: 获取帮助 F2: 实现作图 ...
- BZOJ3861 : Tree
把集合看成左边的点,图中的点看成右边的点,若集合$i$不包含$j$,则连边$i->j$,得到一个二分图,等价于求这个二分图的完备匹配个数. 设$f[i][j]$表示考虑了前$i$个集合,匹配了$ ...
- C#6.0特性与vs2015
C#6.0 中的那些新特性 1. 自动属性的初始化 public string Name { get; set; } = "zhangsan"; 2. 只读属性初始化 public ...