【学习笔记】ChatGPT原理与应用开发——基础科普
HuggingLLM(ChatGPT原理与应用开发)
原文链接:HuggingLLM(ChatGPT原理与应用开发)-课程详情 | Datawhale
此处仅为学习记录和总结
1:基础科普
1.1:自然语言背景
图灵测试
如果一个人(代号C)使用测试对象皆理解的语言去询问两个他不能看见的对象任意一串问题,其中一个是正常思维的人(代号B),另一个是机器(代号A)。
如果经过若干询问以后,C不能得出实质的区别来分辨A与B的不同,则此机器A通过图灵测试。
1.2:语言模型基础
Token是最小语义单位,即句子由token组成
获取token的方式
🤔英文单词被分割为子词,例如:
annoyingly
=>
["annoying", "##ly"]
##
表示和前一个token直接拼接,没有空格
子词可以同时兼顾词表大小和语义表示
🤔中文被分割为字 + 词
字:独立表示意义(例如:是、有)
词:一个以上字组成的语义单位,拆开可能会丢失语义(例如:长城)
词袋模型
bag of words,BOW
🤔词袋的原理
- 文本中的每个单词都看作是独立的,忽略单词之间的顺序和语法,只关注单词出现的次数
- 每个句子可以表示为一个向量(长度为词表大小),向量的每个维度对应一个单词,维度的值表示该单词在句子中出现的次数
🤔词表表示法的问题
- 向量维度大且稀疏,计算不便
- 忽略了token之间的顺序,丢失语义
词向量
word embedding / word vector
一个token表示成一定数量个的小数(即词向量的维度),例如:
我 [0.07928, 0.37101, 0.94462, 0.87359, 0.55773, 0.13289, 0.22909, ...]
爱 [0.61048, 0.46032, 0.7194, 0.85409, 0.67275, 0.31967, 0.89993, ...]
你 [0.392, 0.13321, 0.00597, 0.74754, 0.45524, 0.23674, 0.7825, ...]
词向量的维度常用:200、300、768、1536等
Embedding技术
将任意文本(或其他非文本符号)表示成稠密向量的方法
概率语言模型
核心:预测下一个token的概率
🤔解码策略
- 贪心搜索(greedy search):只往后看一个词,只考虑下一步最大概率的词
- 集束搜索(beam search):一步多看几个词,看最终句子(生成到句号、感叹号或其他停止符号)的概率。看的越多(num_beams越大),越不容易生成固定的文本
N-Gram语言模型
N表示每次用到的上下文token个数
N=2是Bi-Gram,N=3是Tri-Gram,例如:
句子:人工智能让世界变得更美好
tokens:人工智能/让/世界/变得/更/美好N=2:人工智能/让,让/世界,世界/变得,变得/更,更/美好
N=3:人工智能/让/世界,让/世界/变得,世界/变得/更,变得/更/美好
token的表示是离散的,本质是词表中的每个单词
Gram次数除以Gram总数,就是出现概率
在给定很多语料的情况下,固定当前词,统计下个词出现的频率,例如:
当前词:人工智能N=2时,统计可能的tokens组合
(1)人工智能/让:8次
(2)人工智能/是:2次计算概率
(1)人工智能/让:0.8
(2)人工智能/是:0.2
将token转变为embedding向量
输入:token对应的d维向量X
(1 × d维)
输出:词表大小的N维向量Y
(1 × N维)
计算过程:假设W
(d × N维)是模型参数,则X · W = Y
例如:
import torch
import torch.nn as nnrnn = nn.RNN(32, 64)
input = torch.randn(4, 32)
h0 = torch.randn(1, 64)
# input是包含4个token,每个token是32维
# h0是随机的初始化输出
output, hn = rnn(input, h0)
# ouput包含4个token,每个token是64维
# hn是最后一个token的输出
output.shape, hn.shape
# (torch.Size([4, 64]), torch.Size([1, 64]))# 假设词表大小N=1000
wo = torch.randn(64, 1000)
# 得到4×1000的概率矩阵,每一行概率和为1
probs = nn.Softmax(dim=1)(output @ wo)
probs.shape, probs.sum(dim=1)
# torch.Size([4, 1000]), tensor([1.0000, 1.0000, 1.0000, 1.0000], grad_fn=<SumBackward1>)
1.3:ChatGPT原理基础
transformer
基于注意力机制的编码器-解码器(encoder-decoder架构)
- 编码器:同时利用当前token前后的所有tokens(看历史+未来)
- 解码器:只能利用当前token之前的所有tokens(只看历史)
Seq2Seq(sequence to sequence)架构
- 输入是一个文本序列,输出是另一个文本序列
注意力机制
- 自注意力:自己的每一个token和自己的每一个token的重要性权重
- 多头注意力:自己注意自己重复多次,每个头注意到的信息不同(根据不同权重的注意力提取特征)
- 遮盖多头注意力:遮盖掉未来的所有token,即只看历史
编码器更加适合非生成类任务,解码器则更加适合生成类任务
- 编码器对应自然语言理解(natural language understanding,NLU)
- 句子级别分类:给定一个句子,输出一个类别
- token级别分类:给定一个句子,要给其中每个token输出一个类别
- 解码器对应自然语言生成(natural language generation,NLG)
- 文本续写
- 生成式文本摘要
- 机器翻译
- 改写纠错
命名实体识别
NLU任务中的token级别分类
作用:把句子中的实体(人名、地名、作品等你关注的词,一般是名词)给提取出来
地名实体识别,例如:
句子:中国的首都是北京
tokens:每个字,即:中/国/的/首/都/是/北/京token对应的类别:Begin/End/Others/Others/Others/Others/Begin/End
深度学习模型的微调
把一个开源的预训练模型,放在特定的数据集上微调,让模型能够完成特定的任务
BERT
bidirectional encoder representations from transformers
只使用transformer的编码器
步骤:
- 随机把15%的token盖住(其中80%用
[MASK]
替换,10%保持不变,10%随机替换为其他token) - 利用其他没盖住的token来预测盖住位置的Token
GPT
generative pre-trained transformer
只使用transformer的解码器
🤔GPT的2个特点
- 生成式:一个Token接着一个Token生成文本
- 预训练:在大量语料上训练的语言模型
🤔GPT的发展方向
- 扩大参数规模
- 零样本
样本训练方法
零样本(Zero-shot):直接给模型任务输入让它输出任务结果
少样本(Few-shot):给模型提供一些示例,然后再给出任务,让它给出输出结果
单样本(One-shot):给模型提供一个示例,然后再给出任务,让它给出输出结果
温度(temperature)
🤔集束搜索存在的问题
- 生成的内容容易重复
- 高质量的文本和高概率并不一定相关
🤔温度的作用
- 在多样性生成中,基于已有的上下文随机选择下一个token,温度用于控制这个选择的随机性,即调整输出的概率分布
- 温度越大,输出的概率分布越平滑,高概率词和低概率词的差距越小
- 温度趋近于0,则等价于贪心搜索
重复惩罚参数(repetition_penalty)
重复惩罚参数的作用:避免生成重复的token
🤔温度和重复惩罚参数的区别
- 温度的对象是词表中的所有的token
- 重复惩罚参数的对象是“已生成”的token
- 在生成下个token时,对之前已经生成过的tokens的分数进行平滑
基于采样的方法(选择下一个token)
Top-K:在概率降序排序的情况下,选择K个词(硬截断)
Top-P:在累计概率超过P的词里进行选择
随机采样:基于已有的上下文随机选择
RLHF
Reinforcement Learning from Human Feedback(从人类反馈中进行强化学习)
🚀InstructGPT:用强化学习的算法微调一个根据人类反馈改进的语言模型
🤔Instruct GPT的步骤
- SFT,Supervised Fine-Tuning,有监督微调
- 在有标注的数据上微调训练
- 有标注的数据:输入提示词,输出相应的回复
- RM,Reward Model,奖励模型
- 一个提示词丢给SFT,输出若干个回复,人工对这些回复进行排序
- 每次取排序后的2个结果,让模型学习到好坏评价
- RL,Reinforcement Learning,强化学习
- 使用PPO策略进行训练
- PPO,Proximal Policy Optimization,近端策略优化
- 避免每次太大的更新,提高训练的稳定性
- RM对某个回复打分后,这个打分回传给模型更新参数
- 需要考虑每个token的输出和第一步SFT输出之间的差异性,防止强化学习的过度优化
- 使用PPO策略进行训练
🤔强化学习在文本生成工作的难点
- 训练的稳定性
- 解决方法:PPO策略和与SFT的差异衡量
- 奖励函数的设计
- 解决方法:加入一些语法规则限制,采用最省力法则(语言具有惰性,会朝着使用较少的词语表达尽可能多的语义这个方向进行演化)
🤔Instruct GPT的通用指标
- 有帮助
- 真实性
- 无害性
- 需要解决指标之间的冲突权衡问题
相关文章:
【学习笔记】ChatGPT原理与应用开发——基础科普
HuggingLLM(ChatGPT原理与应用开发) 原文链接:HuggingLLM(ChatGPT原理与应用开发)-课程详情 | Datawhale 此处仅为学习记录和总结 1:基础科普 1.1:自然语言背景 图灵测试 如果一个人&#x…...
基于Web的实验中心工作管理网站的设计与实现
写作任务 一、课题背景 实验中心承担了全校计算机公共基础课程和学院专业课程,需要对实验中心工作进行有效的管理。 二、课题任务 本课题设计和实现实验中心工作管理系统。 系统的主要内容包括: (1)人员管理; &am…...

docker 安装minio
docker pull minio/minio #启动 mkdir -p /root/minio/config mkdir -p /root/minio/datadocker run -d \--name minio \-p 9002:9000 \-p 9001:9001 \--restartalways \-v /root/minio/data:/data \-v /root/minio/config:/root/.minio \-e "MINIO_ACCESS_KEYminioadmin…...
ubuntu下ipmi的使用(4028)
参考ubuntu系统下配置IPMI_ubuntu ipmi-CSDN博客 参考:ipmitool ubuntu 安装_ipmi centos ubuntu使用总结-CSDN博客 1.安装 sudo apt-get -y install ipmitool 2.加载 modprobe ipmi_msghandlermodprobe ipmi_devintfmodprobe ipmi_si 3.使用,查看不到的话&am…...
周记-唐纳德的《计算机程序设计艺术》
用代码生成代码 开发一个协议,字段有些多,每个字段是QT的属性,需要写Q_PROPERTY,一个一个编辑的话比较繁琐,耗费时间。后来就用代码生成了头文件和源文件,get和set还有signal函数,内容基本都是…...
极品飞车6的快捷键与车辆等级
极品飞车,英文全称为Need for Speed,是EA公司于1994年开始研发的赛车类竞技游戏。从1996年的《极品飞车-特别版》、2002年的《极品飞车:闪电追踪2》、2005年的《极品飞车:地下狂飙2》、到2024年《极品飞车:集结》,是70后、80年、90年等几代人…...

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
纯真社区版IP库CZDB数据格式使用教程
1. 概述 纯真社区版IP库是一种免费且公开的IP地理位置数据库,主要面向非商业用途。其最新推出的CZDB格式是一种全新的数据文件格式,自2024年10月起将成为官方维护和更新的唯一版本。该格式支持同时存储IPv4和IPv6地址信息,具备以下优点&…...

Linux(Centos 7.6)软件包安装
Linux软件安装,常见的有三种方式,rpm方式、yum方式、源码编译安装方式。其中rpm方式可能存在依赖方式,可能会比较麻烦;源码编译安装同样可能会缺少一些编译需要的软件需要安装,也会比较麻烦;相对比较好的方…...

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同
[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…...

【畅购商城】微信支付之支付模块
目录 支付页面 接口 后端实现 前端实现 支付页面 步骤一:创建 flow3.vue组件 步骤二:引入第三方资源(js、css) <script> import TopNav from ../components/TopNav import Footer from …...
网络安全专有名词详解_2
57.Webshell 就是以ASP、php、jsp、cgi等网页文件形式存在的一种命令执行环境,也叫做网页的后门,可以上传下载文件,查看数据库和执行任意的程序命令等。 58.跨站攻击 XSS,是指攻击者利用网站程序对用户输入过滤不足,输…...

【传感器技术与应用】第2章 基本电量传感器,电位器式传感器,电感式传感器,电容式传感器
注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数…...

【day20】集合深入探讨
模块19回顾 在深入探讨模块20之前,让我们回顾一下day19中的关键内容: Collection集合:单列集合的顶级接口,提供了add、addAll、clear、size、isEmpty、remove、toArray、contains等方法。迭代器(Iterator)…...
【英语语法】用must表对过去推测时,要用完成时must have been / must have done(不能直接用过去时)
文章目录 疑问解释1. 表达过去的推测2. 与时态一致3. 语法结构的限制4. 例子对比总结 疑问 This must have been a year-round activity as no structures have been found which would have been used to shelter animals in the winter. 为什么must表示对过去推测要用完成时&…...

数值计算期末考试重点(一)(黄云清版教材)
1.误差的分类 2.绝对误差和绝对误差限 3.绝对误差和绝对误差限 例题(课后习题1.2) 4.有效数字 例题(课后习题1.6) 5.算法的数值稳定性 例题(课后习题1.9) 这个手算比较艰难,还是给计算机算吧&am…...

使用 pushy 热更新后 sentry 不能正常显示源码
问题 使用 Android Studio 打包后,上传使用 sentry 官网命令打包的 sourcemap 文件,sentry能正常显示异常位置源码。 使用 pushy 热更新之后,sentry 不能正常显示异常位置的源代码。 如下图: 问题原因: 使用 pushy …...

IntelliJ IDEA 远程调试
IntelliJ IDEA 远程调试 在平时开发 JAVA 程序时,在遇到比较棘手的 Bug 或者是线上线下结果不一致的情况下,我们会通过打 Log 或者 Debug 的方式去定位并解决问题,两种方式各有利弊,今天就简要介绍下如何通过远程 Debug 的情况下…...

Java实现简单爬虫——爬取疫情数据
1.项目准备 在项目中使用到了jsoup和fastjson jsoup用于创建一个连接(绘画) 用于获取和解析HTML页面 而fastjson对数据进行一个格式化 在pom.xml导入坐标 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</a…...

大数据技术-Hadoop(一)Hadoop集群的安装与配置
目录 一、准备工作 1、安装jdk(每个节点都执行) 2、修改主机配置 (每个节点都执行) 3、配置ssh无密登录 (每个节点都执行) 二、安装Hadoop(每个节点都执行) 三、集群启动配置&a…...

在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生
文章目录 🌌 序章🌠 一、命名管道的宿命与哲学1.1、创建及简单使用1.2、命名管道的工作原理1.3、命名管道与匿名管道的区别 2、命名管道的特点及特殊场景2.1、特点2.2、四种特殊场景 3、命名管道实操3.1、实现文件拷贝3.2、实现进程控制 小结 dz…...

[ Qt ] | 与系统相关的操作(一):鼠标相关事件
目录 信号和事件的关系 (leaveEvent和enterEvent) 实现通过事件获取鼠标进入和鼠标离开 (mousePressEvent) 实现通过事件获得鼠标点击的位置 (mouseReleaseEvent) 前一个的基础上添加鼠标释放事件 (mouseDoubleClickEvent) 鼠标双击事件 鼠标移动事件 鼠标滚轮事件 …...

数据结构(7)—— 二叉树(1)
目录 前言 一、 树概念及结构 1.1树的概念 1.2树的相关概念 1.3数的表示 1.二叉树表示 2.孩子兄弟表示法 3.动态数组存储 1.4树的实际应用 二、二叉树概念及结构 2.1概念 2.2特殊的二叉树 1.满二叉树 2. 完全二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.顺序存储 2.链式存储…...

Kafka入门- 基础命令操作指南
基础命令 主题 参数含义–bootstrap-server连接的Broker主机名称以及端口号–topic操作的topic–create创建主题–delete删除主题–alter修改主题–list查看所有主题–describe查看主题的详细描述–partitions设置分区数–replication-factor设置分区副本–config更新系统默认…...

Excel 重复项标记,删除重复项时出现未响应的情况
目录 一、重复值标记: 二、删除重复值: 三、未响应问题 一、重复值标记: 方法1:开始 》条件格式 》突出显示单元格规则 》重复值 》设置颜色 》确定 PS:样式可自定义(边框、字体、背景填充...࿰…...

不同视角理解三维旋转
在二维空间中,绕任意点旋转可以分解为: 1)平移旋转点到原点,2)绕原点旋转,3)逆平移旋转点; 可用矩阵表示为 , 其中, 表示绕原点旋转 , 为平移矩…...
[蓝桥杯]上三角方阵
上三角方阵 题目描述 方阵的主对角线之上称为"上三角"。 请你设计一个用于填充 nn 阶方阵的上三角区域的程序。填充的规则是:使用 1,2,3.... 的自然数列,从左上角开始,按照顺时针方向螺旋填充。 例如&am…...
Linux Maven Install
在 CentOS(例如 CentOS 7 或 CentOS 8)中安装 Maven(Apache Maven)的方法主要有两种:使用包管理器(简单但可能版本较旧),或者手动安装(推荐,可获得最新版&…...

Qwen3与MCP协议:重塑大气科学的智能研究范式
在气象研究领域,从海量数据的解析到复杂气候模型的构建,科研人员长期面临效率低、门槛高、易出错的挑战。而阿里云推出的Qwen3大模型与MCP协议的结合,正通过混合推理模式与标准化协同机制,为大气科学注入全新活力。本文将深入解析…...
嵌入式Linux 期末复习指南(上)
鉴于互联网上针对本科目相关复习视频及资料过少, 撰写本篇期末复习指南用作期末复习知识点扫盲,以应对本科期末考试及格之用。 由于任课老师并透露考试范围或任何有关试卷的相关信息,本篇指南基于教材、上机实验报告及作者经验编写࿰…...