当前位置: 首页 > news >正文

深度学习入门指南(1) - 从chatgpt入手

img

2012年,加拿大多伦多大学的Hinton教授带领他的两个学生Alex和Ilya一起用AlexNet撞开了深度学习的大门,从此人类走入了深度学习时代。
2015年,这个第二作者80后Ilya Sutskever参与创建了openai公司。现在Ilya是openai的首席科学家,带领工程师研发出了可能再次改变世界的chatgpt.

img

撞开深度学习大门的三位大神

上图中,右面的就是图灵奖获得者,深度学习之父Hinton大牛。中间是AlexNet的第一作者Alex, 左边的就是Ilya Sutskever.

10多年间,从DNN,CNN,RNN为代表的第一代深度神经网络,到以深度Q学习为代表的深度强化学习,再到以Transformer技术为基础以BERT为开创的大规模预训练模型。以及针对大规律预训练模型所需要的人工引导和数据标注等技术支持的chatgpt。
深度学习呈现出理论的东西越来越多,但是应用的难度却越来越低的变化。

深度学习的工具发展主要有以下4个阶段:

  1. 以Caffe为代表的专用工具库
  2. 以TensorFlow和PyTorch为代表的生态体系
  3. 以Hugging Face库为代表的预训练模型生态
  4. 以openai API为代表的封闭库

此外,还有一些专用工具,比如推理性能优化的AI编译器技术如TVM,比如LLVM的MLIR等。比如支持深度学习后端的各种GPGPU技术,比如OpenGL,OpenCL,Vulkan,WebGPU。比如支持CPU上进行深度学习计算的OpenMP和XLA线性计算库,等等。

人工智能有三要素:算法、算力和数据。

在大规模预训练模型的时候,算法在核心上变化不大,都是堆积了很多层的Transformer模型。
但是其难点在于对于算力需求越来越庞大,而且随着数据的增加,所生成的数据的质量的保证也是重要的问题。

所以目前的主线就有两条:一条是如何堆积更多的算力,用更大的模型去进行突破,比如gpt3和gpt4就都是大力出奇迹的成果;另外一条是如何提升数据的准确性,并不是说模型大了就自然正确了。目前很多模型都很大,但是效果好的只有openai一家,就说明了这第二条主线的重要性。

另外,光堆算力对于更多人参与研究是不利的,如何实现用较小的算力,实现更好的效果,也是热门的主题。

所以,这个时候的教程,如果还从PyTorch实现MNIST入手的话,离使用chatgpt这样的突破性成果之间的gap就太大了。我们的教程就从chatgpt开始。

学习分享

需要更多AI大模型资源的可以

在这里插入图片描述

从Transformer到GPT-3: 预训练模型的发展

大规模预训练模型的是为了解决自然语言处理NLP问题而产生的。比如机器翻译就是自然语言处理中的一个重要问题。

用神经网络来处理自然语言,早在深度学习出现之前就有了。那时候还没有深度学习,神经网络还存在着梯度爆炸等困难。
1997年,循环神经网络的重要模型,长短时记忆网络LSTM就被研究出来了。
2014年,另外一种改进的循环神经网络-门控循环单元LRU也被发明出来。

2014年,Ilya Sutskever作为第一作者发明了seq2seq模型,基本上解决了使用循环神经网络进行机器翻译的问题。
也是在2014年,为了提升RNN的效果,《Neural Machine Translation by Jointly Learning to Align and Translate》论文开始引入了注意力机制。

2017年,Google人民发现,注意力机制并不一定要依附于循环神经网络,只用注意力模块自己就可以了。他们提出了只用注意力编码器和解码器的结构,就是著名的Transformer模型。这篇论文叫做《Attention is all you need》,不用RNN啦,Attention自己就够用了。

2018年,Google人民研究出了Transformer模型的真正组合方法,正式提出了预训练模型这个概念。从此又开始了一个新的时代。
同年,openai推出了第一代的gpt,论文名叫《Improving language understanding by generative pre-training》。gpt的名称就来自generative pre-training,生成立的预训练模型。

真正开始传奇故事的是从gpt2开始的。openai的大神们发现,通过预训练一个大型语言模型,在无监督的情况下学习多个任务,就可以在很多任务上取得另人惊讶的效果。

gpt2引入了两个重要的东西:一个是零样本学习,就是一个大模型只要训练得足够大,就可以对于很多未知的任务有很强的泛化性,这正是机器学习追求的终极梦想;另一个是微调fine-tune,就是可以站在巨人的肩膀上,基于自己的少量数据的加强训练,就可以让gpt2和自己独特的业务结合起来。

这一下子就点燃了各种大模型,大家纷纷沿着这条路前进,参数不断翻新。从BERT到gpt2这些模型也都是开源的,这时诞生了Hugging face库,将各种预训练模型集成在一个框架内。

gpt2的论文叫做《Language Models are Unsupervised Multitask Learners》,多任务同时也引发多模态的支持,除了文本之外,各大模型对于代码、图像之类的也不放过。这一传统也沿用至今。

微调虽然已经相对容易了,但是openai人民仍不满足。他们认为,人类只用很少的几个样例就能学会的东西,为什么微调需要提供大量的数据才可以做到。最终他们发现,gpt2虽然可以支持多任务学习,但是还需要很多微调的原因是,模型还不够大。于是他们训练了1750亿参数的GPT-3.

GPT-3开始,openai决定不开源了。再想像用gpt2一样通过hugging face库调用没办法了,从此进入了编程的第三范式,只能调用openai的API。

不过,正如gpt3的论文名字《Language Models are Few-Shot Learners》字面所说的,因为gpt3是一个支持few-shot,也就是少样本的学习。所以,不用微调,只用少量的提示就可以让gpt3学习。这就是在现在发挥光大形成一个学科的prompt engineer的“提示工程”或者叫“引导工程”。

img

少样本学习超能力之涌现

目前有一种鄙视链,就是觉得用PyTorch等库自己搭建才是技术,微调不是技术,引导工程更不是技术。我不知道他们是否读过论文原文。
深度学习从一开始就没追求成功理论的严谨性,而是靠易用性流行起来的。
可解释性当然是好的,我们也要学习Anthropic等机构的成果。但是这跟我们搞好引导工程和微调并不矛盾。

无监督预训练模型的不足与chatgpt的诞生

  • Attention is all you need
  • Improving language understanding by generative pre-training
  • Language Models are Unsupervised Multitask Learners
  • Language Models are Few-Shot Learners

上面一节我们看到,这上面4句话是Transformer, gpt, gpt2和gpt3的论文的标题名。他们连在一起就是用无监督的大规模预训练的模型来实现各种任务的总纲。
总结起来,就是大力出奇迹。当模型足够大,就能涌现出少样本学习的强大能力。

这在GPT-3得到了很好的验证。但是,最终火起来的是chatgpt,而非强调few-shot的GPT3。它缺少什么呢?我们看一个论文题目就知道了:《Training language models to follow instructions with human feedback》。

没错,无监督的大规模预训练模型还不行,还需要人类的反馈。这也是chatgpt现目前为止还领先不少参数更多的大模型的原因。比如13亿参数的chatgpt的效果就可以强于1750亿参数的gpt3.

像gpt3这么强大的模型,哪怕是像更强的gpt4,虽然有较强的少样本学习的能力,但是它们都会生成一些编造的事实,生成一些有偏见的事实,甚至是不知所云的或者是有害的信息。

比如,有篇叫做《On the Dangers of Stochastic Parrots: Can Language Models be too Big?》题目就直接质疑,语言模型不能做太大。否则有伦理问题、法律问题、社会公平问题,甚至引发大量碳排放影响环境等。

许多研究人员还制作了有偏见的或者有害的数据集来供模型评估自己的效果,比如Realtoxicityprompts数据集。

而如何通过人类反馈来改进语言模型,也并不是openai的原创,而是借用了强化学习的思想。这种技术被称为reinforcement learning from human feedback - RLHF,人类反馈强化学习。

img

RLHF

RLHF这种技术最初是用在玩游戏的强化学习中。如果用深度强化学习做过Atari游戏的同学都会知道,很多游戏太复杂了,想让算法找到成功的路径需要花费大量时间,甚至经常退化找不到。这时候,如果有玩通关过的人来指导一下,就会节省大量的试错时间。
但是这也是个技术活,如果让哪一种情况下人都指导,那人也受不了。所以要将人类的反馈数据也加工成模型。后来,这种技术在自然语言处理中也遍地开花。

经过人类反馈强化学习的方法进行微调之后,chatgpt竟然惊奇地发现,它对于代码的总结能力、对回答代码问题的能力和支持多种编程语言的能力比gpt3有显著的提高。这个结果跨界打击了Codex等专门为编程语言研发的模型。

不过,不管是论文还是实测结果都证明了,chatgpt仍然会犯简单低级的错误,需要在理论和实践上都进一步的改进。

chatgpt并不是全部

从目前看来,chatgpt和gpt4是领先的。但是,其它的方向我们也需要保持关注和敏感度。比如更小算力的方向是否可能有突破,或者是下一步的线索是否已经在悄悄地成长中。

开源的解决方案仍然是一个值得关注的方向。 抱openai的大腿并且搞好引志工程是目前是最现实的解决方案,但是我们永远不能忽视开源的力量。哪怕开源的走错了方向,这个错误也更容易被学习到。

以Meta AI推出的LLaMA为例,他们的关注点不是人类反馈强化学习,而是坚持由《Scaling laws for neural language models》一文提出的缩放定律:

  • 语言模型的交叉熵损失随着模型大小、数据集大小和训练计算量呈幂律关系,其中一些趋势跨越了七个数量级以上。
  • 网络的其他架构细节,如宽度或深度,在较大的范围内对性能影响很小。

img

3keypoints.png

也就是说,沿着缩放定律的方向,few-shot的能力就还会进一步提升。这一过程,只与数据量、计算量和参数量三者有关。

而据Deepmind的一项研究《Training Compute-Optimal Large Language Models》,模型和训练数据量等比例缩放才会获取更好的训练效果。现有的大模型参数加上去了,但是数据量没有跟上,所以浪费了资源。

所以LLaMA也尝试依据Deepmind的这项研究,通过增加训练数据来对较小的模型进行训练,可以得到比更大模型更好的效果。

这里不得不再八卦一下,缩放定律这篇论文,恰恰是也是来自研究gpt3的openai团队。团队的leader是Dario Amodei。

img

dario.png

在gpt3面临选择的关头,Dario Amodei对于gpt3这样的黑盒也很不满,他认为能够解释清楚黑盒比做更大的gpt4更重要,于是他带领很多openai同事创建了Anthropic。无论最终结果如何,Anthropic所代表的思路是值得我们一直关注的。

小结

  1. 从编程实现全部模型,到使用预训练模型,到调用API微调,再到引导工程,每一步都是技术的发展,每一层做好都不容易。
  2. 更大的模型目前仍然是最有希望的方向。更大的模型和更多的数据可能会涌现出更强的微调和少样本零样本能力。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker③_VMware虚拟机和Docker的备份与恢复
  • CST软件如何设置硬件加速选项GPU DCMPI token?
  • (自用)交互协议设计——protobuf序列化
  • python笔记和练习----少儿编程课程【阶段一(二)】
  • 【案例38】Can’t get connection from database 排查详细记录
  • GPS跟踪环路MATLAB之——数字锁频环
  • 可视耳勺靠谱吗?五款杰出可视挖耳勺种草!
  • Windows 平台 Docker Protainer可视化平台,忘记登录密码,重置密码
  • 【C++算法】双指针
  • 45.跳跃游戏
  • 爬虫练习_01
  • 代码随想录算法day16 | 二叉树part06 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树
  • 做报表用什么工具?不想再用Excel了!!!
  • Tomcat漏洞
  • Python配置文件格式——INI、JSON、YAML、XML、TOML
  • #Java异常处理
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CSS中外联样式表代表的含义
  • express.js的介绍及使用
  • httpie使用详解
  • JSONP原理
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux快速复制或删除大量小文件
  • MD5加密原理解析及OC版原理实现
  • python 学习笔记 - Queue Pipes,进程间通讯
  • spring boot下thymeleaf全局静态变量配置
  • springboot_database项目介绍
  • 分类模型——Logistics Regression
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何进阶一名有竞争力的程序员?
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用Swoole加速Laravel(正式环境中)
  • 手写一个CommonJS打包工具(一)
  • 译自由幺半群
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • # Panda3d 碰撞检测系统介绍
  • # windows 安装 mysql 显示 no packages found 解决方法
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #每日一题合集#牛客JZ23-JZ33
  • #微信小程序:微信小程序常见的配置传值
  • $L^p$ 调和函数恒为零
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2)STM32单片机上位机
  • (30)数组元素和与数字和的绝对差
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (SERIES12)DM性能优化
  • (windows2012共享文件夹和防火墙设置
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 未来三学期想要修的课 (日記)