- 博客(21)
- 收藏
- 关注
原创 LSTM网络从浅入深原理级讲解与Pytorch逐行讲解实现
我们将收集到的索引列表转换回中文字符串,并打印出来与真实标签进行对比。由于我们的数据集和模型都非常小,翻译结果可能不完美,希望大家可以从中学习到LSTM的核心思想。
2025-08-01 15:42:12
849
1
原创 循环神经网络RNN原理精讲,详细举例!
在了解RNN是什么之前,我们先要明白它解决了什么问题。传统的神经网络,比如我们常见的前馈神经网络(Feedforward Neural Network)或者卷积神经网络(CNN),它们有一个共同的特点:输入之间是相互独立的。你给它一张猫的图片,它判断是猫。再给它一张狗的图片,它判断是狗。这两个判断过程互不影响。前一次的输入和输出,对后一次的判断没有任何帮助。这在很多场景下是没问题的。"今天天气很好,我心情也很___。" 空格里很可能填“好”或“不错”。这个推断依赖于前面的“天气很好”。
2025-07-31 20:03:07
828
1
原创 Vision Transformer(ViT)模型实例化PyTorch逐行实现
为了让大家更好地理解,我们将从零开始,逐步构建 ViT 的各个核心组件,并最终将它们组合成一个完整的模型。我们会以一个在CIFAR-10数据集上应用的实例来贯穿整个讲解过程。
2025-07-31 18:20:24
804
1
原创 Vision Transformer (ViT) 详解:当Transformer“看见”世界,计算机视觉的范式革命
长久以来,卷积神经网络(CNN)凭借其精心设计的归纳偏置(inductive biases),无可争议地统治着计算机视觉领域。然而,一篇名为《An Image is Worth 16x16 Words》的论文彻底改变了这一格局,它所提出的 Vision Transformer (ViT) 模型,成功地将源于自然语言处理(NLP)领域的 Transformer 架构直接应用于图像识别,并取得了惊人的成果。
2025-07-30 17:26:38
967
原创 实例教学FPN原理与PANet,Pytorch逐行精讲实现
1. 模拟一个骨干网络 (Backbone) 真实的骨干网络会是ResNet等,这里我们用几个简单的卷积层来模拟,它的作用是输入一张图片,输出我们在实例中提到的 C3, C4, C5 特征图。卷积,一方面将翻倍的通道数降回原来的维度,另一方面更重要的是,通过可学习的权重,对来自不同源头的信息进行智能的、加权的融合,从而产生一个全新的、信息更丰富的特征图。这“相加”的一步,就是特征融合的核心,它意味着C4的特征图,每一个点都融入了来自C5的更高级的语义信息。这张图片里有一辆很大的卡车,还有一个很小的行⼈。
2025-07-30 16:59:23
723
原创 深入浅出讲解Yolo原理与实例教学:不止于“看一眼”,彻底搞懂YOLO为什么这么强
通过 FPN (自顶向下) + PANet (自底向上) 这一来一回的“双向融合”,Neck最终产出的特征图,完美地做到了“鱼与熊掌兼得”——既知道是什么(语义),又知道在哪里(定位)。这对于检测不同大小的物体,尤其是小物体,至关重要。
2025-07-30 16:25:58
1081
原创 随笔——“处于这个时代,我们个人发展该何去何从?”
在这个时代,各种各样的信息充斥着我们的周围,获取信息的难度远低于过去任何一个时间段,但是碎片化的注意力,信息过多造成的容量爆炸,导致我们对于未来和人生规划是十分迷茫的,我们不仅看不到未来,也看不到我们自己。笔者想基于最近的感悟与学习到的东西写一篇关于我们该如何面对个人困境与时代困境的文章。
2025-07-24 21:22:34
926
2
原创 Transformer内部数据流动:从输入到输出的维度变换,超详细!!!
我们假设一个极简的翻译任务,并设定一套小巧的参数,方便观察。2123100。
2025-07-24 14:38:03
579
原创 Transformer Masked loss原理精讲及其PyTorch逐行实现
定义交叉熵损失函数# 关键:告诉损失函数,所有标签值为 PADDING_IDX 的位置都被忽略这个参数就是实现 Masked Loss 的方法。当我们把(这里是0) 传给它,在内部计算时,会自动跳过所有目标标签是0的位置。第三步:调整张量形状和,其中N是样本总数,C是类别数。而我们现在的logits和target都是二维的批次数据,需要调整一下。# CrossEntropyLoss 需要的输入形状是 (N, C)# N 是总的需要计算的元素数量, C是类别数 (即词汇表大小)
2025-07-24 14:11:38
1189
1
原创 Transformer模型Decoder原理精讲及其PyTorch逐行实现
最后输出概率最高的词,比如“我”,被选为第一个生成的词。: 每个词的向量都吸收了来自整个句子的上下文信息,变成了一个新的、更丰富的向量。编码器的唯一目标是:接收一个完整的输入序列(例如,一个英文句子),然后为这个序列生成一个包含丰富上下文信息的、高质量的向量表示(我们称之为。这个包含了位置信息的向量矩阵,现在要进入由 N 层(比如6层)完全相同的编码器层(Encoder Layer)组成的堆栈。它是一个静态的、只读的“知识库”,为接下来解码器的生成工作做好了万全的准备。它的任务是在给定源序列的编码表示 (
2025-07-23 21:01:50
1032
原创 Transformer的Encoder模型进阶原理讲解与从零开始Pytorch代码逐行实现
昨天更新了Transformer的模型的原理,今天我将对它的两个模块Encoder和Decoder分别展开进阶原理精讲与代码的逐行实现;我们先开始一堂 Encoder 的进阶课。这次我们会深入到设计的细节和数学原理,以及从0开始编写这个模块
2025-07-23 17:52:37
731
3
原创 Transformer新手级讲解,超简单详细!!!
输入处理"I", "love", "AI" 这三个词分别被转换成词向量。给每个词向量加上它们对应的位置编码,让模型知道它们的顺序。编码器工作 (Encoder)混合了位置信息的词向量进入编码器层。在编码器内部,数据流经多头自注意力层(理解句子内部关系)。然后流经一个前馈神经网络(Feed-Forward Network,可以理解为对信息进行进一步加工和提炼)。这个过程会重复 N 次(比如6次),每一层都会让模型对原文的理解更加深刻。
2025-07-22 20:30:38
913
1
原创 现代AI的架构之父:从浅入深讲解Transformer架构,非常详细,附带数据图!
摘要:Transformer通过自注意力机制解决了传统RNN序列处理的低效和长距离依赖问题。其核心架构包含编码器和解码器:编码器将输入序列转换为富含上下文信息的向量,解码器基于编码输出和已生成内容预测下一个词。关键组件包括:1)位置编码保留词序信息;2)多头自注意力同时捕捉不同维度的词间关系;3)残差连接和层归一化稳定训练;4)掩码机制防止解码器窥探未来信息。该架构实现了全局上下文理解与高效并行计算,成为自然语言处理的里程碑模型。
2025-07-22 19:25:47
1187
3
原创 ConvMixer模型:纯卷积为何能够媲美Transformer架构?深入浅出原理与Pytorch代码逐行讲解实现
ConvMixer 是一个简洁的视觉模型,仅使用标准的卷积层,达到与基于自注意力机制的视觉 Transformer(ViT)相似的性能,由此证明纯卷积架构依然很强大。和。制作一杯混合果汁。我们不会把整个水果直接扔进搅拌机,而是先切成小块(然后,搅拌机有两个关键动作:第一,刀片高速旋转,让每种水果块自己先碎掉(第二,整个杯子里的碎块因为搅动而互相融合在一起(ConvMixer 的设计与此相似。
2025-07-20 22:32:40
1041
3
原创 深度学习中的性能加速利器:深入浅出学习算子融合(Operator Fusion)
算子融合(Operator Fusion)就是将这些连续的、可以合并的算子(BN,RELU)在计算层面上融合成一个“超级算子”。在这个融合的Kernel中,conv_result 和 bn_result 都是存在于GPU核心旁边的极快存储中的临时变量,它们未被写入到位于显卡PCB板上的全局显存颗粒中。:指的是一个基本的操作,比如卷积(Conv2d)、批归一化(BatchNorm2d)、激活函数(ReLU)等。:中间数据在GPU芯片内部极高速的缓存中,避免了与缓慢的全局显存进行的往返交互。
2025-07-18 12:45:02
1422
1
原创 Pytorch模型训练流程(简化标准版)
需要在 __init__ 方法中定义网络的层,在 forward 方法中定义数据的前向传播逻辑。我们将通过一个具体的例子——在 CIFAR10 数据集上训练一个简单的卷积神经网络(CNN)——来详细解释每一步。我们会迭代(epoch)多次数据集,在每个epoch 中,将会分批次(batch)地处理所有数据。根据损失值,autograd 会自动计算模型中所有需要梯度的参数的梯度。PyTorch 的梯度是累加的,所以每轮训练前必须清零。选择一个优化算法来根据损失函数的梯度更新模型的参数(权重)。
2025-07-17 18:59:42
595
原创 硬核推导与深度讲解:梯度消失与爆炸
如果我们初始化的权重 wi 的绝对值很大(例如 > 4),即使与 Sigmoid 导数(最大0.25)相乘,其结果 σ′(zi)wi 仍然可能是一个大于1的数。在反向传播时,根据加法法则,来自更深层的梯度 ∂H(x)∂J 可以无衰减地直接传递给 x(因为 ∂x∂H(x)=1),保证了梯度至少能以原始大小的一部分传递回去。BN能够将每一层激活函数的输入值拉回到一个比较敏感的区域(例如,对于Sigmoid,是接近0的区域),在这个区域里梯度较大,从而避免梯度过小。梯度越小,更新幅度越小。
2025-07-17 18:52:17
873
原创 进阶科普:优化器与 Dropout的工作方式以及为什么有用
这就是人工智能最核心的东西,掌握了这个,我们就知道了AI究竟是怎样学习的那么好的,同时,为了防止模型学习不到东西或只学习到遇到的数据,学习不到数据集外的数据(过拟合),我们还需要一个有效的训练技巧——这座山脉就是我们的损失函数(Loss Function),你在山上的位置就是模型当前的参数(Weights & Biases),而山谷的最低点就是我们追求的最小损失值。它指的是模型在训练数据上表现得太好,以至于它把训练数据中的噪声和偶然特征都“背”了下来,但在新的、未见过的数据(测试数据)上表现很差。
2025-07-17 18:47:28
840
原创 PyTorch数据操作:源码级详解Dataset 与DataLoader
PyTorch 的 torchvision.datasets、torchaudio.datasets 和 torchtext.datasets 已经为我们准备好了许多常用数据集(如 MNIST, CIFAR10, ImageNet 等),可以直接使用,无需自己编写 Dataset 类。DataLoader 是一个迭代器,它在 Dataset 的基础上构建,为我们提供批量、打乱和并行加载数据的能力。训练时需要随机性来提高泛化能力,而评估时需要一个固定的顺序来保证结果的可复现性。
2025-07-17 18:42:50
908
原创 PyTorch核心容器:nn.Sequential与nn.ModuleList深度解析
理解它们的区别与适用场景,是构建我们所需要的模型的关键。在一个复杂的模型中,完全可以使用nn.ModuleList 来管理主要的模块块(Blocks),而每一个独立的块内部则可以使用 nn.Sequential 来定义。nn.ModuleList 表现得像一个Python的列表(list),但它有一个至关重要的特性:它能正确地向PyTorch注册内部的所有模块。这个对比清晰地表明:普通列表中的模块对PyTorch是“隐形”的,它们的参数不会被收集,因此在训练时也无法被优化器更新。
2025-07-17 18:36:18
662
原创 PyTorch nn.Module 常用API讲解与源码解析
例如,当加载一个预训练模型的权重,但替换了模型的最后一层时,strict=False可以让你只加载匹配的骨干网络部分的权重,而忽略不匹配的分类层权重。参数(Parameter) 是一种特殊的张量(Tensor),当它被赋值给一个模块的属性时,它会自动被添加到参数列表中。__call__ 方法除了调用你定义的forward() 之外,还执行了一系列额外的、非常重要的操作,其中最主要的是钩子(Hooks)系统的执行。管理模型的状态:nn.Module 最重要的功能是追踪和管理模型的所有状态。
2025-07-17 18:29:33
1050
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人