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

文章目录

  • 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+WSt1) 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+Vht1+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}_thtU[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(i1)+V(i)ht1(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)=ytlogy^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^)=tEt(yt,y^t)=ytlogy^t
损失函数对W求偏导:∂E∂W=∑t∂Et∂W\frac{\partial E}{\partial W}=\sum_{t} \frac{\partial E_{t}}{\partial W}WE=tWEt

假设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}WE3=y^3E3s3y^3Ws3
E3E_3E3y3y_3y3有关系,y3y_3y3s3s_3s3有关系(参考2.1中的公式)。
s3=tanh(Ux3+Ws2)s_3=tanh(Ux_3+Ws_2)s3=tanh(Ux3+Ws2)s3s_3s3s2s_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_2s2s1s_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}Ws3=k=03sks3Wsk

其中我们在计算∂s3∂s2\dfrac{\partial s_3}{\partial s_2}s2s3的时候需要使用链式法则计算:∂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}s1s3=s2s3s1s2s0s1

所以最终得到:∂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}WE3=k=03y^3E3s3y^3sks3Wsk=k=03y^3E3s3y^3j=k+13sj1sjWsk

看公式中有连乘的部分。当使用tanh作为激活函数的时候,由于导数值分别在0到1之间,随着时间的累计,小于1的数不断相城,很容易趋近于0。(另外一种解释:如果权重矩阵 W的范数也不很大,那么经过 𝑡−𝑘 次传播后,∂s3∂sk\dfrac{\partial s_3}{\partial s_k}sks3的范数会趋近于0,这也就导致了梯度消失。)

梯度消失带来的一个问题就是记忆力有限,离得越远的东西记住得越少。

1.5 生成模型与图像描述

一张图片->经过VGG网络,取得倒数第一层的输出->作为RNN第一层的多加的输入。
在这里插入图片描述

2 LSTM

2.1 LSTM

LSTM就是为了解决普通RNN中的梯度消失问题提出的。
LSTM提出了记忆细胞C,以及各种门。下图中的h与上面的S是相同含义,表示记忆。每个时刻的输出,在这里是没有画出来的。
假设现在有一个任务是根据已经读到的词,预测下一个词。例如输入法,生成诗词。

在这里插入图片描述

第1步:忘记门:从记忆细胞中丢弃一些信息
在这里插入图片描述

使用sigmoid函数,经过sigmoid之后得到一个概率值,描述每个部分有多少量可以通过。
ft=σ(Wf⋅[ht−1,xt]+bf)f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)ft=σ(Wf[ht1,xt]+bf)

如果C中包含当前对象的性别属性,现在已经正确的预测了当前的名词。当我们看到另外一个新的对象的时候,我们希望忘记旧对象的性别属性。

第2步:更新什么新信息到记忆中
在这里插入图片描述

sigmoid决定什么值需要更新: it=σ(Wi⋅[ht−1,xt]+bi)i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)it=σ(Wi[ht1,xt]+bi)
tanh层创建一个新的候选值向量(高三这一年学到的所有知识): C~t=tanh⁡(WC⋅[ht−1,xt]+bC)\tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)C~t=tanh(WC[ht1,xt]+bC)

第3步:更新记忆细胞
在这里插入图片描述

把旧状态与ftf_tft相乘,丢弃掉我们确定需要丢弃的信息;
加上iti_tit*C~t\tilde{C}_{t}C~t,就是新的候选值,更新状态。
Ct=ft∗Ct−1+it∗C~tC_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}Ct=ftCt1+itC~t
Ct−1C_{t-1}Ct1是到高二以及之前的所有记忆,C~t\tilde{C}_{t}C~t高三这一年学到的所有知识。带着两部分应该留下的内容去高考。

在任务中就是希望把新看到对象的性别属性添加到C,而把旧对象的性别属性删除。

第4步,基于细胞状态得到输出
在这里插入图片描述

首先一个sigmoid层确定细胞状态的哪个部分的值将输出:ot=σ(Wo[ht−1,xt]+bo)o_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right)ot=σ(Wo[ht1,xt]+bo)

接着用tanh处理细胞状态,输出我们确定输出的那部分,这部分是记忆用于下一时刻帮助做出决策的:ht=ot∗tanh⁡(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht=ottanh(Ct)

在语言模型中,既然我当前看到了一个对象,这里可能输出一个动词信息,以备下一步需要用到。例如这里可能输出当前对象是单数还是复数,这样就知道下一个动词应该填写什么形式。

总结:
在这里插入图片描述

1:决定老细胞只留下哪部分ft=σ(Wf⋅[ht−1,xt]+bf)f_{t}=\sigma\left(W_{f} \cdot\left[h_{t-1}, x_{t}\right]+b_{f}\right)ft=σ(Wf[ht1,xt]+bf)
2: 决定新知识应该记住哪部分:it=σ(Wi⋅[ht−1,xt]+bi)i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right)it=σ(Wi[ht1,xt]+bi)
新学习到的知识:C~t=tanh⁡(WC⋅[ht−1,xt]+bC)\tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)C~t=tanh(WC[ht1,xt]+bC)
3 更新细胞状态:Ct=ft∗Ct−1+it∗C~tC_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}Ct=ftCt1+itC~t
4 决定要输出哪部分:ot=σ(Wo[ht−1,xt]+bo)o_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right)ot=σ(Wo[ht1,xt]+bo)
产生隐藏状态的输出:ht=ot∗tanh⁡(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht=ottanh(Ct)

对比普通的RNN,输出ot=σ(VSt)o_t=\sigma\left(VS_t\right)ot=σ(VSt),St=tanh(Uxt+WSt−1)S_t=tanh(Ux_t+WS_{t-1})St=tanh(Uxt+WSt1),对于记忆StS_tSt是由之前记忆和新知识共同组成。加入细胞状态可以选择忘记一部分老知识和选择忘记一部分新知识。

在之前的求导过程中∂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}s1s3=s2s3s1s2s0s1,现在变为。。。。。

输出ot=σ(Vht)o_t=\sigma\left(Vh_t\right)ot=σ(Vht)
ht=ot∗tanh⁡(Ct)h_{t}=o_{t} * \tanh \left(C_{t}\right)ht=ottanh(Ct)
Ct=ft∗Ct−1+it∗C~t=ft∗Ct−1+it∗tanh⁡(WC⋅[ht−1,xt]+bC)C_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t}=f_{t} * C_{t-1}+i_t*\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right)Ct=ftCt1+itC~t=ftCt1+ittanh(WC[ht1,xt]+bC)
损失函数不变,还是令t=3,∂E3∂W=∂E3∂y^3∂y^3∂h3∂h3∂C3∂C3∂Wc\frac{\partial E_{3}}{\partial W}=\frac{\partial E_{3}}{\partial \hat{y}_{3}} \frac{\partial \hat{y}_{3}}{\partial h_{3}} \frac{\partial h_{3}}{\partial C_3}\frac{\partial C_{3}}{\partial W_c}WE3=y^3E3h3y^3C3h3WcC3

要求∂C3∂Wc\dfrac{\partial C_3}{\partial W_c}WcC3,这样CtC_tCtWcW_cWc有关系,Ct−1C_{t-1}Ct1WcW_cWc有关系,两部分相加,对整个函数求导,就是对这两部分分别求导,再相加。与普通RNN的相乘
∂C3∂C1=∂C3∂C2+∂C2∂C1=?\dfrac{\partial C_3}{\partial C_1}=\dfrac{\partial C_3}{\partial C_2}+\dfrac{\partial C_2}{\partial C_1}=?C1C3=C2C3+C1C2=?

2.2 GRU

GRU是LSTM的变种之一。
在这里插入图片描述

GRU做的改变是:
1 将忘记门和输入门合并成一个门,称为更新门。
2 细胞状态和隐藏状态,也就是上面的C和hth_tht合并为一个hth_tht
这样GRU的参数就比标准LSTM要少,在很多情况下效果基本一致。

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

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

相关文章

第十二题:设int x=1,float y=2,则表达式x/y的值是:

第十二题 设int x1,float y2,则表达式x/y的值是:() A 0 B 1 C 2 D 以上都不是 懵逼树上懵逼果,懵逼树下你和我 首先看到这道题,我是懵逼和绝望的。 首先我们打开评论,看看谁的赞最多,拿…

Linux 安装 lanmp

Lanmp介绍 lanmp一键安装包是wdlinux官网2010年底开始推出的web应用环境的快速简易安装包. 执行一个脚本,整个环境就安装完成就可使用,快速,方便易用,安全稳定 lanmp一键安装包是用shell脚本编写,且是开源的,你也可以根据业务需求,做相应的调整,来安装自…

如何利用Featue对特定的文档库或列表添加listviewtoolbar上的button

名字有点长,实在想不出什么好名字。 我们经常会遇到一个问题,就是需要在某一个列表或者文档库视图画面的listviewtoolbar上添加一个按钮来做一些操作。比如说页面跳转,列表操作等。目前很多人都知道利用Feature来添加这个button,而…

第八课 RNN条件生成与Attention机制

文章目录1 RNN条件生成2 机器翻译2.1 V1:Encoder-Decoder2.2 V2:Attention-based Encoder-decoder2.3 V3:bi-directional encode layer2.4 V4:Residual Encode layer3 Attention3.1 self attention3.2 hierarchical attention4 图像生成文本4.1 问题引入…

第十四题: 以下代码的输出结果是?

第十四题: 以下代码的输出结果是? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class B { public static B t1 new B(); public static B t2 new B(); { System.out.println("构造块"); } static { Syst…

第一百二十三期:免费在线制图神器!不上水印支持中文版,GitHub标星已破1万2

又一免费制图神器来袭!打开网页就能使用,支持中文版,也不会给你上水印。 作者:乾明 又一免费制图神器来袭! 名为draw.io,打开网页就能使用,支持中文版,也不会给你上水印。 不只是…

常用javascript脚本

BS开发中常用的Javascript技术 一、验证类 1、数字验证内 1.1 整数 1.2 大于0的整数 (用于传来的ID的验证) 1.3 负整数的验证 1.4 整数不能大于iMax 1.5 整数不能小于iMin 2、时间类 2.1 短时间,形如 (13:04:06) 2.2 短日期,形…

第一百二十四期:2019年臭名昭著的勒索软件,网络钓鱼和僵尸网络

Webroot发布了年度恶意软件列表,展示了2019年最臭名昭著的网络安全威胁。从攻击次数最多的勒索软件和加密挖矿,到破坏最大的网络钓鱼攻击,显然,全球网络威胁正在变得更为先进且难以预测。 作者:kirazhou 勒索软件 在…

好久没发胡说八道的贴了,今天发一贴

看了老翅寒暑 [真实案例:给所有想要创业的朋友的一个管理方面的测试题]一贴http://www.cnblogs.com/BigTall/archive/2006/12/20/597896.html这是一个真实的事件,我把它转化为了一个测试题目,问过很多朋友,到目前为止我认为答满分…

N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑

转载自时空霹雳 在统计语言模型章节中,我们谈到了N元语法模型不可避免的一个问题,就是数据稀疏,其原因是大规模语料统计与有限语料的矛盾。根据齐普夫(Zipf)法则,我们能够推测知零概率问题不可避免。数据稀…

错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.application.Application 看到这样的问题让我一头雾水,因为…

第十章 条件随机场CRF

文章目录1 条件随机场定义1.1 马尔科夫随机场1.1.1 用图模型表示概率1.1.3 三个马尔科夫性1.1.3 重点再看局部马尔科夫性1.2 马尔科夫随机场的因子分解1.3 条件随机场1.4 线性链条件随机场2线性链条件随机场的表示形式2.1 参数化形式2.2 简化形式2.3 矩阵形式3 条件随机场的概率…

第一百二十五期:程序员的自我救赎,使用Python开发性格分析工具

如此不均衡的贫富差距,各行业的领导者如何能管理好公司,让员工们既努力产出,又能安于现状呢?每个领导者必学的一门课程就是职场心理学。只有你充分了解员工心理与对应的行为表现,才能从容的掌控各类型的人员,从而达到…

笛卡尔乘积算法的体现

一个商品有多项属性,多项属性的组合就产生不同的商品型号如:衣服:颜色:红、绿尺寸:大、中、小产生的系列就有:红|大、红|中、红|小、绿|大、绿|中、绿|小如果商品的属性不至两个,则产生的系列会…

知识图谱基础

本系列是学习七月算法知识图谱课程的笔记。感觉自己完全就是一个托儿。前面七月算法机器学习,七月算法深度学习的笔记。现在又来了知识图谱课程的笔记。 文章目录1 why知识图谱2 知识图谱前世今生3 知识图谱相关技术4 知识图谱应用案例1 why知识图谱 没有知识图谱&…

第一百二十六期:代码以外的生存之道,献给每位入了坑的码农

本篇内容主要是对这本书的一个总结概括,也希望能用作抛砖引玉,让读者在看完之后,对这本书有所兴趣,或者希望能让读者对代码以外的需要做的事情更加积极明朗一点。 作者:码农三哥 前言 最近刚刚读完了一本书&#xf…

【UOJ 51】最接近神的人

【题目描述】: 破解了符文之语,小FF开启了通往地下的道路。当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案。而石门上方用古代文写着“神的殿堂”。小FF猜想里面应该就有王室的遗产了。但现在的…

第一百二十七期:程序员41岁创业逆袭成全美最受欢迎CEO,公司市值近200亿美金

袁征(Eric Yuan)在国内鲜为人知,却在硅谷的商业世界,创造了华人新的可能性——带领公司成功上市,成为全美国上市公司当中、美国面向全球的企业里估值最高的华人CEO。 作者:新芽NewSeed 导语:袁…

词汇挖掘与实体识别(未完)

文章目录1 概述2 词汇挖掘2.1 关键词提取2.1.1 基于特征统计2.1.2 基于主题模型2.1.3 Text-Rank算法提取2.2 同义词挖掘2.2.1 同义词类型2.2.2 挖掘2.3 缩略词挖掘2.4 新词挖掘3 实体识别(NER)3.1 基于概率图模型3.2 基于深度学习1 概述 实体:是文本中的一些词汇或…

第一百二十八期:推荐几个IDEA插件,Java开发者撸码利器,你get到了吗

一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署。收费的,破解比较麻烦。不过功能确实很强大。 作者:编程届java员 JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件&#xff…