自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 【长短期记忆网络LSTM】自用笔记整理

LSTM通过引入细胞状态和三个智能门控机制,有效解决了RNN的梯度消失问题。细胞状态作为核心记忆通道,通过加法操作保留长期依赖信息。遗忘门动态决定保留或丢弃旧记忆,输入门筛选并写入新信息,两者协同更新细胞状态。这种双轨制设计让关键信息能无损传递,使模型能够学习长距离依赖关系。LSTM的门控机制通过Sigmoid和Tanh函数实现信息筛选,其参数在训练中自动学习最优记忆策略,大幅提升了序列建模能力。

2026-02-26 17:40:12 1365

原创 【RNN循环神经网络详解】自用学习笔记整理

摘要:RNN通过引入循环机制解决了传统神经网络无法处理序列数据的痛点。其核心是隐藏状态的动态更新,结合当前输入和上一时刻的记忆进行计算。然而,RNN在训练中面临梯度消失和爆炸问题,根源在于沿时间反向传播时的连乘效应。当梯度在长序列中传递时,会因权重矩阵和激活函数导数的连乘而指数级衰减或膨胀,导致模型无法学习长期依赖或崩溃。这一缺陷催生了LSTM等改进结构的诞生。

2026-02-26 17:17:36 626

原创 【word2vec模型】两种模型结构CBOW和Skip-gram的具体过程

摘要: Word Embedding(词嵌入)将词语映射为稠密向量,解决了传统One-Hot编码的稀疏性问题,并能捕捉语义关系(如“国王-男+女≈女王”)。Word2Vec通过CBOW(用上下文预测中心词)和Skip-gram(用中心词预测上下文)两种模型训练词向量。CBOW通过平均上下文词向量生成目标词预测,而Skip-gram则相反。训练时采用负采样(将多分类简化为少量二分类,提升效率)或层级Softmax(通过哈夫曼树将复杂度从O(V)降至O(log V))优化计算。负采样侧重随机调整词间距离,层级S

2026-02-14 20:39:05 1128

原创 【双分支深度神经网络】

本文介绍了一个基于PyTorch的双分支神经网络模型,用于处理高维输入的二分类任务。该模型包含两个不同结构的MLP分支:左分支采用2层带BN和Dropout的轻量结构,右分支使用5层无正则化的深层网络。两个分支的输出通过点积运算融合,并加入全局偏置后输出分类结果。测试代码展示了模型从32个10000维样本输入到二分类输出的完整流程,包括损失计算。这种架构特别适合推荐系统等需要特征交叉的场景。

2026-02-12 10:41:47 1231

原创 【神经网络中的Dropout随机失活问题】

我们可以把神经元传递给下一层的值想象成声音的大小。训练时 (Training)假设 (50% 失活)。虽然有 100 个神经元,但平均每次只有50 个在“呐喊”(输出非零值),另外 50 个是静音的。下一层的神经元已经习惯了听这50 个人合唱的音量。测试时 (Testing)Dropout 关闭,100 个神经元全部“火力全开”。这时候是100 个人同时呐喊。是什么:一种在训练中随机关闭神经元的正则化技术。为了解决什么:防止过拟合 (Overfitting)

2026-02-07 17:41:31 861

原创 【人工智能中的“智能”是如何实现的】从逻辑回归到神经网络(自用笔记整理)

本文探讨了从线性回归到逻辑回归再到神经网络的发展过程。首先指出线性回归适用于连续数值预测,但在分类问题中会面临预测值无意义和异常点敏感等问题。逻辑回归通过引入Sigmoid函数将线性输出压缩到0-1区间,解决二分类概率建模问题。进一步地,神经网络由多个逻辑回归单元组成,通过添加非线性激活函数(如ReLU)和多层结构,能够自动构建高阶特征。最后介绍了多分类问题的Softmax解决方案和神经网络训练的核心——反向传播算法。整个过程展示了机器学习模型从简单到复杂的演进逻辑。

2026-02-03 16:31:18 2050

原创 【人工智能中的“智能”是如何实现的】线性回归完整过程详解

简单来说,线性回归是用来寻找两个或多个变量之间线性关系的方法。意味着我们假设变量之间的关系可以用一条直线(在更高维度是平面)来表示。在统计学中,这指的是预测一个具体的连续数值。想象你在准备一场数学考试。你理解了公式的逻辑。无论题目怎么变,你都能解出来。你把练习册上的每一道题及其答案都背了下来,甚至连题目最后的那个错别字都记得清清楚楚。当你考试遇到练习册原题时,你能拿满分;但只要题目稍微变动一点点,你就完全不会做了。

2026-01-31 17:49:31 1173

原创 【Problem:41. 缺失的第一个正数】从哈希表到原地哈希优化

题目要求找出未排序整数数组中缺失的最小正整数,要求时间复杂度为O(n)且空间复杂度为O(1)。 解法一使用哈希表存储所有数字,然后从1开始遍历查找缺失的最小正整数。虽然时间复杂度为O(n),但空间复杂度为O(n),不符合要求。 解法二采用原地哈希,通过交换将数字i放置到下标i-1的位置。遍历数组后,再次检查第一个不符合nums[i]=i+1的位置即为答案。若全部符合,则返回n+1。该方法满足时间O(n)和空间O(1)的要求。 示例: [1,2,0] → 3 [3,4,-1,1] → 2 [7,8,9,11,

2026-01-30 16:21:16 1062

原创 【力扣Problem:238. 除了自身以外数组的乘积】前后缀乘法 + 双指针优化

摘要:本文介绍了LeetCode 238题"除自身以外数组的乘积"的两种解法。第一种方法使用前后缀乘积数组,分别计算每个元素左右两侧的乘积,时间复杂度O(N),空间复杂度O(N)。第二种方法通过双指针优化空间复杂度至O(1),在两次遍历或单次循环中完成计算,利用变量动态维护左右乘积。文章提供了C++代码实现,并分析了时间/空间复杂度。题目要求不使用除法且在O(N)时间内完成,这两种方法均满足要求,其中双指针解法更为高效。

2026-01-29 17:15:10 732

原创 【力扣Problem:189. 轮转数组】2010年408代码题

题目要求将数组元素向右轮转k个位置。提供两种解法:1)朴素方案使用额外数组,时间复杂度O(n),空间复杂度O(n);2)进阶方案通过三次原地翻转实现,先翻转前n-k和后k部分,再整体翻转,处理k>n的情况需取模。该解法源自2010年408考题,时间O(n),空间O(1)。代码展示了翻转函数的实现和k的边界处理,是更优的原地算法解决方案。

2026-01-28 12:09:25 818

原创 【力扣Problem:56. 合并区间】ACwing模板题(排序)

题目要求合并所有重叠的区间,返回不重叠的区间数组。解题思路是先对区间按左端点排序,然后遍历区间进行合并。核心步骤包括排序、维护当前合并区间,以及处理重叠和非重叠情况。时间复杂度为O(N log N),主要由排序决定。代码实现中通过维护左右边界来动态合并区间,最后处理剩余区间。该方法高效且易于理解,适用于大规模数据。

2026-01-26 16:42:32 921

原创 【力扣Problem:53. 最大子数组和】当前缀和遇上动态规划,原来它们是同一个解法?

本文介绍了解决最大子数组和问题的两种主要方法。第一种是基于前缀和的优化解法,通过维护最小前缀和来快速计算最大子数组和,时间复杂度从O(N²)优化到O(N)。第二种是动态规划解法,定义状态dp[i]表示以nums[i]结尾的最大子数组和,通过状态转移方程求解。文章指出这两种方法在代码实现上具有一致性,体现了不同思路最终可以殊途同归的算法之美。两种方法的时间复杂度均为O(N),是解决该问题的经典高效解法。

2026-01-25 16:41:42 1220

原创 【力扣Problem:76. 最小覆盖子串】滑动窗口的统一化写法

本文介绍了LeetCode 76题"最小覆盖子串"的滑动窗口解法。该问题要求在字符串s中找到一个最短子串,使其包含字符串t的所有字符。文章详细阐述了滑动窗口的三个关键问题:何时扩大窗口(寻找可行解)、何时缩小窗口(优化解)以及如何维护数据状态(使用哈希表记录字符计数)。通过双指针遍历字符串,维护窗口内字符的统计信息,并仅在必要时截取子串以保证效率。最终算法时间复杂度为O(M+N),适用于大规模输入。文章还推荐了其他滑动窗口问题的类似解法供参考学习。

2026-01-24 16:19:38 1181

原创 【力扣Problem: 239. 滑动窗口最大值】从multiset到大根堆与单调队列,三种方法处理滑动窗口最大值

摘要: 题目要求在滑动窗口问题中找出每个窗口的最大值。给出三种解法: multiset法:利用有序集合维护窗口元素,通过rbegin()获取最大值。时间复杂度O(N log N),因集合操作有log开销。 优先队列法:使用大顶堆存储元素及其下标,延时删除窗口外的元素。堆顶即为当前最大值,均摊时间复杂度O(N log N)。 单调队列法:维护递减的双端队列,队首始终是窗口最大值。新元素入队时移除较小元素,保证队列单调性。最优解,时间复杂度O(N)。 关键点:解法三通过"备胎理论"(新较大元

2026-01-23 20:02:33 1103

原创 【力扣Problem:560. 和为 K 的子数组】前缀和 + 哈希表处理

本文介绍了解决“和为K的子数组”问题的两种方法。第一种暴力解法使用前缀和数组,通过双重循环统计满足条件的子数组,时间复杂度为O(n²)。第二种优化方法结合前缀和与哈希表,利用哈希表存储前缀和及其出现次数,通过查找sum-k来快速统计结果,时间复杂度优化到O(n)。关键点在于初始化mp[0]=1以处理从头开始的子数组,并通过固定j找sum[j]-k的思路确保正确性。文章强调了对数学表达式进行移项分析的重要性,并推荐参考两数之和等类似问题的解法思路。

2026-01-22 17:01:31 873

原创 【438. 找到字符串中所有字母异位词】两种写法写滑动窗口

本文讨论了LeetCode 438题"找到字符串中所有字母异位词"的两种解法: 滑动窗口+排序比较法: 维护固定长度的滑动窗口,窗口大小等于p的长度 使用map记录窗口和p的字符频次 通过比较排序后的频次表判断异位词 时间复杂度O(n*mlogm),空间复杂度O(m) 滑动窗口+哈希表+匹配计数优化: 使用双指针维护窗口 引入cnt变量动态记录匹配字符数 当cnt等于p的字符种类数时即为异位词 时间复杂度优化至O(n),空间复杂度O(m) 两种方法都采用滑动窗口思想,第二种方法通过匹配计

2026-01-21 19:03:16 843

原创 【力扣Problem:3. 无重复字符的最长子串】滑动窗口移动策略详解

摘要: 本文解析了LeetCode第3题「无重复字符的最长子串」,提出滑动窗口(双指针)解法。通过哈希表记录窗口内字符,动态调整左右指针以维护无重复子串。给出两种实现:基于unordered_set(逐步收缩左边界)和unordered_map(频次统计快速缩窗),均达到O(n)时间复杂度。附代码示例及双指针相关题目推荐,适合初学者理解滑动窗口核心思想。

2026-01-20 18:44:34 738

原创 【力扣Problem:42.接雨水】包含两种暴力解和两种优化思路

本文介绍了解决接雨水问题的四种方法:1)暴力按行解法(超时);2)按列遍历法(超时);3)动态规划预处理法(O(n)时间空间);4)双指针优化法(O(n)时间,O(1)空间)。核心思路是计算每列积水高度取决于两侧最大高度的较小值,通过预处理或双指针优化避免重复计算。最优解法使用双指针,在遍历时动态维护左右最大高度,实现高效的空间优化。

2026-01-19 20:46:22 1158

原创 【力扣Problem:15.三数之和】从暴力解到双指针详解

本文探讨了求解三数之和问题的两种方法。暴力解法通过三重循环枚举所有可能组合,结合排序和set去重或跳过重复元素来避免重复结果,但时间复杂度O(n³)导致超时。优化解法采用排序+双指针策略,将问题转化为两数之和,通过固定一个数后使用左右指针寻找另外两个数,时间复杂度降为O(n²)。关键点在于排序后跳过重复元素和正确移动指针的策略。两种方法都强调了处理重复三元组的重要性,双指针法在效率上更优,是解决此类问题的推荐方案。

2026-01-18 17:15:18 1297

原创 LeetCode hot100 Problem:11.盛最多水的容器(从暴力解到双指针,一步步带着思考)

本文介绍了LeetCode上盛水最多容器问题的两种解法。题目要求在给定高度数组中找出两条线,使其与x轴构成的容器能容纳最多水。暴力解法使用双重循环计算所有可能的容器面积,时间复杂度为O(n²),会超时。更优的双指针解法从数组两端向中间移动,每次移动较短边的指针以寻找可能的更大容量,时间复杂度优化至O(n)。该方法运用贪心思想,通过局部最优决策得到全局最优解。文章包含详细代码示例和复杂度分析,适合算法学习者参考。

2026-01-17 17:30:27 741

原创 力扣Problem283. 移动零(从小白思路到双指针)

本文介绍了两种将数组中的零移动到末尾的解法。第一种解法使用临时数组,通过三次遍历实现:第一次遍历收集非零元素并统计零的个数,第二次遍历在末尾补零,第三次遍历将结果复制回原数组。第二种解法采用快慢指针优化空间复杂度,通过一次遍历将非零元素前移,最后在剩余位置补零。两种方法都保持了非零元素的相对顺序,但第二种解法实现了原地操作,无需额外空间。

2026-01-17 13:18:05 87

原创 力扣LeetCode Hot100:Problem128:最长连续序列(三种方法,清晰易懂)

本文讨论了LeetCode 128题"最长连续序列"的三种解法。解法一使用排序加双指针(O(nlogn)),但需处理重复元素问题;解法二通过set去重并排序后使用双指针(O(nlogn));解法三利用哈希表(unordered_set)实现O(n)时间复杂度,通过判断序列起点并扩展序列长度。三种方法都能通过测试,但解法三最优,符合题目要求的线性时间复杂度。文章包含详细代码实现和复杂度分析,适合算法学习者参考。

2026-01-16 16:26:39 897

原创 力扣LeetCode Hot100:Problem:49.字母异位词分组

题目要求将字母异位词分组。字母异位词指字母相同但顺序不同的字符串。解题思路是利用排序后的字符串作为哈希表的键,原始字符串作为值进行分组。具体步骤:遍历字符串数组,对每个字符串排序后作为key存入哈希表,最后将哈希表的值转为结果列表。该方法时间复杂度O(nklogk),其中n是字符串数量,k是字符串最大长度。代码实现简洁,通过排序和哈希表高效完成分组任务。

2026-01-16 10:08:52 340

原创 力扣LeetCode Hot100:Problem:1.两数之和

摘要:本文介绍了LeetCode"两数之和"问题的两种解法。暴力解法使用双重循环遍历数组,时间复杂度O(n²),空间复杂度O(1)。最优解采用哈希表(unordered_map)存储已遍历元素,在O(1)时间内查找目标差值,时间复杂度优化至O(n),空间复杂度O(n)。关键点在于边遍历边添加元素到哈希表,避免重复使用同一元素。代码展示了两种实现方式,其中哈希表解法通过存储元素值和索引,实现了高效查找。

2026-01-15 15:50:36 402

原创 C++ STL 关联容器速查笔记(map / set / unordered / multi)

本文精炼总结C++ STL关联容器核心要点:带unordered为哈希表(无序,O(1)均摊查找),带multi允重复键;map存键值对(pair<const K, V>),set仅存键(元素即键);关键陷阱包括set元素不可直接修改(需erase+insert)、map["key"]可能意外插入新元素、遍历时删除需用it = container.erase(it)。

2026-01-15 11:52:37 255

原创 【考研复试项目】深入理解Anaconda与虚拟环境:AI项目环境配置

本文讲解了AI项目环境配置的关键步骤,阐明了Anaconda通过Conda工具高效管理虚拟环境的核心作用,并详细演示了从安装Anaconda、创建Python 3.9.19虚拟环境,到使用国内镜像源安装TensorFlow、PyTorch(匹配CUDA版本)等依赖的全过程,最终实现一个隔离、稳定且支持GPU加速的开发环境,为后续AI项目奠定可靠基础。

2026-01-14 18:23:32 666

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除