- 博客(44)
- 收藏
- 关注
原创 为什么transformer对KVcache?
在自回归生成中(如 GPT 生成文本时),模型会:先输入第一个 token,生成第二个;再将前两个 token 作为输入,生成第三个;以此类推。每一步生成时,都需要计算当前输入序列的注意力分布。注意力的核心计算公式是:其中,Q、K、V 分别是 “查询”“键”“值” 矩阵,由输入序列通过线性层映射得到。在解码阶段,为了保证因果性(即当前 token 只能关注之前的 token),会使用,使得第 t 个 token 的 Q 只能与前 t 个 token 的 K 计算相似度。
2025-09-03 09:40:32
357
原创 Lora家族
近似原始权重矩阵的更新。假设原始权重矩阵为 W0,微调时引入两个低秩矩阵 A(维度 d * r)和 B(维度 r *k),使得更新后的权重为W = W0 + BA,其中 r<<min(d, k)。这种分解将可训练参数从O(dk)减少到O(r(d + k)),例如当r=16时,参数压缩率可达。LoRA(Low-Rank Adaptation)通过。QLoRA(Quantized LoRA)结合。与 LoRA,实现显存的极致压缩。结构重参数化与专家混合。量化与低秩的双重优化。服务端优化与并发执行。
2025-09-01 17:47:18
711
原创 26届算法秋招_baidu笔试_算法编程题。
2)对于两个区间A = [startA, endA]和B= [startB, endB],它们的交集区间为[max(startA, startB), min(endA, endB)],前提是max (startA, startB) < min(endA, endB)。1)替换:将str1[i-1]替换为str2[j-1],操作数=1+dp[i-1][j-1]3)插入:在str1的i位置插入str2[j-1],操作数=1+dp[i][j-1]2)删除:删除str1[i-1],操作数=1+dp[i-1][j]
2025-08-03 15:47:26
411
原创 加了lora适配器之后模型推理变慢?
理论上,可以将 LoRA 适配器完全融合到原始模型的权重中,生成一个新的微调模型。这样推理时就没有额外的计算开销。然而,LoRA 的一个主要优势就是适配器小巧,可以动态插拔和切换,且可以针对不同的任务训练多个适配器而不改变大模型基座。如果静态融合了,就失去了这些灵活性。所以,在实际应用中,很少为了推理速度而牺牲 LoRA 的核心优势进行静态融合。这意味着在推理的每一步,LoRA 适配器的输出都会与原始模型的相应层输出相加。这种实时融合会引入额外的计算步骤。多数情况下,LoRA 适配器是。
2025-07-03 11:08:09
729
原创 NLP基础2_文本分类
文本分类(Text Classification)目标是将给定的文本文档自动归类到一个或多个预定义的类别中。:判断评论是正面还是负面:区分正常邮件和垃圾邮件:将新闻归类到体育、财经、科技等板块:理解用户查询的真实意图:根据症状描述分类疾病类。
2025-07-02 10:52:05
1260
原创 LlamaFactory打开梯度检查点
打开LLaMA-Factory/src/llamafactory/hparams/model_args.py。一般做法是在LLaMA Factory中,可以通过在配置文件中设置。将这里的default设置为False即打开梯度检查点。
2025-06-27 10:29:34
955
原创 LLaMA Factory 微调后,迁移模型
步骤:1.在源服务器登录 Hugging Face:2.在训练脚本中添加上传代码:3.在目标服务器安装 transformers:4.下载模型:方法 2:直接文件传输(适用于大型模型)步骤:1.在源服务器打包模型:2.使用 SCP 传输:3.在目标服务器解压:方法 3:使用 rsync(适合大型文件增量传输)方法 4:模型导出为单文件(简化传输)完整迁移脚本示例迁移后验证步骤1.模型完整性检查:2.推理测试:
2025-06-27 10:09:37
572
原创 NLP基础1_word-embedding
在自然语言处理(Natural Language Processing,NLP)领域,文本表示是处理流程的第一步,主要是将文本转换为计算机可以运算的数字。使用两个例句来构造词袋: [Jane, wants, to, go, Shenzhen, Bob, Shanghai]:词典编码「自然语言处理」→ {"自":1, "然":2, "语":3, "言":4, "处":5, "理":6}句1:[1,1,2,1,1,0,0] 句2:[0,1,2,1,0,1,1]机器翻译 Machine Translation。
2025-06-24 15:36:18
1301
原创 多模态大模型_跨模态联合表示学习
多模态大模型目标:通过神经网络将不同模态(文本、图像、音频等)映射到统一语义空间,实现模态间相互理解。文本:词嵌入(Word Embedding) + 位置编码(Positional Encoding)图像:分块线性投影(Vision Transformer 方式)数学本质:将原始数据转换为高维向量,保留语义信息。
2025-06-24 10:08:29
1241
原创 Python算法笔记1_双指针问题
基于《你也能看得懂的python算法书》。“指针”是变成语言中的一个对象,用于存储一个内存空间的地址。双指针问题主要涉及:数组合并,二分查找,链表。
2025-06-22 19:58:39
392
原创 向量数据库chromadb
Chroma是一款开源的向量数据库,它使用向量相似度搜索技术,可以快速有效地存储和检索大规模高维向量数据。它能帮你把文本、图片、音频等非结构化数据转化为机器可理解的,然后快速找到它们之间的相似性。目前Chroma库支持python和JavaScript两种语言。
2025-06-20 11:05:45
3087
原创 PyTorch框架的核心组成部分及用法
PyTorch是一个由Facebook AI Research (FAIR) 开发的开源机器学习库,广泛应用于深度学习领域,特别是在研究和快速原型开发中。它以其而闻名,这使得模型构建更加灵活和直观。
2025-06-16 17:06:37
1068
原创 手搓transformer
最终输出形状:(batch_size, seq_len, d_model) = (1, 3, 4)#nn.Eembedding是pytorch中的一个类,用于将输入的索引转换为对应的词向量。
2025-06-08 16:40:34
435
原创 LLM基础2_语言模型如何文本编码
比如:“白日依山_",语言模型会根据上文推测出下文可能是“尽”,“水”……等,最终经过对比,选取最可能的词填上,得到“白日依山尽”。流程总结:原始文本->BPE分词->ID序列->滑动窗口->训练样本->嵌入层->词向量。就像给教室座位编号:每个词语有"含义身份证"(词嵌入)->再加个"座位号"(位置编码)比如"猫追老鼠"和"老鼠追猫",虽然词语相同但意思完全相反!:先准备256个基础字符(a-z, A-Z, 标点等):遇到新词就卡住(如"Hello"):把高频组合变成新"积木块"组合词嵌入与位置嵌入。
2025-06-05 14:48:32
1397
原创 LLM基础1_语言模型如何处理文本
tiktoken:OpenAI开发的专业"分词器"torch:Facebook开发的强力计算引擎,相当于超级计算器。
2025-06-05 11:59:28
742
原创 微调embedding模型_jhgan-ko-sroberta-multitask
语言适配:针对韩语优化的sRoBERTa架构高效池化:注意力加权平均提升表征质量相似度优化:余弦距离直接作为回归目标轻量微调:仅需少量样本(示例中batch_size=2)训练可视化:实时监控模型收敛情况即插即用:保存格式兼容HuggingFace生态建议应用场景:韩语问答系统/推荐系统/语义搜索等需要细粒度语义理解的任务这种微调方式使模型适应特定领域的语义空间分布,相比原始预训练模型,在目标任务的嵌入质量可提升15-30%(取决于训练数据质量)。
2025-06-03 14:07:49
772
原创 python力扣刷题记录_162寻找峰值
7.最后返回right,因为right是第一个大于等于nums[mid]的元素的下标,所以right就是峰值的下标。#5.如果nums[mid] > nums[mid+1],那么说明mid是一个峰值,所以right = mid。#6.如果nums[mid] < nums[mid+1],那么说明mid不是一个峰值,所以left = mid。#2.用left = -1和right = len(nums) - 1来初始化左右指针。#4.用mid = (left + right) // 2来计算中间元素的下标。
2025-06-01 10:25:20
325
原创 python力扣刷题记录_34查找元素第一个和最后一个位置
4.用right = search(target+1) - 1来查找第一个大于等于target+1的元素的下标。#3.用left = search(target)来查找第一个大于等于target的元素的下标。#5.如果left<=right,那么返回[left,right],否则返回[-1,-1]#2.用一个函数search(x)来查找第一个大于等于x的元素的下标。#时间复杂度:O(logn),空间复杂度:O(1)#6.用return ans来返回答案。#1.用二分查找来解决这个问题。
2025-05-27 22:48:51
182
原创 Mac 利用git管理代码_本地/服务器
5)如果本地下载啦VScode软件,打开github Desktop应该能看到仓库下会有以下的选项,即可以用VScode打开,点击这个按钮VScode就会打开你的代码文件,在其中对代码文件做任何修改,点击保存然后再点publish repository就可以将代码修改上传到github上了。最上面的三个按钮,“Current repository”查看仓库、切换仓库,“Current branch”当前分支,“Publish repository”推送到github。点击右侧“从本地目录添加到现存仓库”
2025-05-24 18:55:21
423
原创 Python力扣刷题记录_3无重复字符的最长子串
2.用一个hashmap来记录字符出现的次数,key:char,value:int。#3.用一个for循环来枚举右端点r,从0到n-1。#4.枚举过程中出现重复字符就缩小范围,移动左端点。#1.用一个变量ans来记录答案,初始值为0。#时间复杂度:O(n),空间复杂度:O(1)
2025-05-24 18:11:58
190
原创 python力扣刷题记录_713乘积小于k的子数组
3.用双指针来解决这个问题,左端点l,右端点r,子数组:[l,r],[l+1,r],……,[r,r],个数为r-l+1。#2.如果k>1,那么答案一定是大于0的,因为nums中的元素都是整数。#1.如果k<=1,那么答案一定是0,因为nums中的元素都是整数。#7.用一个while循环来移动左端点l,直到prod<k。#4.用一个变量prod来记录子数组的乘积,初始值为1。#6.用一个for循环来枚举右端点r,从0到n-1。#8.用ans+=r-l+1来更新答案。#10.用l+=1来更新l。
2025-05-24 17:52:34
134
原创 python力扣刷题记录_209长度最小的子数组
3. 如果窗口和s大于等于target,更新答案ans。#2. 枚举右端点right,更新窗口和s。#时间复杂度:O(n),空间复杂度:O(1)#1. 初始化窗口和s和左端点left。#双指针的应用场景:单调性。#4. 返回答案ans。
2025-05-21 15:26:06
441
原创 python力扣刷题记录_42接雨水
1. 初始化前缀最大值数组pre_max和后缀最大值数组suf_max,分别存储每个位置的前缀最大值和后缀最大值。#如果前缀最大值比后缀最大值小,那么前缀最大值就是当前位置的雨水量。#如果后缀最大值比前缀最大值小,那么后缀最大值就是当前位置的雨水量。#2. 遍历数组height,更新pre_max和suf_max。#3. 再次遍历数组height,计算每个位置的雨水量。#时间复杂度:O(n),空间复杂度:O(n)#时间复杂度:O(n),空间复杂度:O(1)#4. 返回所有位置的雨水量之和。
2025-05-21 14:28:31
321
原创 python力扣刷题记录_11盛最多水的容器
3.移动指针,使得高度较小的指针向内移动。# 4.重复步骤2和3,直到左右指针相遇。#时间复杂度O(n),空间复杂度O(1)# 1.使用双指针,分别指向数组的两端。# 2.计算当前的面积,更新最大面积。
2025-05-20 11:42:44
387
原创 python力扣刷题记录_15三数之和
优化1:因为数组是有序的,if x + nums[i+1] + nums[i+2] > 0: 就可以直接break了,因为后面的数都比nums[i+2]大,不可能再找到答案了。#优化2: 如果x + nums[-1] + nums[-2] < 0: 就可以直接continue了,因为后面的数都比nums[-1]小,不可能再找到答案了。#有序数组找不重复三个数的和为0,返回这三个数。
2025-05-19 22:56:51
235
原创 python力扣刷题记录_3最长子串
每次扩展时检查当前字符是否在临时列表 lst 中,若无重复则添加,否则终止内层循环。#给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。#用集合记录当前窗口的字符,双指针left和right维护窗口边界。# 内层循环从 i 开始向右扩展子串,直到遇到重复字符。# 外层循环遍历每个字符作为子串的起点 i。# 最终记录所有子串的最大长度。#优化一:滑动窗口+哈希集合。#优化二:滑动窗口+哈希表。#时间复杂度O(n^2)#时间复杂度O(n)
2025-05-17 18:15:20
180
原创 <python>常用算法4_Quick_Sort
快速排序,原理是选择一个基准元素,将数组分为两部分,一部分小于基准,一部分大于基准,然后对这两部分递归进行快速排序。#递归的终止条件是数组长度小于等于1,此时数组已经有序,直接返回。#比如:quick_sort([3, 6, 2, 1, 5])#时间复杂度O(nlogn)
2025-05-17 16:51:42
217
原创 <python>常用算法3_Insert_sort
当 key == arr[j] 时,由于条件 key < arr[j] 为假,不会交换,相等元素的相对顺序保持不变。"j -= 1"+"j >= 0"的判断是为了将i左边的区域数据都和key比较一次,然后排序。#插入排序,原理:将未排序部分的元素,插入到已排序部分的合适位置。#在数组头部预置一个极小值作为哨兵,省去j>=0的判断。#时间复杂度O(n^2)
2025-05-17 16:36:31
257
原创 python力扣刷题记录_2两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。# 请你将两个数相加,并以相同形式返回一个表示和的链表。#逐位相加:从链表头部(个位)开始遍历,同时处理进位。# 适用于需要预分配内存的场景。# 提前计算可能的最大进位值。#数学优化:进位预测。
2025-05-15 10:22:53
140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅