LLM之学习笔记(一)
前言
记录一下自己的学习历程,也怕自己忘掉了某些知识点
Prefix LM 和 Causal LM区别是什么?
Prefix LM
Prefix LM(前缀语⾔模型)其实是Encoder-Decoder模型的变体。①在标准的Encoder-Decoder模型中,Encoder和Decoder各自使用不同的结构 ②在Prefix LM中Encoder和Decoder则共享一个Transformer结构,而Transformer内部通过Attention Mask机制实现Encoder与Decoder。
与标准的Encoder-Decoder类似,Prefix LM在Encoder部分采用Auto Encoding(自编码)模式,即前缀序列中任意两个Token都相互可见,而Decoder部分采用Auto Regressive(自回归)模式,即待生成的token可以看到Encoder侧所有token和Decoder侧已经生成的token,但不能看到未来尚未产生的token。
应用场景
适合于需要基于已有文本继续生成文本的任务,例如文本补全、续写故事等
优势
能够利用完整的上下文信息来生成文本,有助于生成更加准确和连贯的内容
代表模型
T5、UniLM等,这些模型通过共享编码器(Encoder)和解码器(Decoder)的参数,实现对前缀的理解和文本生成
Causal LM
Causal LM是因果语言模型,目前流行地大多数模型就是这种结构,因为GPT系列的模型内部结构就是它,还有开源的LLaMa也是。
Causal LM只涉及到Encoder-Decoder中的Decoder部分,采用Auto Regressive模式,直白地说,就是根据历史的token来预测下一个token,也是在Attention Mask这里做的手脚
应用场景
广泛用于需要生成新文本的任务,例如文本摘要、聊天机器人、语言生成等
优势
由于其自回归的特性,Causal LM在生成文本时可以逐步构建上下文,适用于长文本生成和需要逐步推理的场景
代表模型
GPT系列模型,这些模型通过逐步生成文本的方式,实现了对语言的深入理解和生成
技术细节对比
训练过程:Prefix LM在训练时可能会使用到整个序列的信息来预测下一个词,而Causal LM在训练时只能使用到当前词之前的所有词。
解码方式:Prefix LM可以采用非自回归解码,即并行生成所有词;Causal LM则采用自回归解码,即一个词接一个词地生成。
上下文利用:Prefix LM在生成时可以利用到更全面的上下文信息,而Causal LM则只能利用到已经生成的文本作为上下文。
网上答案:
为什么现在的大模型大多是decoder-only的架构?
1、训练效率
相比于Encoder-Decoder结构,Decoder-only模型通常需要更少的参数来达到相似的性能。这是因为Encoder-Decoder结构需要同时学习编码输入和生成输出的能力,而Decoder-only模型只需要专注于生成输出
2、性能表现
尽管Decoder-only模型在理解性任务上可能不如Encoder-Decoder结构,但它们在生成性任务上的表现往往更胜一筹。随着模型规模的增大,Decoder-only模型在理解和生成任务上的差距逐渐缩小,甚至在某些情况下能够超越Encoder-Decoder模型。
3、理论
理论上是因为Encoder-Decoder的双向注意力会存在低秩问题,这可能会削弱模型表达能力,就生成任务而言,引入双向注意力并无实质好处。而Encoder-Decoder架构之所以能够在某些场景下表现更好,大概只是因为它多了一倍参数。所以,在同等参数量、同等推理成本下,Decoder-only架构就是最优选择了。
Multi-query Attention与Grouped-query Attention区别是什么?
回答
Multi-query Attention和Grouped-query Attention是两种改进和扩展传统自注意力机制的变体。 传统的MHA(Multi-head Attention)是将输入划分为多个Head,并为每个Head独立计算注意力。在MHA中的,Q、K、V会根据每个head做不同的转换(可以独立学习输入中的不同特性)。这在Head数量较多时候可能会存在计算密集的问题。
Grouped-query Attention:这种机制将查询分成多个组,每个组内的查询与相应的键值对进行交互。这样可以减少计算复杂度,提高效率,同时仍能保持良好的性能。
Multi-query Attention:MQA 让所有的Head之间共享同样的一份 K 和 V 矩阵(意味K和V的计算唯一),只让 Q 保留了原始多头的性质(每个Head存在不同的转换),从而大大减少 K 和 V 矩阵的参数量以及KV Cache的显存占用,以此来达到提升推理速度,但是会带来精度上的损失
LLM中token指的是什么?
省流总结:文本被转换为token。token被赋予token ID。这些token ID 可用于创建embedding,embedding之后输入LLM
关于LLM:揭秘token与embedding的机制
搞懂LLM中的Token,看这一篇就够了
关于LLM:揭秘token与embedding的机制
稀疏向量与稠密向量
在RAG应用中,经常能听到稀疏向量与稠密向量,在这里简单介绍一下。
在机器学习和数据处理中,向量是基本的数据结构之一。根据向量中非零元素的数量和分布,可以将向量分为稀疏向量(Sparse Vector)和稠密向量(Dense Vector)。
稀疏向量: 稀疏向量是指大部分元素都是零,只有少数几个元素是非零的向量。这种向量在表示上通常会省略掉零元素,只记录非零元素的位置和值,以节省存储空间和提高计算效率。例如,一个长度为1000的向量,如果只有10个元素是非零的,那么这个向量就可以被视为稀疏向量。
举个例子:向量(1.0,0.0,1.0,3.0)
密集格式:表示为[1.0,0.0,1.0,3.0],
稀疏格式表示为(4,[0,2,3],[1.0,1.0,3.0])
第一个4表示向量的长度(元素个数),[0,2,3]是索引数组(即位置);[1.0,1.0,3.0]是values数组(索引对应位置的值),表示向量0的位置的值是1.0,2的位置的值是1.0,而3的位置的值是3.0,其他的位置都是0,
稠密向量: 稠密向量则相反,它包含的元素大部分是非零的,或者非零元素的比例并不低。稠密向量的存储通常会保存所有元素的值,无论它们是否为零
两者的区别:
-
非零元素的分布:
- 稀疏向量:非零元素很少,大部分元素都是零。
- 稠密向量:非零元素较多,或者非零元素的比例不低。
-
存储方式:
- 稀疏向量:通常只存储非零元素的位置和值,可以节省大量存储空间。
- 稠密向量:需要存储所有元素的值,即使大部分是零。
-
计算效率:
- 稀疏向量:在执行向量运算时,可以只对非零元素进行操作,通常计算效率更高。
- 稠密向量:需要考虑所有元素,计算可能会更耗时。
-
应用场景:
- 稀疏向量:在特征维度非常高,但每个样本的有效特征很少的情况下非常适用,如文本处理中的词袋模型。
- 稠密向量:在特征维度不高,且大部分特征对结果都有影响的情况下使用,如图像处理中的像素数据。
稀疏向量表示通常适用于以下几种情况:
-
高维数据:当数据的维度非常高时,如果每个样本中只有少数几个特征是非零的,使用稀疏向量可以节省大量的存储空间和计算资源。
-
特征稀疏:在数据集中,如果大多数特征对于大多数样本都是零值,例如文本数据中的词袋模型,每个文档只包含词汇表中的少数几个词。
-
减少计算复杂度:稀疏向量可以在计算过程中跳过零值,从而减少计算量,提高算法的效率。
以下是一些具体的应用场景,其中稀疏向量表示特别有用:
-
文本处理:在自然语言处理中,文本数据通常转换成词频或TF-IDF向量,这些向量通常是稀疏的,因为一个文档只包含词汇表中的少数几个词。
-
推荐系统:用户对商品的评分矩阵通常是稀疏的,因为用户只对少数商品进行了评分。
-
基因数据分析:在基因表达数据中,通常只有少数基因在特定细胞类型中活跃,因此数据是稀疏的。
-
图像处理:在处理图像数据时,如果图像被转换成某种基于像素的特征表示,且图像中有很多空白或单一颜色区域,则可以使用稀疏向量。
-
稀疏编码:在稀疏编码算法中,目的是找到一组稀疏的基向量来表示数据,这样可以更好地捕捉数据的结构。
-
压缩感知:在压缩感知领域,信号的稀疏表示用于从远低于奈奎斯特率的采样率中恢复信号。
-
图数据:在处理图数据时,如果图是稀疏的(即边的数量远小于可能的最大边数),那么邻接矩阵或特征矩阵可能是稀疏的。
二者的优势:
- 稠密向量:捕获文本的整体语义信息
- 稀疏向量:保留关键词的重要性和频率信息
解释下:
稠密向量和稀疏向量在捕获文本信息时的差异,主要源于它们的数据表示方式和适用的算法特性。
稠密向量: 稠密向量通常是固定长度的,并且每个维度都对应一个实际的数值,无论这个数值是否为零。稠密向量常用于深度学习模型,如词嵌入(Word Embeddings)技术,例如Word2Vec或GloVe。以下解释为什么稠密向量能捕获文本的整体语义信息:
-
上下文关系:稠密向量通过学习单词在大量文本中的上下文关系,将单词映射到高维空间中的向量。这些向量捕获了单词的语义和语法属性,即使是非常相似的词也能够在向量空间中体现出差异。
-
分布式表示:稠密向量采用分布式表示,意味着单词的意义是由其向量中的所有维度共同决定的,而不是由单个维度或几个维度决定。这种表示方式可以捕捉到单词的复杂语义信息。
-
连续性:稠密向量在向量空间中的位置是连续的,这意味着相似的词在向量空间中是接近的,这使得稠密向量可以用于捕捉文本中的细微语义差异。
稀疏向量: 稀疏向量则主要记录非零元素的索引和值,而零元素通常不存储。稀疏向量常用于基于计数的模型,如TF-IDF。以下是为什么稀疏向量主要保留关键词的重要性和频率信息:
-
关键词重要性:在稀疏向量表示中,非零元素通常对应于文本中的关键词。这些非零元素的值(如词频或TF-IDF权重)反映了关键词在文本中的重要性。
-
频率信息:稀疏向量中的非零值可以直接表示单词在文本中出现的频率。这对于某些算法(如基于频率的文本分类器)来说是非常重要的信息。
-
可解释性:稀疏向量的每个非零元素都可以直接对应到原始文本中的一个特征(如单词),这使得稀疏向量在模型解释性方面具有优势。
LLM输入句子长度理论上可以无限延长嘛?
理论上来说,LLMs(⼤型语⾔模型)可以处理任意⻓度的输⼊句⼦,但实际上存在⼀些限制和挑战。下⾯是⼀些相关的考虑因素:
如果想要在某个模型基础上做全参数微调,究竟需要多少显存?
SFT(监督微调,Supervised Fine-Tuning)
SFT指的是在一个预训练的模型(如大型语言模型)基础上,利用针对性的数据集实施额外的训练过程,旨在使模型更精准地契合特定任务需求或深入某一专业领域。
当前SFT的几种方式如下:
1、全参数微调(Full Parameter Fine Tuning):全参数微调涉及对模型的所有权重进行调整,以使其完全适应特定领域或任务。这种方法适用于拥有大量与任务高度相关的高质量训练数据的情况,通过更新所有参数来最大程度地优化模型对新任务的理解和表现
2、部分参数微调(Sparse Fine Tuning / Selective Fine Tuning):部分参数微调策略仅选择性地更新模型中的某些权重,尤其是在需要保留大部分预训练知识的情况下。
3、LoRA(Low-Rank Adaptation):通过向模型权重矩阵添加低秩矩阵来进行微调,既允许模型学习新的任务特定模式,又能够保留大部分预训练知识,从而降低过拟合风险并提高训练效率
4、P-tuning v2:这是一种基于prompt tuning的方法,仅微调模型中与[prompt] 相关的部分参数(例如,额外添加的可学习prompt嵌入),而不是直接修改模型主体的权重
5、QLoRA:可能是指Quantized Low-Rank Adaptation或其他类似技术,它可能结合了低秩调整与量化技术,以实现高效且资源友好的微调
特点:
1、SFT能够利用预训练模型的参数和结构,避免从头开始训练模型,从而加速模型的训练过程,并且能够提高模型在目标任务上的表现。
2、缺点:需要大量的标注数据用于目标任务的微调,如果标注数据不足,可能会导致微调后的模型表现不佳。其次,由于预训练模型的参数和结构对微调后的模型性能有很大的影响,因此选择合适的预训练模型也很重要
为什么SFT之后感觉LLM傻了?
SFT 指令微调数据 如何构建?
构建Supervised Fine-Tuning(SFT)的微调数据需要以下步骤:
训练中⽂⼤模型有啥经验?
预训练和微调哪个阶段注⼊知识的?
想让模型学习某个领域或⾏业的知识,是应该预训练还是应该微调?
微调后的模型出现能⼒劣化,灾难性遗忘是怎么回事?
预训练和SFT操作有什么不同?
相关文章:

LLM之学习笔记(一)
前言 记录一下自己的学习历程,也怕自己忘掉了某些知识点 Prefix LM 和 Causal LM区别是什么? Prefix LM (前缀语⾔模型)和 Causal LM(因果语言模型)是两者不同类型的语言模型,它们的区别在于生…...

C# 反射详解
反射是C#中的一个强大特性,允许程序在运行时检查和操作类型和对象的信息。 通过反射,你可以获取类型的属性、方法、构造函数等信息,并可以动态创建对象、调用方法或访问属性,甚至可以实现某些框架或库的核心功能。 反射的基本概念…...

pgadmin安装后运行不能启动界面的问题
在本人机器上安装了pgsql10后,自带的pgadmin安装后运行时能打开edge并显示数据库server和数据库的,后来又安装了pgsql17,结果安装后想打开pgadmin,结果一直在等待最后,爆出类似于下面的错误。 pgAdmin Runtime Enviro…...

跳表(Skip List)
跳表(Skip List) 跳表是一种用于快速查找、插入和删除的概率型数据结构,通常用于替代平衡二叉搜索树(如 AVL 树或红黑树)。跳表通过在有序链表的基础上增加多层索引,使得查找操作的平均时间复杂度降低&…...

前端实现把整个页面转成PDF保存到本地(DOM转PDF)
一、问题 遇到一个需求,就是要把整个看板页面导出成PDF用在汇报,也就是要把整个DOM生成一个PDF保存到本地。 二、解决方法 1、解决思路:使用插件 jspdf 和 html2canvas,我用的版本如下图 2、代码实现 import { jsPDF } from …...

Vue 3 学习文档(一)
最近打算做一个项目,涉及到一些前端的知识,因上一次接触前端已经是三四年前了,所以捡一些简单的功能做一下复习。 响应式函数:reactive 和 ref属性绑定:v-bind 和简写语法事件监听:v-on 和简写语法 双向绑…...

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配
接到一个需求是类似下图的3D多房间视角,需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现,需要拖拽起来有跟手的感觉,会存在不同分辨率机型的适配问题。 即:美术调整好了机型1的手感,能做到手指按下顶层地板上下挪动&…...

牛客周赛 Round 69(A~E)
文章目录 A 构造C的歪思路code B 不要三句号的歪思路code C 仰望水面的歪思路code D 小心火烛的歪思路code E 喜欢切数组的红思路code 牛客周赛 Round 69 A 构造C的歪 思路 签到题,求出公差d,让最大的数加上公差d即可 code int a,b;cin >> a &…...

Spring Boot 实战:分别基于 MyBatis 与 JdbcTemplate 的数据库操作方法实现与差异分析
1. 数据库新建表 CREATE TABLE table_emp(id INT AUTO_INCREMENT,emp_name CHAR(100),age INT,emp_salary DOUBLE(10,5),PRIMARY KEY(id) );INSERT INTO table_emp(emp_name,age,emp_salary) VALUES("tom",18,200.33); INSERT INTO table_emp(emp_name,age,emp_sala…...

【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)
一、服务器上安装jmeter 1、官方下载地址,https://jmeter.apache.org/download_jmeter.cgi 2、服务器上用wget下载 # 更新系统 sudo yum update -y# 安装 wget 以便下载 JMeter sudo yum install wget -y# 下载 JMeter 压缩包(使用 JMeter 官方网站的最…...

使用Python实现自动化邮件通知:当长时程序运行结束时
使用Python实现自动化邮件通知:当长时程序运行结束时 前提声明 本代码仅供学习和研究使用,不得用于商业用途。请确保在合法合规的前提下使用本代码。 目录 引言项目背景项目设置代码分析 导入所需模块定义邮件发送函数发送邮件 实现步骤结语全部代码…...

框架学习07 - SpringMVC 其他功能实现
一. 拦截器实现HandlerInterceptor 接⼝ SpringMVC 中的 Interceptor 拦截器也是相当重要和相当有⽤的,它的主要作⽤是拦截⽤户的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证,或者是来判断⽤户是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两…...

NAT:连接私有与公共网络的关键技术(4/10)
一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址,使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换࿱…...

RabbitMQ2:介绍、安装、快速入门、数据隔离
欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录
1.创建新文件夹,用来存放SDK包(其实本质就是路径要对就ok了),右键鼠标通过Open Git Bash here来打开git 输入命令 git clone --depth1 https://gitee.com/lcsc/luban-lite.git 来拉取,如下所示:࿰…...

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置
前言 🌟🌟本期讲解关于SpringMVC的编程之参数传递~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废…...

C++设计模式行为模式———策略模式
文章目录 一、引言二、策略模式三、总结 一、引言 策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。与模板方法模式类似,都是以扩展的方式来支持未来的变化。…...

Spring Cloud 中 bootstrap.yml 配置文件详解
Spring Cloud 中 bootstrap.yml 配置文件详解 1. 什么是 bootstrap.yml? bootstrap.yml 是 Spring Cloud 提供的一个特殊配置文件,主要用于初始化 Spring Cloud 应用程序的环境。与常见的 application.yml 不同,bootstrap.yml 在 Spring 应用…...

Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的不断发展…...

ASP网络安全讲述
一 前言 Microsoft Active Server Pages(ASP)是服务器端脚本编写环境,使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序…...

DFS 创建分级菜单
菜单级别不确定,想要自适应,且可以折叠的菜单。 数据是一个数组。 <template><div class"Level" ref"Level"></div> </template>import {ref} from vue export default{data(){Level:ref(null),menuData…...

HDU Go Running(最小点覆盖 + 网络流优化)
题目大意:有一条无限长跑道,每个人可以规定自己跑步的方向,起点,跑步起止时间。每个人跑步的速度都是1m/s。最后从监控人员哪里得到了n个报告,每个报告给出了某人在某一时候所在的位置,问跑步的最少可能人数…...

C++设计模式-中介者模式
动机(Motivation) 多个对象相互关联的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,可以使用一种”中介对象“来管理对象间的关联关系,避免…...

文件上传与下载服务 | Flask 实战
之前介绍了 droppy 文件共享服务的搭建。但在一些场景中,我们需要在命令行或在 Python 代码中,临时上传和下载文件。这时可以用一个更简单的策略:使用 flask 编写一个临时的 API。 服务端配置 以下是一个简单的 Flask 应用程序代码示例&…...

MySQL 中的排序:索引排序与文件排序
文章目录 MySQL 中的排序:索引排序与文件排序全解析一、引言二、索引排序(一)原理(二)示例 三、文件排序(一)单路排序(二)双路排序(三)归并排序 四…...

深入理解React Hooks:使用useState和useEffect
引言 React Hooks是React 16.8引入的一项强大功能,它使函数组件能够使用状态和其他React特性。本文将深入探讨两个最常用的Hooks:useState和useEffect,并通过实际代码示例展示它们的使用方法。 1. 什么是React Hooks? React Ho…...

AWS codebuild + jenkins + github 实践CI/CD
前文 本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流,用于自动化发布已经部署 lambda 函数。 在 AWS 海外区,CI/CD 工作流可以用 codepipeline 这项产品来方便的实现, CICD 基本概念 持续集成( Continuous…...

Android PMS(Package Manager Service)源码介绍
文章目录 前言一、PMS 启动流程二、APK 安装流程三、APK 卸载流程四、权限管理静态权限动态权限 五、 数据存储与一致性六、 PMS 的安全性策略1、权限检查2、签名认证3、动态权限管理4、应用安装验证5、保护系统目录 七、PMS 调试方法总结 前言 PackageManagerService…...

运维面试整理总结
面试题可以参考:面试题总结 查看系统相关信息 查看系统登陆成功与失败记录 成功:last失败:lastb 查看二进制文件 hexdump查看进程端口或连接 netstat -nltp ss -nltp补充:pidof与lsof命令 pidof [进程名] #根据 进程名 查询进程id ls…...

图数据库 Cypher语言
图数据库 属性图 属性图(Property Graph)概述 属性图是一种广泛用于建模关系数据的图数据结构,它将**顶点(节点)和边(关系)**进行结构化存储,并为它们附加属性以提供丰富的语义信…...