学习LLM的随笔

1、信息量、信息熵、交叉熵和困惑度

在这里插入图片描述

在这里插入图片描述
注:因为真实分布的概率为1,所以在分类任务中交叉熵可以简化为上述形式。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(1)信息熵:信息熵中使用 l o g 2 ( p ( x ) ) log_2(p(x)) log2(p(x)) 来表示对 x x x 编码需要的编码长度。由于不同事件发生的概率不同,我们不能简单地将这些信息量相加,而应该根据它们发生的概率进行加权平均。乘上 p ( x ) p(x) p(x) 并求和,相当于是做了加权求和。
熵值越大,所含信息量越多,事件发生的情况越不确定。熵值越小,所含信息量越小,事件发生的情况确定。

(2)交叉熵 H ( p , q ) H(p,q) H(p,q) 是用语言模型 q ( x ) q(x) q(x) 编码来估计真实数据分布 p ( x ) p(x) p(x)

(3)困惑度:用来衡量模型在预测下一个词时的平均不确定性。困惑度可以被理解为每个标记(token)的平均"分支因子(branching factor)"。这里的“分支因子”可以理解为在每个位置,模型认为有多少种可能的词会出现。 p e r p l e x i t y ( x ) = P ( w 1 , w 2 , w 3 , . . . , w n ) − 1 n = 2 1 n l o g 2 P ( w 1 , w 2 , w 3 , . . . , w n ) perplexity(x)=P(w_1,w_2,w_3,...,w_n)^{-\frac{1}{n}}=2^{\frac{1}{n}log_2P(w_1,w_2,w_3,...,w_n)} perplexity(x)=P(w1,w2,w3,...,wn)n1=2n1log2P(w1,w2,w3,...,wn),这种形式让指数部分成为了交叉熵形式,同时也便于将多个相乘的概率,变为以 log 嵌套的多个相加的形式。

    1. 困惑度为什么要有指数部分 − 1 n -\frac{1}{n} n1
  • 答:施加 − 1 n \frac{-1}{n} n1 是因为要考虑语料长度的影响。如果一个句子越长,这个句子出现的概率可能会越低(比如“你好”和“你是我心中最美的云彩”这两句话,前者出现的概率很高)。(-1/N)次幂相当于一个“惩罚因子”。对于一个位于(0,1)范围的数,施加了(-1/N)次幂后,N越大,施加之后的值越小。同时,采用几何平均来归一化,而不用平均值来归一化也是为了防止有概率0出现时,可以很好的表示出这种影响。
    1. 指数部分为什么是交叉熵?为什么是 − 1 N ∑ i = 1 N l o g 2 ( p ( w i ∣ w 1 , w 2 , . . . , w i − 1 ) ) -\frac{1}{N} \sum_{i=1}^N log_2(p(w_i|w_1,w_2,...,w_{i-1})) N1i=1Nlog2(p(wiw1,w2,...,wi1)) 这个形式?
  • 答:使用交叉熵来度量对信息编码的二进制信息编码长度。这种形式实际上是对 p ( x ) p(x) p(x) 的平均几何值取 l o g 2 log_2 log2。采用平均几何值得好处是每个词标记的概率都被同等看待,并且一个极低的概率(如0)将会导致整个几何平均大幅度下降。因此,通过计算几何平均,我们可以更好地衡量模型在处理所有可能的词标记时的性能,特别是在处理那些模型可能会出错的情况。
    1. 底数部分为什么是以2为底数?
  • 答:因为指数部分的交叉熵是衡量以二进制进行编码的编码长度,所以底数部分也取2,可得到以二进制编码时,可以编码的字符串长度。之后,就可以得到模型在每个预测位置上,所考虑的可能出现的词的平均选择数量,即平均分支因子。

采用困惑度时,会遇到一些问题。
在这里插入图片描述
(4)pytorch中困惑度的实现
torch.nn.CrossEntropyLoss()直帮我们实现了交叉熵损失值的计算,也就是困惑度公式中指数部分。

举例:

import torch
import torch.nn as nn# 假设我们有一个批量大小为2的输入和对应的真实标签
logits = torch.tensor([[1.0, 2.0, 3.0], [3.0, 2.0, 1.0]])
true_labels = torch.tensor([2, 0])		# 第一个样本中的第二类,第二个样本中的第一类为正例# 注意,这里的logits直接用原始输出,不需要添加Softmax层# 创建CrossEntropyLoss
loss_function = nn.CrossEntropyLoss()# 计算损失
loss = loss_function(logits, true_labels)
print(loss)

nn.CrossEntropyLoss()的计算过程:
1、Softmax 转换为概率形式
对于一个logits向量 x x x,softmax函数会将每个元素 x i x_i xi 转换成一个概率 P P P s o f t m a x ( x i ) = e x i ∑ j e x j softmax(x_i)=\frac{e^{x_i}}{\sum_j{e^{x_j}}} softmax(xi)=jexjexi

2、计算负对数似然
交叉熵损失函数会根据真实标签计算负对数似然。对于每个样本 𝑖,交叉熵损失计算的是实际标签对应的负对数概率: l o s s i = − l o g ( s o f t m a x ( x i ) y j ) loss_i=-log(softmax(x_i)_{y_j}) lossi=log(softmax(xi)yj),其中 y j y_j yj 是样本 i i i 的真实标签。
注:因为这是多分类问题,真实标签的概率为1。因此根据 H ( p , q ) = p ( x ) l o g ( q ( x ) ) H(p,q)=p(x)log(q(x)) H(p,q)=p(x)log(q(x)),其中p(x)=1,对应的就是 l o g ( q ( x ) ) log(q(x)) log(q(x)),即为负对数似然。

负对数似然函数知识:负对数似然损失(NIL)函数的详解(code)

3、平均损失
交叉熵损失函数会对所有样本的损失取平均值,即 l o s s = 1 N ∑ i = 1 N l o s s i loss=\frac{1}{N}\sum_{i=1}^Nloss_i loss=N1i=1Nlossi

然后,根据上面得到交叉熵损失计算困惑度,得到困惑度。(在pytorch中计算log时使用e为底数,因此这里计算困惑度时候底数也用e)

perplexity = torch.exp(loss)				# 使用之前求得的交叉熵损失值loss

学习文章:深入理解语言模型的困惑度(perplexity)、第2章 大模型的能力、深度学习之PyTorch实战(5)——对CrossEntropyLoss损失函数的理解与学习

2、分词

(1)BPE字节对编码

字节对编码(Byte pair encoding)算法应用于数据压缩领域,用于生成其中一个最常用的分词器。BPE分词器需要通过模型训练数据进行学习,获得需要分词文本的一些频率特征。

学习分词器的过程,直觉上,我们先将每个字符作为自己的词元,并组合那些经常共同出现的词元。整个过程为:
Step1:初始化词汇表V为字符的集合
Step2:找到V中共同出现次数最多的元素对,例如: x x x xxx xxx
Step3:用一个新的符号 x ′ x' x 替换所有 x x x xxx xxx
Step4:将 x x x xxx xxx 加入到V中。
在这里插入图片描述
在这里插入图片描述

(2)Unigram model

在这里插入图片描述
算法流程:
在这里插入图片描述

3、数据集

参考文章:第5章 大模型的数据

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

找不到msvcr110.dll是怎么回事?彻底解决msvcr110.dll丢失的方法

当您的电脑提示遇到msvcr110.dll丢失时,您知道如何解决此问题吗?事实上,解决此类dll文件丢失的问题相对较为简单。只要我们深入了解msvcr110.dll丢失的具体情况,便可轻松解决此问题。以下为您介绍msvcr110.dll修复方法。 一&#…

关于巴图自动化Profinet协议转Modbus协议网关模块怎么配置IP地址教学

Profinet协议和Modbus协议是工业领域中常用的两种通讯协议,除此以外还有较为常见的:ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CANOPEN等它们在自…

MySQL丢失更新问题的出现和解决

MySQL丢失更新问题的出现和解决 丢失更新问题(Lost Update)指的是两个或多个事务在读同一数据并基于此数据进行更新操作时,某些更新操作被覆盖或丢失。例如,事务A和事务B都读取了某个数据,然后事务A更新了该数据&…

使用Retrofit2+OkHttp监听上传或者下载进度会执行两次的问题

使用Retrofit2OkHttp监听上传或者下载进度RequestBody#writeTo/ResponseBody#source 会执行两次的问题 example: 问题原因: 使用了HttpLoggingInterceptor拦截器,并且日志等级为HttpLoggingInterceptor.Level.BODY 问题解决:

【CT】LeetCode手撕—1143. 最长公共子序列

目录 题目1- 思路2- 实现⭐1143. 最长公共子序列——题解思路 3- ACM 实现 题目 原题连接:1143. 最长公共子序列 1- 思路 模式识别:最长公共子序列——> 动规五部曲 2- 实现 ⭐1143. 最长公共子序列——题解思路 class Solution {public int longe…

JVM 知识总结

是什么 JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相关的信息&#…

离线翻译app哪个好用?轻松对话就靠这5个

最近大家应该都顺利渡过了期末考,打算趁着暑假好好来一趟“说走就走”的国外行吧?说到出国游,那怎么能少得了诸如“离线翻译器”这种对话利器呢!即使是在网络转态不佳,甚至没网的情况下,也都能安心让你实现…

leetcode hot100

哈希 49.字母异位词分组 HashMap的含义比较晕,可以重做 双指针 11.盛最多水的容器 双指针的起始位置和移动条件没转过来,可以重做 15.三数之和 不太熟练,可以再做一遍 42.接雨水 还可以用dp和单调栈做 双指针法: 首先需要注意…

Python特征工程 — 1.3 对数与指数变换

目录 1 对数变换 1.1 对数变换的概念 1.2 对数变换实战 2 指数变换 2.1 指数变换的概念 2.2 指数变换实战 3 Box-Cox变换 3.1 Box-Cox变换概念 3.2 Box-Cox变换实战 1 对数变换 1.1 对数变换的概念 特征对数变换和指数变换是数据预处理中的两种常用技术,…

工厂自动化相关设备工业一体机起到什么作用?

在当今的制造业领域,工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中,工业一体机作为一种重要的设备,发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…

【机器学习】机器学习与医疗健康在疾病预测中的融合应用与性能优化新探索

文章目录 引言第一章:机器学习在医疗健康中的应用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优化…

ctfshow-web入门-命令执行(web71-web74)

目录 1、web71 2、web72 3、web73 4、web74 1、web71 像上一题那样扫描但是输出全是问号 查看提示:我们可以结合 exit() 函数执行php代码让后面的匹配缓冲区不执行直接退出。 payload: cvar_export(scandir(/));exit(); 同理读取 flag.txt cinclud…

kali下安装使用蚁剑(AntSword)

目录 0x00 介绍0x01 安装0x02 使用1. 设置代理2. 请求头配置3. 编码器 0x00 介绍 蚁剑(AntSword)是一个webshell管理工具。 官方文档:https://www.yuque.com/antswordproject/antsword 0x01 安装 在kali中安装蚁剑,分为两部分&am…

AI 驱动的数据中心变革与前景

文章主要探讨了AI计算时代数据中心的转型,涉及计算技术的多样性、规格尺寸和加速器的发展、大型语言模型(LLM)的发展、功耗和冷却趋势、基准测试的重要性以及数据中心的发展等方面。为大家提供深入了解AI基础设施发展的视角。 计算技术的多样…

IDEA 一键部署Docker

以部署示例服务(sevnce-demo)为例。 配置服务器 地址、账号、密码根据实际情况填写 配置镜像仓库 地址、账号、密码根据实际情况填写 编写Dockerfile 在sevnce-demo根目录下右键,选择创建Dockerfile。 # 基础镜像 FROM sevnce-registry.c…

使用Vue CLI方式创建Vue3.0应用程序

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。新版本的 Vue CLI 的包名由原来的 vue-cli 改成了 vue/cli。 在开发大型项目时,需要考虑项目的组织结构、项目构建和部署等问题。如果手动完成这些配置工作,工作效率会非常低。为此,Vue.…

【博士每天一篇文献-综述】A survey on few-shot class-incremental learning

阅读时间:2023-12-19 1 介绍 年份:2024 作者:田松松,中国科学院半导体研究所;李璐思,老道明大学助理教授;李伟军,中国科学院半导体研究所AnnLab; 期刊: Neu…

新型发电系统——光伏行业推动能源转型

一、发展背景 “十四五”期间,随着“双碳”目标提出及逐步落实,本就呈现出较好发展势头的分布式光伏发展有望大幅提速。就“十四五”光伏发展规划,国家发改委能源研究所可再生能源发展中心副主任陶冶表示,“双碳”目标意味着国家…

【linux】网络基础(3)——tcp协议

文章目录 TCP协议概括TCP头部格式TCP连接管理建立连接(三次握手)数据传输确认应答机制捎带应答 滑动窗口丢包问题 拥塞控制延时应达 终止连接(四次挥手) TCP协议概括 TCP是一个面向连接的协议,在传输数据之前需要建立连…

04.C1W3.Vector Space Models

目录 Vector Space ModelsWord by Word and Word by DocWord by Document DesignWord by Document DesignVector Space Euclidean DistanceEuclidean distance for n-dimensional vectors Euclidean distance in PythonCosine Similarity: IntuitionCosine SimilarityPrevious …