Re62:读论文 GPT-2 Language Models are Unsupervised Multitask Learners

news2025/2/27 18:26:16

诸神缄默不语-个人CSDN博文目录
诸神缄默不语的论文阅读笔记和分类

论文全名:Language Models are Unsupervised Multitask Learners
论文下载地址:https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

官方博文:
Better language models and their implications
GPT-2: 6-month follow-up
GPT-2: 1.5B release

官方GitHub项目:openai/gpt-2: Code for the paper “Language Models are Unsupervised Multitask Learners”
对代码的整理和用代码实现GPT-2的解决方案请参考本文第4章

本文是OpenAI于2019年推出的GPT-2论文,核心思想是用无监督思路构建的语言模型来直接解决NLP问题,做一个通用大模型而非领域专家。
GPT-2本身也是个纯英文的模型。

GPT-1:Re45:读论文 GPT-1 Improving Language Understanding by Generative Pre-Training

GPT-2是因果/单向LM,预训练目标是通过前文预测下一个单词。

huggingface提供的在线试用GPT-2-large的平台:https://transformer.huggingface.co/doc/gpt2-large
打字后按Tab获得提示。
在这里插入图片描述

文章目录

  • 1. 研究背景
  • 2. 模型
  • 3. 实验
    • 3.1 数据集
    • 3.2 实验结果
      • LM实验结果
      • 下游任务实验结果
      • Generalization vs Memorization
      • OOD生成样例
  • 4. 复现
    • 4.1 官方代码
    • 4.2 基于transformers实现GPT-2
      • 4.2.1 基于GPT2LMHeadModel + PyTorch原生框架实现S2S任务微调和推理
      • 4.2.2 基于GPT2LMHeadModel + transformers.Trainer微调GPT-2
  • 5. 本文撰写过程中参考的其他网络资料

1. 研究背景

现在的有监督方法的缺点:有监督模型不鲁棒,只能在IID测试集上表现良好。当前已经开始研究多任务通用模型,但多任务学习表现不好,而且要求高标注量。

现在的预训练方法还需要有监督微调。

2. 模型

语言模型:
在这里插入图片描述

在这里插入图片描述

可以用文本生成任务来建模所有NLP任务,这种思路统一了无监督和有监督任务的形式。

不同大小的GPT-2:
在这里插入图片描述

  1. tokenization
    Byte Pair Encoding (BPE) 改造版:原始BPE是贪心,这导致重复相似词出现,导致非最优和占空间。本文改为不让它在字节序列之间合并。
  2. Layer normalization:加到每个sub-block输入,和最后一个self-attention block后
  3. 词表、上下文长度、batchsize增大
  4. 学习率是手动调整的,目标使测试集(5% WebText)perplexity最低
  5. 模型仍未收敛
  6. 位置向量
    绝对位置编码,默认pad到右边。

3. 实验

3.1 数据集

语料:WebText
来源于爬虫

在预训练时删掉了非英语网页(所以翻译效果不好也很正常)

语料中蕴含的翻译知识:
在这里插入图片描述

下游多任务:
阅读理解:CoQA
翻译:WMT-14 Fr-En
摘要:CNN and Daily Mail
QA:Natural Questions

3.2 实验结果

LM实验结果

基本上都是模型尺寸越大,效果越好。

在这里插入图片描述

CBT:
在这里插入图片描述

LAMBADA

Winograd Schema Challenge:commonsense reasoning
在这里插入图片描述

在这里插入图片描述

下游任务实验结果

零样本多任务,模型尺寸越大,效果越好:
在这里插入图片描述

生成摘要的prompt:TL;DR:
在这里插入图片描述

翻译给出少样本上下文(english sentence = french sentence)和prompt(english sentence =

QA:
在这里插入图片描述
可以看出GPT-2置信度高的样本准确率确实高。

Generalization vs Memorization

训练集与测试集重复度较低,所以可以认为模型是真的实现了泛化,而不是单纯的记忆。

语料训练集与测试集的重复程度:(第一行是原始数据的训练集,第二行是WebText的训练集)
在这里插入图片描述
文字描述的下游数据上的重复率略。

这个是通过8-gram布隆过滤器计算的,具体略。

8-gram覆盖率

在这里插入图片描述

OOD生成样例

在这里插入图片描述

更多示例见论文附录和官方博客,我就不列出来了。

4. 复现

4.1 官方代码

官方代码是5年前的TensorFlow 1,想想就知道我不可能会。TensorFlow是不可能学的,这辈子都不可能学TensorFlow的,PyTorch又好用,社区丰富,超喜欢这里的。

BPE tokenize:https://github.com/openai/gpt-2/blob/master/src/encoder.py

建模:https://github.com/openai/gpt-2/blob/master/src/model.py

生成:https://github.com/openai/gpt-2/blob/master/src/sample.py

无条件生成文本:https://github.com/openai/gpt-2/blob/master/src/generate_unconditional_samples.py

有条件(基于prompt)生成文本:https://github.com/openai/gpt-2/blob/master/src/interactive_conditional_samples.py

4.2 基于transformers实现GPT-2

GPT-2是AR语言模型,所以要用语言模型(AutoModelWithLMHead)来实现各项任务。不是seq2seq模型,所以应该不能用seq2seq模型的框架……
不过我也没试过那么干就是了……

官方提供的GPT-2权重(都是纯英文的):
openai-community/gpt2 · Hugging Face:OpenAI官方提供的最小的GPT-2权重

https://huggingface.co/openai-community/gpt2-medium
https://huggingface.co/openai-community/gpt2-large
https://huggingface.co/openai-community/gpt2-xl

https://huggingface.co/distilbert/distilgpt2

4.2.1 基于GPT2LMHeadModel + PyTorch原生框架实现S2S任务微调和推理

数据集构建:https://github.com/PolarisRisingWar/Math_Word_Problem_Collection/blob/master/codes/finetune/gpt2/GPT2DataSet.py

微调:https://github.com/PolarisRisingWar/Math_Word_Problem_Collection/blob/master/codes/finetune/gpt2/finetune.py

推理:https://github.com/PolarisRisingWar/Math_Word_Problem_Collection/blob/master/codes/finetune/gpt2/test.py
关于generate()函数的使用可以参考这篇博文:文本生成解码策略及其在transformers中的代码实现  及配套的代码,展示了不同解码方案输出的效果:https://github.com/PolarisRisingWar/all-notes-in-one/blob/main/decode_examples_in_GPT2.ipynb

4.2.2 基于GPT2LMHeadModel + transformers.Trainer微调GPT-2

参考代码:https://github.com/PolarisRisingWar/Math_Word_Problem_Collection/blob/master/codes/finetune/gpt2/finetune_w_Trainer.py

5. 本文撰写过程中参考的其他网络资料

  1. OpenAI GPT2
  2. https://github.com/huggingface/transformers/blob/main/examples/pytorch/text-generation/run_generation.py:这个是transformers的AR语言模型的示例
  3. Fine-tune a non-English GPT-2 Model with Huggingface:用德语语料训练GPT-2的示例,本文撰写基于Trainer微调时参考了这篇博文的代码
  4. python - How to build a dataset for language modeling with the datasets library as with the old TextDataset from the transformers library - Stack Overflow:这篇的意义就是跳转到下面这个讨论↓
  5. Help understanding how to build a dataset for language as with the old TextDataset - 🤗Datasets - Hugging Face Forums
  6. 图解GPT-2 | The Illustrated GPT-2 (Visualizing Transformer Language Models)-CSDN博客:这篇具体介绍了GPT-2原理
    我之前写的Transformer和GPT-1的博文其实也有涵盖,但是没有这篇这么有针对性。而且这篇对attention的介绍与我写的理解角度不同,可资参考。补充的点在于 ① 最后一个block输出与embedding相乘得到logits,对这个logits进行采样得到预测token ② GPT-2一般用top-k=40
  7. 图解自注意力机制_masked self-attention-CSDN博客:上文中的自注意力部分独立成章
    这个masked attention图画得挺到位的,带了数字而且颜色更好看:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这篇补充多头注意力机制peojection过程是不改变维度的
  8. https://github.com/huggingface/transformers/blob/870ff9e1dab249e4ffd8363ce132aa5145c94604/src/transformers/models/gpt2/modeling_gpt2.py:transformers官方实现
    代码集成性太高了,一下子看不懂,以后有时间慢慢研究吧
  9. GPT-2 论文+代码笔记 | Yam:这篇对论文做了解读,同时对GPT-2原代码做了解读,内容很全面。
    用Conv1d做线性转换这事真奇怪啊……
  10. GPT-2代码解读[2]:Attention_gpt attention qpv-CSDN博客:这篇主要的特色是对GPT-2原代码中attention部分进行解读
    ↑虽然但是,我也不用TF 1……总之是值得在需要时进一步了解的。但是,有没有PyTorch实现更简洁的解读啊
  11. Training CodeParrot 🦜 from Scratch:这篇博文涵盖了更多大模型训练技巧,包括对多卡的处理。由于我暂时用不到所以没细看,如果有需要可以看看。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解锁编程潜能:ChatGPT如何革新软件开发

目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代,软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步,越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一,最近…

【RabbitMQ | 第五篇】RabbitMQ实现消息的可靠抵达

文章目录 5.RabbitMQ实现消息的可靠抵达5.1引入背景5.2确认机制分类5.2.1ConfirmCallback (确认模式:消息生产者确认)(1)开启确认配置(2)实现ConfirmCallback回调接口 5.2.2ReturnCallback(回退模式&#x…

vue3.x 使用jsplumb进行多列拖拽连线

前言&#xff1a; 最近很多小伙伴问到使用jsplumb进行多列拖拽连线怎么实现&#xff1f; 下面介绍vue3.x 使用jsplumb进行多列拖拽连线示例&#xff0c;以三列举例&#xff1a; 安装 npm install --save jsplumb引入 <script lang"ts" setup>import {ref, r…

#Linux(VIM编辑器使用)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;打开一个文本文件输入vi文件名&#xff08;如果存在该文件则直接打开&#xff0c;如果没有则创建一个文件&#xff09; &#xff08;2&…

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09;诚邀投稿/参会&#xff01; # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;I…

递推与递归

92. 递归实现指数型枚举 - AcWing题库 #include <bits/stdc.h> using namespace std; const int N17; int n; bool vis[N];//记录某一个数是否出现过 void dfs(int dep){// if(vis[dep])continue;//没有这一句 因为一定不会有已经选过的数if(depn1){//对于每个数都做完了…

C++ QT串口通信(2)-串口通信入门实例

本文通过实例讲解C++ QT串口通信。 入门实例设计一个串口助手,能够很好的涵盖串口要点的使用。 成品图 如下; 实现代码如下: 首先在pro文件中添加串口模块 UI界面如下 <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0&q…

漏洞挖掘 | 记一个奇怪的万能密码

前言 打的站点打多了&#xff0c;什么奇怪的问题都会发生 打点 开局一个登录框 用户枚举到账号爆破 测了一下&#xff0c;没发现admin的弱口令&#xff0c;但是发现存在用户枚举漏洞&#xff0c;因此准备跑一下账号 输入密码为123456 进行账号爆破 成功爆破出账号 是的…

综合知识篇10-计算机网络考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html案例分析篇00-【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例…

【读书笔记】 40本脑科学书籍总结出的方法论——《涂鸦启示录》我庆幸没有错过

文章目录 《费曼学习法》《SMART法则》 概述原书内容脉络第一部分 目标管理第二部分 习惯养成第三部分 时间管理第四部分 思维方式第五部分 学习方法第六部分 解决问题 拓展 阅读体验感受评价补充&#xff1a; 总结 《涂鸦启示录》是诸多认知&#xff0c;思维书籍、演讲的大合集…

angularjs 指令实现自定义滚动条

场景&#xff1a;横向商品栏&#xff0c;把原有的滚动条改成自定义的样式&#xff0c;并且给两边加上箭头可以调整&#xff0c;可以拖动商品和滚轮实现滚动条效果。 js appService.directive(customScrollbar, function() {return {restrict: A,transclude: true,scope: {ena…

MATLAB环境下基于离散小波变换和主成分平均的医学图像融合方法

随着计算机技术和生物影像工程的日趋成熟&#xff0c;医学图像为医疗诊断提供的信息越来越丰富。目前&#xff0c;由于医学成像的设备种类繁多&#xff0c;导致医生获得的图像信息差异较大。如何把这些信息进行整合供医生使用成为当务之急。基于此&#xff0c;医学图像融合技术…

php 对接Mintegral汇量海外广告平台收益接口Reporting API

今天对接的是Mintegral广告reporting api接口&#xff0c;拉取广告收益回来自己做统计。记录分享给大家 首先是文档地址,进入到Mintegral后台就能看到文档地址以及参数&#xff1a; 文档地址&#xff1a;https://cdn-adn-https.rayjump.com/cdn-adn/reporting_api/MintegralRA.…

2024你值得拥有,Go语言入门学习线路推荐

“小众”的编程语言的Go语言在今年2月成功挤进TOIBE排行榜前10&#xff0c;3月稳居第8名。从最低时的第122名&#xff0c;到现在第8名&#xff0c;Go 的身影越来越清晰。 其实它早已被广泛应用于云计算、大数据、区块链、微服务、游戏开发等领域&#xff0c;因而也有越来越多的…

相比于 HTTP 协议,WebSocket协议的必要性体现在哪里?

HTTP 协议的一个缺点 从 HTTP 协议的角度来看&#xff0c;就是点一下网页上的某个按钮&#xff0c;前端发一次 HTTP请 求&#xff0c;网站返回一次 HTTP 响应。这种由客户端主动请求&#xff0c;服务器响应的方式也满足大部分网页的功能场景。但是有没有发现&#xff0c;在HTTP…

WiFi7为什么需要6G频谱

从5925MHz到7125MHz&#xff0c;整整1200MHz的频谱&#xff0c;都被分配给了WiFi7。非常得豪&#xff01; 只是国内还没有这个东西。 为什么要这么宽的频谱呢&#xff1f; Intel作过实验&#xff0c;发现在日常的场合下 一定是3个320MHz宽的不重叠信道&#xff0c;方能达到AV/…

小游戏实战-Python实现石头剪刀布+扫雷小游戏

小游戏实战-Python实现石头剪刀布扫雷小游戏 我想说废话止于此石头剪刀布-入门必学游戏游戏规则实现思路示例代码知识要点运行效果 扫雷-内网摸鱼必备游戏游戏规则实现思路示例代码知识要点运行效果 进阶练习-走迷宫&#xff08;预留&#xff09;游戏规则预期效果 总结 我想说 …

算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数 题目要求 解题思路 网格图 DFS 从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走&#xff0c;如果走一步后&#xff0c;没有出界&#xff0c;且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j]&#xff0c;则…

Java使用itextpdf往pdf中插入图片

引入maven依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.9</version> </dependency>java代码 import cn.hutool.extra.qrcode.QrCodeUtil; import com.itextpdf.text.*; i…

华为携手8家企业打造“AI大模型+行业”生态网络 | 百能云芯

据媒体报道&#xff0c;在“大模型行业创新合作计划”签约仪式上&#xff0c;华为云携手循环智能、迪安诊断、零浩网络、云译科技、蓝青教育、航天天目、标普云、乐聚机器人等8家企业&#xff0c;共同开启了一段全新的合作旅程。 这次合作将聚焦于“AI大模型行业”的应用开发&a…