- 博客(12)
- 收藏
- 关注
原创 Transformer详解
transpose就是转置,不过这里指定第 1 维和第 2 维互换,即将形状(shape)从 `(batch_size, seq_len, num_heads, head_dim)` 转换为 `(batch_size, num_heads, seq_len, head_dim)`。如果 `embed_size=512` 且 `num_heads=8`,则每个头的 `head_dim=64`。该操作将原始的 `embed_size` 拆分为 `num_heads` 个 `head_dim`。
2025-07-03 17:15:06
1280
原创 从0开始训练大模型
为什么要预训练: 1、语言不匹配:大多数开源基座对中文的支持都不太友好,在英文上效果优秀,但是中文差强人意。 2、专业知识不足:需要专业领域的LLM时候,预训练模型中的知识就尤为重要 1.1 tokenizer的训练tokenizer的训练有两种:WordPiece和BPEWordPiece:将所有的「常用字」和「常用词」都存到词表中,需要切词的时候就从词表里面查找即可。(bert就是用该方式做的tokenizer训练)例如:输入句子:你好世界bert就会在词表中找到对应的词: 当遇到词表中不存在的字词时,
2025-07-01 17:40:47
1001
原创 论文精读-InstructGPT
根据验证集上的RM分数,选择最终的SFT模型。作者发现,训练更多的epochs尽管会产生过拟合,但有助于提高后续步骤的RM分数(这个模型用于后续模型的初始化,而不是直接拿来用,过拟合一点没关系)用强化学习算法PPO,在强化学习中,模型叫做policy,所以文中的RL Policy,其实就是 GPT-3 模型,当policy做了一些action之后(输出Y),环境会发生变化。step3,继续微调前面训练好的SFT,使得其生成的答案能够得到一个尽量高的分数,并将生成的答案放入RM中继续去优化SFT的参数。
2025-06-30 18:00:03
752
原创 代码随想录Day14
翻转就是把每个节点的左右孩子交换一下。关键在于遍历的顺序,,在遍历的过程中去翻转每一个节点的左右孩子就可以了,本题可以使用,但是,因为中序遍历会将某些节点的左右孩子翻转两遍。给定一个二叉树,检查它是否是镜像对称的。判断该二叉树是不是对称二叉树的时候,本质上是判断该二叉树的本题遍历只能是“后序遍历”,因为我们要通过来判断两个子树的内侧节点和外侧节点是否相等。给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
2025-06-30 10:57:56
504
原创 代码随想录Day13-二叉树
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。最后一棵 不是平衡二叉树,因为它的左右两个子树的高度差的绝对值。前序遍历(中左右);中序遍历(左中右);它的左、右子树也分别为二叉排序树。1、确定递归函数的参数和返回值。,则左子树上所有结点的值均。,则右子树上所有结点的值均。3、确定单层递归的逻辑。
2025-06-27 10:10:15
446
原创 代码随想录Day11
给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。因为在k个k个的遍历数字到队列中的时候,每次遍历会pop一个和push一个,所以在pop的时候是。,所以将k个中的最大值放在front处可以保证pop出的就是最大值,依次遍历,最后就可以得到最大值的数组。,可以理解为二叉树中的后序遍历,本题可以采用栈来做,根据上述例子21+3*来看,可以将该字符串从。输入: ["2", "1", "+", "3", " * "]的思想,将k个数字放入队列中,并且保证该k个数字中。
2025-06-26 14:07:44
303
原创 代码随想录Day10
解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。进行了相同字符串删除操作后,定义一个空字符串,将栈中的字符依次弹出,但此时弹出字符后的顺序相反,所以还需要进行一下字符串。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。stIn为进入的栈,stOut为出去的栈。
2025-06-25 17:55:45
628
原创 代码随想录Day09
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。思路:本题是反转倒数k个字符,并且将反转后的k个字符移到字符串前面,所以可以先反转整个字符串,反转后,再反转前k个字符,最后反转后面的字符。上述例子-10-1010在冲突的字符前面一个字符a,a处的为1,将1+1=2,所以找下标为2的字符b。-10-1010(将数组整体减一)(2)前后缀不相同,需要注意的是,遇见冲突,
2025-06-25 16:10:46
524
原创 代码随想录day08
首先统计字符中的数字数量,1个数字转变为1个number,例如,字符串 "a5b" 的长度为3,转变之后number" 之后的字符串为 "anumberb" 长度为 8。所以一个数字转变需要5个长度大小,这里采取数组填充的方式,为了减少复杂度,采取从后向前填充,先识别数字有多少个,然后按照一个数字5个长度增加数组空间,再从后向前进行填充。本题思路:首先字符串要进行每2k个数的遍历,然后看该循环中的字符数长度进行判断,如果小于k个就全部进行反转,如果小于2k但是大于等于k个就反转前k个。
2025-06-19 12:02:53
387
原创 代码随想录day07
所以可以先统计magazine中出现的字符数,统计出现的字符频次,遍历ransomNote字符,如果再record中出现了,就减去该字母的频次,如果record数组中的有小于0的数说明该字母是magazine中的但是ransomNote中没有,所以直接return false。nums[i]进行去重处理,这里采用nums[i]==nums[i-1]的方式去重,如果用nums[i]==nums[i+1],对于nums[-1,-1,2]这种情况直接就contiune,所以就错过了这个结果集。
2025-06-19 00:57:14
729
原创 代码随想录Day06
交集不重复,就可以考虑用unordered_set(unordered_set为无序集合,数值不可以重复,可以更改数值,底层实现红黑树),通过将nums1映射为哈希表,在将数组2遍历,查询该哈希表中是否有该元素,有的话就将结果存储到result表中。思路:这道题可以看出来有两个部分都需要查找,首先是数组的值需要查找,再是数组的下标也需要查找,所以这道题可以使用map,map中有key和value,但是因为本题最后返回的是数组下标,所以可以将数组元素放入key中,数组下标放入value中。
2025-06-17 00:12:49
669
原创 代码随想录Day4
删除倒数第n个结点需要定位到该节点的前一个结点,改变前一个结点的指向,可达成删除操作,所以slow指针要定位到第n个结点的前一个结点,所以可设置fast指针比slow指针快。的思路(因为是删除倒数的第n个结点,如果是正数第n个就不需要了),定义一个。个结点,当fast走到null时,slow走到第n个结点的前一个结点。,通过快慢指针定位到想删除结点的位置。
2025-06-16 15:28:48
391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅