| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 循环神经网络(RNN、LSTM、GRU)以及Pytorch的使用 -> 正文阅读 |
|
[人工智能]循环神经网络(RNN、LSTM、GRU)以及Pytorch的使用 |
RNN循环神经网络的结构, 它由一个输入层、一个隐藏层和一个输出层组成。 语言模型:给定一个一句话前面的部分,预测接下来最有可能的一个词是什么 在使用RNN之前,语言模型主要采用n-gram, n是一个自然数,假设一个词出现的频率只与前面N个词相关。RNN理论上可以往前(往后看)任意多个词。 参考:?循环神经网络 ?在计算时, 每一time step中使用的参数是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点。网络在每个时刻接收到输入之后,隐藏层的值是, 输出层的值是。 , 这里的隐藏变量能够捕捉截至当前时间步的序列的历史信息 裁剪梯度在循环神经网络中较容易出现梯度衰减或者梯度爆炸。为了应对梯度爆炸,我们可以裁剪梯度(clip gradient)。假设我们把所有模型参数梯度的元素拼接成一个向量,并设置裁剪的阈值是, 裁剪后的梯度?的范数不超过。 GRU(门控循环单元)门控循环单元的设计。引入了重置门和更新门的概念,从而修改了循环神经网络中隐藏状态的计算方式。重置门和更新门中每个元素的值域都是[0, 1] 时间步t的候选隐藏状态由重置门和上一时间步的隐藏状态计算得到。重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。 时间步t的隐藏状态由由当前时间步的更新门和上一步的隐藏状态和当前时间步的候选隐藏状态组合得到。
公式总结: ? ? ? ? ? ? ? ? ? ? ? ? 小批量输入,上一时间步隐藏状态: ????????????????????????重置门 ????????????????????????更新门 ????????????????????????候选隐藏状态 ????????????????????????隐藏状态 ?LSTM(长短期记忆)?LSTM中引入三个门,输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞从而记录额外的信息。 与门控循环单元中的重置门和更新门一样,长短期记忆的门的输入均为当前时间步输入与上一时间步隐藏状态,输出由激活函数为sigmoid函数的全连接层计算得到。三个门元素的值域均为[0, 1]。 输入门、遗忘门、输出门的输出由小批量的输入和上一时间步隐藏状态计算得到。 长短期记忆需要计算候选记忆细胞,使用了值域在[-1, 1]的tanh函数作为激活函数。 通过输入门、遗忘门和输出门来控制隐藏状态中信息的流动,一般是通过使用按元素乘法(符号为)来实现的。当前时间步记忆细胞的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动: 有了记忆细胞以后,通过输出门来控制记忆细胞到隐藏状态的信息流动: 利用PyTorch实现RNN网络、GRU网络和LSTM网络通过PyTorch提供的集成好的GRU层、LSTM层进行实现,简单快捷,但缺失一些灵活性。 参考博客 :读PyTorch源码学习RNN?????? ??????????????? ? ?Pytorch中LSTM,GRU参数理解 备注:对于不同的网络层,虽然输入的维度不同,但是通常输入的第一个维度都是batch_size。然而RNN的输入却是(seq_len, batch_size, input_size),batch_size位于第二维度。此时只需要令参数batch_first = True,即可以将batch_size和序列长度seq_len对换位置。 batch_size为何放在第二维度。因为batch_first意味着模型的输入在内存中存储时,先存储第一个sequence,再存储第二个......。而seq_len first意味着不同序列中同一个时刻对应的输入单元在内存中是毗邻的,这样才能做到真正地batch计算。
?在bidirection = True的情况下,每个序列的位置的正向和反向向量维度的拼接
验证batch_size = True的情况 模型的输入即为我们平常所使用的形式[batch_size, sequence_length, input_dim]?。对于模型的输出,仍然与模型的输入的顺序相同, 输出维度为[batch_size, sequence_length, hidden_size * num_directions],对于模型的隐藏状态和记忆细胞,输出维度为[num_layers * num_directions, batch, hidden_size]。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 8:23:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |