大型语言模型入门
大型语言模型ChatGPT
快速、全面了解大型语言模型。学习李宏毅课程笔记。
ChatGPT
目前由OpenAI公司发明的非常火的人工智能AI应用ChatGPT,到底是什么原理呢?
G:Generative(生成)
P:Pre-trained(预训练)
T:Transformer(一种类神经网络模型)
当然,类似的AI技术还有其他,如:Google Bard、Anthropic Claude等等
ChatGPT背后原理
ChatGPT真正做的事情:就是“文字接龙”。

ChatGPT又叫大型语言模型,那什么是语言模型呢?
能做“文字接龙”的模型,其实就是语言模型。
那语言模型,是怎么回答人类问题的呢?
当输入问题“台湾最高的山是哪座?”的时候,ChatGPT会把它看作成为一个未完成的句子,它会选择一个最合理的字输出,如“玉”字;接下来,它会把上次的输出,接到这个问题后面,共同作为下次的输入,以此类推,直到ChatGPT输出“end”结束。

我们再详细一点看ChatGPT的原理:
比如,如果输入“台湾大”,后面可以接的字有很多可能,可以接“学”、“哥”、“车”等等。ChatGPT的输出其实是给每个可能输出的符号一个概率,比如在这个例子中,“学”出现的概率是50%,"车"出现的概率是25%…ChatGPT就按照这些字出现的机率掷色子,掷到“学”的概率最大。所以,ChatGPT每次输出的答案不一定相同。

我们把输出有可能选择的这些符号,就叫做Token。Token是语言模型中很重要的一个概念,甚至ChatGPT在计算价格的时候,都是用生成多少token,要花多少钱来收费。
Token
其实,每个语言模型的token还不一样,token是开发者事先设定好的,就是做文字接龙的时候你可以选择的符号,有个平台(https://platform.openai.com/tohenizer)可以查询openAI的某些语言模型的token是什么。
比如:I am unkillable,虽然是3个单词,却是6个token。

其中,unkillable就被拆成了3个token,即要做3次接龙。
那为什么不能把一个单词作为一个token呢?
因为英文单词无法穷举,因为token是一个可以被选则的符号,所以它必须是一个可以被穷举的东西,这样ChatGPT才能给每个token一个概率值,英文单词那么多,而且还不断有新的新的单词产生,所以用这种相当于字首字根的东西表示更为方便。

那中文的token是什么样呢?
在OpenAI的GPT系列中,通常不是把一个中文方块字当作一个token,一个中文方块字是好几个token,当然如果你想开发自己的人工智能,想把一个方块字就当作一个token,也是合理的。
掷色子
我们已经知道ChatGPT是按照这些token出现的机率掷色子而得到最后结果。所以,ChatGPT每次输出具有随机性,答案不一定相同。

那为什么不能选则输出概率最大的那个Token,而要以掷色子的形式输出呢?
因为每次输出概率最大的那个,不一定能得到最好的结果。可以看19年的这篇论文《The curious case of neural text degeneration》,每次选择概率最大的Token,模型就容易跳帧,不断loop不断讲一样的话,如果是掷色子的话,就能输出很自然的回答。

为甚么ChatGPT有时候也会输出一本正经的胡说八道的答案?
现在我们了解了ChatGPT真正做的事是文字接龙的话,就不难想象说为什么ChatGPT也会回答错误答案,因为这些答案都是凭借接龙接出来的,ChatGPT根本不在意这些答案是否真实或对错。
比如下面这个例子,让ChatGPT介绍台大的玫瑰花节,但是台大根本没有这个节日,它仍然会像模像样的给你一个答案,这个网址也是它自己瞎造的。

ChatGPT既然是做“文字接龙”,那它是怎么知道多轮对话的呢?即怎么知道一些历史信息的呢?
举个例子:

我不需要告诉它把什么翻译成英文,它自己就知道是要把上一个问题的答案翻译成英文,这是为什么呢?
就是在做文字接龙的时候,同一则对话里面,过去你问的问题+ChatGPT的输出+这次你的问题,都会作为新的输入。
文字接龙
语言模型是怎么学会做文字接龙的呢?
网络上的任何一句话,都可以作为语言模型的学习数据,比如“人工智慧真神奇!”这句话,模型看到后就知道,“人”后面接“工”的概率比较大,那就提高“人”后面出现“工”的概率…,"!"后面没话了,那就提高“end”的概率。

那语言模型是怎么输出这个概率分布的呢?
就是Transformer模型。详见其他博客。

ChatGPT历史
OpenAI 在2018年开始就研究有关GPT的模型了。
-
第一代GPT-1:
模型参数量只有117M,训练数据才1GB。

-
2019年诞生第二代GPT-2:
模型参数量1542M,训练数据40GB。
GPT-2也可以做问答任务,但是表现一般,正确率只有55%左右。

-
2020年诞生第三代GPT-3:
模型参数量175B,足足是GPT-2的100多倍呀!训练数据580GB,相当于阅读哈利波特全集30万遍,远超过一个正常人一辈子度过的资料量。
这一代的GPT-3已经会写代码了!

但在所有的任务上的表现也一般,准确率也是50%多左右。

GPT只从网络资料学习的缺点:
有人说OpenAI走错方向了,看起来再怎么做文字接龙,也接不出一个通用的人工智能出来。但是OpenAI并没有放弃,他们有篇论文说其实GPT-3已经很聪明了,但它表现不好的原因就是,它不知道人类社会的规则,不知道人类的需求。它就像一个山野里长大的小孩,它只见过网络上的东西,在网络上随便乱学,它并不知道要做什么事情,甚至不知道要回答问题。
论文举了如下例子:
我们问它C在下面这段代码里面的含义是什么,它的回答是4个选项,可能因为网络上有很多考题,它在网络上学到的就是看到一个问题,对应四个选项。

- ChatGPT-3.5,也就是第3.5代模型
这次引入了监督式学习,就是人类老师教给它,想要让它做的事情。
反过来说,如果GPT网络上爬了数据自己学习,叫作自监督学习,就是自己教自己,相当于课堂前的预习,就叫预训练。所以预训练就是今天很多人工智能成功的关键,预训练好的模型就叫作基石模型,然后经过一些微调,经过人类老师的教学,就可以有很大的提升。

其实,ChatGPT的训练有三阶段:预训练+监督学习+增强学习(后面内容介绍)
其中,监督学习+增强学习 = 对齐,即对齐人类的需求,满足人类的需求。

- ChatGPT-4,第四代模型
OpenAI 并未公开模型参数量大小和训练数据量
GPT-4新增的功能就是可以看得见了!就是你可以给它一张图片,然后问它问题,例子:

监督式学习&预训练&增强学习
监督式学习
监督式学习的重要性:
其实到今天,ChatGPT背后的原理仍然是一种猜想。在InstructGPT这篇文中有张图,纵轴是模型的好坏,横轴是模型参数的大小,蓝色线是模型自监督学习的结果,也就是自己学习网络数据,红色线是监督式学习,就是啊加入了人类老师指导的结果。可以看到,加入了人类指导,即使参数量很小的模型,都比参数量最大的自监督学习模型厉害。就相当于天资再好的学生,都不如那个虽然天资不好,但老师好好教他的模型,所以说明老师(监督式学习)的重要性。

预训练
预训练的重要性:有预训练后,监督式学习不用大量资料!
预训练有多神奇呢?在多种语言上做预训练后,只要教某一个语言的某一个任务,模型就可以自动学习学会其他语言的同样任务。
举个例子,有个语言模型Bert,它自学过104种语言(预训练),现在人类教它学习英文阅能力测验(微调),但不教它中文的阅读能力测验,然后现场让它答中文的,它也答的出来!

那预训练后,需要多少数据就能微调呢?就是老师需要教多少就能让这个模型学生开窍呢。
仍然是InstructGPT这篇文中也可以看到,人类老师只提供了一万多的数据,就微调好模型了。

增强学习
除了监督式学习,ChatGPT还有增强学习(Reinforcement Learning, RL)来强化它的能力。增强学习就是人类老师只提供回馈哪个答案是更好的。
那监督式学习和增强学习之间什么区别呢?
一个需要人类做解答题,一个只要做选择题。监督式学习需要人类老师提供完整的正确答案(这个很花人力气,多数人可能不愿这么做,可能只有OpenAI的标记员有心力做这件事),但在增强学习中,老师不需要提供完整正确答案,只需要反馈哪个答案更好,因此每个人都可以做。
增强学习原理比较复杂,感兴趣的同学可以学习其他相关课程。
从人类的回馈学习,有个专门的简称:RLHF。

基本概念
当输入一个问题,模型给你两个答案,你就告诉它哪个答案更好,模型就会想办法把你觉得好的答案提高输出的概率,不好的答案降低它的概率。
一般先做预训练,再做监督式学习,最后做增强学习。为什么最后做增强学习呢?
因为模型要有一定程度的能力后,才适合进行增强学习,这样效果更好。
背后的假设就是,你的模型要偶有佳作,必须要有时候能得出不错的答案,人类反馈这个答案是好的,然后提高这个答案的概率才有意义。如果模型输出的效果整体不好,即使人类从两个差的答案里勉强选一个,模型相当于还是在提高差的答案的概率,可能这时候增强学习帮助就不大。因此,增强学习一般放在整个训练过的最后。
ChatGPT中的增强学习:
刚才讲到增强学习就是增强好的那一个答案的概率,但是这样的话,机器只学习到把某一个问题做好,怎样才能做到人类给某一个问题回馈,但是其他问题也能同时做好呢?
ChatGPT的增强学习过程分为两个步骤:
-
模仿人类老师的喜好
如:当人类反馈“玉山”答案更好的时候,ChatGPT就会另外再训一个Reward Model,就是把问题+所有可能的答案输入Reward Model,输出一个得分,让人类觉得好的答案的分数就高,不好的分数就低,这样就相当于训练出了一个人类老师的代替品。
好了,现在把人类老师解放了,让Reward Model来代替人类老师的角色。接下来就是步骤2。 -
向模拟老师学习
现在就可以把问题+答案输入给Reward Model了,让它替人类老师打分,对好的答案打高分,差的答案打低分。
打低分,降低概率

打高分,提高概率

总结:
ChatGPT的训练有三阶段:预训练+监督学习+增强学习
其中,监督学习+增强学习 = 对齐,即对齐人类的需求,满足人类的需求。

几个月前,OpenAI发布了GPT-4,并公开了一份近百页的技术报告,最惊人的是,其中作者群长达三页!说明GPT-4背后的工程非常浩大。这份报告主要是一份炫耀文,告诉你GPT-4有多强,但技术细节只介绍了一段话:

OpenAI 并未正式公布ChatGPT-4用了多少训练数据,以及模型的参数量。
下一步:人类的努力

现在语言模型已经非常强了,接下来就是看通过人类的努力,是否能激发语言模型更大的力量。以下就是介绍一些激发语言模型力量的秘诀。
1.把需求讲清楚
比如:是希望它润色,还是改语法,还是用什么语言扩写,扩写到多少字…
2.提供信息给ChatGPT
比如:让它写一篇作文,它写着自己停下来了,你就写“继续”,给它多提供点你的资料,用什么样的口吻、类型等
3.提供范例
例如:直接给他一个例子,让它模仿
4.鼓励ChatGPT想一想
例如:让它回答鸡兔同笼问题,不同文法,结果不同

有人对比了不同的问法的准确率:

准确率最高的问法,就是神奇的咒语
5.如何找出神奇咒语
用AI来找神奇咒语
6.上传档案
7.ChatGPT可以使用其他工具
8.拆解任务
9.自主进行规划
10.ChatGPT其实会反省
11.跟真实环境互动
相关文章:
大型语言模型入门
大型语言模型ChatGPT 快速、全面了解大型语言模型。学习李宏毅课程笔记。 ChatGPT 目前由OpenAI公司发明的非常火的人工智能AI应用ChatGPT,到底是什么原理呢? G:Generative(生成) P:Pre-trained(预训练) T:Transform…...
canvas-视频绘制
通过Canvas元素来实时绘制一个视频帧,并在视频帧上叠加一个图片的功能可以当作水印。 获取Canvas元素: let canvas document.getElementById(canvas) 通过getElementById函数获取页面中ID为canvas的Canvas元素,并将其存储在变量canvas中。 …...
红酒与美食搭配:味觉的新探索
在美食的世界里,红酒如同一位优雅的舞者,与各种佳肴共舞,创造出无尽的味觉惊喜。当定制红酒洒派红酒(Bold & Generous)与各式美食相遇,便开启了一场味觉的新探索之旅。 一、红酒与美食的邂逅ÿ…...
大模型日报 2024-08-02
大模型日报 2024-08-02 大模型资讯 博思艾伦在国际空间站部署先进语言模型 摘要: 博思艾伦在国际空间站上的超级计算机上运行了一种生成式人工智能大型语言模型。这一举措标志着语言模型在太空应用方面的重大进展。 人工智能助力研发安全有效的新型抗生素对抗耐药细菌 摘要: 德…...
【Pytorch】一文向您详细介绍 torch.sign()
🎉🧠**【Pytorch】一文向您详细介绍 torch.sign()** 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介ÿ…...
超级详细,如何手动安装python第三方库?
文章目录 1,python第三方库安装包有3种类型2,python第三方库安装包whl文件如何安装?3,python第三方库安装包zip和tar.gz文件如何安装?4, python第三方库安装包exe文件如何安装? 手动安装第三方库…...
WebSocket协议测试
WebSocket和HTTP接口有什么不一样 websocket和http都是网络接口数据交换的协议。都是基于TCP 协议区别 http:每次数据交互都是一个全新的请求;主动发起http请求调用(非实时) websocket:建立长久网络连接,服务器/客户端可以相互主动发数据…...
浅谈【C#】代码注册COM组件
在C#中注册COM组件通常涉及到使用regasm工具或者在代码中使用System.Runtime.InteropServices命名空间下的RegisterTypeForComClients方法。 下面是两种方法的简要说明和示例: 1、使用 regasm 工具 regasm 是一个命令行工具,用于将.NET程序集注册为CO…...
C++数据结构学习(顺序表)
文章目录 顺序表杭州电子科技大学在线评测2008 数值统计使用顺序表实现 2014 青年歌手大奖赛_评委会打分 Leetcode题目[LCP 01. 猜数字](https://leetcode.cn/problems/guess-numbers/description/)[LCP 06. 拿硬币](https://leetcode.cn/problems/na-ying-bi/description/)[20…...
springboot宠物用品商城系统-前端-计算机毕业设计源码74346
摘要 基于微信小程序的宠物用品商城系统是一个集商品展示、在线购物、支付结算、用户管理等功能于一体的综合性电商平台。该系统充分利用微信小程序的便捷性和用户基础,为宠物爱好者提供了一个方便、快捷的购物体验。 同时,该系统还具备完善的用户管理功…...
【vue预览PDF文件的几种方法】
vue展示PDF文件的几种方法 使用Vue插件 你需要安装vue-pdf-embed: npm install vue-pdf-embed<template><div class"pdf-container"><VuePdfEmbed :src"pdfUrl" /></div> </template><script setup lang"ts"…...
学习安卓开发遇到的问题(未解决版,有没有人帮我看看,大哭,感谢)
问题1:学习禁用与恢复按钮中: java代码报错:报错代码是 R.id.btn_enable;case R.id.btn_disable;case R.id.btn_test: 代码如下:(实现功能在代码后面) package com.example.apptest;import static java.…...
C++必修:STL之vector的模拟实现
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 为了让我们更加深入理解vector,接下来我们将模拟实现一个简易版的vect…...
Unity Camera
课程目标 1. 了解摄像机(camera)不同视角的设计与实现;2. 感受在不同摄像机视角下观察虚拟场景。 喜欢玩游戏或者看3D动漫的朋友可以回忆在虚拟场景中摄像头的运动变化带来的视觉感受,例如:摄像头给场景中的主角来个…...
CSS雷达光波效果(前端雷达光波效果)
前言 CSS雷达光波效果是一种视觉动画效果,常用于模仿雷达扫描或检测的视觉反馈。这种效果通常涉及到动态的圆形或弧形图案,它们从一个中心点向外扩散,类似于水面上的涟漪或雷达扫描线。以下是创建CSS雷达光波效果的一些关键技术和步骤&#…...
【C语言】【数据结构】冒泡排序及优化
一、算法思想 冒泡排序是一种简单的排序算法。一次从前往后地走访待排序的元素序列被称为一趟,每一趟都会把相邻的两个元素的错误顺序交换,将当前趟次中最大或者最小的元素像“冒泡泡”一样冒到最后面,反复地走访元素序列,直到所有…...
3种 Ajax 方式:原生、jQuery、axios
毋庸多言,Ajax 技术在网页中是划时代的进步。学会它,可以说掌握了一招半式,不再是门外汉了。 这里将 3 种 Ajax 方式一并呈上。 感谢 https://run.uv.cc/ 平台,以及 /api 接口 https://andi.cn/page/621639.html https://andi…...
Node.js 根据表结构动态生成目标代码
文章目录 前言项目背景使用的技术栈步骤一:设置 Node.js 项目步骤二:连接 SQL Server 数据库步骤三:查询数据库表结构步骤四:生成模板代码步骤五:整合所有功能总结 前言 在现代的前端开发中,使用 Vue3 搭配…...
渗透测试实战—云渗透(AK/SK泄露)
免责声明:文章来源于真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本…...
【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索
文章目录 引言第一章:机器学习在医疗健康中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 特征工程 1.2 模型选择1.2.1 逻辑回归1.2.2 决策树1.2.3 随机森林1.2.4 支持向量机1.2.5 神经网络 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
