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

【生成式人工智能-四-chatgpt的训练过程-pretrain预训练自督导式学习督导式学习】

大模型是怎么被训练出来的具有人类智慧的

  • 阶段一训练-自我学习-具备知识
    • 训练资料
      • self-supervised learning(自督导式学习)
  • 阶段二-怎么让模型具备人的智慧
    • supervised learning 督导式学习
    • 预训练pretrain
      • 为什么要用预训练的模型?
      • Adapter
      • 逆向工程
      • 开源的Pre-train参数
  • 参考

一个语言模型是怎么训练出来的呢?它是怎么具备人类智慧的呢? 它被训练的过程中到底有些什么困难?

阶段一训练-自我学习-具备知识

我们之前就已经讲过,实际上我们要做的就是寻找一个函数,来实现一个文字接龙的功能:
它的做法,它会寻找要给函数:

  1. 输入:中国最高的山是,输出:珠
  2. 输入:中国最高的山是珠,输出:穆
  3. 输入:中国最高的山是朗玛峰,输出:结束符

现在我们知道要实现这个功能我们使用的是一个类神经网络,这个网络有上亿个参数,来实现这样的功能。这上亿个参数是怎么得到的呢,就是通过大量的资料学习到的,就像是人的大脑一样,很难解释每个神经元是怎么作用的,但他们确实可以和谐办公。接下来的要给问题就是到底需要多少的资料才能学会人类的语言呢,又是怎么获取这些资料的呢?

训练资料

要让一个语言模型学会对话,必须具备文法知识以及世界知识,学会文法知识才会知道,“这是一个”这样的表达后面跟的是个名词,而仅仅只有文法知识,还是不够的,所以还需要知道一些世界知识,比如体重的衡量是用公斤数,温度使用摄氏度,不同压力下水的沸点不一样等等。
在这里插入图片描述
这篇论文里面可以看得出来,知道文法知识1亿个参数足够了,但是了解世界知识至少需要300亿个以上,那这么多的资料是怎么喂给大模型的呢

self-supervised learning(自督导式学习)

实际上资料的获取并不复杂,因为网络上的资料足够了,但是怎么喂给大模型呢。通常情况下,我们需要的资料是这样的:
输入:今天天气很好 输出:情感正面
也就是说这些数据是带有标签的,但是现在这么多数据我们是无法进行人工标注的。所以今天我们用的技术就是self-supervised learning(自督导式学习)。我们使用网络上爬到的资料,不需要人工标注,处理成如下格式:
比如我们搜到的是中国最高的山是珠穆朗玛峰,我们可以简单的写一个函数,把这个句子处理成:

  1. 输入:中国最高的山是,输出:珠
  2. 输入:中国最高的山是珠,输出:穆
  3. 输入:中国最高的山是朗玛峰,输出:结束符

这种不需要人工标注的方式,我们就称为自督导式学习。

阶段二-怎么让模型具备人的智慧

学习了那么多资料,真的就可以有很好的答案了么?
答案是否定的。在GPT-3学习了580G的资料,参数有1750亿,但是答案依然是很难尽如人意,你问它一个问题,它甚至有可能会反问你一个问题,完全没有人类的智慧,跟现在的GPT-4是完全没法比。
其实我们想想也可以知道,从网络上爬来的资料,本身就没有告诉模型,怎么样的回答才是符合人类回复的。

supervised learning 督导式学习

为了让模型具备人类回答的智慧,必须要收集人类对话,进行资料标注,来教会模型该怎么回答。
这种人类标注的训练方法,我们就叫做督导式学习,这个过程就叫做Instructing Fine-tuning
比如从人类收集到的资料:
在这里插入图片描述
对于模型来说的输入输出就是:
在这里插入图片描述
那你可以说,我们完全使用人力标注的资料那不是更好么?答案确实是,但是人力能够标注的资料有限的,有限的资料训练出来的参数结果可能就会很奇怪。比如你问模型,中国最高的山是什么? 它很有可能告诉你是:姚明。为什么会出现这样奇怪的答案呢?很有可能是因为资料太少,它只看过这样一个资料。篮球队里最高的人是姚明。

预训练pretrain

那我们有没有更好的方式既能有大量的知识,又能够接受人类的智慧呢?
那就是pretrain,我们使用第一阶段自督导式学习得到的参数,在这个基础上再使用人类标注的数据进行督导式学习,对参数进行微调。

为什么要用预训练的模型?

因为经过预训练的模型具备很强的能力,它甚至能够达到举一反三的效果:
在这里插入图片描述
BERT模型上,如果它看过104种语言的资料,如果我们只用英文做Fine-tune,模型竟然可以做中文的QA,正确率可以达到78.7!!

但还是有一个问题,参数这么多微调一次也很费时间,另外微调过程种参数不会被修改太多,导致失去这些已经学会的知识了呢?Adapter技术就是来解决这个问题的。

Adapter

Adapter,就是字面的意思,我在原模型的基础上,我还要再加上一个适配器,适配器的参数比原来的参数要少很多,微调的过程就会变的很快,且不会影响原来的参数。整个模型的输出就是在原来模型参数的基础上,又加上了少量Adapter的参数
在这里插入图片描述
LoRA就是一种Adapter技术,Adapter其实包括了很多种可以在https://arxiv.org/abs/2210.06175上找到很多种实现
LLAMA在它的论文中,曾指出自己只需要2万多笔资料,就可以训练好一个模型了,但是还有一个问题,有了它就能训练好一个大模型了么?
答案是不能。因为我们依然还是需要优质的微调资料。

逆向工程

显然不是随便标注就可以得到这些微调需要的优质资料,因为我们不知道用户会怎么问问题,那么怎么获取这部分数据呢?现在有种方法就叫做逆向工程,反问GPT,让他帮忙想问题,想答案,用反向生成出来的内容来微调模型。当GPT是不太喜欢这样的。
有了微调的资料,那参数也是很大的训练成本呀,别着急,有开源的参数

开源的Pre-train参数

Meta 23年开源了LLaMA的参数,我们可以用它来初始化自己的模型。由这个开源的参数,迅速衍生出了一系列的模型,可以说事半功倍

参考

李宏毅-生成式人工智能导论

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习008-02-05-03 Highlight Property Editors(突出显示属性编辑器)
  • 每日面试题Day2
  • 介绍ES全称Elasticsearch
  • 【搜索二维矩阵】python刷题记录
  • 用爬虫玩转石墨文档
  • cms里文章页自定义文件名去掉html方法
  • Ant-Design-Vue快速上手指南与排坑
  • 深入解析三路快排:一种高效的排序算法
  • 数据结构+二叉排序树+哈希表
  • 【设计模式】组合模式
  • 从快到慢学习Git指令
  • 如何编写一个CMakeLists.txt文件(由简到难,较详细)
  • RS®ZN-Z8x 开关矩阵
  • 映客基于Apache SeaTunnel 打造高效的一站式数据集成平台
  • 自然语言处理顶会​​​​ACL 2024录用阿里云38篇论文,通义团队披露多项大模型前沿技术
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Android优雅地处理按钮重复点击
  • Angular数据绑定机制
  • git 常用命令
  • Hibernate最全面试题
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JAVA并发编程--1.基础概念
  • Leetcode 27 Remove Element
  • Node项目之评分系统(二)- 数据库设计
  • React Native移动开发实战-3-实现页面间的数据传递
  • session共享问题解决方案
  • TCP拥塞控制
  • uni-app项目数字滚动
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊flink的BlobWriter
  • 浏览器缓存机制分析
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 深度学习在携程攻略社区的应用
  • 数据仓库的几种建模方法
  • 突破自己的技术思维
  • 硬币翻转问题,区间操作
  • 用jQuery怎么做到前后端分离
  • 正则表达式-基础知识Review
  • #{}和${}的区别?
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (39)STM32——FLASH闪存
  • (Git) gitignore基础使用
  • (libusb) usb口自动刷新
  • (poj1.3.2)1791(构造法模拟)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (三)uboot源码分析
  • (一)u-boot-nand.bin的下载
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等