05.序列模型 W1.循环序列模型

文章目录

    • 1. 为什么选择序列模型
    • 2. 数学符号
    • 3. 循环Recurrent 神经网络模型
    • 4. 通过时间的反向传播
    • 5. 不同类型的循环神经网络
    • 6. 语言模型和序列生成
    • 7. 对新序列采样
    • 8. 循环神经网络的梯度消失
    • 9. Gated Recurrent Unit(GRU单元)
    • 10. LSTM(long short term memory)unit
    • 11. 双向循环神经网络(Bidirectional RNN)
    • 12. 深层循环神经网络(Deep RNNs)
    • 作业

参考:
吴恩达视频课
深度学习笔记

1. 为什么选择序列模型


有些问题,输入数据 X 和 输出数据 Y 都是序列,X 和 Y 有时也会不一样长。在另一些问题里,只有 X 或 只有 Y 是序列

2. 数学符号


3. 循环Recurrent 神经网络模型

为什么不使用标准的神经网络学习上面的 X 到 Y 的映射?




a<t>=g1(Waaa<t−1>+Waxx<t>+ba)a^{<t>}=g_{1}\left(W_{a a} a^{<t-1>}+W_{a x} x^{<t>}+b_{a}\right)a<t>=g1(Waaa<t1>+Waxx<t>+ba)

y^<t>=g2(Wyaa<t>+by)\hat{y}^{<t>}=g_{2}\left(W_{y a} a^{<t>}+b_{y}\right)y^<t>=g2(Wyaa<t>+by)

4. 通过时间的反向传播

编程框架通常会自动实现反向传播,但是还是要认识下它的运作机制


L<t>(y^<t>,y<t>)=−y<t>log⁡y^<t>−(1−y<t>)log⁡(1−y^<t>)L^{<t>}\left(\hat{y}^{<t>}, y^{<t>}\right)=-y^{<t>} \log \hat{y}^{<t>}-\left(1-y^{<t>}\right) \log \left(1-\hat{y}^{<t>}\right)L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y<t>)log(1y^<t>)

L(y^,y)=∑t=1TxL<t>(y^<t>,y<t>)L(\hat{y}, y)=\sum_{t=1}^{T_{x}} L^{<t>}\left(\hat{y}^{<t>}, y^{<t>}\right)L(y^,y)=t=1TxL<t>(y^<t>,y<t>)

最小化损失,通过梯度下降来更新参数

5. 不同类型的循环神经网络

6. 语言模型和序列生成

语言模型所做的就是,它会告诉你某个特定的句子它出现的概率是多少

得到一个句子后:

  • 建立一个字典,将每个单词转成 one-hot 编码
  • 定义句子的结尾,增加一个额外的标记 EOS(更准确的识别结尾)
  • 还有不存在的词都归为 unknow UNK

7. 对新序列采样

训练一个序列模型之后,要想了解到这个模型学到了什么,一种非正式的方法就是进行一次新序列采样


以上是基于词汇的RNN模型,还可以基于字符

基于字符

  • 优点:不必担心会出现未知的标识
  • 缺点:会得到太多太长的序列,大多数英语句子只有10到20个的单词,但却可能包含很多很多字符。基于字符的模型在捕捉句子中的依赖关系不如基于词汇的语言模型那样可以捕捉长范围的关系,并且基于字符的模型训练成本较高。

自然语言处理的趋势就是,绝大多数都是使用基于词汇的语言模型,但随着计算机性能越来越高,会有更多的应用。
在一些特殊情况下,会开始使用基于字符的模型。除了一些比较专门需要处理大量未知的文本或未知词汇的应用,还有一些要面对很多专有词汇的应用。

8. 循环神经网络的梯度消失


反向传播的时候,随着层数的增多,梯度不仅可能指数下降,也可能指数上升。

  • 梯度爆炸,你会看到很多NaN,数值溢出。解决方法就是用梯度修剪。如果它大于某个阈值,缩放梯度向量,保证它不会太大,这是相对比较鲁棒的
  • 然而梯度消失更难解决

9. Gated Recurrent Unit(GRU单元)

门控循环单元 GRU,它改变了RNN的隐藏层,使其可以更好地捕捉深层连接,并改善了梯度消失问题

普通的RNN单元结构如下:

c~<t>=tanh⁡(Wc[c<t−1>,x<t>]+bc)\tilde{c}^{<t>}=\tanh \left(W_{c}\left[c^{<t-1>}, x^{<t>}\right]+b_{c}\right)c~<t>=tanh(Wc[c<t1>,x<t>]+bc)

Γu=σ(Wu[c<t−1>,x<t>]+bu)\Gamma_{u}=\sigma\left(W_{u}\left[c^{<t-1>}, x^{<t>}\right]+b_{u}\right)Γu=σ(Wu[c<t1>,x<t>]+bu)

c<t>=Γu∗c~<t>+(1−Γu)∗c<t−1>c^{<t>}=\Gamma_{u} * \tilde{c}^{<t>}+\left(1-\Gamma_{u}\right) * c^{<t-1>}c<t>=Γuc~<t>+(1Γu)c<t1>

GRU单元的优点就是通过门决定是否更新记忆细胞

  • 当你从左到右扫描一个句子的时候,这时是要更新某个记忆细胞,还是不更新,不更新(上图,中间一直为0,表示一直不更新)
  • 直到你真的需要使用记忆细胞的时候,这可能在句子之前就决定了。
  • 因为sigmoid的值,现在门很容易取到0值,只要这个值是一个很大的负数,再由于数值上的四舍五入,上面这些门大体上就是0,或者说非常非常非常接近0。这非常有利于维持细胞的值。因为很接近0,可能是0.000001或者更小,这就不会有梯度消失的问题了。这就是缓解梯度消失问题的关键,因此允许神经网络运行在非常庞大的依赖词上,比如说cat和was单词即使被中间的很多单词分割开

如果门是多维的向量,元素对应的乘积做的就是告诉GRU单元哪个记忆细胞的向量维度在每个时间步要做更新,所以你可以选择保存一些比特不变,而去更新其他的比特。比如说你可能需要一个比特来记忆猫是单数还是复数,其他比特来理解你正在谈论食物,你可以每个时间点只改变一些比特

FULL GRU

Γr=σ(Wr[c<t−1>,x<t>]+br)\Gamma_{r}=\sigma\left(W_{r}\left[c^{<t-1>}, x^{<t>}\right]+b_{r}\right)Γr=σ(Wr[c<t1>,x<t>]+br)

上式告诉我们 c~<t>,c<t−1>\tilde c^{<t>}, c^{<t-1>}c~<t>,c<t1> 有多少相关性

研究表明:去尝试让神经网络有更深层的连接,去尝试产生更大范围的影响,还有解决梯度消失的问题,GRU就是其中一个研究者们最常使用的版本,也被发现在很多不同的问题上也是非常健壮和实用的

GRU结构可以更好捕捉非常长范围的依赖,让RNN更加有效。
还有比较经典的是LSTM,即长短时记忆网络,见下节

10. LSTM(long short term memory)unit

c~<t>=tanh⁡(Wc[a<t−1>,x<t>]+bc)\tilde{c}^{<t>}=\tanh \left(W_{c}\left[a^{<t-1>}, x^{<t>}\right]+b_{c}\right)c~<t>=tanh(Wc[a<t1>,x<t>]+bc)

Γu=σ(Wu[a<t−1>,x<t>]+bu)\Gamma_{u}=\sigma\left(W_{u}\left[a^{<t-1>}, x^{<t>}\right]+b_{u}\right) Γu=σ(Wu[a<t1>,x<t>]+bu)

Γf=σ(Wf[a<t−1>,x<t>]+bf)\Gamma_{f}=\sigma\left(W_{f}\left[a^{<t-1>}, x^{<t>}\right]+b_{f}\right) Γf=σ(Wf[a<t1>,x<t>]+bf)

Γo=σ(Wo[a<t−1>,x<t>]+bo)\Gamma_{o}=\sigma\left(W_{o}\left[a^{<t-1>}, x^{<t>}\right]+b_{o}\right) Γo=σ(Wo[a<t1>,x<t>]+bo)

c<t>=Γu∗c~<t>+Γf∗c<t−1>c^{<t>}=\Gamma_{u} * \tilde{c}^{<t>}+\Gamma_{f} * c^{<t-1>} c<t>=Γuc~<t>+Γfc<t1>

a<t>=Γo∗tanh⁡c<t>a^{<t>}=\Gamma_{o} * \tanh c^{<t>}a<t>=Γotanhc<t>


用GRU?用LSTM?

  • GRU 更加简单,更容易创建一个更大的网络,它只有两个门,在计算性上也运行得更快
  • 但 LSTM 更加强大和灵活,因为它有三个门。大部分人会把 LSTM 作为默认的选择来尝试

无论是GRU还是LSTM,都可以用它们来构建捕获更加深层连接的神经网络

11. 双向循环神经网络(Bidirectional RNN)

BRNN 模型可以让你在序列的某点处不仅可以获取之前的信息还可以获取未来的信息


上面的基本单元不仅可以是标准RNN单元,也可以是 GRU 或 LSTM 单元。

NLP(自然语言处理)问题,常用 有LSTM单元的双向RNN模型是用的最多

上面的双向RNN网络模型的缺点:你需要完整的数据的序列,你才能预测任意位置

  • 比如构建一个语音识别系统,需要等待这个人说完,获取整个语音表达才能处理这段语音,并进一步做语音识别。实际的语音识别通常会有更加复杂的模块

12. 深层循环神经网络(Deep RNNs)

作业

05.序列模型 W1.循环序列模型(作业:手写RNN+恐龙名字生成)

本文地址:https://michael.blog.csdn.net/article/details/108815992


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 802. 找到最终的安全状态(逆向图+拓扑排序)

文章目录1. 题目2. 解题1. 题目 在有向图中, 我们从某个节点和每个转向处开始, 沿着图的有向边走。 如果我们到达的节点是终点 (即它没有连出的有向边), 我们停止。 现在, 如果我们最后能走到终点&#xff0c;那么我们的起始节点是最终安全的。 更具体地说, 存在一个自然数 K…

05.序列模型 W1.循环序列模型(作业:手写RNN+恐龙名字生成)

文章目录作业1&#xff1a;建立你的循环神经网络1. RNN 前向传播1.1 RNN 单元1.2 RNN 前向传播2. LSTM 网络2.1 LSTM 单元2.2 LSTM 前向传播3. RNN 反向传播3.1 基础 RNN 反向传播3.2 LSTM 反向传播3.3 LSTM RNN网络反向传播作业2&#xff1a;字符级语言模型&#xff1a;恐龙岛…

SQL2008中Merge的用法

SQL2008中Merge的用法 在SQL2008中&#xff0c;新增了一个关键字&#xff1a;Merge&#xff0c;这个和Oracle的Merge的用法差不多&#xff0c;只是新增了一个delete方法而已。下面就是具体的使用说明&#xff1a; 首先是对merge的使用说明&#xff1a; merge [into][目标表]usi…

LeetCode 1146. 快照数组(哈希map + 有序map)

文章目录1. 题目2. 解题1. 题目 实现支持下列接口的「快照数组」- SnapshotArray&#xff1a; SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时&#xff0c;每个元素都等于 0。void set(index, val) - 会将指定索引 index 处的元素设置为…

LeetCode 825. 适龄的朋友(计数排序+前缀和)

文章目录1. 题目2. 解题1. 题目 人们会互相发送好友请求&#xff0c;现在给定一个包含有他们年龄的数组&#xff0c;ages[i] 表示第 i 个人的年龄。 当满足以下任一条件时&#xff0c;A 不能给 B&#xff08;A、B不为同一人&#xff09;发送好友请求&#xff1a; age[B] <…

LeetCode 954. 二倍数对数组(map计数)

文章目录1. 题目2. 解题1. 题目 给定一个长度为偶数的整数数组 A&#xff0c;只有对 A 进行重组后可以满足 对于每个 0 < i < len(A) / 2&#xff0c;都有 A[2 * i 1] 2 * A[2 * i] 时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false。 示例 1&#xf…

LeetCode 732. 我的日程安排表 III(差分思想)

文章目录1. 题目2. 解题1. 题目 实现一个 MyCalendar 类来存放你的日程安排&#xff0c;你可以一直添加新的日程安排。 MyCalendar 有一个 book(int start, int end)方法。它意味着在start到end时间内增加一个日程安排&#xff0c;注意&#xff0c;这里的时间是半开区间&…

05.序列模型 W2.自然语言处理与词嵌入

文章目录1. 词汇表征2. 使用词嵌入3. 词嵌入的特性4. 嵌入矩阵5. 学习词嵌入6. Word2Vec7. 负采样8. GloVe 词向量9. 情感分类10. 词嵌入除偏作业参考&#xff1a;吴恩达视频课深度学习笔记自然语言处理与词嵌入 Natural Language Processing and Word Embeddings 1. 词汇表征…

Hadoop学习之HDFS

Hadoop学习之HDFS 1 HDFS相关概念 1.1 设计思路 分散存储&#xff0c;冗余备份。 分散存储&#xff1a;大文件被切割成小文件&#xff0c;使用分而治之的思想让多个服务器对同一个文件进行联合管理&#xff1b; 冗余备份&#xff1a;每个小文件做冗余备份&#xff0c;并且…

LeetCode 799. 香槟塔(DP动态规划)

文章目录1. 题目2. 解题1. 题目 我们把玻璃杯摆成金字塔的形状&#xff0c;其中第一层有1个玻璃杯&#xff0c;第二层有2个&#xff0c;依次类推到第100层&#xff0c;每个玻璃杯(250ml)将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&#xff0c;当顶层的杯子满了&…

天池在线编程 2020国庆八天乐 - 7 进制

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324212270017 Given an integer, return its base 7 string representation. 输入范围为[-1e7, 1e7] 。 示例 样例 1: 输入: num 100 输出: 202样例 2: 输入: num -7 输出: -102.…

Hadoop学习之MapReduce

Hadoop学习之MapReduce 目录 Hadoop学习之MapReduce 1 MapReduce简介 1.1 什么是MapReduce 1.2 MapReduce的作用 1.3 MapReduce的运行方式 2 MapReduce的运行机制 2.1 相关进程 2.2 MapReduce的编程套路 2.3 MapTask的并行度 2.4 切片及其源码解读 2.5 ReduceTask的…

Hadoop学习之yarn

Hadoop学习之YARN 1 YARN简介 1.1 概述 YARN &#xff08;Yet Another Resource Negotiator&#xff09;是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而 MapReduce 等运算程序则相当于运行于操作…

天池在线编程 2020国庆八天乐 - 8. 分糖果

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324212270016 描述&#xff1a; 给定长度为偶数的整数数组&#xff0c;该数组中不同的数字代表不同种类的糖果&#xff0c; 每个数字表示一种糖果。 您需要将这些糖果平均分配给弟弟和…

Hive基础知识

Hive基础知识 1 Hive相关概念 1.1 Hive是什么 Hive是基于 Hadoop 的一个数据仓库工具&#xff0c;可以将结构化的数据映射为一张数据库表&#xff0c;并提供 HQL(Hive SQL)查询功能&#xff0c;最终底层将HQL语句转换为MapReduce任务的&#xff0c;底层数据是存储在 HDFS 上…

天池在线编程 2020国庆八天乐 - 6. 山谷序列(DP)

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324212270018 描述&#xff1a; 给你一个长度为 n 的序列&#xff0c;在他的子序列中让你找一个山谷序列&#xff0c;山谷序列定义为&#xff1a; 序列的长度为偶数。假设子序列的长…

天池在线编程 2020国庆八天乐 - 4. 生成更大的陆地(BFS)

文章目录1. 题目2. 解题1. 题目 https://tianchi.aliyun.com/oj/118289365933779217/122647324262601668 LeetCode 上也有该题 827. 最大人工岛 描述 在一个0和1的2D网格中&#xff0c;我们最多将一个0改为1。 之后&#xff0c;最大岛屿的大小是多少&#xff1f; &#xff0…

python操作MySQL 模拟简单银行转账操作

一、基础知识 1、MySQL-python的安装 下载&#xff0c;然后 pip install 安装包 2、python编写通用数据库程序的API规范 &#xff08;1&#xff09;、数据库连接对象 connection&#xff0c;建立python客户端与数据库的网络连接&#xff0c;创建方法为 MySQLdb.Connect(参数) 参…

LeetCode 1007. 行相等的最少多米诺旋转

文章目录1. 题目2. 解题1. 题目 在一排多米诺骨牌中&#xff0c;A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。&#xff08;一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。&#xff09; 我们可以旋转第 i 张多米诺&a…

Hive内置函数大全

Hive内置函数大全 目录 Hive内置函数大全 1.复合类型构造函数 2 复合类型操作符 3 数值计算函数 4 日期函数 5 条件函数 6 字符串函数 7 汇总统计函数&#xff08;UDAF&#xff09; 8 表格生成函数(UDTF) 9 类型转换函数 10 数学函数 11 数学运算 12 逻辑运算 13…