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

【学习笔记】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策略和与SFT的差异衡量
  • 奖励函数的设计
    • 解决方法:加入一些语法规则限制,采用最省力法则(语言具有惰性,会朝着使用较少的词语表达尽可能多的语义这个方向进行演化)

🤔Instruct GPT的通用指标

  • 有帮助
  • 真实性
  • 无害性
  • 需要解决指标之间的冲突权衡问题

相关文章:

【学习笔记】ChatGPT原理与应用开发——基础科普

HuggingLLM&#xff08;ChatGPT原理与应用开发&#xff09; 原文链接&#xff1a;HuggingLLM&#xff08;ChatGPT原理与应用开发&#xff09;-课程详情 | Datawhale 此处仅为学习记录和总结 1&#xff1a;基础科普 1.1&#xff1a;自然语言背景 图灵测试 如果一个人&#x…...

基于Web的实验中心工作管理网站的设计与实现

写作任务 一、课题背景 实验中心承担了全校计算机公共基础课程和学院专业课程&#xff0c;需要对实验中心工作进行有效的管理。 二、课题任务 本课题设计和实现实验中心工作管理系统。 系统的主要内容包括&#xff1a; &#xff08;1&#xff09;人员管理&#xff1b; &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博客 参考&#xff1a;ipmitool ubuntu 安装_ipmi centos ubuntu使用总结-CSDN博客 1.安装 sudo apt-get -y install ipmitool 2.加载 modprobe ipmi_msghandlermodprobe ipmi_devintfmodprobe ipmi_si 3.使用,查看不到的话&am…...

周记-唐纳德的《计算机程序设计艺术》

用代码生成代码 开发一个协议&#xff0c;字段有些多&#xff0c;每个字段是QT的属性&#xff0c;需要写Q_PROPERTY&#xff0c;一个一个编辑的话比较繁琐&#xff0c;耗费时间。后来就用代码生成了头文件和源文件&#xff0c;get和set还有signal函数&#xff0c;内容基本都是…...

极品飞车6的快捷键与车辆等级

极品飞车&#xff0c;英文全称为Need for Speed&#xff0c;是EA公司于1994年开始研发的赛车类竞技游戏。从1996年的《极品飞车-特别版》、2002年的《极品飞车:闪电追踪2》、2005年的《极品飞车:地下狂飙2》、到2024年《极品飞车:集结》&#xff0c;是70后、80年、90年等几代人…...

计算机毕业设计Python+知识图谱大模型AI医疗问答系统 健康膳食推荐系统 食谱推荐系统 医疗大数据 机器学习 深度学习 人工智能 爬虫 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

纯真社区版IP库CZDB数据格式使用教程

1. 概述 纯真社区版IP库是一种免费且公开的IP地理位置数据库&#xff0c;主要面向非商业用途。其最新推出的CZDB格式是一种全新的数据文件格式&#xff0c;自2024年10月起将成为官方维护和更新的唯一版本。该格式支持同时存储IPv4和IPv6地址信息&#xff0c;具备以下优点&…...

Linux(Centos 7.6)软件包安装

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

[WASAPI]音频API:从Qt MultipleMedia走到WASAPI,相似与不同

[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识&#xff0c;在正式开始说WASAPI之前&#xff0c;我想先说一说Qt的Multiple Media&#xff0c;为什么呢&#xff1f;因为Qt的MultipleMedia实际上是WASAPI的一层封装&#xff0c;它在是线…...

【畅购商城】微信支付之支付模块

目录 支付页面 接口 后端实现 前端实现​​​​​​​ ​​​​​​​支付页面 步骤一&#xff1a;创建 flow3.vue组件 步骤二&#xff1a;引入第三方资源&#xff08;js、css&#xff09; <script> import TopNav from ../components/TopNav import Footer from …...

网络安全专有名词详解_2

57.Webshell 就是以ASP、php、jsp、cgi等网页文件形式存在的一种命令执行环境&#xff0c;也叫做网页的后门&#xff0c;可以上传下载文件&#xff0c;查看数据库和执行任意的程序命令等。 58.跨站攻击 XSS&#xff0c;是指攻击者利用网站程序对用户输入过滤不足&#xff0c;输…...

【传感器技术与应用】第2章 基本电量传感器,电位器式传感器,电感式传感器,电容式传感器

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

【day20】集合深入探讨

模块19回顾 在深入探讨模块20之前&#xff0c;让我们回顾一下day19中的关键内容&#xff1a; Collection集合&#xff1a;单列集合的顶级接口&#xff0c;提供了add、addAll、clear、size、isEmpty、remove、toArray、contains等方法。迭代器&#xff08;Iterator&#xff09…...

【英语语法】用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.绝对误差和绝对误差限 例题&#xff08;课后习题1.2&#xff09; 4.有效数字 例题&#xff08;课后习题1.6&#xff09; 5.算法的数值稳定性 例题&#xff08;课后习题1.9&#xff09; 这个手算比较艰难&#xff0c;还是给计算机算吧&am…...

使用 pushy 热更新后 sentry 不能正常显示源码

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

IntelliJ IDEA 远程调试

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

Java实现简单爬虫——爬取疫情数据

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

大数据技术-Hadoop(一)Hadoop集群的安装与配置

目录 一、准备工作 1、安装jdk&#xff08;每个节点都执行&#xff09; 2、修改主机配置 &#xff08;每个节点都执行&#xff09; 3、配置ssh无密登录 &#xff08;每个节点都执行&#xff09; 二、安装Hadoop&#xff08;每个节点都执行&#xff09; 三、集群启动配置&a…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...