- 博客(371)
- 收藏
- 关注
原创 LeetCode 131 分割回文串
给你一个字符串 s,请你将 s 分割成一些 子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。输出:[["a","a","b"],["aa","b"]]输入:s = "aab"s 仅由小写英文字母组成。输入:s = "a"输出:[["a"]]
2025-09-05 16:15:20
76
原创 LeetCode 17 电话号码的字母组合
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。digits[i] 是范围 ['2', '9'] 的一个数字。输入:digits = "23"输出:["a","b","c"]输入:digits = "2"输入:digits = ""
2025-09-05 12:26:53
72
原创 LeetCode 207 课程表
先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi。并且学习课程 0 之前,你还应先完成课程 1。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]\。输入:numCourses = 2, prerequisites = [[1,0]]例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。
2025-09-04 21:50:49
93
原创 LeetCode 994 腐烂的橘子
解释:左下角的橘子(第 2 行, 第 0 列)永远不会腐烂,因为腐烂只会发生在 4 个方向上。如果不可能,返回 -1。输入:grid = [[2,1,1],[1,1,0],[0,1,1]]输入:grid = [[2,1,1],[0,1,1],[1,0,1]]每分钟,腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子都会腐烂。解释:因为 0 分钟时已经没有新鲜橘子了,所以答案就是 0。grid[i][j] 仅为 0、1 或 2。输入:grid = [[0,2]]值 2 代表腐烂的橘子。值 1 代表新鲜橘子;
2025-09-04 20:36:03
149
原创 Leetcode 75 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库内置的 sort 函数的情况下解决这个问题。输入:nums = [2,0,2,1,1,0]你能想出一个仅使用常数空间的一趟扫描算法吗?输入:nums = [2,0,1]nums[i] 为 0、1 或 2。输出:[0,0,1,1,2,2]输出:[0,1,2]
2025-08-28 00:39:58
208
原创 Leetcode 114 二叉树展开为链表
展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。输出:[1,null,2,null,3,null,4,null,5,null,6]进阶:你可以使用原地算法(O(1) 额外空间)展开这棵树吗?输入:root = [1,2,5,3,4,null,6]展开后的单链表应该与二叉树 先序遍历 顺序相同。树中结点数在范围 [0, 2000] 内。输入:root = [0]输入:root = []
2025-05-02 13:18:30
177
原创 LeetCode 138 随机链表的复制
新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]输入:head = [[3,null],[3,0],[3,null]]输出:[[3,null],[3,0],[3,null]]输入:head = [[1,1],[2,1]]输出:[[1,1],[2,1]]
2025-04-30 00:51:24
193
原创 LeetCode 24 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。链表中节点的数目在范围 [0, 100] 内。输入:head = [1,2,3,4]输入:head = [1]输出:[2,1,4,3]输入:head = []
2025-04-27 21:27:18
270
原创 LeetCode 438 找到字符串中所有字母异位词
不考虑答案输出的顺序。起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。输入: s = "cbaebabacd", p = "abc"输入: s = "abab", p = "ab"输出: [0,1,2]
2025-04-19 23:12:06
315
原创 LeetCode 283 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。输入: nums = [0,1,0,3,12]进阶:你能尽量减少完成的操作次数吗?,仅移动非零元素至前端,最后补零。输出: [1,3,12,0,0]输入: nums = [0]
2025-04-15 02:36:57
186
原创 【Module】多令牌预测(Multi-Token Prediction, MTP)
训练时 MTP 模块提供额外训练信号,优化主模型参数,使其学习到更丰富语义和依赖关系,推理时即便丢弃 MTP,主模型能力已提升。:去除 MTP 模块可降低推理计算量,避免潜在干扰,使主模型更专注高效推理。
2025-02-05 17:28:42
444
原创 【Attention】Multi-Head Latent Attention(MLA)
每种机制都通过竖排的线条表示查询(Query)、键(Key)和值(Value)的相关结构,并且在图上方标注了 “Cached During inference”(推理时缓存)的灰色区域,用以表示各机制在推理过程中需要缓存的部分。通过将键和值联合压缩为潜在向量,MLA 在推理时显著减少了 KV 缓存。
2025-01-29 13:11:07
383
原创 【Attention】KV Cache
定义:KV Cache 即 Key-Value Cache,是用于加速 Transformer 模型推理长序列过程的一种技术。核心原理:在 Transformer 的自注意力机制中,将历史输入 token 中的 Key 和 Value 缓存下来,避免每一步生成都重新计算历史 token 的 Key、Value 以及注意力表示,从而提高推理效率。
2025-01-29 03:35:08
360
原创 【MoE】DeepSeekMoE
与辅助损失控制的负载均衡策略不同,无损失平衡策略不依赖辅助损失函数。传统策略靠引入辅助损失函数平衡专家负载,但会带来不良梯度,干扰模型语言建模目标,影响学习效果。无损失平衡策略则无此问题,训练过程更顺畅,让模型能专注主要任务,对训练更友好。根据这个规则,下一批原材料分配时,会倾向分给绩效分高或休息时间长的工人,以此平衡工作量。管理者观察工人状态,若工人手头任务少,就优先分配原材料;若任务多,就减少分配。这种方式不设额外惩罚,只根据工人实时工作量动态分配,既保证工作量均衡,又让工人专注生产。
2025-01-26 18:36:05
570
原创 【RAG】密集检索(Dense retrieval)
密集检索是一种信息检索方法,它通过将查询和文档转换为高维空间中的稠密向量表示,并利用这些向量之间的相似度来检索相关文档。
2025-01-07 16:53:40
219
原创 【归一化】RMSNorm
RMSNorm(Root Mean Square Layer Normalization,均方根层归一化)是一种归一化技术。它主要用于对神经网络中的隐藏层激活进行归一化操作,类似于常见的 Layer Normalization(层归一化),但计算方式有所不同。3 与 Layer Normalization 的对比区别是什么?4 大模型为何使用RMSNorm代替LayerNorm?2 计算原理是什么?
2025-01-06 15:16:45
881
原创 【位置编码】RoPE旋转位置编码
1RoPE旋转位置编码的公式是什么?2 公式中的θ如何根据位置编码维度计算得到?3RoPE的优势是什么?相对位置编码能力 有效捕捉相对位置信息:RoPE 通过旋转操作将绝对位置信息转化为相对位置信息。在计算自注意力机制中的内积时,自动包含相对位置信息,这使得模型能够更好地理解序列中元素之间的位置关系。例如,在自然语言处理的文本序列中,能够区分句子中不同单词之间的相对距离,像理解主语和谓语、形容词和名词之间的相对位置,从而提升对语义的理解。 长距离依赖关系处理:对于长序列数据,
2023-07-20 12:06:11
445
原创 Leetcode 746 使用最小花费爬楼梯
一旦你支付此费用,即可选择向上爬一个或者两个台阶。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。- 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。- 支付 1 ,向上爬一个台阶,到达楼梯顶部。你将从下标为 1 的台阶开始。你将从下标为 0 的台阶开始。
2022-08-22 19:23:59
559
原创 关于关系抽取的问题
TPLinker定义三种标注EH2ET,SH2OH,ST2OT。假设序列长为N,实体类数为T个,关系类别为R个。根据标注标签生成2R+1个结果矩阵。EH-to-ET,同一实体的头尾关系,是1个N×N矩阵。SH-to-OH,subject和object的头部token间的关系,是R个N×N矩阵。ST-to-OT,subject和object的尾部token间的关系,是R个N×N矩阵。......
2022-08-03 17:25:29
428
1
原创 NC97 字符串出现次数的TopK问题
123"出现了2次,记["123","2"],"231"与"32"各出现1次,但是"231"字典序在"32"前面,记["231","1"],最后返回[["123","2"],["231","1"]]"b"出现了2次,记["b","2"],"a"与"c"各出现1次,但是a字典序在c前面,记["a","1"],最后返回[["b","2"],["a","1"]]数据范围字符串数满足1000000≤n≤100000,每个字符串长度100≤n≤10,25000≤k≤2500。字符仅包含数字和字母。...
2022-07-29 01:03:50
360
原创 关于语义相似度匹配的问题
而有监督版的SimCSE则是需要三元组的数据,它实际上就是把困难样本补充到标准的SimCSE上,即负样本不只有batch内的所有其他样本,还有标注的困难样本,但同时正样本依然不能缺,所以需要“(原始句子,相似句子,不相似句子)”的三元组数据。至于CoSENT,它只用到了标注好的正负样本对,也不包含随机采样batch内的其他样本来构建负样本的过程,我们也可以将它理解为对比学习,但它是“样本对”的对比学习,而不是像SimCSE的“样本”对比学习,也就是说,它的“单位”是一对句子而不是一个句子。...
2022-07-28 21:10:21
678
原创 NC91 最长上升子序列(三)
给定数组arr,设长度为n,输出arr的最长上升子序列。(如果有多个答案,请输出其中按数值(注区别于按单个字符的ASCII码值)进行比较的字典序最小的那个)其最长递增子序列有3个,(1,2,8)、(1,2,6)、(1,2,4)其中第三个按数值进行比较的字典序最小,故答案为(1,2,4)数据范围10000000000≤n≤200000,0≤arri≤1000000000。要求空间复杂度O(n),时间复杂度O(nlogn)......
2022-07-27 02:54:39
754
原创 关于优化器的问题
Adamw即Adam+weightdecay,效果与Adam+L2正则化相同,但是计算效率更高,因为L2正则化需要在loss中加入正则项,之后再算梯度,最后再反向传播,而AdamW直接将正则项的梯度加入反向传播的公式中,省去了手动在loss中加正则项这一步。...
2022-07-25 01:28:49
204
原创 关于调参技巧的问题
刚开始模型对数据的“分布”理解为零,或者是说“均匀分布”(当然这取决于你的初始化),在第一轮训练的时候,每个数据点对模型来说都是新的,模型会很快地进行数据分布修正,如果这时候学习率就很大,极有可能导致开始的时候就对该数据“过拟合”,后面要通过多轮训练才能拉回来,浪费时间。在训练模型的时候,通常会遇到这种情况我们平衡模型的训练速度和损失(loss)后选择了相对合适的学习率(learningrate),但是训练集的损失下降到一定的程度后就不在下降了。学习率衰减的基本思想是学习率随着训练的进行逐渐衰减。...
2022-07-21 01:46:10
430
原创 关于公式和代码的问题
在不使用L2正则化时,求导结果中W前系数为1,现在W前面系数为1-ηλ,因为η、λ都是正的,所以1-ηλ小于1,它的效果是减小W,这也就是权重衰减(weightdecay)的由来。yic,符号函数,如果样本i的真实类别等于c取1,否则取0。yi,样本i的label,正类为1,负类为0。pic,观测样本,属于类别c的预测概率。pi,样本i预测为正类的概率。1Concat策略。..............................
2022-07-20 17:34:34
406
原创 TENER: Adapting Transformer Encoder for Name Entity Recognition
改进点:1. 原始transformer使用的是绝对位置编码,基于正弦函数的位置嵌入是距离感知的,缺乏方向性。中间加入线性变换之后,没有相对位置信息。第一点改进是在计算attention score的时候,考虑了相对位置信息,而这个相对位置本身是可以编码到距离信息和方向信息的。2. 第二点改进就是把attention公式中的缩放系数给去掉了,使得产生的attention score会使分数更加锐利,而这种锐利的注意力是更适用于NER任务的,因为句子中少数字可以组成实体,大部分非实体,平滑处理反而会增加噪声。
2022-07-13 14:48:10
384
原创 Deep Biaffine Attention for Neural Dependency Parsing
https://arxiv.org/abs/1611.01734基于图的依存句法分析需要解决两个问题:1. 哪两个节点连依存弧;2. 弧的标签是什么。这是一个不定类别的多分类问题。若句子中有n个词,包含虚根ROOT在内一共d=n+1个词。假设我们使用以hfl/chinese-electra-180g-small-discriminator(hfl/chinese-electra-180g-small-discriminator · Hugging Face)预训练模型作为特征抽取器,输出的特征向量R,维度为
2022-07-12 23:58:33
689
原创 关于tokenizer的问题
将最常出现的连续字节对合并,直到词表达到预定的大小时停止。BPE的一个问题是,如果遇到了unicode,基本字符集可能会很大。一种处理方法是我们以一个字节为一种“字符”,不管实际字符集用了几个字节来表示一个字符。这样的话,基础字符集的大小就锁定在了256。它的原理非常接近BPE,不同之处在于它做合并时,并不是直接找最高频的组合,而是选择能够最大化提升语言模型概率的连续字节对加入词表。与BPE或者WordPiece不同,Unigram的算法思想是从一个巨大的词汇表出发,再逐渐删除其中的子词,直到词表大小满足预
2022-07-07 19:19:19
273
原创 LeetCode 384 打乱数组
给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。实现 Solution class:Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[] shuffle() 返回数组随机打乱后的结果 示例 1:输入["Solution", "shuffle", "reset", "shuffle"][[[1, 2, 3]], [], [], []]输出[nul
2022-07-07 00:29:45
131
原创 LeetCode 16 最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在恰好一个解。示例 1:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。示例 2:输入:nums = [0,0,0], target = 1输出:0 提示:3 ...
2022-07-06 23:15:36
223
原创 LeetCode 557 反转字符串中的单词 III
给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入:s = "Let's take LeetCode contest"输出:"s'teL ekat edoCteeL tsetnoc"示例 2:输入: s = "God Ding"输出:"doG gniD" 提示:1 ...
2022-07-06 16:39:59
202
原创 LeetCode 185 部门工资前三高的所有员工
表: Employee+--------------+---------+| Column Name | Type |+--------------+---------+| id | int || name | varchar || salary | int || departmentId | int |+--------------+---------+Id是该表的主键列。departmentId是Depar
2022-07-06 01:22:53
157
原创 LeetCode 231 2的幂
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16示例 3:输入:n = 3输出:false示例 4:输入:n = 4输出:true示例 5:输入:n = 5输出:false 提示:-231 ...
2022-07-05 18:46:59
239
原创 LeetCode 39 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], target = 7输出:[
2022-07-05 17:26:46
94
原创 LeetCode 59 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]] 提示:1 ......
2022-06-29 23:40:46
128
原创 LeetCode 222 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。示例 1:输入:root = [1,2,3,4,5,6]输出:6示例 2:输入:root = []输出:0示例 3:输入:root = [1]输出:1 提示:树中节点的数目范围是[0, 5 * 104]0 ......
2022-06-29 22:41:09
110
原创 LeetCode 494 目标和
给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-1 +
2022-06-28 21:56:33
174
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅