学习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.mzph.cn/pingmian/40455.shtml

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

相关文章

Linux Vim 最全面教程(Linux)

文章目录 前言一、vim工作模式1、命令模式2、编辑模式3、末行模式 二、常用其他按键说明总结 前言 vim是一款功能文本编辑器,也是早年vi编辑器的加强版,它的最大特色就是使用命令进行编辑,完全脱离了鼠标的操作。代码补全、编译和错误跳转等…

二叉树基础

一.树 1.树的定义 在计算机科学中,树是一种用于表示层次结构的抽象数据类型和非线性数据结构。树由一组节点(Nodes)和节点之间的关系(通常通过边表示)组成。 2.特性 树是一种递归的数据结构:树可以定义为…

论文学习笔记1:Federated Graph Neural Networks: Overview, Techniques, and Challenges

文章目录 一、introduction二、FedGNN术语与分类2.1主要分类法2.2辅助分类法 三、GNN-ASSISTED FL3.1Centralized FedGNNs3.2Decentralized FedGNNs 四、FL-ASSISTED GNNS4.1horizontal FedGNNs4.1.1Clients Without Missing Edges4.1.1.1Non-i.i.d. problem4.1.1.2Graph embed…

超详细!大模型面经指南(附答案)

目录 大模型(LLMs)基础面 1. 目前 主流的开源模型体系 有哪些? 2. prefix LM 和 causal LM 区别是什么? 3. 涌现能力是啥原因? 4. 大模型LLM的架构介绍? 大模型(LLMs)进阶面 1. l…

3d模型成组后可以弯曲嘛?---模大狮模型网

在展览3D模型设计领域,创新与技术不断推动着模型的复杂性和功能性。一个常见的问题是,当3D模型成组后,是否可以灵活地弯曲或调整形态?本文将深入探讨这一问题,并探索现代设计中的可能性与挑战。 一、灵活性与设计需求 3D模型在展…

小白学webgl合集-绘制有透视颜色不一样的立方体

效果 原理 结合透视矩阵和视觉矩阵进行绘制 知识点 01透视矩阵 透视矩阵将视图空间中的坐标转换为裁剪空间中的坐标,使得更远的物体看起来更小。 function perspectiveMatrix(fov, aspect, near, far) {const f 1.0 / Math.tan(fov / 2);const nf 1 / (near …

德旺训练营称重问题

这是考小学的分治策略,小学的分治策略几乎都是分三组。本着这个策略,我们做看看。 第一次称重: 分三组,16,16,17,拿两个16称,得到A情况,一样重,那么假铜钱在那组17个里面。B情况不…

亚马逊SC账号升级VC账号的新浪潮已然席卷整个电商界!

当前电商市场竞争激烈,亚马逊卖家追求业务增长。现有Amazon SC账号卖家有机会升级为VC账号,提供重要机遇。 SC账号是亚马逊常见卖家类型,为众多个人和企业提供销售平台。而VC账号则代表与亚马逊更紧密的合作关系,享有更多优惠、广…

Linux系统之安装Firefox浏览器

Linux系统之安装Firefox浏览器 一、Firefox浏览器介绍1.1 Firefox浏览器介绍1.2 Firefox浏览器特点 二、环境介绍二、本次实践环境介绍2.1 环境规划2.2 本次实践介绍 三、安装firefox浏览器3.1 安装epel3.2 检查yum仓库状态3.3 安装Firefox浏览器3.4 查看Firefox版本 四、在命令…

【图书推荐】《HTML5+CSS3 Web前端开发与实例教程(微课视频版)》

本书用来干什么 详解HTML5、CSS3、Flex布局、Grid布局、AI技巧,通过两个网站设计案例提升Web前端开发技能,为读者深入学习Web前端开发打下牢固的基础。 配套资源非常齐全,可以当Web前端基础课的教材。 内容简介 本书秉承“思政引领&#…

你的地理空间数据神器:Global Mapper 使用体验分享

你的地理空间数据神器:Global Mapper 使用体验分享 作为一名地理信息系统(GIS)专业人士,我在工作中经常需要处理各种地理空间数据。在使用过多种GIS软件后,我最终找到了一个既高效又功能强大的工具——Global Mapper。…

nacos开启鉴权后,springboot注册失败

1.确认Nacos版本 我的Nacos版本是1.4.2 2.确认Nacos相关依赖的版本之间兼容&#xff0c;一下是我的一些pom.xml依赖 <!--父级项目的--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifa…

旧衣回收小程序:减少资源浪费,提高回收效率

当下&#xff0c;旧衣服回收成为了大众热衷的事&#xff0c;不少居民都会把闲置的衣物进行回收&#xff0c;旧衣回收行业逐渐火爆。不过&#xff0c;传统的旧衣回收模式已经不符合当下时代发展&#xff0c;具有较大的不便利性。 因此&#xff0c;为解决这一问题&#xff0c;线…

魔改Transformer!9种提速又提效的模型优化方案

Transformer目前已经成为人工智能领域的主流模型&#xff0c;应用非常广泛。然而Transformer中注意力机制计算代价较高&#xff0c;随着序列长度的增加&#xff0c;这个计算量还会持续上升。 为了解决这个问题&#xff0c;业内出现了许多Transformer的魔改工作&#xff0c;以优…

STM32 Cannot access memory

问题描述 最近自己做了一块STM32F103ZET6的板子&#xff0c;在焊接完成后可以在下载器界面看到idcode&#xff0c;但烧录时报错 Cannot access memory 。 解决办法 测量STM32各个供电项&#xff0c;发现时33脚处VDDA电压只有1.8V&#xff0c;是因为R3电阻过大&#xff0c;…

Oracle23ai安装。

1. 事前准备 使用虚拟机安装一个 Oracle Linux 8.9 操作系统下载 oracle-database-free-23ai-1.0-1.el8.x86_64.rpm下载 oracle-database-preinstall-23ai-1.0-2.el8.x86_64.rpm 2.开始安装 2.1 安装 database-preinstall dnf -y install oracle-database-preinstall-23ai-…

docker容器间网络仿真工具-pumba

docker-tc&pumba docker-tc:docker-tc项目仓库 pumba:pumba项目仓库 这两个项目理论上都可以实现对容器间的网络环境进行各种模拟干预&#xff0c;包括延迟&#xff0c;丢包&#xff0c;带宽限制等。 但是我在实际使用时&#xff0c;发现docker-tc这个工具在进行网络进行模…

bWAPP靶场安装

bWAPP安装 下载 git地址&#xff1a;https://github.com/raesene/bWAPP 百度网盘地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1Y-LvHxyW7SozGFtHoc9PKA 提取码&#xff1a;4tt8 –来自百度网盘超级会员V5的分享 phpstudy中打开根目录&#xff0c;并将下载的文…

AI:开发者的助力还是终结者?

作为一名科技工作研发者&#xff0c;在科技浪潮汹涌澎湃的当下&#xff0c;AI 对于开发者的角色定位成为了一个备受瞩目的焦点话题。 AI 是在助力开发者&#xff0c;还是会取而代之&#xff1f;让我们从技术的角度深入剖析。 不可否认&#xff0c;AI 为开发者带来了前所未有的便…

Mysql在Windows系统下安装以及配置

目录 一、下载Mysql 二、安装Mysql及环境配置 一、下载Mysql 1. 下载地址 官网:https://www.mysql.com&#xff0c;这里我选用的是Mysql8.0.37版本&#xff08;版本无所谓&#xff0c;随便下8.0.几都行&#xff09; 2.点击DOWNLOADS 然后&#xff0c;点击 MySQL Community…