- 博客(110)
- 收藏
- 关注
原创 Tiny Universe - Llama3架构
dataclassmultiple_of: int = 256 # MLP层隐层维度的指定计算参数(见FFN层): 这是一个整数类型的属性,表示模型的维度,默认值为4096。在深度学习模型中,维度通常指的是输入、输出或中间层的特征数量。: 表示模型中堆叠的层数,默认为6层。: 表示多头注意力机制中头的数量,默认为6。在Transformer模型中,多头注意力可以并行处理信息,提高模型的表达能力。: 这是一个可选的整数类型属性,表示分组的数量,默认为3。
2024-09-19 20:16:23
1406
原创 随机森林的知识博客:原理与应用
随机森林作为一种强大的集成学习算法,具有优异的分类和回归能力。其通过集成多棵决策树并引入随机性,成功解决了单棵决策树容易过拟合的问题。随机森林不仅能够处理复杂的高维数据,还可以用于特征选择和异常检测等任务。虽然训练过程可能相对耗时,但其鲁棒性和强大的泛化能力使得它在实际应用中非常受欢迎。在使用随机森林时,合理的参数调优能够进一步提升模型性能,使其在各种实际任务中表现更加出色。无论是分类任务还是回归任务,随机森林都是一个非常实用且有效的选择。
2024-09-06 16:23:38
1024
原创 损失函数的知识博客:原理、类型与应用
损失函数在机器学习和深度学习中扮演着至关重要的角色,直接影响模型的学习效果和预测性能。本文介绍了损失函数的基本原理、常见类型以及在回归和分类任务中的具体应用。掌握损失函数的选择和使用技巧,能够帮助开发者更好地训练模型,并最终提高模型的准确性与鲁棒性。在实践中,结合任务的具体需求和数据特征选择合适的损失函数,是优化模型效果的关键一步。
2024-09-06 16:07:04
1698
原创 监督学习、半监督学习和无监督学习
学习范式数据需求应用场景代表算法优缺点监督学习大量标注数据分类、回归问题线性回归、决策树、神经网络预测准确,但依赖大量标注数据半监督学习少量标注数据和大量未标注数据文本分类、图像识别一致性正则化、伪标签、GAN减少标注数据需求,未标注数据质量影响大无监督学习未标注数据聚类、异常检测、降维K-Means、PCA、自编码器无需标注数据,效果难评估在实际应用中,选择哪种学习范式取决于任务的具体需求和数据集的特性。
2024-09-06 15:55:10
1212
原创 2024.9.6 刷题总结
98.验证二叉搜索树,这道题考察的是递归,二叉搜索树的定义是,左子树节点比当前节点值小,右子树节点比当前节点值大。230.二叉搜索树中第k小的元素,这道题考察的是二叉搜索树的性质,因为节点的左子树只包含小于当前节点的数,右子树只包含大于当前节点的树,所以二叉搜索树的中序遍历是按照升序来遍历的,我们只需要做一次中序遍历找到第k个元素即可。24.两两交换链表中的节点,这道题考察的是链表和递归,递归的终止条件是链表中没有节点或者链表中只有一个节点,若链表中有两个以上节点,那么就按顺序两两交换顺序。
2024-09-06 11:58:17
210
原创 2024.9.5 刷题总结
108.将有序数组转换为平衡二叉搜索树,中序遍历,总是选择中间位置左边的数字作为根节点,以升序序列中的任一个元素作为根节点,以该元素左边的升序序列构建左子树,右边的升序序列构建为右子树,这样就能得到二叉搜索树了。3174.清除数字,这是一道简单的模拟题,我们只需要用一个空字符串来模拟即可,如果遇到字母就放入新字符串,如果遇到数字就弹出一个。
2024-09-05 16:04:41
441
原创 2024.9.4 刷题总结
110.平衡二叉树,平衡二叉树的定义是树的所有节点的左右子树的深度相差不超过1,所以判断的标准是要求出节点的高度。最后主函数中需要判断的条件是左右子树的深度是否最大深度相差不超过1并且左右子树是否都满足条件,这个即是递归的条件。LCR 145.判断对称二叉树,需要写一个判断两个子树是否对称的函数,如果两个节点其中一个为空,那就不是,两个都为空,就是。否则就返回两对子节点的检查情况。2860.让所有学生保持开心的分组方法数,这是一道考察数学和排序相关的题目,当选择学生人数固定的时候,选择方案是唯一的。
2024-09-04 15:55:31
205
原创 2024.9.3 刷题总结
快慢指针即慢指针一次走一步,快指针一次走两步,当它们相遇的时候,证明有环,但是有个细节,即快指针每次走的时候,需要先判断下一步是否为空。73.矩阵置零,这道题是一道矩阵有关标记和哈希的题目,题目的意思是当遇到一个元素为0时,我们需要把整行整列都变为0,如果在遍历的时候每个单独操作会造成非常复杂的计算量,所以我们的方法是先进行标记,先遍历一次矩阵,用两个数组分别代表行和列,将出现0的位置先进行标记,然后进行第二次遍历矩阵,每次判断相应的行和列数组是否标记过,如果标记了,那么就把它变成0.
2024-09-03 15:25:23
354
原创 2024.9.2 刷题总结
2024.考试的最大困扰度,这道题考察的是滑动窗口的知识,我们不断向前枚举右端点,遇到不符合的字符就转换次数+1,当超过了k值之后就不断向前移动左端点,直到小于等于k,然后每次右端点向前都需要更新最大值,注意一共有tf两种情况,所以应该取两者中的最大值。快速排序:参考分治的思想,每次找一个基准值,这里找的是arr[low],每次从右往左找到第一个比基准值小的数,判断下标是否符合条件,是就交换;再从左往右找到第一个比基准值大的数,判断下标,符合就交换,否则不变;当i和j重合时,代表基准值不用再移动了。
2024-09-02 15:58:54
247
原创 2024.9.1 刷题总结
128.最长连续序列,这道题考察的是哈希表和数组的相关知识。当无法继续遍历的时候,更新答案的最长序列。56.合并区间,这道题考察的是数组和排序的相关知识,根据题意,我们需要将区间重合的数组先合并再插入到答案数组中,那么我们自然想到,当数组中的元素左端点越小时,越有可能被合并,所以我们先按左端点排序。然后遍历每一个时间区间,第一个直接加入,然后对于后续每一个我们需要判断答案数组最后一个区间的右端点是否大于等于新区间的左端点,如果符合那么就更新答案数组的最后一个元素的右端点为新元素的右端点,代表区间被延长了。
2024-09-01 11:32:16
276
原创 2024.8.31 刷题总结
LCR 194.二叉树的最近公共祖先,这道题是一个经典的递归题目,一共需要考虑如下几种情况,当前节点是空节点或者当前节点是p或q,则返回当前节点,若左右子树都找到,则返回当前节点,若只有左子树找到,则返回递归左子树的结果,若只有右子树找到,则返回递归右子树的结果,若左右子树都没有找到,则返回空节点。3127.构造相同颜色的正方形,这是一道简单的模拟题,我们只需要遍历所有2*2的矩阵,统计里面某个字符的个数,如果不等于2,那么就证明可以符合题目的条件,因为1,0,3,4,均可以通过不改变和改变一次来实现。
2024-08-31 14:36:12
299
原创 2024.8.24 刷题总结
239.滑动窗口的最大值,这道题考察的是滑动窗口和队列的知识,刚开始看错题目了,求成了滑动窗口可能出现的最大值和出现最大值的滑动窗口内容,但题目要求的是滑动窗口每次滑动中内部的最大元素。300.最长递增子序列,这是一道非常经典的动态规划题目,一样是从前往后遍历更新状态,我们需要用一个数组来维护以每个元素结尾的最长上升子序列,结果最小是1,双循环遍历每个元素,如果在每个元素前找到比自己小的,那么就更新一次答案,最终答案为以每个元素为结尾的最长递增子序列中的最大值。
2024-08-24 15:15:45
202
原创 2024.8.23 刷题总结
279.完全平方数,这道题考察的是动态规划的知识,依题意得,我们需要找到最少的平方数之和使得等于要求的数,我们首先会想到用离该数最近的完全平方数来考虑,但是这样不方便枚举和遍历,所以我们采用动态规划的一般方法,先处理前面的数,再遍历到后面的数。198.打家劫舍,这道题是一道简单的入门动态规划问题,根据题目意思,我们不能取数组中相邻的元素然后还必须满足总结果最大,所以我们可以维护一个数组,用来保存在数组每个位置之前能取到的最大值,然后最后输出第n-1个元素的值即为答案。
2024-08-23 16:54:51
795
2
原创 2024.7.29 刷题总结
682.棒球比赛,这道题是一道简单的模拟题,用栈模拟题中的四个操作就可以了,操作一是将x加到列表末尾,操作二是将列表的后两项之和加到列表末尾,操作三是把列表最后一项的两倍加到列表末尾,操作四是去掉列表最后一项。LCR 100.三角形最小路径和,这道题是一道入门的动态规划题目,当然也可以用dfs来求解。我们只需要用一个数组来记录到达每个点需要的最小路径,然后再把最后一行取一个最小值即可。
2024-07-29 19:31:24
252
1
原创 2024.7.28 刷题总结
首先定义一个转化为大根堆的函数,每次从最后一个非叶节点开始向上遍历,判断当前节点和左右节点的大小关系来建立大根堆,然后再更新当前索引,即递归的思想,每次以当前节点为根节点往下交换节点,maxHeapify函数的作用是将当前节点作为根节点实现大根堆,buildMaxHeap函数的作用是建立初始大根堆,从数组大小的一半作为索引开始往上建立。先建立初始大根堆,然后循环n-k+1次,每次先把堆顶和堆尾节点交换,然后数组大小减一,代表把堆尾元素删除,即原来的堆顶元素,然后继续建立新的大根堆,直到取出第k大的元素。
2024-07-28 18:49:24
608
原创 Linux 下的项目开发:从入门到精通
Debian 系统提供了一套完整的工具和流程来创建、管理和分发软件包。通过遵循 Debian 的最佳实践和使用其提供的工具,你可以确保你的软件包易于安装、升级和维护。Linux 系统提供了一个强大且灵活的开发环境。通过本文,你应该对如何在 Linux 下进行项目开发有了基本的了解。从环境搭建到代码管理,再到最终的部署,每一步都是确保项目成功的关键。
2024-07-19 22:46:19
2874
原创 2024.7.19 刷题总结
543.二叉树的直径,这道题是一道考察递归的题目,按照树的一般算法,维护一个最大直径答案值,定义一个递归函数,开头是递归返回条件,即当前节点为空节点就返回0,否则分别往左和往右递归,维护每个节点的最大深度为左右最大深度中的最大值再加一,答案用左右节点的最大深度的和再加一来维护.124.二叉树中的最大路径和,这是一道考察递归的题目,从根节点出发,类似于dfs,分别递归寻找左右节点的路径和,直到叶子节点再返回,从叶子节点往上更新以每个节点为根节点的最大路径,直到返回根节点,用一个变量来维护答案.
2024-07-19 22:36:19
428
原创 深入QLora大模型微调:原理与实践
由于QLora是一个虚构的模型,我将提供一个基于真实存在的预训练模型BERT的微调示例,使用Python和Hugging Face的Transformers库。QLora模型的微调是一个涉及多个步骤的复杂过程,但通过合理的策略和细致的调整,可以显著提升模型在特定任务上的表现。它通过减少自注意力层中的Query数量,降低了模型的参数量和计算成本,同时通过特殊的权重分配策略,保持了对关键信息的捕捉能力。根据任务的特点选择合适的损失函数,如交叉熵损失、序列损失等,以指导模型在微调过程中的学习方向。
2024-07-16 19:00:05
1618
原创 2024.7.16 刷题总结
2956.找到两个数组公共的公共元素,这道题是一个哈希表的简单题目,根据题意,我们需要统计的是每个数组在另外一个数组中也存在的元素个数,所以我们建立两个哈希表,分别统计两个数组中出现的元素的情况,数据范围很小,这里选用数组模拟哈希表或者用STL的哈希表都可以完成,统计完之后再分别遍历两个数组找出答案即可。
2024-07-16 15:55:34
361
原创 BERT架构的深入解析
BERT通过其双向Transformer编码器和预训练策略,在各种NLP任务中取得了卓越的性能。其成功不仅展示了预训练模型的强大能力,也为NLP研究和应用带来了新的方向和思路。随着研究的深入和技术的进步,BERT及其变种将在更多的应用场景中展现出其强大的潜力和价值。
2024-07-15 15:54:14
773
原创 Transformer架构的深入解析
Transformer架构主要由编码器(Encoder)和解码器(Decoder)两部分组成,每部分又包含多个相同的层。每一层包含两大核心组件:多头自注意力机制(Multi-Head Self-Attention)和前馈神经网络(Feed-Forward Neural Network)。Transformer架构通过其创新的自注意力机制和并行计算能力,解决了传统RNN和LSTM模型在处理长序列时的瓶颈,成为了现代NLP领域的主流方法。其在各种NLP任务中的优异表现,充分展示了其强大的能力和广泛的应用前景。
2024-07-15 12:29:20
946
原创 自然语言处理技术的发展过程
自然语言处理技术的发展历程展示了从规则驱动到统计模型,再到深度学习和预训练模型的演变过程。每一个阶段的技术进步都为NLP领域带来了新的可能性,使得计算机能够更加智能地理解和处理人类语言。未来,随着计算能力的进一步提升和新技术的不断涌现,NLP技术必将在更多应用场景中展现出其强大的潜力和价值。
2024-07-15 12:24:00
1269
原创 2024.7.15 刷题总结
对于一个节点,只要左节点往下走或者右节点往下走有一条路是成功的,那么就返回true,所以递归的思路就明确了,还需要再写出结束条件,如果节点为空,那么就返回false,如果节点左右节点均为空,则需要判断当前节点值和剩下的目标值是否相等,递归的时候我们就是用当前root的左右节点两种情况来判断,而且目标值每次需要减去当前节点的值,这个是关键。可以考虑迭代的思想,用一个队列来存储需要判断的节点,刚开始存储的是根节点的左右节点,每次从队列中取出两个节点,然后先判断特殊情况,空指针和值不相等的问题。
2024-07-15 12:12:31
178
原创 面向对象设计(OOD)实践:探索组合、聚合和关联
面向对象设计(OOD)不仅是一种编程范式,更是一种思考问题和设计解决方案的方式。在OOD中,关系是对象之间交互的核心。本文将通过具体例子,深入探讨组合(Composition)、聚合(Aggregation)和关联(Association)这三种常见的对象关系模式。
2024-07-14 15:45:20
336
原创 C++中的多态:虚函数与纯虚函数详解
在C++中,虚函数是在基类中使用virtual关键字声明的函数。当基类指针或引用指向派生类对象时,调用虚函数将执行派生类中的版本。public:public:void display() override { // 使用 override 确保函数被正确重写纯虚函数在基类中使用virtual关键字和= 0来声明。public:// 纯虚函数。
2024-07-14 15:36:20
551
原创 递归算法详解及其应用
递归是指在函数的定义中调用函数自身。基准情况:不再调用自身的情况,直接返回结果。递归情况:将问题分解为更小的子问题,并调用自身来解决这些子问题。
2024-07-14 13:58:03
920
原创 2024.7.14 刷题总结
807.保持城市天际线,这是一道简单的矩阵和数学问题,题目的意思是增加那些高度较小的建筑,不影响四面的视图,所以我们很快就能明白限制的因素是该建筑所在行和所在列的最大值,取它们两者之间的更小值减去原始高度即为所求。刚开始看到这道题时,还以为需要预处理出四个面的结果,但是仔细一想发现,左右和上下的视图是相同的,所以只需要处理两个面的结果就可以,即每行和每列的最大值。226.翻转二叉树,这道题是一道典型的递归题目,我们需要先翻转叶子节点,然后再整体把整个左右子树调换,所以需要从最下层开始翻转,符合递归的条件。
2024-07-14 13:51:33
261
原创 C++中的封装和抽象
抽象是指通过暴露对象的必要特性和行为,而隐藏其具体实现细节。抽象帮助我们专注于对象的高层次特征,而忽略低层次的实现细节。在C++中,抽象通常通过抽象类和接口来实现。抽象的优点简化复杂性:通过抽象,只关注对象的行为,而不关心其具体实现。提高可维护性:通过定义清晰的接口,降低代码的耦合度。代码复用:抽象可以定义通用的接口,使不同的类可以复用相同的代码。
2024-07-13 20:36:33
507
原创 C++中动态内存分配:深入理解与实践
在C++中,内存分配分为栈内存分配和堆内存分配。栈内存分配是自动的,由编译器管理,而堆内存分配需要程序员手动管理。动态内存分配主要涉及堆内存。自定义内存分配器需要实现allocate和deallocate方法,并与public:// 实现内存分配逻辑// 实现内存释放逻辑。
2024-07-13 16:20:40
455
原创 Pandas使用手册大全
Pandas 是一个功能强大的数据分析库,通过本文介绍的基本用法和具体例子,相信你已经初步掌握了 Pandas 的使用方法。实际应用中,Pandas 提供了更多高级功能,可以进一步探索和学习,以便更高效地处理和分析数据。
2024-07-13 12:42:05
1024
原创 2024.7.13 刷题总结
94.二叉树的中序遍历,这道题是一个简单的栈辅助遍历的题目,我们首先需要初始化一个答案数组和栈来辅助。然后根据中序遍历的意思,只要当前节点不为空或者栈不为空,就说明还有节点未遍历,我们就一直将root节点移动到它的左节点,直到变为空指针,这时候我们就可以将栈顶弹出,将该值加入答案数组,然后访问右节点,这样就实现了永远优先访问左节点,直到为空指针再访问中节点,再访问右节点,而当出现右节点也为空指针时,就会继续弹出栈顶的节点,继续向上遍历。栈里面只存放了所有左节点,而右节点需要手动遍历。
2024-07-13 12:32:08
360
原创 计算机网络高频面试题
从输入URL到展现页面的全过程:TCP三次握手以及四次挥手的流程:为什么需要三次握手以及四次挥手:TCP与UDP在网络协议中的哪一层,他们之间有什么区别?:HTTP与HTTPS有哪些区别?:简述DDOS攻击原理,如何防范它?:简述HTTP1.0,1.1,2.0的主要区别:简述TCP的TIME_WAIT和CLOSE_WAIT:TCP的TIME_WAIT和CLOSE_WAIT:TCP中常见的拥塞控制算法:BGP协议和OSPF协议的区别:TCP的keepalive了解吗?以及它和HTTP的keepalive的区别
2024-07-12 10:42:00
1608
原创 2024.7.12 刷题总结
457.环形数组是否存在循环,这道题是一个考察快慢指针的题目,将数组中的n个点看作图中的n个节点,再将i+nums[i]看作每个节点延伸出去的单向边,所以现在题目变成判断有无环路的题目,这时我们就可以遍历数组,初始化快慢指针,快指针在慢指针前面一步,然后每次快指针走两步,慢指针走一步,直到他们相遇。还需要标记一个已经走的步数,最后判断答案时,步数需要大于1才是有效的答案,并且在走的过程中,需要设置步数大于一定值自动退出,否则会出现runtime error.然后我们再遍历数组加上答案即可。
2024-07-12 10:35:23
409
原创 2024.7.11 刷题总结
206.反转链表,本题考察的是链表的基本性质,在反转操作时,我们可以看作是将当前节点的后继节点改为前驱节点,遍历一次即可完成。这个操作就相当于先确定最后一个节点,然后依次往前确定节点。然后从最后一个元素开始遍历,直到出现非下降元素就终止,每遍历一个元素,就找出最大的前缀满足连接处的大小关系,然后再叠加答案。160.相交链表,这道题用的是哈希表来存储链表的节点,我们先遍历A链表,将所有节点加入哈希表中,然后再遍历链表B,如果在哈希表中找到了对应值,那么就返回该值,否则返回空指针。
2024-07-11 18:56:16
698
原创 2024.7.10 刷题总结
题目的意思是要统计有多少个子数组能满足移除后剩下的元素为严格递增的关系,刚开始没考虑到移除的元素要是连续的,所以出错了。首先,我们可以先统计一下数组的最大前缀, 如果整个数组都是递增的,那么我们就不用再算其他情况了;对于这种两边都需要枚举讨论的题目,我们可以只枚举一边,然后判断另外一边的数值,所以我们选择枚举后缀,只要后缀满足往前递减的关系,我们就进行计算,我们先让最大递增前缀往回,直到连接处满足关系,然后此时答案就是最大前缀的下标加2,剩下的任务就是模仿这个过程完成循环,直到后缀不满足情况就结束。
2024-07-11 18:05:55
1186
原创 Actor-Critic 算法
Actor-Critic 算法通过结合策略梯度和价值评估,提供了一种高效、稳定的策略优化方法。它在处理复杂环境和大规模问题时表现出色。理解和实现 Actor-Critic 算法不仅能够帮助我们在强化学习领域中取得更好的成绩,还能为解决实际问题提供有力工具。
2024-07-10 13:54:30
643
原创 强化学习中的蒙特卡洛算法和时序差分算法
蒙特卡洛方法和时序差分方法各有优缺点,在不同的应用场景下可以互为补充。蒙特卡洛方法通过完全序列的回报估计状态值,适用于离线处理;时序差分方法通过每一步的即时回报和估计值更新状态值,适合在线学习和实时更新。在实际应用中,可以根据具体需求选择合适的方法,甚至可以结合使用,以达到最优的价值估计效果。
2024-07-10 13:46:51
1121
原创 了解PPO算法(Proximal Policy Optimization)
PPO 算法通过引入裁剪机制和信赖域约束,限制了策略更新的幅度,提高了训练过程的稳定性和效率。其简单而有效的特性使其成为目前强化学习中最流行的算法之一。通过理解并实现 PPO 算法,可以更好地应用于各种强化学习任务,提升模型的性能。%5Cepsilon。
2024-07-09 20:54:09
1771
原创 了解Adam和RMSprop优化算法
RMSprop和Adam都是深度学习中常用的优化算法,各自有其优势。RMSprop通过调整每个参数的学习率来处理非平稳目标,而Adam则结合了动量和均方根的思想,使得它在处理稀疏梯度和非平稳目标时表现优异。理解并灵活运用这些优化算法,将有助于提高模型训练的效率和效果。
2024-07-09 20:43:53
1467
原创 强化学习中的Double DQN、Dueling DQN和PER DQN算法详解及实战
Double DQN、Dueling DQN和优先经验回放DQN(PER DQN)都是对原始DQN的改进,各有其优点和适用场景。Double DQN通过减少过高估计提高了算法的稳定性;Dueling DQN通过分离状态价值和优势函数更好地评估状态;PER DQN通过优先采样重要经验加速了学习过程。这些改进算法在不同的应用场景下,可以选择合适的算法来提升强化学习的效果。
2024-07-07 15:35:10
1544
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人