
李沐动手学深度学习
文章平均质量分 94
醒了就刷牙
这个作者很懒,什么都没留下…
展开
-
69 BERT预训练_BERT代码_by《李沐:动手学深度学习v2》pytorch版
当输入为单个文本时,BERT输入序列是特殊类别词元“<cls>”、文本序列的标记、以及特殊分隔词元“<sep>”的连结。当输入为文本对时,BERT输入序列是“<cls>”、第一个文本序列的标记、“<sep>”、第二个文本序列标记、以及“<sep>”的连结。因此,多层感知机分类器的输出层(的前向推断给出了输入文本的每个词元和插入的特殊标记“<cls>”及“<seq>”的BERT表示。将一个句子或两个句子作为输入,然后返回BERT输入序列的标记及其相应的片段索引,也就是个我一两个句子使其变成bert的输入。原创 2024-10-05 19:42:28 · 1090 阅读 · 0 评论 -
69 BERT预训练_by《李沐:动手学深度学习v2》pytorch版
这个用来表示句子开头,表示这个句子结束,后面是下一个句子,所以可以输入多个句子。之前Transformer是比如说把一个句子和他的翻译当作数据和标签进行训练,在encoder中放入数据,decoder中放入标签。想研发相似于CV方面的,基于微调的NLP模型,除了输出层,其他层的参数我是可以复用的,我可以挪到其他任务中去。Bert从结构上来讲就是一个只保留了编码器的Transformer,创新很简单,后面在输入和。新的任务只需要增加一个简单的输出层。预训练的模型抽取了足够多的信息。原创 2024-10-03 19:50:39 · 759 阅读 · 0 评论 -
64 注意力机制_by《李沐:动手学深度学习v2》pytorch版
中的带参数的注意力汇聚],使用小批量矩阵乘法,# queries和attention_weights的形状为(查询个数,“键-值”对个数)# values的形状为(查询个数,“键-值”对个数)原创 2024-10-01 10:31:50 · 1052 阅读 · 0 评论 -
68 Transformer_by《李沐:动手学深度学习v2》pytorch版
(sequence-to-sequence model),在训练阶段,其输出序列的所有位置(时间步)的词元都是已知的;然而,在预测阶段,其输出序列的词元是逐个生成的。因为用同一个多层感知机对所有位置上的输入进行变换,所以当所有这些位置的输入相同时,它们的输出也是相同的。之间的固定位置编码,因此通过学习得到的输入的嵌入表示的值需要先乘以嵌入维度的平方根进行重新缩放,然后再与位置编码相加。基于位置的前馈网络对序列中的所有位置的表示进行变换时使用的是同一个多层感知机(MLP),这就是称前馈网络是。原创 2024-09-30 21:51:42 · 1402 阅读 · 0 评论 -
67 自注意力_by《李沐:动手学深度学习v2》pytorch版
自注意力池化层将x当做key,value,query来对序列抽取特征完全并行、最长序列为1、但对长序列计算复杂度高位置编码在输入中加入位置信息,使得自注意力能够记忆位置信息。原创 2024-09-30 14:25:20 · 1105 阅读 · 0 评论 -
66 使用注意力机制的seq2seq_by《李沐:动手学深度学习v2》pytorch版
Seq2seq中通过隐状态在编码器和解码器中传递信息注意力机制可以根据解码器RNN的输出来匹配到合适的编码器RNN的输出来更有效的传递信息下面看看如何定义Bahdanau注意力,实现循环神经网络编码器-解码器。其实,我们只需重新定义解码器即可。为了更方便地显示学习的注意力权重,以下类定义了[带有注意力机制解码器的基本接口#@save"""带有注意力机制解码器的基本接口"""@propertydef attention_weights(self): #画图所需代码。原创 2024-09-30 12:50:55 · 1039 阅读 · 0 评论 -
65 注意力分数_by《李沐:动手学深度学习v2》pytorch版
注意力分数是query和key的相似度,注意力权重是分数的softmax结果。两种常见的分数计算:第一种:将query和key合并起来进入一个单输出单隐藏层的MLP、第二种:直接将query和key做内积。原创 2024-09-30 10:49:18 · 1251 阅读 · 0 评论 -
63.5 注意力提示_by《李沐:动手学深度学习v2》pytorch版
幸运的是,人类的祖先已经从经验(也称为数据)中认识到“并非感官的所有输入都是一样的”。自主性的与非自主性的注意力提示解释了人类的注意力的方式,下面来看看如何通过这两种注意力提示,用神经网络来设计注意力机制的框架,首先,考虑一个相对简单的状况,即只使用非自主性提示。实际上,注意力汇聚得到的是加权平均的总和值,其中权重是在给定的查询和不同的键之间计算得出的。原创 2024-09-29 20:07:00 · 1524 阅读 · 0 评论 -
60 序列到序列学习(seq2seq)_by《李沐:动手学深度学习v2》pytorch版
Seq2seq从一个句子生成另一个句子编码器和解码器都是RNN将编码器最后时间隐状态来初始解码器隐状态来完成信息传递常用BLEU来衡量生成序列的好坏。原创 2024-09-29 19:33:11 · 1628 阅读 · 0 评论 -
59 双向循环神经网络_by《李沐:动手学深度学习v2》pytorch版
双向循环神经网络通过反向更新的隐藏层来利用方向时间信息通常用来对序列抽取特征、填空,而不是预测未来提出的,。让我们看看这样一个网络的细节。对于任意时间步ttt,给定一个小批量的输入数据Xt∈Rn×dXt∈Rn×d(样本数nnn,每个示例中的输入数ddd),并且令隐藏层激活函数为ϕ\phiϕ。在双向架构中,我们设该时间步的前向和反向隐状态分别为H→t∈Rn×hHt∈Rn×h和H←t∈Rn×。原创 2024-09-28 17:10:10 · 1116 阅读 · 0 评论 -
58 深层循环神经网络_by《李沐:动手学深度学习v2》pytorch版
为了避免过拟合,通常需要在模型设计中平衡隐藏层的宽度与训练数据的数量和质量。可以考虑使用正则化方法、减少隐藏单元数量、增加训练数据量或使用更复杂的模型架构(如 LSTM 或 GRU)来提高模型的泛化能力。其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。只要交互类型建模具有足够的灵活性,这就不是一个大问题。然而,对一个单层来说,这可能具有相当的挑战性。之前在线性模型中,我们通过添加更多的层来解决这个问题。原创 2024-09-28 16:41:36 · 1456 阅读 · 0 评论 -
57 长短期记忆网络(LSTM)_by《李沐:动手学深度学习v2》pytorch版
在[初始化函数]中,长短期记忆网络的隐状态需要返回一个额外的记忆元,单元的值为0,形状为(批量大小,隐藏单元数)。因此,我们得到以下的状态初始化。实际模型]的定义与我们前面讨论的一样:提供三个门和一个额外的记忆元。请注意,只有隐状态才会传递到输出层,而记忆元CtCt不直接参与输出计算。outputs.append(Y) #Y的shape是(批量大小,词表长度)只有这里输出了批量大小的预测,之后才能用来计算损失。原创 2024-09-28 14:51:09 · 1397 阅读 · 0 评论 -
56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版
现在我们将[定义隐状态的初始化函数。与从零实现RNN中定义的函数一样,此函数返回一个形状为(批量大小,隐藏单元个数)的张量,张量的值全部为零。现在我们准备[定义门控循环单元模型],模型的架构与基本的循环神经网络单元是相同的,只是权重更新公式更为复杂。下面代码中的与torch.mm作用相同。H, = stateH_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h) # 注意这之前的H都是上一时刻,这时的H才是这一时刻的H。原创 2024-09-28 12:59:43 · 927 阅读 · 0 评论 -
unsqueeze函数、isinstance函数、_VF模块、squeeze函数
isinstance是一个非常有用的函数,能够帮助我们判断对象的类型。它支持多种类型的检查,包括自定义类、内置类型和子类。通过使用isinstance,可以编写更稳健和灵活的代码,尤其是在处理多态和动态类型时。希望这个解释和示例能帮助你更好地理解isinstance函数的用法!如果你有任何其他问题,欢迎随时问我。_VF是一个内部模块,用于高效实现 RNN 的前向传播操作。这段代码通过选择不同的 RNN 函数,处理输入数据并计算输出,确保在不同的模式和输入条件下正确执行。原创 2024-09-27 15:27:34 · 1093 阅读 · 0 评论 -
55 循环神经网络 RNN 的实现_简洁实现_by《李沐:动手学深度学习v2》pytorch版
高级API提供了循环神经网络的实现。我们构造一个具有256个隐藏单元的单隐藏层的循环神经网络层rnn_layer。事实上,我们还没有讨论多层循环神经网络的意义(这将在之后博客中中介绍)。现在仅需要将多层理解为一层循环神经网络的输出被用作下一层循环神经网络的输入就足够了。我们(使用张量来初始化隐状态),它的形状是(隐藏层数,批量大小,隐藏单元数)。state = torch.zeros((1, batch_size, num_hiddens))#这里的1先记住,以后会知道为什么框架是这样的。原创 2024-09-26 19:28:50 · 825 阅读 · 0 评论 -
55 循环神经网络RNN的实现_by《李沐:动手学深度学习v2》pytorch版
循环神经网络模型通过。原创 2024-09-23 19:47:24 · 1694 阅读 · 0 评论 -
54 循环神经网络RNN_by《李沐:动手学深度学习v2》pytorch版
语言模型说白了,是个分类模型,我的输出是对下一个词的预测,假设一共有m个词,也就是m个类的分类问题,对于分类问题,当然可以使用交叉熵来做。个时间步上的梯度,将会在反向传播过程中产生长度为。通过这样做,我们知道梯度范数永远不会超过。输入“你”,更新隐变量,输出“好”。较大时,它可能导致数值不稳定。一个流行的替代方案是通过将梯度。的序列,我们在迭代中计算这。,并且更新后的梯度完全与。投影回给定半径(例如。原创 2024-09-23 16:29:07 · 795 阅读 · 0 评论 -
53 语言模型(和之后用来训练语言模型的数据集)_by《李沐:动手学深度学习v2》pytorch版
语言模型估计文本序列的联合概率使用统计方法时常采用n元语法。原创 2024-09-22 11:20:30 · 1272 阅读 · 0 评论 -
52 文本预处理_by《李沐:动手学深度学习v2》pytorch版
例如:第一章 Python 机器学习入门之pandas的使用。原创 2024-09-21 16:13:33 · 1372 阅读 · 0 评论 -
51 序列模型_by《李沐:动手学深度学习v2》pytorch版
时序模型中,当前数据跟之前观察到的数据相关自回归模型使用自身过去数据来预测未来马尔科夫模型假设当前只跟最近少数数据相关,从而简化模型潜变量模型使用潜变量来概括历史信息。原创 2024-09-21 15:36:40 · 1369 阅读 · 0 评论 -
61 编码器-解码器架构_by《李沐:动手学深度学习v2》pytorch版
正如我们在上一节中所讨论的, 机器翻译是序列转换模型的一个核心问题, 其输入和输出都是长度可变的序列。 为了处理这种类型的输入和输出, 我们可以设计一个包含两个主要组件的架构: 第一个组件是一个编码器(encoder): 它接受一个长度可变的序列作为输入, 并将其转换为具有固定形状的编码状态。 第二个组件是解码器(decoder): 它将固定形状的编码状态映射到长度可变的序列。 这被称为编码器-解码器(encoder-decoder)架构, 如下图所示。我们以英语到法语的机器翻译为例: 给定一个英文的输原创 2024-09-20 17:31:24 · 1698 阅读 · 0 评论 -
60 机器翻译与数据集_by《李沐:动手学深度学习v2》pytorch版
语言模型是自然语言处理的关键, 而机器翻译是语言模型最成功的基准测试。因为机器翻译正是将输入序列转换成输出序列的序列转换模型(sequence transduction)的核心问题。序列转换模型在各类现代人工智能应用中发挥着至关重要的作用, 为此,本节将介绍机器翻译问题及其后文需要使用的数据集。机器翻译(machine translation)指的是将序列从一种语言自动翻译成另一种语言。原创 2024-09-20 16:26:49 · 1298 阅读 · 0 评论