网站蜘蛛抓取,怎么建设婚恋网站,网页制作模板简单,租房网站同学你好#xff01;本文章于2021年末编写#xff0c;获得广泛的好评#xff01;
故在2022年末对本系列进行填充与更新#xff0c;欢迎大家订阅最新的专栏#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现#xff0c;
Pytorch深度学习理论篇(2023版)目录地址…同学你好本文章于2021年末编写获得广泛的好评
故在2022年末对本系列进行填充与更新欢迎大家订阅最新的专栏获取基于Pytorch1.10版本的理论代码(2023版)实现
Pytorch深度学习·理论篇(2023版)目录地址为
CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例从可解释性的角度对深度学习的原理进行讲解与分析通过将深度学习知识与Pytorch的高效结合帮助各位新入门的读者理解深度学习各个模板之间的关系这些均是在Pytorch上实现的可以有效的结合当前各位研究生的研究方向设计人工智能的各个领域是经过一年时间打磨的精品专栏https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇 以下为2021版原文~~~~ 1 语言模型
循环神经网络模型可以对序列片段进行学习找到样本间的顺序特征。这个特性非常适合运用在语言处理方向。 1.1 语言模型简介
语言模型包括文法语言模型和统计语言模型一般指统计语言模型。
1.1.1 统计语言模型
统计语言模型是指把语言词的序列看成一个随机事件并赋予相应的概率来描述其属于某种语言集合的可能性衡量一个句子的合理性概率越高说明这个句子越像是自然句子。 统计语言模型的作用是为一个长度为m的字符串确定一个概率分布P(w1,w2,...,wm),表示其存在的可能性。其中”w1~wm”依次表示这段文本中的各个词用这种模型通过这些方法可以保留一定的词序信息获得一个词的上下文信息。
2 词表与词向量
2.1 词表与词向量 词表是指给每个单词或字编码即用数字来表示单词或字这样才能将句子输入到神经网络中进行处理。 比较简单的词表是为每个单词或字按顺序进行编号或将这种编号用one_hot编码来表示。但是这种简单的编号方式只能描述不同的单词或字)无法将单词或字的内部含义表达出来。
于是人们开始用向量来映射单词或字可以表达更多信息这种用来表示每个词的向量就称为词向量也称词嵌入)。词向量可以理解为one-hot编码的升级版它使用多维向量更好地描述词与词之间的关系。
2.2 词向量的原理与实现
词向量的最大优势在于可以更好地表示上下文语义。
2.2.1 词向量的含义
词向量表示词与词之间的远近关系映射为向量间的距离从而最大限度地保留了单词(或字)原有的特征建立在分布假说(distributional hypothesis)基础上的即假设词的语义由其上下文决定上下文相似的词其语义也相似。
2.2.2 词向量的组成
(1)选择一种方式描述上下文
(2)选择一种模型刻画某个目标词与其上下文之间的关系。
2.3 词向量的原理与实现 one_hot编码的映射方法本质上也属于词向量即把每个字表示为一个很长的向量这个向量的维度是词表大小并且只有一个维度的值为1其余的维度都为0。这个为1的度就代表了当前的字。 one_hot编码与词向量的唯一区别就是仅仅将字符号化不考虑任何语义信息。如one_hot编码每一个元素由整型改为浮点型同时再将原来稀疏的巨大维度压缩嵌入到人更小维度的空间那么它就等同于词向量。 2.4 词向量的实现
在神经网络的实现中词向量更多地被称为词嵌入word embedding具体做法是将二维的张量映射到多维空间即embedding中的元素将不再是、个字而变成了字所转化的多维向量所有向量之间是有距离远近关系的。 3 NLP中多项式的分布
在自然语言中一句话中的某个词并不是唯一的。例如“代码医生工作室真棒”这句话中的最后一个字“棒”也可以换成“好”不会影响整句话的语义。
3.1 RNN模型中存在的问题
在RNN模型中将一个使用语言样本训练好的模型用于生成文本时会发现模型总会将在下一时刻出现概率最大的那个词取出即仅仅实现一种语言的设计这种生成文本的方式失去了语言本身的多样性。
3.2 解决方案
为了解决这个问题将RNN模型的最终结果当成一个多项式分布(multinomialdistribution),以分布取样的方式预测出下一序列的词向量。用这种方法所生成的句子更符合语言的特性。
3.2.1 多项式分布
多项式分布多项式分布是二项式分布的拓展。
二项式分布的典型例子是“扔硬币”硬币正面朝上的概率为P,重复扔n次硬币所得到k次正面朝上的概率即为一个二项式分布概率。把二项式分布公式拓展至多种状态就得到了多项式分布。
3.2.2 多项式分布在RNN模型中的应用
多项式分布在RNN模型中的应用在RNN模型中预测的结果不再是下一个序列中出现的具体某一个词而是这个词的分布情况这便是在RNN模型中使用多项式分布的核心思想。在获得该词的多项式分布之后便可以在该分布中进行采样操作获得具体的词这种方式更符合NLP任务中语言本身的多样性即一个句子中的某个词并不是唯一的。
3.2.3 RNN模型中的实现步骤 (1)将RNN模型预测的结果通过全连接或卷积变成与字典维度相同的数组。 (2)用该数组代表模型所预测结果的多项式分布。 (3)用torch.multinomial()函数从预测结果中采样得到真正的预测结果。
3.3 torch.multinomial()
torch.multinomial(input, num_samples,replacementFalse, outNone) → LongTensor
函数作用对input的每一行做n_samples次取值输出的张量是每一次取值时input张量对应行的下标。输入是一个input张量一个取样数量和一个布尔值replacement。input张量可以看成一个权重张量每一个元素代表其在该行中的权重。如果有元素为0那么在其他不为0的元素被取干净之前这个元素是不会被取到的。n_samples是每一行的取值次数该值不能大于每一样的元素数否则会报错。replacement指的是取样时是否是有放回的取样True是有放回False无放回。
3.3.1 代码实现每次多想次分布采样的结果均不同
import torch
# 生成一串0-1的随机数
data torch.rand(2,4)
print(生成的数据列表,data)
#生成的数据列表 tensor([[0.8998, 0.6512, 0.9156, 0.8575],[0.8455, 0.4838, 0.6859, 0.2629]])
a torch.multinomial(data,1)
print(第一次采样结果,a)
# 第一次采样结果 tensor([[0],[0]])
b torch.multinomial(data,1)
print(第二次采样结果,b)
# 第二次采样结果 tensor([[0],[1]])
4 循环神经网络的实现 4.1 RNN的底层类
torch.nn.LSTM类与torch..nn.GRU类并不属于单层的网络结构它本质上是对RNNCell的二次封装将基本的RNN Cell按照指定的参数连接起来形成一个完整的RNN。
在torch.nn.LSTM类与torch.nn.GRU类的内部还会分别调用torch.nn.LSTMCel类与torch.nn.GRUCell类进行具体实现。