为什么传统 CNN 适用于 CV 任务,RNN 适用于 NLP 任务

从模型特点上来说:

  • 对于 CNN 每一个卷积核都可以看作是一个滤波器,卷积运算的本质是互相关运算,每个卷积核仅对于具有特定特征具有较大的激活值,而且 CNN 有参数共享和局部连接的特点,能够提取图像上不同位置的同一个特征,即 CNN 具有平移不变性

  • RNN 的特点在于其是一个时序模型,在对每个神经元不仅可以接收当前时刻的输入信息,还将接收上一个时刻的该神经元的输出信息,具有短期记忆能力。这在用于 NLP 任务时相当于隐含着建立了一个语言模型,这对词序具有很强的区分能力。而 CNN 和 DNN 均类似词袋模型,丢失的词序特征。

从数据特征上来说

  • 图像矩阵中的每个元素为图像中的像素值,每个像素与其周围元素都是高度相关的
  • 文本矩阵中的数据为词的 embedding 向量,每个元素在词向量内与词向量间的相邻元素的关联性是不同的,因此 CNN 用于 NLP 任务常使用的是一维卷积

RNN 原理

\(\hat y\) 部分的激活函数可以根据下游任务设置

LSTM 原理

  • 三个门:[output_dim + input_dim, 1]
  • 更新门位置的全连接层:[output_dim + input_dim, output_dim]

GRU 原理

  • 两个门:[output_dim + input_dim, 1]
  • 全连接层:[output_dim + input_dim, output_dim]

RNN BPTT


- 假设$t$时刻的损失函数为$L_t$,以 $W_{aa}$,$W_{ax}$,$W_{ya}$ 为例
$$ \begin{aligned}
&\frac{\delta L_t}{\delta W_{ya}} = \frac{\delta L_3}{\delta \hat{y}_t}\frac{\delta \hat{y}_t}{\delta W_{ya}} \\
&\frac{\delta L_t}{\delta W_{aa}} = \frac{\delta L_t}{\delta \hat{y}_t}\frac{\delta \hat{y}_t}{\delta a_{t}}(\frac{\delta a_{t}}{\delta W_{aa}} + \frac{\delta a_{t}}{\delta a_{t-1}}\frac{\delta a_{t-1}}{\delta W_{aa}} + ...)\\
&\frac{\delta L_t}{\delta W_{ax}} = \frac{\delta L_3}{\delta \hat{y}_t}\frac{\delta \hat{y}_t}{\delta a_{t}}(\frac{\delta a_{t}}{\delta W_{ax}} + \frac{\delta a_{t}}{\delta a_{t-1}}\frac{\delta a_{t-1}}{\delta W_{ax}} + ...)
\end{aligned}$$

  • 对于任意时刻t对 \(W_x\),\(W_s\) 求偏导的公式为:

\[\begin{aligned}
&\frac{\delta L_t}{\delta W_{aa}} = \sum_{k=0}^{t}\frac{\delta L_t}{\delta y_t}\frac{\delta y_t}{\delta a_t}( \prod_{j=k+1}^t\frac{\delta a_j}{\delta a_{j-1}} ) \frac{\delta a_k}{\delta W_{aa}}\\
&\frac{\delta L_t}{\delta W_{aa}} = \sum_{k=0}^{t}\frac{\delta L_t}{\delta y_t}\frac{\delta y_t}{\delta a_t}( \prod_{j=k+1}^t\frac{\delta a_j}{\delta a_{j-1}} ) \frac{\delta a_k}{\delta W_{aa}}
\end{aligned}\]

  • 其中\(\frac{\delta a_j}{\delta a_{j-1}}\)和\(\frac{\delta a_k}{\delta W_{aa}}\)还存在\(tanh'\)的导数项,而\(tanh'\)的值域为\((0, 1)\)。随着时间步的增长,累乘项会趋于 0,出现梯度消失的问题

LSTM 如何解决 RNN 的梯度消失问题

  • RNN 的激活函数为 \(tanh\),而 \(tanh\) 的导数取值范围为 \([0, 1]\),在时间上的反向传播会存在时间上的梯度累乘项,时间步长了会导致梯度累乘而消失
  • LSTM 通过引入全局信息流,在时间维度上引入残差结构,残差结构的引入就使得链式求导过程中引入了一个求和项,从反向传播的求导来看,最多只有两个激活函数的导数累乘,因此远距离的梯度通常都可以正常传播,减弱了梯度消失问题

怎样增加 LSTM 的长距离特征提取能力

  • Dilated RNN:Dilated CNN 为空洞卷积,Dilated RNN 则是在时间维度上空洞,浅层部分的为传统 RNN,每个时间步都循环,深层的循环周期更长,增大时间维度上的“感受野”

【面试QA-基本模型】LSTM的更多相关文章

  1. 不止面试02-JVM内存模型面试题详解

    第一部分:面试题 本篇文章我们将尝试回答以下问题: 描述一下jvm的内存结构 描述一下jvm的内存模型 谈一下你对常量池的理解 什么情况下会发生栈内存溢出?和内存溢出有什么不同? String str ...

  2. 如何面试QA(面试官角度)

    面试是一对一 或者多对一的沟通,是和候选人 互相交换信息.平等的. 面试的目标是选择和雇佣最适合的人选.是为了完成组织目标.协助人力判断候选人是否合适空缺职位. 面试类型: (1)预判面试(查看简历后 ...

  3. 【NLP面试QA】激活函数与损失函数

    目录 Sigmoid 函数的优缺点是什么 ReLU的优缺点 什么是交叉熵 为什么分类问题的损失函数为交叉熵而不能是 MSE? 多分类问题中,使用 sigmoid 和 softmax 作为最后一层激活函 ...

  4. 面试 02-CSS盒模型及BFC

    02-CSS盒模型及BFC #题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型.对于这个题目,我们要回答一下几个方面: (1)基本概念:content.padding.marg ...

  5. Java面试- JVM 内存模型讲解

    经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...

  6. 【面试QA】Attention

    目录 Attention机制的原理 Attention机制的类别 双向注意力 Self-Attention 与 Soft-Attention 的区别 Transformer Multi-Head At ...

  7. 【NLP面试QA】预训练模型

    目录 自回归语言模型与自编码语言 Bert Bert 中的预训练任务 Masked Language Model Next Sentence Prediction Bert 的 Embedding B ...

  8. 【NLP面试QA】基本策略

    目录 防止过拟合的方法 什么是梯度消失和梯度爆炸?如何解决? 在深度学习中,网络层数增多会伴随哪些问题,怎么解决? 关于模型参数 模型参数初始化的方法 模型参数初始化为 0.过大.过小会怎样? 为什么 ...

  9. java面试-Java内存模型(JMM)

    p.p1 { margin: 0; font: 15px Helvetica } 一.并发编程两个关键问题 线程之间如何通信.同步.java并发采用的是共享内存模型 二.JMM内存模型的抽象结构 描述 ...

随机推荐

  1. MVC08

    1. c# 索引器(indexer) using System; using System.IO; namespace IO { class Program { ]; static void Main ...

  2. 高性能MySQL之锁详解

    一.背景 MySQL里面的锁大致可以分成全局锁.表级锁和行锁三类.数据库锁的设计的初衷是处理并发问题.我们知道多用户共享资源的时候,就有可能会出现并发访问的时候,数据库就需要合理的控制资源的访问规则, ...

  3. python正则表达式之re模块方法介绍

    python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...

  4. PAT资料,持续更新中~~~愿诸君共勉

    <算法笔记>胡凡著,<算法笔记-上机实战训练指南>胡凡著 <经典算法大全> <C陷阱与缺陷> <C程序设计语言-K&R> 链接:ht ...

  5. 【原创】(四)Linux进程调度-组调度及带宽控制

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  6. mui中如何使用tab来切换子页面 mui-bar, mui-bar-tab

    mui是前端框架但是很多人用它写移动端 那么mui底部切换是怎么做到的呢? 如何点击某个tab来切换不同的页面? 解答: 1首先我们需要引入mui框架的底部tab元素 代码如下 <!--tabl ...

  7. springboot连接redis错误 io.lettuce.core.RedisCommandTimeoutException:

    springboot连接redis报错 超时连接不上  可以从以下方面排查 1查看自己的配置文件信息,把超时时间不要设置0毫秒 设置5000毫秒 2redis服务长时间不连接就会休眠,也会连接不上 重 ...

  8. html5插件完成滚屏幕效果

    首先想要完成这样的效果要用到jquery-fullpage插件我们需要他的js文件和css样式文件如图  因为是jquery的插件所以我们还要导入jquery-min.js 在页面引入这些样式和插件 ...

  9. python使用while循环实现九九乘法表

    a = 1while a <= 9: b = 1 while b <= a: print("%d*%d=%d\t" % (b, a, a * b), end=" ...

  10. Linux环境下安装MySQL 5.7.28

    先进入MySQL官网: www.mysql.com 去下载安装包 进入DOWNLOADS选项,点击MySQL Community (GPL) Downloads. 点击进入MySQL Communit ...