- 博客(66)
- 收藏
- 关注
原创 辅导男朋友转算法岗第1天|tokenizer
【大语言模型LLM基础之Tokenizer完全介绍-哔哩哔哩】 https://b23.tv/2kdTKxf。先初始化一个很大的词表(字母、单词、subword都包括)解决多国语言的分词问题,输入都当做字节流(含空格)删去对词表的表达能力影响不大的token。三种不同分词粒度的Tokenizers。设置:BPE的合并次数。词频统计->词表合并。loss:负对数似然。
2024-05-31 14:03:58 475
原创 论文精读|RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder
3、在特定微调条件下,为了提升模型性能,需要精心设计面向检索任务的预训练算法,而不是简单依赖自对比学习的预训练模型。这种细微的差异可能是因为,在使用增强解码的情况下,所有输入token都可以被重构,而在不使用增强解码的情况下,只有被遮蔽的token被重构。上表分析了RetroMAE的监督性能(DPR微调),其中分析了以下因素: 1)解码方法,2)解码器的大小,3)解码器的掩蔽比,4)编码器的掩蔽比。2)RetroMAE中4个因素的影响: 1解码方法,2解码器的大小,3解码器的掩蔽比,4编码器的掩蔽比。
2024-02-20 18:10:00 2183 1
原创 什么是自编码器Auto-Encoder?
让神经网络直接从上千万个神经元中学习是一件很吃力的事情,因此通过压缩提取出原图片中最具代表性的信息。上面是训练的过程,使用时只需要前半部分:encoder。通过对比这两个X计算误差,通过反向传播更新权重。自编码器可以像PCA一样给特征属性降维。
2024-02-15 20:08:58 479
原创 代码随想录二刷|第十章:单调栈
当前遍历到的元素就是右边第一个比它大的元素,栈顶元素就是当前元素。要求当前元素右边第一个比它大的元素(此时栈内元素单调递增)要求当前元素右边第一个比它小的元素(此时栈内元素单调递减)左边第一个比当前元素大的元素在栈里。两个数组,加一个map即可。
2024-02-12 12:39:11 451
原创 李宏毅机器学习2023|图像生成模型
encoder对结果影响很大,相对而言diffusion model(这里指那个noise predicter的大小)对结果影响就不大。因为Encoder必须是Invertible的,因此输出的vector的维度必须和输入的一样。从哪获取训练资料——怎么找到杂屑的ground truth?加噪音——Forward Process(Diffusion Process)Decoder要做的就是调整他自己,让判别器表现得越差越好。直接把图片的像素拉直,当成文字那样处理。杂屑不是加在图片上,而是加在中间产物上。
2023-12-26 14:49:58 1487 1
原创 self-attention|李宏毅机器学习21年
几个head,是一个需要调的超参。为什么要用Muti-head?使用不同的q代表不同种类的相关性。
2023-12-10 12:31:09 1185 1
原创 transformer模型结构|李宏毅机器学习21年
transformer就是一个seq2seq的model。Input一个sequence,output的长度由机器自己决定。
2023-12-10 10:25:36 707
原创 代码随想录二刷|第九章:动态规划
要正确处理n=1时的情况,因为当n为1时,vector dp(n + 1);将只初始化dp[0]和dp[1]。然而,代码中有dp[2] = 2。只需要维护两个数值就可以了,不需要记录整个序列。
2023-12-03 10:35:31 528
原创 代码随想录二刷|第七章:回溯算法
如果没有startIndex,输出的结果将会是[[1,1],[1,2],[1,3],[1,4],[2,1],[2,2],[2,3],[2,4],[3,1],[3,2],[3,3],[3,4],[4,1],[4,2],[4,3],[4,4]]动态规划思想:给定一个字符串s, 长度为n, 它成为回文字串的充分必要条件是s[0] == s[n-1]且s[1:n-1]是回文字串。不可以,[startIndex, i]就是要截取的子串。怎么避免这种情况:[[0,0],[0,1],[1,0],[1,1]]
2023-11-29 19:25:18 1019
原创 代码随想录二刷|第四章:字符串
2、对于线性数据结构,填充或者删除,后序处理会高效的多。1、怎么把1、2、3……替换为number?循环里的判断条件怎么写。
2023-11-24 19:51:33 417
原创 代码随想录二刷|第三章:哈希表
1、 不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。2、nums[k] + nums[i] + nums[left] + nums[right] > target 会溢出,因此要用long型存储。举例:{-1,-1,2} 如果写nums[i] == nums[i+1]就会跳过这一个解。举例:{0,-1,-1,-1,-1,1,1,1,1}是给long加括号,不是给后面的加括号。
2023-11-24 17:33:54 372
原创 代码随想录day60|84.柱状图中最大的矩形
/ 数组头部加入元素0。为什么要在末尾加0:否则如果原数组就是单调递增的话,就会原封不动地加入到栈中,无法收获结果。为什么要在首部加0:否则如果原数组就是单调递减的话,栈中就无法收获右边第一个比它小的元素了。1、对于每一个柱子:找到左边第一个比他矮的,再找到右边第一个比他矮的。// 数组尾部加入元素0。
2023-11-12 08:10:45 410
原创 代码随想录day58| 739. 每日温度、 496.下一个更大元素 I
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。我怎么能想到用单调栈呢?什么时候用单调栈呢?哈希映射的目的:能够根据元素的值找到对应的下标。
2023-11-10 09:49:02 201
原创 代码随想录day57| 647. 回文子串、516.最长回文子序列
1、本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话,我们会发现很难找到递归关系。dp[i] 和 dp[i-1] ,dp[i + 1] 看上去都没啥关系。注意因为dp[i][j]的定义,所以j一定是大于等于i的,那么在填充dp[i][j]的时候一定是只填充右上半部分。2、遍历顺序:一定要从下到上,从左到右遍历,这样保证dp[i + 1][j - 1]都是经过计算的。3、双指针法1、回文子串是要连续的,回文子序列可不是连续的!
2023-11-09 17:56:12 187
原创 代码随想录day56| 583. 两个字符串的删除操作、72. 编辑距离
dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。情况三:同时删word1[i - 1]和word2[j - 1],操作的最少次数为dp[i - 1][j - 1] + 2。情况一:删word1[i - 1],最少操作次数为dp[i - 1][j] + 1。
2023-11-08 19:32:53 188
原创 代码随想录day55| 392.判断子序列、115.不同的子序列
uint64_t 是 C++ 中的无符号 64 位整数类型。它是 C++ 标准库中 头文件中定义的一种定宽整数类型,用于确保在不同平台上具有相同的大小,即 64 位。uint64_t 通常用于需要确保使用 64 位的无符号整数的情况,例如处理大整数或需要大范围整数值的计算。这种类型的变量可以存储从 0 到 18,446,744,073,709,551,615(2^64 - 1)之间的整数值。dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。类比:最长公共子序列。
2023-11-07 16:17:50 121
原创 代码随想录day53|1143.最长公共子序列、 1035.不相交的线、 53. 最大子序和
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]因此是if(nums1[i-1] == nums2[j-1])int result = dp[0];
2023-11-06 11:30:19 150
原创 代码随想录day52|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组
贪心:遇到nums[i] > nums[i - 1]的情况,count就++,否则count为1,记录count的最大值就可以了。dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。1.最后的结果并不是dp[nums.size()-1]
2023-11-05 11:20:00 140
原创 代码随想录day51| 309.最佳买卖股票时机含冷冻期、 714.买卖股票的最佳时机含手续费
2.初始化时如果是非法定义,就根据递推公式来决定应该把它初始化为多少。3.max只能用于两个数字中取最大值。.保持卖出股票的状态。
2023-11-04 20:45:57 190
原创 代码随想录day50| 123.买卖股票的最佳时机III、 188.买卖股票的最佳时机IV
有的解法是定义一个三维数组dp[i][j][k],第i天,第j次买卖,k表示买还是卖的状态,从定义上来讲是比较直观。但感觉三维数组操作起来有些麻烦,我是直接用二维数组来模拟三维数组的情况,代码看起来也清爽一些。关键在于至多买卖两次,这意味着可以买卖一次,可以买卖两次,也可以不买卖。
2023-11-03 09:55:07 150
原创 代码随想录day49|121. 买卖股票的最佳时机、 122.买卖股票的最佳时机II
dp[i][1] 表示第i天不持有股票所得最多现金。dp[i][0] 表示第i天持有股票所得最多现金。本题的股票可以买卖多次!
2023-11-02 10:48:20 143
原创 代码随想录day48|198.打家劫舍、 213.打家劫舍II、337.打家劫舍III
这一句是必须的,否则会在遍历时出现越界错误。本题一定是要后序遍历,因为通过递归函数的返回值来做下一步计算。把环形问题转化为线性问题。
2023-11-01 19:42:06 167
原创 代码随想录day45|70. 爬楼梯、322. 零钱兑换、 279.完全平方数
1、因为有1的存在,所以不存在凑不成的情况。1、先遍历物品、先遍历背包都可以。2、dp[i]应该初试为最大值。
2023-10-30 09:22:25 102
原创 代码随想录day44| 完全背包、 518. 零钱兑换 、II、377. 组合总和 Ⅳ
2.C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]。但java就不用考虑这个限制,java里的int也是四个字节吧,也有可能leetcode后台对不同语言的测试数据不一样。1.本题求的是排列总和,而且仅仅是求排列总和的个数,并不是把所有的排列都列出来。所以不需要用回溯法暴搜。01背包和完全背包唯一不同就是体现在遍历顺序上。先遍历物品再遍历背包是组合数。先遍历背包再遍历物品是排列数。
2023-10-29 17:34:33 112
原创 代码随想录day43|1049. 最后一块石头的重量 II、494. 目标和、474.一和零
1.本题其实就是尽量让石头分成重量相同的两堆,相撞之后剩下的石头最小,这样就化解成01背包问题了。
2023-10-26 12:07:35 166
原创 代码随想录day42| 01背包问题 二维、 01背包问题 一维、 416. 分割等和子集
2.物品是nums[i],重量是nums[i],价值也是nums[i],背包体积是sum/2。1.dp[j] 表示: 容量为j的背包,所背的物品价值最大可以为dp[j]。3.当 dp[target] == target 的时候,背包就装满了。1.为什么必须先遍历物品后遍历背包?2.为什么必须遍历背包必须从后往前遍历?这里的if不要丢了,让我debug半天。
2023-10-26 08:59:10 146
原创 代码随想录day39|62.不同路径、63. 不同路径 II
按上面那种写法会漏掉在obstacleGrid[i][0]上有障碍的情况,会漏掉那一列的初始化。1.因为有了障碍,(i, j)如果就是障碍的话应该就保持初始状态(初始状态为0)。2.小细节,例如:初始化的部分,很容易忽略了障碍之后应该都是0的情况。2.怎么简化为一维数组?
2023-10-21 11:11:54 153
原创 代码随想录day38| 509. 斐波那契数、70. 爬楼梯 、746. 使用最小花费爬楼梯
状态压缩(做空间上的优化):只需要维护两个数值就可以了,不需要记录整个序列。1.dp数组以及下标的含义。3.dp数组如何初始化。
2023-10-20 11:02:48 162
原创 代码随想录day37| 738.单调递增的数字、 968.监控二叉树 (跳过)
本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]减一,strNum[i]赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。
2023-10-19 11:50:22 155
原创 代码随想录day36| 435. 无重叠区间、 763.划分字母区间、56. 合并区间
第一个区间就可以放进结果集里,后面如果重叠,在result上直接合并。如果找到之前遍历过的所有字母的最远边界,说明这个边界就是分割点了。
2023-10-18 17:50:34 132
原创 代码随想录day35|860.柠檬水找零、 406.根据身高重建队列、 452. 用最少数量的箭引爆气球
此时大家就发现 情况一,情况二,都是固定策略,都不用我们来做分析了,而唯一不确定的其实在情况三。所以局部最优:遇到账单20,优先消耗美元10,完成本次找零。因为美元10只能给账单20找零,而美元5可以给账单10和账单20找零,美元5更万能!而情况三逻辑也不复杂甚至感觉纯模拟就可以了,其实情况三这里是有贪心的。情况三:账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。(vector底层是数组实现,而list底层是链表实现)情况二:账单是10,消耗一个5,增加一个10。情况一:账单是5,直接收下。
2023-10-17 17:58:24 114
原创 代码随想录day34| 1005.K次取反后最大化的数组和、 134. 加油站、 135. 分发糖果
2.局部最优:当前累加rest[i]的和curSum一旦小于0,起始位置至少要是i+1,因为从i之前开始一定不行。全局最优:找到可以跑一圈的起始位置。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。1.暴力解法:用index记录下一个位置。1.按绝对值从大到小排列。
2023-10-16 11:17:12 127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人