文章目录

  • 1 循环神经网络
    • 1.1 场景与多种应用
    • 1.2 RNN网络结构
      • 1.2.1为什么需要RNN
      • 1.2.2 RNN 结构
    • 1.3 多种RNN
    • 1.4 BPTT算法
    • 1.5 生成模型与图像描述
  • 2 LSTM
    • 2.1 LSTM
    • 2.2 GRU

1 循环神经网络

1.1 场景与多种应用

1 模仿论文生成
2 模仿linux内核编写代码
3 模仿小四写论文
4 机器翻译
5 image to text 看图说话

1.2 RNN网络结构

1.2.1为什么需要RNN

传统神经网络输入和输出是互相独立的。
我是中国人,我的母语是____。这里完形填空的结果是与前面的词相关的。
RNN引入 记忆 的概念。循环:来源于每个元素执行相同的任务。输出依赖于 输入和记忆。

有时间 顺序上的依赖,都可以使用RNN。例如一段时间内的销量。也就是说RNN不仅仅可以用于解决NLP问题。

推荐系统下也可以使用RNN。

1.2.2 RNN 结构

xtx_txt​是时间t处的输入。例如时间t的词向量。
sts_tst​是时间t处的记忆。
oto_tot​是时间t处的输出。例如预测下个词的话,可能是每个词出现的概率。
公式:
St=f(UXt+WSt−1)S_t=f(UX_t+WS_{t-1})St​=f(UXt​+WSt−1​) f可以是tanh等函数。
Ot=softmax(VSt)O_t=softmax(VS_t)Ot​=softmax(VSt​)
例如XtX_tXt​可以是一个1000x1的向量,U是一个800x1000的矩阵,W是一个800x800的矩阵,这样StS_tSt​就是一个800x1的向量。
V是一个4万x800的矩阵。(4万是词汇量)

说明:
1 隐状态sts_tst​是记忆体,捕捉了之前时间点上的信息。例如现在你读高三,sts_tst​就是你在高一,高二,高三学习内容的记忆。

2 oto_tot​是通过之前所有时间以及当前记忆共同得到的。

3 由于容量问题,sts_tst​并不能记住所有内容。

4 RNN共享一组参数:U、W、V。可以这样理解,你就是你,你用同一套学习方法学习了高一、高二、高三的内容。

5 有些情况下,不需要每个时间都有oto_tot​,只需要在最后时间有输出即可。例如文本分类。

RNN唐诗生成器

1.3 多种RNN

1 双向RNN
有些时候,输出依赖于之前和之后的序列元素。

h⃗t=f(W⃗xt+V⃗h⃗t−1+b⃗)\vec h_t = f(\vec Wx_t+\vec V\vec h_{t-1}+\vec b)ht​=f(Wxt​+Vht−1​+b)
h←t=f(W←xt+V←h←t+1+b←)\overleftarrow{h}_{t}=f\left(\overleftarrow{W} x_{t}+\overleftarrow{V} \overleftarrow{h}_{t+1}+\overleftarrow{b}\right)ht​=f(Wxt​+Vht+1​+b)
yt=g(U[h⃗t;h←t]+c)y_{t}=g\left(U\left[\vec{h}_{t} ; \overleftarrow{h}_t\right]+c\right)yt​=g(U[ht​;ht​]+c)

从左向右计算记忆h⃗t\vec h_tht​,从右向左计算记忆h←t\overleftarrow{h}_tht​,U[h⃗t;h←t]U\left[\vec{h}_{t} ; \overleftarrow{h}_t\right]U[ht​;ht​]是对两个矩阵做拼接。

h和s的含义相同,表示记忆。
左右信息融合,使用的是concat拼接的方法。

2 深层双向RNN

图中的h和之前的S是等价的。
这样的网络可以这样理解。高考前的多轮复习。高三内容有很多章,每个时间t学习一章。复习呢进行了多轮。按照图中是三轮。

h⃗t(i)=f(W⃗(i)ht(i−1)+V⃗(i)h⃗t−1(i)+b⃗(i))\vec h_t^{(i)} = f(\vec W^{(i)}h_t^{(i-1)}+\vec V^{(i)}\vec h_{t-1}^{(i)}+\vec b^{(i)})ht(i)​=f(W(i)ht(i−1)​+V(i)ht−1(i)​+b(i))
t=第二章,i=第二轮,那么其学习记忆=W第一轮第二章的学习记忆+V第二轮第一章的学习记忆。

1.4 BPTT算法

BPTT和BP很类似,是一个思路,但是因为这里和时刻有关系。

在这样一个多分类器中,损失函数是一个交叉熵。
某一时刻的损失函数是:Et(yt,y^t)=−ytlog⁡y^tE_{t}\left(y_{t}, \hat{y}_{t}\right)=-y_{t} \log \hat{y}_{t}Et​(yt​,y^​t​)=−yt​logy^​t​
最终的损失函数是所有时刻的交叉熵相加:E(y,y^)=∑tEt(yt,y^t)=−∑ytlog⁡y^t\begin{aligned} E(y, \hat{y}) &=\sum_{t} E_{t}\left(y_{t}, \hat{y}_{t}\right) \\ &=-\sum y_{t} \log \hat{y}_{t} \end{aligned}E(y,y^​)​=t∑​Et​(yt​,y^​t​)=−∑yt​logy^​t​​
损失函数对W求偏导:∂E∂W=∑t∂Et∂W\frac{\partial E}{\partial W}=\sum_{t} \frac{\partial E_{t}}{\partial W}∂W∂E​=∑t​∂W∂Et​​

假设t=3,∂E3∂W=∂E3∂y^3∂y^3∂s3∂s3∂W\frac{\partial E_{3}}{\partial W}=\frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}} \frac{\partial s_{3}}{\partial W}∂W∂E3​​=∂y^​3​∂E3​​∂s3​∂y^​3​​∂W∂s3​​
E3E_3E3​和y3y_3y3​有关系,y3y_3y3​和s3s_3s3​有关系(参考2.1中的公式)。
而s3=tanh(Ux3+Ws2)s_3=tanh(Ux_3+Ws_2)s3​=tanh(Ux3​+Ws2​),s3s_3s3​和s2s_2s2​有关系,我们对s3s_3s3​对W求偏导不能直接等于s2s_2s2​,因为s2s_2s2​也和W有关系。
s2=tanh(Ux2+Ws1)s_2=tanh(Ux_2+Ws_1)s2​=tanh(Ux2​+Ws1​)

s2s_2s2​和s1s_1s1​有关系…一直到0时刻。所以我们会把每个时刻的相关梯度值相加:∂s3∂W=∑k=03∂s3∂sk∂sk∂W\frac{\partial s_{3}}{\partial W}=\sum_{k=0}^{3} \frac{\partial s_{3}}{\partial s_{k}} \frac{\partial s_{k}}{\partial W}∂W∂s3​​=k=0∑3​∂sk​∂s3​​∂W∂sk​​

其中我们在计算∂s3∂s2\dfrac{\partial s_3}{\partial s_2}∂s2​∂s3​​的时候需要使用链式法则计算:∂s3∂s1=∂s3∂s2∂s2∂s1∂s1∂s0\dfrac{\partial s_3}{\partial s_1}=\dfrac{\partial s_3}{\partial s_2}\dfrac{\partial s_2}{\partial s_1}\dfrac{\partial s_1}{\partial s_0}∂s1​∂s3​​=∂s2​∂s3​​∂s1​∂s2​​∂s0​∂s1​​

所以最终得到:∂E3∂W=∑k=03∂E3∂y^3∂y^3∂s3∂s3∂sk∂sk∂W=∑k=03∂E3∂y^3∂y^3∂s3(∏j=k+13∂sj∂sj−1)∂sk∂W\frac{\partial E_{3}}{\partial W}=\sum_{k=0}^{3} \frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}} \frac{\partial s_{3}}{\partial s_{k}} \frac{\partial s_{k}}{\partial W} =\sum_{k=0}^{3} \frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial s_{3}}\left(\prod_{j=k+1}^{3} \frac{\partial s_{j}}{\partial s_{j-1}}\right) \frac{\partial s_{k}}{\partial W}∂W∂E3​​=k=0∑3​∂y^​3​∂E3​​∂s3​∂y^​3​​∂sk​∂s3​​∂W∂sk​​=k=0∑3​∂y^​3​∂E3​​∂s3​∂y^​3​​⎝⎛​j=k+1∏3​∂sj−1​∂sj​​⎠⎞​∂W∂sk​​

看公式中有连乘的部分。当使用tanh作为激活函数的时候,由于导数值分别在0到1之间,随着时间的累计,小于1的数不断相城,很容易趋近于0。(另外一种解释:如果权重矩阵 W的范数也不很大,那么经过

第七课 循环神经网络与自然语言处理相关推荐

  1. 第二十四课.循环神经网络RNN

    目录 朴素RNN与LSTM 从NN到RNN RNN结构 LSTM RNN的扩展模型 多层RNN 双向RNN 递归网络Recursive Network 注意:本篇是RNN的内容补充,关于RNN模型和B ...

  2. PyTorch 入门与实践(七)循环神经网络(RNN)

    来自 B 站刘二大人的<PyTorch深度学习实践>P12 的学习笔记 RNN Cell 循环神经网络的隐藏层都是线性层(Linear),由于它主要用于预测有前后关系的序列输入,所以它像斐 ...

  3. 【一起入门NLP】中科院自然语言处理第5课-循环神经网络RNN(BPTT+LSTM+GRU)

    专栏介绍:本栏目为 "2021秋季中国科学院大学胡玥老师的自然语言处理" 课程记录,不仅仅是课程笔记噢- 如果感兴趣的话,就和我一起入门NLP吧

  4. 深度学习笔记七:循环神经网络RNN(基本理论)

    参考: RECURRENT NEURAL NETWORKS TUTORIAL, PART 1 – INTRODUCTION TO RNNS A Critical Review of Recurrent ...

  5. 循环神经网络和自然语言处理介绍

    目标 1.了解token和tokenization. 2.知道N-gram的概念和作用. 3.知道文本向量化表示的方法. 1.文本的tokenization 1.1 基本概念 tokenization ...

  6. 精讲深度学习RNN三大核心点,三分钟掌握循环神经网络

    本文将剖析循环神经网络(RNN)的工作原理,精讲循环神经网络的特点和实现方式.野蛮智能,小白也能看懂的人工智能. 循环神经网络从何而来? 我在我的这篇文章介绍了卷积神经网络(CNN)卷积神经网络(CN ...

  7. TensorFlow深度学习实战---循环神经网络

    循环神经网络(recurrent neural network,RNN)-------------------------重要结构(长短时记忆网络( long short-term memory,LS ...

  8. rnn神经网络 层次_精讲深度学习RNN三大核心点,三分钟掌握循环神经网络

    每天给小编五分钟,小编用自己的代码,让你轻松学习人工智能.本文将剖析循环神经网络(RNN)的工作原理,精讲循环神经网络的特点和实现方式.野蛮智能,小白也能看懂的人工智能. 循环神经网络从何而来? 我在 ...

  9. NLP学习笔记-循环神经网络RNN、情感分类、LSTM(二)

    循环神经网络和自然语言处理介绍 1. 文本的tokenization 1.1 概念和工具的介绍 tokenization就是通常所说的分词,分出的每一个词语我们把它称为token. 常见的分词工具很多 ...

最新文章

  1. 多层科目任意组合汇总报表的性能优化 (上)
  2. java.lang.OutOfMemoryError: Java heap space解决方法
  3. 网络层协议简介之ICMP和ARP
  4. Java was started but returned exit code=13 问题解决
  5. Phthon学习---错误处理、调试和测试
  6. java字符编码详解_Java中字符编码格式详解
  7. 为什么运行review manager很卡顿_手机明明没坏,为什么声音开到最大依然很小?原来问题在这里...
  8. Android源码分析(一)-----如何快速掌握Android编译文件
  9. matlab两条曲线方程求交点_matlab中已知两曲线方程,怎样求两曲线交点并标注出?...
  10. 面试官:Glide 是如何加载 GIF 动图的?
  11. 微信小程序开发常见的错误
  12. ascii码值为负数_C语言编程基础学习字符型数据的ASCII码值为何是负数?
  13. 基于Node.js的ORM框架 Prisma的上手使用
  14. Python 粒子群算法 PSO
  15. 营收数据增长的京东物流,期待“外部探索”
  16. kali linux安装upupoo_Kali Linux 下载、引导、安装
  17. 图片转字符画(python)
  18. 【Html——浪漫花瓣特效(效果+代码)】
  19. ECCV 2018论文解读及资源集锦(8月20日更新)
  20. 学生小白怎样搭建个人网站?

热门文章

  1. Java-消息框显示两整数加减乘除
  2. 【ASP.NET】获取网站目录的方法
  3. 沈向洋谈文献阅读(转载)
  4. MyEclipse2015双击不能打开文件
  5. Android TextView长按复制实现,Android复制文本
  6. Netcdf 文件多属性,按照时间段导出代码示例
  7. typescript mongodb 教程搜集
  8. Windows 环境下 Chrome浏览器崩溃“STATUS_INVALID_IMAGE_HASH”
  9. C#图片按指定大小分割
  10. JSON简介,语法,在html中应用