- 博客(401)
- 收藏
- 关注
原创 BERT预训练模型(Encoder-Only架构)
MLM任务:随机遮住句子里少量单词,逼着模型同时看句子前后所有内容,猜被遮住的词,以此训练模型双向理解语言。
2026-10-11 17:08:16
289
原创 HuggingFace介绍
HuggingFace的社区非常活跃,包括Meta、Google、DeepSeek、Ali Qwen等再内的超过5000家组织机构都在为HuggingFace开源社区贡献代码、数据集和模型,这种开放的文化和协作精神使得HuggingFace成为了深度学习领域的GitHub。HuggingFace是一家技术公司,他拥有一个著名的开源社区,维护了几乎所有Transformer架构的开源模型和一系列强大的开源库和工具,这些开源工作极大地简化了深度学习模型的开发、训练和部署过程。
2026-10-06 10:45:41
198
原创 Transformer Encoder Block
Transformer架构于2017年在"Attention Is All You Need"这篇文章中提出,是Google Brain的工作。Transformer网络由多个Transformer Block堆叠而成。原文提出的是一个Encoder-Decoder架构,如下图所示。Encoder和Decoder分别由多个相同结构的Block(但参数是不同的)组成,分别称为Encoder Block和Decoder Block。先分别介绍Encoder Block和Decoder Block的结构。
2026-10-02 08:36:34
180
原创 自注意力机制
Transformer的网络架构几乎统治了深度学习的所有应用领域。本模块讲授Transformer的网络结构,以及各种基于Transformer的预训练模型,包括BERT (Encoder-Only架构的代表模型)、T5 (Encoder-Decoder架构的代表模型)和GPT (Decoder-Only架构的代表模型)。
2026-09-27 15:22:16
244
原创 高级RNNCell
在RNN中,RNNCell是指在每个时间步,基于当前的输入和上一个时间步的隐藏层输出来计算。传统RNNCell的计算公式为:可见,对任何时间步,传统RNNCell用同一种方式将中所包含的信息传递给,但在实际应用中,序列中各个时刻的输入数据,它们所起到的作用可能会非常不同。序列中重要的信息 (元素) 应该更多地传递下去,而不重要的或者是无关的信息则不应该传递。例如,我们考虑一个比较极端的学习任务,时间序列中的每个元素是一个数值,需要对序列进行二分类,分类标签实际是基于与是否相等来设定的。
2026-09-23 16:11:00
194
原创 双向RNN
南京市长江大桥”这个短语的理解存在歧义,在没有看到后边的上下文时,无法对其进行正确的分词。双向RNN使得模型可以同时看到前边和后边的信息。的信息,但从语义理解的角度来看,有时只看前边时间步的信息是不够的。如果不加特别说明,RNN的计算一般是从左到右的,即第t步的特征计算只能“看到”前向RNN和后向RNN是两套独立的RNN,它们的参数是不同的。上图显示的是利用双向RNN的示意图。在后向RNN的计算中,合并在一起,作为整个序列的表征。此能够看到序列里全部的信息。在前向RNN的计算中,包含了全部的序列信息。
2026-09-15 08:54:22
156
原创 BPTT
梯度传播的步数(即偏导相乘的次数)越大,梯度消失或梯度爆炸出现的概率越大。在RNN反向传播的过程中,如果发现梯度的幅度超过一定的阈值,则需要进行截断 (最大取该阈值),防止梯度爆炸的发生。(复习:梯度消失和梯度爆炸)当我们解决的问题为序列标注时 (图b),每个时间步的输出都会用于计算损失函数,因此梯度会有更多来源,在此就不进行详细推导了。同时,随着时间步的增加,序列中靠前位置的输入特征,它们的影响也会随着时间步逐渐衰减,造成信息的遗忘,影响模型序列建模的效果。会作为整个序列的表征 (即特征),
2026-09-13 20:26:09
186
原创 RNN(Recurrent Neural Network-循环神经网络)
RNN在每个时间步的计算公式为:tanh 相比 sigmoid,,但原始 RNN 依然扛不住很长的序列,后面才出来 LSTM/GRU 解决这个问题。RNN网络的计算顺序为:(1) 基于计算(2) 基于计算......(4) 基于计算思考:如果我们将输入序列的顺序打乱,那么的计算结果会发生变化吗?——会!
2026-09-10 09:19:15
107
原创 序列学习任务
循环神经网络 (Recurrent Neural Network, 简称RNN)是一个时间序列模型。RNN保存有内部状态,能够记忆之前时间步的信息,并将其用于当前时间步的计算。本模块介绍RNN的网络结构,包括单向和双向RNN,以及高级RNN Cell (LSTM、GRU),并演示如何利用RNN完成序列分类 (文本分类) 和序列标注任务。
2026-09-10 07:55:43
105
原创 FastText 文本分类
FastText是一个Facebook的开源项目(用C代码做了高效实现),可以高效地训练词嵌入向量和文本分类模型。FastText进行文本分类的模型结构和CBOW相似,句子中每个词 (或NGram)的词嵌入特征进行平均之后,在输入到一个线性分类器中进行多分类。1、对句子中每个词(或ngram)的嵌入特征进行平均:2、由线性分类器输出后验概率:由于FastText使用平均词嵌入向量来表示句子,忽略了词序特征,因此引入了Word NGram特征。
2026-09-03 09:11:44
186
原创 词嵌入模型
接下来讲解如何通过学习来获得词嵌入特征。词嵌入模型可以看作是最早期的“预训练“模型,通过设计无需额外标注的学习任务,在海量的文本数据中学习语义特征。而在得到了好的语义特征表示之后,下游的各种NLP任务只需要相对少量的训练数据,就可以得到理想的结果。重点介绍Word2Vec这种词嵌入技术,它的优势是轻量、训练速度快,在一些文本分类任务上效果也不错。
2026-08-08 21:00:20
222
原创 主成分分析PCA
主成分分析 (Principle Component Analysis,简称为PCA) 是一种去除特征之间相关性,以及进行特征压缩的方法。其中每一行代表一个样本,包含d个特征。是一个对称矩阵,所以肯定可以进行特征值分解,最多可以分解出n个。通过PCA方法进行的特征变换,会使得特征重建的平方误差。变换到另外一个空间,变换后的特征向量为。其中,Z是绛维后的数据矩阵,矩阵维度为。正交的充要条件是两者的点积为0。,即特征空间的维度被压缩了。,特征变换的方向只有1个,即。之后,在该方向上的数据方差。
2026-08-03 04:15:12
163
原创 分词问题
在自然语言处理中,文本被表示为token的序列,即。因此,NLP的第一个步骤就是将文本切分为token。token单元有多种选择:较早期的NLP算法将词作为token。由于此时模型上下文建模的能力还不够强,因此希望token中包含相对完整的词义,这样有利于提高模型的效果。当以BERT为代表的预训练语言模型出现之后,模型上下文建模能力发生了跨越式的提升,token也随之变为了更小的单元。对于中文,将汉字作为token单元;对于英文,将子词 (subword) 作为token单元。
2026-07-26 10:19:28
174
原创 高级优化器
神经网络的基础优化算法是随机梯度下降 (SGD)。SGD是一种迭代型的算法,在训练开始的时候,模型参数被随机初始化,记为,然后依次更新为。在每个迭代时刻t,随机从训练集中选择一小批样本计算损失函数,以及参数的梯度:则参数更新的公式为:基础的SGD算法容易遇到以下问题:(1)训练被卡在不理想的梯度为0的点 (全局极小点或鞍点)。虽然随机梯度下降具有一定的逃离能力,但当微批的大小较大 (为了提高训练效率) 或者"平原"的范围较大时,训练仍然有可能被卡在不理想的优化点。
2026-07-21 22:03:11
162
原创 分类任务的指标
然而,当测试集中的不同类别先验概率相差很大时,这个指标不一定能正确反映模型的效果。例如,假设我们的分类任务是基于检查结果预测某种罕见病,而这种疾病的发病率只有万分之一,那么分类器只要将所有的样本都预测为0 (表示没有发病),就可以获得99.99%的正确率,但这样做显然是没有意义的。(Micro-average):将每个类别的TP\FP\TN\FN相加,然后再重新计算Precision、Recall和F1-Score。因此,在实际应用中,我们经常用Precision和Recall来衡量目标类的分类正确率。
2026-07-21 08:43:53
50
原创 批量归一化
为了加快神经网络训练的收敛,以及提高训练的稳定性,我们会将输入特征进行归一化,使其分布趋近于正态分布。然而,随着网络层数的增加,层次较高的网络,其输入的分布仍然有可能发生明显的变化,包括均值的偏移和方差的缩放。网络输入分布的变化可能会带来如下风险:1、落入到激活函数饱和区的数据比例过高,导致出现梯度消失的问题,参数得不到有效的优化。2、如果激活函数是ReLU,如果输入的数据幅度过大,会导致其输出过大,从而使得高一层网络的权重梯度过大。
2026-07-11 19:02:54
219
原创 池化层
在卷积神经网络中,卷积层和池化层操作一般交替进行。中间层所输出数据中的点,实际上都与输入图像中的多个像素点有关,这个输入图像的相关像素的范围叫做感受野。1. 池化层对窗口范围内的输入数据进行汇总,一般取最大值,也有取平均值的池化操作。2. 池化层窗口平移的步幅与窗口尺寸相等,即相邻的两个窗口之间没有重叠。
2026-05-17 18:24:04
233
原创 卷积层
在上边卷积运算的例子中,与卷积核相乘的数据都在图像范围内,因此输出的“图像”相较原图像是缩小的,图像边缘的特征被忽略了。Padding是将原图像进行扩展,并将扩展的部分补0,使得卷积运算的结果尺寸与原图像相同。随着卷积次数的增加,每个位 置上的特征所关联的区域也逐渐增大,因此一般也会逐步降低采样率(通过池化层)。PyTorch定义了进行卷积运算的层,即 nn.Conv2d 和 nn.Conv1d ,他们都是 nn.Module 的子类。(stride),在上边的例子里,纵向和横向的步幅均为1,即表示为。
2026-05-05 16:06:40
234
原创 图像特征
图像信息的表达依赖像素点之间的空间关系。再传递到大脑皮层的视觉区域,在那里对视网膜传来的信号提取更复杂的视觉特征 (从纹理、形状和颜色到更复杂的视觉模式),最后在颞叶区域识别出具体的对象和场景。图像数据是一个三维或者二维的张量,前两个维度分别表示图像的高度和宽度,第三个维度表示像素特征。上述滤波算子的计算过程与卷积层是一致的,区别在于卷积神经网络用自动学习的卷积核代替了人工设计的滤波算子。sobel算子是一种用于边缘检测的离散微分算子,通过两个3x3的算子来分别计算图像在垂直方向和 水平方向的边缘特征。
2026-05-05 15:39:40
370
原创 MNIST数字手写体识别
数字手写体识别是一个多分类任务,"0" ~ "9"的每个数字分别对应于一类,一共有10类。多分类问题的输出层节点数量等于类别数,输出层的非线性函数为Softmax,每个节点预测的是样本属于对应类别的条件概率。设输出层的输入为,输出为,权重矩阵为(其中第i列对应于第i个输出节点的权重向量),偏置向量为,则:设,则:👆是判别式模型。注意:由于softmax输出的是概率,因此需要保证各节点输出的总和为1.0(各个结点之间存在竞争关系),分母对应的是归一化项。
2026-04-19 17:12:31
419
原创 PyTorch编程基础
复杂类型(list、dict、tensor、numpy array)传参时,传的是「内存地址引用」,在函数里改它,外面的变量会一起变,这叫隐形副作用(side effect)。这里所说的“神经网络”,可以是单层的网络结构, 或者是多层构成的“块”,以及完整的一个神经网络模型。该流程会在每个训练批次重复执行,遍历完一整个数据集称为 1 个 epoch,通过多轮 epoch 的迭代,模型参数持续优化,损失值逐步降低,最终拟合数据的规律。紫色节点的激活函数是ReLU,黄色节点的激活函数是Softmax。
2026-04-18 23:14:30
427
原创 神经网络的基本原理
深度学习是指基于“深度”(⾄少具有两个隐藏层)神经⽹络的机器学习⽅法。在本模块将学习神经⽹络的基本原理,了解深度学习的计算环境,掌握深度学习框架PyTorch的编程技能,最后基于全连接结构的神经⽹络完成MNIST数字⼿写体识别任务。
2026-03-01 14:43:02
895
1
原创 两数之和
因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。,请你在该数组中找出。
2025-12-08 09:14:55
151
原创 pandas
用于数据处理和数据分析的 Python 库(基于 numpy)。Series 是 pandas 中一维的、可变长度的、有序的、带标签的数组。【可理解为列表和字典的结合体】Series 可以看成是一个带有标签的一维列表,可以通过标签进行索引。轴标签统称为索引。打开表头有误:原始文件:有合并单元格,修改语句:skiprows=4 跳过4行。
2024-12-30 01:24:41
1292
原创 异常与文件
在编程中,异常( Exception )是指程序在运行过程中遇到的错误或异常情况。当程序出现异常时,它会中断当前的正常执行流程,并跳转到异常处理机制中,以便进行错误处理、异常处理或程序终止等操作。with关键字用于创建一个上下文管理器,它能够确保资源在使用后被正确地清理和释放。先把 open 函数读取文件的对象转为 csv 读取文件对象。先把 open 函数写入文件的对象转为 csv 写入文件对象。通过循环读取 csv 文件当中所有的内容。通过循环写入数据到 csv 文件当中。把数据永久地保存下来。
2024-12-08 12:41:27
921
原创 数据结构
在计算机编程中,索引是用于访问数据结构(如字符串、列表、元组等)中元素的位置或标识符。索引允许我们根据元素在数据结构中的位置来检索、修改或操作它们。数据本质上分为 3 大类:数字、文本(字符串)、时间。字符串里可以写数字,可以写时间。注意,字典中的键通常是不可变的,例如字符串、数字或元组。这是因为字典内部使用哈希表来实现,而哈希表的键需要具有不可变性。而字典中的值可以是任意类型,可以是不可变类型或可变类型。
2024-11-30 22:46:46
1194
原创 结构控制
若 range 给 2 个值,是 start 和 end,若要改 step,则 range 要给 3 个值。range(start, end, step) 是左闭右开,包含左边 start,不包含右边 end。如果循环次数不固定,那么首先选 while 循环。Markdown PDF 插件:把 Markdown 格式文件转成 PDF 导出。diff:生成随机数目前是左闭右闭。break 必须在循环里用,一般放在判断里。一般不会超过 3 层嵌套循环,会有优化方案。循环条件不能是数字,数字是不可迭代分割的。
2024-11-23 16:25:06
576
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅