百度网站考核期企业邮箱是qq邮箱吗

当前位置: 首页 > news >正文

百度网站考核期,企业邮箱是qq邮箱吗,河南seo推广公司,广西响应式网页建设找哪家NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 #xff11;.原理及网络结构 #xff11;.#xff11;#xff32;#xff2e;#xff2e; 在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型… NLP251 系列主要记录从NLP基础网络结构到知识图谱的学习 .原理及网络结构 .  在Yoshua Bengio论文中( http://proceedings.mlr.press/v28/pascanu13.pdf )证明了梯度求导的一部分环节是一个指数模型当n1时,就会出现“梯度消失问题,而当η 1时,“梯度爆炸”也就产生了。 . 双向 两个方向的区别在于输入数据的不同反向数据是对正向数据的反转 .深度双向 . LSTM长短期记忆网络相较于RNN循环神经网络的主要优势如下 1. 解决长期依赖问题 RNN在处理长序列数据时容易出现梯度消失或梯度爆炸的问题导致难以捕捉到序列中相隔较远的依赖关系。 LSTM通过引入“记忆单元”Cell State和门控机制遗忘门、输入门、输出门能够有效地学习和保持长期依赖关系。遗忘门可以有选择性地丢弃不再重要的信息输入门可以添加新的重要信息输出门则控制信息的输出从而确保信息在长序列中能够稳定传递。
2. 缓解梯度消失问题 RNN在反向传播时梯度可能会随着序列长度增加而迅速衰减或增大导致训练困难。 LSTM通过门控机制使得梯度可以直接通过记忆单元流动减少了梯度在传播过程中的衰减从而缓解了梯度消失问题。 LSTM 的关键在于其所特有的“细胞状态”这一状态犹如一条贯穿始终的传送带。它在整个链条上顺畅运行 只有一些少量的线性交互。信息在 上面流传保持不变很容易。 LSTM怎么控制“细胞状态”  LSTM长短期记忆网络借助所谓的“门”结构能够有选择地去除或增加“细胞状态”中存储的信息。这一过程包含一个sigmoid神经网络层以及一个逐元素的乘法操作。sigmoid层生成一个介于0到1之间的概率值决定每个成分可以通过的量其中0代表“完全阻止”而1则表示“完全允许”。在LSTM中存在三个主要的“门”结构共同调控“细胞状态”的更新机制。 第一个“门”——“忘记门”或“遗忘门” 决定从过去的“细胞状态”中 丢弃什么信息比如在语言模型中细胞状态可能包含了性别信息(“他” 或者“她”)当我们看到新的代名词的时候可以考虑忘记旧的数据。 第二个“门”即“信息 增加门”负责决定哪些新信息可以添加到“细胞状态”中。 Sigmoid层决定什么值需要更新 Tanh层创建一个新的候选向量Ct 主要是为了状态更新做准备 经过第一个和第二个“门”后可以确定传递信息的删除和增加进而执行“细胞状态”的更新操作。具体来说首先将Ct-1更新为Ct接着把旧状态与ft相乘从而剔除那些确凿无误无需保留的信息。随后加入新的候选值it *Ct最终获得更新后的“细胞状态”。 第三个“门”即“输出门”它基于“细胞状态”生成输出。首先通过sigmoid层来决定细胞状态的哪一部分会被用于输出。然后利用tanh函数处理细胞状态得到一个介于-1到1之间的数值。最后将这个数值与sigmoid门的输出相乘从而确定最终输出的内容。 LSTM变种 变种1 增加“peephole connections”层 让门层也接受细胞状态的输入 变种2 通过耦合忘记门和更新输入门(第一个和第二个门)也就是不再单独的考虑忘记什么、 增加什么信息而是一起进行考虑 .GRU  Gated Recurrent Unit (GRU) 是在2014年被提出的它将LSTM中的忘记门和输出门合并为一个单一的更新门同时还将数据单元状态和隐藏状态即细胞状态和输出状态进行了合并。这种结构相较于LSTM更为简单。 总结与细胞状态信息与输出信息相同而细胞状态信息可能与输出信息不同 。 .API接口实现 2.1 调用讲解 返回值为两部分第一部分是蓝框所示所有时刻 最后一个隐藏层的输出特征向量 第二分是红色圈所示最后时刻 所有一个隐藏层的输出特征向量 我们可以通过rnn.named_parameters()来查看详细的中间过程状态shape rnn nn.RNN(4, 8, num_layers2, batch_firstTrue, bidirectionalTrue) for name, param in rnn.named_parameters():print(name, param.shape) 无法保持长时依赖代码验证 2.2 LSTM 调用讲解  从网络结构图和代码中不难发现LSTM中ht与output输出相同  中间过程中的32从何而来 weight_ih_l0 torch.Size([32, 4]) weight_hh_l0 torch.Size([32, 8]) bias_ih_l0 torch.Size([32]) bias_hh_l0 torch.Size([32]) 附LSTM代码 lstm nn.LSTM(input_size4, # 每个样本每个时刻输入的向量维度大小hidden_size16, # 每个样本每个时刻输出的向量维度大小num_layers1, # RNN的层数默认为1biasTrue, # 内部的线性转换是否添加biasTrue表示添加默认为Truebatch_firstTrue, # 输入输出数据的第一维是不是批次样本True表示是也就是输出的格式为:[N,T,E]; 默认为False表示shape格式为[T,N,E]dropout0, # 针对输出的特征向量中部分值重新为0的概率/可能性bidirectionalFalse, # 是否构建双向的RNNTrue表示构建False表示不构建反向RNN默认为Falseproj_size0 # 是否针对每个时刻输出的hi进行一个线性转换0表示不进行转换0的值表示会将hi映射(全连接)为proj_size大小的向量 )x torch.randn(2, 3, 4) # 2个样本每个样本3个token每个token对应的向量维度大小为4

batch_first True

output: 所有样本、所有时刻对应的输出特征向量值shape为: [N,T,?]

? hidden_size * (2 if bidirectional else 1) if proj_size 0 else proj_size

ct: 最后一个时刻的状态信息/细胞信息, shape为: [1 * num_layers * (2 if bidirectional else 1), N, hidden_size]

ht: 最后一个时刻的状态信息/细胞信息, shape为: [1 * num_layers * (2 if bidirectional else 1), N, hidden_size]

output, (ht, ct) lstm(x) print(type(output), output.shape) print(type(ht), ht.shape) print(type(ct), ct.shape)print(output[:, -1, :]) print(ht) print(ct)rnn nn.LSTM(4, 8, batch_firstTrue, bidirectionalFalse, num_layers1) for name, param in rnn.named_parameters():print(name, param.shape) 2.3 GRU 调用讲解  lstm nn.GRU(input_size4, # 每个样本每个时刻输入的向量维度大小hidden_size16, # 每个样本每个时刻输出的向量维度大小num_layers1, # RNN的层数默认为1biasTrue, # 内部的线性转换是否添加biasTrue表示添加默认为Truebatch_firstTrue, # 输入输出数据的第一维是不是批次样本True表示是也就是输出的格式为:[N,T,E]; 默认为False表示shape格式为[T,N,E]dropout0, # 针对输出的特征向量中部分值重新为0的概率/可能性bidirectionalFalse # 是否构建双向的RNNTrue表示构建False表示不构建反向RNN默认为False )# 2个样本每个样本3个token每个token对应的向量维度大小为4 x torch.randn(2, 3, 4)

batch_first True

output: 所有样本、所有时刻对应的输出特征向量值shape为: [N,T,?]

**** ? hidden_size * (2 if bidirectional else 1)

: 最后一个时刻的状态信息/细胞信息, shape为: [1 * num_layers * (2 if bidirectional else 1), N, hidden_size]

ct/ht: 最后一个时刻的状态信息/细胞信息, shape为: [1 * num_layers * (2 if bidirectional else 1), N, hidden_size]

output, ct lstm(x) print(type(output), output.shape) print(type(ct), ct.shape)rnn nn.GRU(4, 8, batch_firstTrue, bidirectionalFalse, num_layers1) for name, param in rnn.named_parameters():print(name, param.shape)