- 博客(158)
- 收藏
- 关注
原创 卷积的理解
卷积是数学中对两个函数进行的一种积分变换,公式如下:若为离散:核心思想是通过滑动加权求和的方式,将一个函数g的形态叠加到另一个函数f上。先从离散的情况入手:这个过程就称为卷积,中间每一个乘积的自变量加起来都是30。不管x+y等于多少,P1和P2总是交叉着相乘,这个过程可以通过旋转上面一行简化为下图所示:再变成下图:这下再进行卷积则只需要错位即可。
2025-04-18 02:10:45
224
原创 GRU传播
自己总结了一下就是,encoder第一层GRU的第一个时间步的输入,可以自定义一个全0向量作为一个输入,另一个输入是词向量,然后下一个时间步的输入就是上一个时间步的隐藏状态加这个时间步的输入,不同层之间是垂直传递的,就比如第一层某个时间步的输入,是词向量加上这层前一个时间步的隐藏状态,第二层某个时间步的输入,就是第一层同时间步的隐藏状态加这层上一个时间步的隐藏状态。
2025-03-28 16:34:47
88
原创 Transformer代码实战
位置编码self.hidden_size = config["d_model"] # 词向量维度# layers,设置padding_idx可以让pad的词向量全为0),# 位置编码,权重通过get_positional_encoding函数计算得到self.pos_embedding.weight.requires_grad_(False) # 不更新位置编码的权重self.dropout = nn.Dropout(dropout_rate) # 随机失活层# 计算位置信息。
2025-03-27 02:32:53
805
原创 Transformer原理
相对于seq2seq就是不使用循环RNN,训练的时候可以并行训练,这个时候如果把句子加的很长,数据集用的很大也可以。Transformei是一个N近N出的结构,每个Transformer单元相当于一层的RNN,接收一整个句子所有词作为输入,然对每一个词都做输出。Transformer任意两个词之间的操作距离都是1。如果设计纯粹语义关系的编码,数字化之后的数值要能体现语义关系。就比方说现在有学生和书和大象,那么可以假设学生和书这两个语义关系的向量在空间中的距离更近,而与大象更远。
2025-03-19 10:06:02
675
原创 BLEU评估指标
用于评估模型生成的句子和实际句子差异的指标,取值在[0,1],匹配度高就距离1近,反之距离0近。这个指标计算代价小,容易理解,与语言无关,与人类评价结果高度相关。BLEU主要基于(连续的n个词)的精确率,并结合**短句惩罚(Brevity Penalty, BP)**来调整长度差异的影响。公式:BP为惩罚系数。
2025-03-13 22:17:25
370
原创 seq2seq推理模块设计
这里先解释call方法,首先预处理句子,然后编码输入,把文本转化为tokenID,左端填充Padding,添加BOS和EOS标记。然后是Translator类,初始化翻译器,把模式变成eval模式,绑定源语言和目标语言的分词器。这段代码实现了一个基于序列到序列(Sequence-to-Sequence)模型的。然后执行推理生成语言的TokenID(preds)和注意力分数(scores)。首先加载模型,从文件best.ckpt加载预训练模型的参数。然后是解码输出把TokenID变为文本,最后可视化注意力。
2025-03-13 15:50:56
188
原创 Bahdanau注意力方式公式原理详解
Bahdanau注意力(又称)由Dzmitry Bahdanau等人在2015年提出,用于改进传统编码器-解码器模型在长序列任务(如机器翻译)中的性能。,使解码器能自适应地关注输入的关键部分。
2025-03-12 00:56:25
1019
原创 深度学习subword分词BPE
BPE:这是一种流行分词算法,可以有效的平衡词汇表大小和步数,分词采用共现性。步骤:1.准备足够大的训练语料2.确定期望的subword词表大小(超参)3.将单词拆分为字符序列并在末尾添加后缀"</w>",这样就可以统计单词频率。比如一开始有一个l字母,现在编程l</w>5,就说明出现了五次。停止符</w>的意义在于表示subword是词后缀。每次合并后词表可能出现三种变化:+1:表明加入合并后的新字词,同时原来在的2个子词还保留;0:如果一个字词不是单独出现的,就被消解;
2025-03-11 21:57:40
1003
原创 深度学习LSTM公式原理
普通的RNN信息不能长久传播,因为结尾较远的信息被稀释的比较厉害,所以引入LSTM,LSTM 是一种特殊的循环神经网络(RNN),专门设计用于解决传统RNN在处理与RNN相比,LSTM在计算隐藏层时,会包含当前时刻的日记信息。LSTM通过,显式控制信息的保留与遗忘,从而解决长期依赖问题。门机制是通过学习对原权重进行更新。遗忘门:决定细胞状态中哪些信息需要被丢弃(通过Sigmoid函数输出0~1之间的值)。传入门:要不要把重要的传入,决定当前输入信息中哪些需要更新到细胞状态。
2025-03-10 21:20:04
1267
原创 深度学习分词器char-level实战详解
batch_first=True,输入的数据格式是(batch_size, seq_len, embedding_dim)#这里和02的差异是没有只拿最后一个输出,而是把所有的输出都拿出来了return x, hidden #x的shape是(batch_size, seq_len, vocab_size)print("{:=^80}".format(" 一层单向 RNN "))因为字典太小,所以embedding_dim要放大。
2025-03-10 17:36:19
532
原创 深度学习双向RNN
一个隐藏层其实是有两个,一个是向前的一个是向后的。向后的就是说后面的输入更新隐藏状态后是给前面用的,这样两个隐藏层合在一起。在实现上只需要把序列反过来训练就可以了。最后两个东西合并起来进入输出层。双向RNN通过反向更新的隐藏层来利用方向时间信息。那么双向神经网络如何做推理呢?答案是推理只能用单向,双向不适合做推理。双向主要的作用是对一个句子做特征提取,理解场景。
2025-03-10 11:54:31
426
原创 深度学习RNN文本分类代码详细解读(直接可以跑)
self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional) #bidirectional是双向的#把final_hidden去除轴size为1的,和x进行比较,里边元素是否相等# 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)return x。
2025-03-10 02:24:39
930
原创 为什么文本训练需要循环神经网络
self.rnn = nn.RNN(embedding_dim, hidden_dim, num_layers=num_layers, batch_first=True, bidirectional=bidirectional) #bidirectional是双向的#把final_hidden去除轴size为1的,和x进行比较,里边元素是否相等# 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)return x。
2025-03-09 18:31:00
156
原创 文本Embedding
One-hot编码:模型没办法知道不同词之间的距离,比如男人和绅士之间的距离。所以为了让模型知道词之间的距离,Embedding:要把词变为一个向量,让我们知道词之间是不是近义词。
2025-03-08 14:49:46
458
原创 深度学习Dropout
Dropout是为了解决过拟合,当层数加深,就有可能过拟合,这个时候模型太复杂就会过拟合,那么可以让模型变得简单一点,所以就可以随机挑一些神经元,让某些神经元的输出是0,只保留部分神经元的输出给下一层,这个过程是随机的。但是在推理的时候这些神经元相当于变得透明,不再随机。丢多少的比例就是超参。
2025-03-07 11:42:01
466
原创 深度学习激活函数
1. Sigmoid当神经元的激活在接近0或1的时候会饱和,也就是说当x继续变大,函数值不会有什么改变,也就是梯度消失。并且Sigmoid函数的输出不是以0为中心的,所以输出的要么都是正数要么都是负数,这将会导致Z字型梯度下降。5.SELU是在ELU函数的基础上提出的改进方法,目的是通过对网络的初始化和激活函数进行约束来解决深层神经网络的梯度消失和梯度爆炸等问题。4.ELU在x<0时具有负指数的特性,可以避免死亡神经元问题,相对于LeakyReLU在负值计算时间更长。
2025-03-07 01:41:02
284
原创 深度学习DNN实战
Sequential容器中写输入层,在下面的add_moudle中可以添加多个隐藏层,更深层次的网络能够学到更多的特征;init_weights改变分布,也是一种调参数的方式self.transforms = transforms # 预处理层,标准化# 多加几层nn.ReLU(),# 加19层# 输出层# 初始化权重"""使用 xavier 均匀分布来初始化全连接层的权重 W"""# print('''初始化权重''')# print(m)
2025-03-06 23:16:47
332
原创 深度学习反向传播
梯度其实就是导数,除了用符号求导也可以用近似求导:然后更新w=w-学习率*导数反向传播就是链式求导向前计算:对每个节点求偏导在前向传播的时候,进行一次前向计算的时候就可以把每一条线的偏导数都知道前向传播和反向传播是交替进行的。
2025-03-06 22:12:43
357
原创 构建自己的数据集
需要将标签数据转换为张量,并调整形状以适应模型训练的要求,.float的作用在于如果原始标签是整数,那么需要显式转换为浮点数。原本y是那么多行,转换成张量后,就变成一维的了,一行多列。然后是DataLoader。验证和测试就不随机了。
2025-03-06 18:49:40
116
原创 深度学习Save Best、Early Stop
今天的大模型,在训练过程中可能会终止,但是模型其实是可以接着练的,假设GPU挂了,可以接着训练,在原有的权重上,训练其实就是更新w,如果前面对w进行了存档,那么可以从存档的比较优秀的地方进行训练。下面代码默认每500步保存权重,第二个参数是选择保存最佳权重。
2025-03-06 14:24:50
232
原创 深度学习分类回归(衣帽数据集)
1 加载数据集fashion_minst2 搭建class NeuralNetwork模型3 设置损失函数,优化器4 编写评估函数5 编写训练函数6 开始训练7 绘制损失,准确率曲线。
2025-03-05 13:08:35
940
原创 深度学习神经网络分类原理
最后一层是softmax函数,每一个输出就会变成一个0到1之间的数,也就是概率,然后他们之间的和加起来等于1,到底是哪一个分类就是看哪个神经元的这个值最大。加入现在有0.2,0.7,0.1,会把他们变成one-hot编码,比如0.2就变成010,损失就是在他们之间求损失,使用交叉熵公式。与均方误差来计算损失相比,交叉熵更能捕捉到预测变化的差异。
2025-03-04 18:59:05
439
原创 机器学习之逻辑回归
逻辑回归的前一部分是线性回归:一切是在思考假设,通过sigmoid函数把z从0到1:因为阶跃函数不可导:所以想方法用sigmoid:对于g(z),如果e等于0的时候就是0.5,等于负无穷的时候趋于0,等于正无穷的时候趋于1。现在做假设,现在认为这个值是一件事发生的概率右边就是一分类,左边就是零分类。
2025-03-04 11:06:54
303
原创 Lasso回归、Ridge岭回归
Lasso是拟合稀疏系数的线性模型。它在一些情况下是有用的,因为它倾向于使用具有较少参数值的情况,有效的减少给定解决方案所依赖变量的数量。因此,Lasso及其变体是压缩感知和领域的基础。在一定条件下,可以回复一组非零权重的精确集。其实就是在原有的损失函数加一个补偿,它通过对目标函数添加L1正则化项,可以实现特征选择和模型参数稀疏化。
2025-03-03 22:48:23
222
原创 机器学习线性回归之正则化L1和L2
L2正则化产生平滑的权值,功能是为了防止过拟合,当要求参数越小时,说明模型越简单,而模型越简单,则越趋向于平滑,从而防止过拟合。L1正则化产生稀疏的权值,自动进行特征选择,去掉些没用的特征,也就是将它们的权重设为0;正则化力度大则参数趋于0,力度小则参数变化小(高阶项权重没变)比如w1等于0,那么w1对预测结果就没有作用了。
2025-03-03 21:49:51
72
原创 机器学习线性回归之梯度下降
α就是学习率,上面整体是损失(假设只有两个w),下面是对w1求偏导,w1减去后面那个之后完成更新,这就是梯度下降,下面式子的下面改成w0(打错了)。想让w1的值往导数的方向移动,让导数变成学习力往最小值下降,这就是梯度下降。梯度下降就不是求方程了,也用于最小化损失函数。
2025-03-03 17:33:17
320
原创 机器学习线性回归之正规方程、损失函数
β就相当于第一个公式里的w,如果只有一个样本,看起来是向量,但如果样本是n个,那就是矩阵了,这个X的第一行乘以w1一直到wn,w0,乘完以后就可以得到y1到yn,y0。在机器学习中模型要保存为pkl格式的文件,它的保存和加载使用joblib.dump(),机器模型的上线就只需要把这个模型加载然后predict就行了。在回归问题中是无法看准确率的,因为预测的时候比如就一条线,那如果点不在线上面就不标准,回归预测的是一个值,回归就看均方误差。回归可以不对目标值进行标准化,若有异常值可以删样本。
2025-03-03 16:57:30
555
原创 机器学习决策树
熵:信息增益:信息增益=信息熵-条件熵前者是初始信息熵大小,后者是因为条件加入后带来的确定性增加信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度信息增益越大说明影响越大。
2025-03-01 21:02:17
359
原创 Python的两个宝藏函数dir(),help()
我们可以把pytorch当成一个工具箱,那么函数就是用来探索工具箱的道具。实操一下,首先打开pycharm,打开控制台。dir(torch)后会弹出“工具”注意第一行要在pytorch环境下。1.dir():打开,看见。2.help():说明书。
2024-12-26 11:09:10
188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人