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

news2024/11/25 3:07:10

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

  • 阶段一训练-自我学习-具备知识
    • 训练资料
      • 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的参数,我们可以用它来初始化自己的模型。由这个开源的参数,迅速衍生出了一系列的模型,可以说事半功倍

参考

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

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

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

相关文章

【大专生学前端】:挑战与机遇并存——你怎么看?

在当今互联网飞速发展的时代,前端开发作为连接用户与产品的重要桥梁,一直备受关注。然而,近期社会上流传着一种说法:“大专生学前端,没有前途了,毕业即失业。”这一观点不仅引发了广泛的讨论,也…

【爬虫实战】利用代理爬取电商数据

文章目录 前言工具介绍实战获取网站数据编写代码数据展示 推荐总结 前言 当今电商平台正经历着快速的转型与升级。随着技术的进步和用户需求的多样化,电商不仅从简单的在线购物演变为综合性的购物生态系统,还融合了人工智能、大数据和云计算等先进技术。…

freeRTOS入门学习-基于STM32F103C8T6最小系统板-使用cubeMX创建一个新的工程

一、准备工作 首先打开我们的cubeMX软件,搜索我们对应的MCU,我这里使用的是c8t6最小系统板 接下来双击我们需要的芯片型号 二、System Core配置 进入界面后我们先进行时钟的配置 将HSE配置为晶振 然后我们将SYS配置成为serial wire, …

【单片机毕业设计选题24102】-基于STM32和阿里云的禽舍环境监测控制系统

系统功能: 系统分为主机端和从机端,主机端主动向从机端发送信息和命令,从机端 收到主机端的信息后回复温湿度氨气浓度和光照强度等信息。 从机端操作: 从机端上电后显示“欢迎使用环境监测系统请稍后”两秒后显示第一页面。 从机端口上电…

每日学习笔记:C++ STL算法之数值算法

目录 算法头文件 运算后产生结果 对容器所有元素(数列)进行某种运算: accumulate(beg, end, initValue) accumulate(beg, end, initValue, op) 计算两数列的内积: inner_product(beg1, end1, end2, initValue) inner_product(beg1, end1, end2…

红酒与奶酪:欧洲风情的整合

在欧洲的浪漫风情中,红酒与奶酪总是携手相伴,它们各自不同的魅力交织在一起,仿佛一首悠扬的交响曲,在味蕾上奏响。当洒派红酒(Bold & Generous)与精选奶酪相遇,一场欧洲风情的整合即将上演。…

亚马逊自发货erp,自动虚拟发货自动生成订单

亚马逊自发货 ERP 自动化虚拟发货,贴牌定制独立部署。 大家好,今天来讲一下 ERP 的虚拟自动发货! 1. 以为发货都是人工手动去发货的,其实不然,很多产品一爆就是几十、一百单,不可能一个一个点的去发货&am…

vue3 ResizeObserver如何监听一个容器盒子div宽度高度发生改变

ResizeObserver定义 ResizeObserver:是一个 JavaScript API,用于监视元素的大小变化。它可以观察一个或多个 DOM 元素,以便在元素的大小或形状发生变化时触发回调函数。 ResizeObserver :为了更有效地处理元素尺寸变化而引入的&am…

Linux驱动开发—设备树传递给内核,匹配驱动过程分析

文章目录 总体流程图传递DTB过程编译设备树源文件将 .dtb 文件与内核或引导加载程序集成 内核初始化阶段解析DTB内核启动阶段解析 DTB注册设备树节点驱动程序绑定 内核解析设备树二进制文件(DTB)的过程主要分为几个步骤,从设备树的传递到最终…

Mybatis学习-day19

Mybatis学习-day19 1. resultMap resultMap 是 MyBatis 中最复杂的元素&#xff0c;主要用于解决实体类属性名与数据库表中字段名不一致的情况&#xff0c;可以将查询结果映射成实体对象。 <resultMap id"staffAndDep" type"com.easy.bean.Staff">…

apache 漏洞

影响版本 Apache HTTP Server 2.4.49 某些Apache HTTPd 2.4.50也存在此漏洞 环境搭建 docker pull blueteamsteve/cve-2021-41773:no-cgid 漏洞复现 http://1.15.136.212:8080 1.使⽤poc curl http://1.15.136.212:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd

在没有硬盘的情况下进行电脑数据迁移

电脑数据迁移方式 在更换电脑的时候需要进行文件的传输&#xff0c;但是没有硬盘可以选择使用网线直连或者无线文件共享。通用配置 1.将旧电脑的文件夹或者磁盘设置文件共享 找到指定的文件夹右键属》属性&#xff0c;点击共享》点击高级共享 选择共享文件夹以及修改共享用户…

缓冲区和文件IO--linux系统调用

缓冲区&#xff1a; 缓冲区是一块内存区域&#xff0c;用于存储数据&#xff0c;直到数据被真正写入到文件或设备中&#xff0c;或从文件或设备中读取。这种机制使得程序可以一次处理较大的数据块&#xff0c;而不是频繁地进行较小的I/O操作。 缓冲模式&#xff1a; 全缓冲&…

学习LLM大模型,不容错过的《大语言模型:基础与前沿》(附PDF下载)

前言 就目前来看&#xff0c;大量工作正逐渐被大型语言模型&#xff08;LLM&#xff09;所替代&#xff0c;就比如文本自动生成、智能客服、数据分析和预测等多个领域。这暗示着LLM正逐步成为支撑社会运作的关键基础设施。未来&#xff0c;比Devin更为智能的LLM将会问世。我们…

ARMxy 智能控制器:工业自动化的创新解决方案

工业自动化对控制器的要求也越来越高。ARMxy 智能控制器集成了 PLC 控制和 4G 边缘计算网关&#xff0c;具有多合一的功能&#xff0c;为工业自动化提供了创新的解决方案。 ARMxy 智能控制器的 PLC 控制功能使其能够实现对工业生产过程的精确控制。它可以接收各种传感器的信号…

mapbox-gl 实现绘制图形吸附功能

文章目录 一、前言二、实现代码 一、前言 mapbox-gl 为地图前端框架&#xff0c;以优美的地图样式著称。mapbox-gl-draw 插件可以实现绘制图形&#xff0c;编辑图形的功能&#xff0c;但是编辑图形时无法吸附点位&#xff0c;导致相邻面无法相接。使用mapbox-gl-draw-snap-mod…

JS+CSS案例:用CSS+JS做漂亮的拟真时钟

JSCSS案例&#xff1a;用CSSJS做漂亮的拟真时钟 今天给大家分享一个挺酷的CSSjs模拟的时钟。 案例效果图&#xff1a; 案例分析 通过CSS画一个表的外观&#xff0c;通过JS获取当前时间&#xff0c;并控制表针做对应角度的旋转。 制作时钟外观 HTML结构 首先&#xff0c;我…

python实现小游戏随机猜数

1、脚本练习 import random# 初始化剩余的猜测次数 counts 3 # 生成一个1到10之间的随机整数 numb random.randint(1, 10)# 循环直到猜测次数用完 while counts > 0:tmp input("请输入小鱼手里的数字 (你还剩下 {} 次机会): ".format(counts))guess int(tmp)…

精通剪辑艺术,2024年度四大必备剪辑软件推荐!

在这个视觉为王的时代&#xff0c;视频内容的创作和编辑已经成为了一种艺术形式。无论是个人创作者还是专业团队&#xff0c;都在寻找能够提升工作效率和创作质量的工具。今天&#xff0c;就让我们一起探索几款市面上广受好评的视频剪辑工具&#xff0c;它们将帮助你将创意变为…

测试总结8/6

1.签到 判断其大小写是否与之相等 #include<bits/stdc.h> using namespace std; long long t,x,y; int ans,n,m,k0; const int N2e57; int s[N]; string sum; string num"CodeForces"; int main() {cin>>n;for(int i1; i<n; i) {cin>>sum;int …