RNN&LSTM


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

引言

应用示例-槽填充(slot filling)-订票系统

在这里插入图片描述
将句子输入给系统,系统将关键信息放到相应的槽内。

这个问题可以用前馈网络(Feedward network)?
输入: 一个词(每一个词都可以用一个向量表示)
在这里插入图片描述
怎么把一个词汇用一个向量表示呢?

  • 1-of-N encoding
    在这里插入图片描述
  • Beyond 1-of-N encoding
  1. Dimension of ‘Other’
    在这里插入图片描述

  2. Word hashing
    在这里插入图片描述

输出: 输入词汇属于每个槽的几率
在这里插入图片描述
但是同一个词在不同语句中的语义可能不同
在这里插入图片描述
如果我们的网络有记忆力的话就可以根据上下文产生不同的输出。

二、循环神经网络(RNN)

隐层的输出会被存到memory里,memory会作为下一次的输入。
在这里插入图片描述
下面举一个例子:
假设所有的权重都是“1”,没有偏差;所有激活函数都是线性的。

输入序列:
[ 1 1 ] [ 1 1 ] [ 2 2 ] . . . \begin{bmatrix} 1 \\ 1 \\ \end{bmatrix} \begin{bmatrix} 1 \\ 1 \\ \end{bmatrix} \begin{bmatrix} 2 \\ 2 \\ \end{bmatrix} ... [11][11][22]...

1.给memory初始值,eg. [0, 0], 输入 [1, 1]
在这里插入图片描述
输出 [4, 4]
在这里插入图片描述
2.更新memory, [2, 2], 在输入 [1, 1]
在这里插入图片描述
输出 [12,12]

2.更新memory, [6, 6], 在输入 [2, 2]
在这里插入图片描述
输出 [32,32]
memory变为[16, 16]

改变序列顺序将会改变输出。

所以我们要用RNN处理slot filling的问题的话:
在这里插入图片描述
在这里插入图片描述
由于存入的memory不一样,导致相同词的输出不一样。

当然上面是原理,RNN的架构我们可以自己设计
在这里插入图片描述

  • Elman Network:把hidden layer的值存起来,下一个时间点读取
    在这里插入图片描述

  • Jordan Network: 把output的值存起来,下一个时间点读取
    在这里插入图片描述
    传说Jordan Network有着更好表现,因为不知道RNN的潜层学到了什么

  • Bidirectional RNN:双向读取数据,更好的学习上下文
    在这里插入图片描述

  • Long Short-term Memory (LSTM):比较长的短时记忆网络

在这里插入图片描述

三、Long Short-term Memory (LSTM)

LSTM原理

在这里插入图片描述
有四个输入: Z , Z i , Z f , Z o Z, Z_i, Z_f, Z_o Z,Zi,Zf,Zo,memory记录为c
三个门:输入门、遗忘门(打开记得,关闭遗忘)、输出门
Z i , Z f , Z o Z_i, Z_f, Z_o Zi,Zf,Zo通过的激活函数f通常是sigmoid函数,选择sigmoid函数意义就是它界在0,1之间,这个0到1的值代表这个Gate打开的程度。

接下来,
在这里插入图片描述

c ′ = g ( z ) f ( z i ) + c f ( z f ) c' = g(z)f(z_i) + cf(z_f) c=g(z)f(zi)+cf(zf)
a = h ( c ′ ) f ( z o ) a = h(c')f(z_o) a=h(c)f(zo)

[总结](https://zhuanlan.zhihu.com/p/42717426)

输入 Z , Z i , Z f , Z o Z, Z_i, Z_f, Z_o Z,Zi,Zf,Zo分别为:

  • Z = [ h t − 1 , x t ] Z = [h_{t-1}, x_t] Z=[ht1,xt]
  • Z i = W i ∗ [ h t − 1 , x t ] + b i Z_i = W_i*[h_{t-1}, x_t] + b_i Zi=Wi[ht1,xt]+bi
  • Z f = W f ∗ [ h t − 1 , x t ] + b f Z_f= W_f*[h_{t-1}, x_t] + b_f Zf=Wf[ht1,xt]+bf
  • Z o = W o ∗ [ h t − 1 , x t ] + b o Z_o= W_o*[h_{t-1}, x_t] + b_o Zo=Wo[ht1,xt]+bo

其中 f = σ , g = h = tanh ⁡ f = \sigma, g = h = \tanh f=σ,g=h=tanh

三个门:

  • i t = σ ( W i ∗ [ h t − 1 , x t ] + b i ) i_t = \sigma (W_i*[h_{t-1}, x_t] + b_i) it=σ(Wi[ht1,xt]+bi)
  • f t = σ ( W f ∗ [ h t − 1 , x t ] + b f ) f_t= \sigma (W_f*[h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)
  • o t = σ ( W o ∗ [ h t − 1 , x t ] + b o ) o_t= \sigma (W_o*[h_{t-1}, x_t] + b_o) ot=σ(Wo[ht1,xt]+bo)

输出 h t , C t h_t, C_t ht,Ct

  • C t = i t C ^ t + f t ∗ C t − 1 C_t = i_t\hat{C}_t + f_t*C_{t-1} Ct=itC^t+ftCt1, 其中 C ^ t = g ( Z ) \hat{C}_t=g(Z) C^t=g(Z)
  • h t = o t h ( C t ) h_t = o_th(C_t) ht=oth(Ct)

LSTM例子

输入是三维的向量,输出是一维的向量:
在这里插入图片描述
当x_2=1时,将x_1的数字就会被写到memory里面
当x_2=-1时,memory中的值会被遗忘
当x_3=1时,才会打开output gate,输出memory中的数字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

lstm的训练

在这里插入图片描述
在这里插入图片描述

RNN的训练是复杂的:
在这里插入图片描述
原因是误差面不是很平就是很陡(sigmoid function):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解决方法:
梯度裁剪,不让梯度大于某个值。

在这里插入图片描述
从这个例子可以看出来为什么RNN会有问题。
RNN从时间点到另一个时间点,weight被反复使用。

RNN的每个时间点的memory都会被覆盖掉。

有用的技巧——长时短期记忆
在这里插入图片描述

可以处理渐变消失(不是渐变爆炸)?

  • RNN的每个时间点的memory都会被覆盖掉,而LSTM是memory与输入相加。
  • 影响永远不会消失,除非忘记关门

没有渐变消失(如果忘记门被打开)。

门控递归单元 (Gated GRU) :比LSTM简单
如果lstm的overfitting很严重,可以试一试GRU

others工作:
在这里插入图片描述

RNN不但可以N2N

Many2One(输入是一个矢量序列,但输出只有一个矢量)

在这里插入图片描述
在这里插入图片描述

Many2Many(Output is shorter)

  • Speech Recognition
    在这里插入图片描述
  • Connectionist Temporal Classication
    在这里插入图片描述


在这里插入图片描述

多对多(不限)

输入和输出都是长度不同的序列。一序列到序列的学习

  • 例如机器翻译(machine learning 一> 机器学习)
    在这里插入图片描述
    他不知道何时停下来。

在这里插入图片描述
在这里插入图片描述
推一个‘断’,他就停下来了。

在这里插入图片描述
类比Seq2Seq也是如此。

在这里插入图片描述

Seq2Seq也可以用在

  • 超越序列(Beyond Sequence)。
    句法分析
    在这里插入图片描述
  • 自动编码器-文本(Auto-encoder-Text)
    要理解一个语序的意思,语序是不能忽略的。
    在这里插入图片描述
    比较容易得到文法的意思。

在这里插入图片描述

  • 自动编码器-语音(Auto-encoder-Speech)
    变长序列的降维
    audio segments(word-level) —> Fixed-length vector
    在这里插入图片描述
    可以用于语音搜寻:
    在这里插入图片描述
    在这里插入图片描述

但是只有RNN的encoder我们没有办法train
在这里插入图片描述
在这里插入图片描述
Demo: Chat-bot
在这里插入图片描述
Attention-based Model
在这里插入图片描述
大脑可以根据提问,回答与之相关的事情。Machine也可以:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RNN与Structured Learning可以结合
底部用RNN、LSTM,输出在通过HMM, CRF Structured Perceptron/SVM

  • 显式建模依赖关系
  • Cost是Error的上界

在这里插入图片描述
p ( x l ) p(x_l) p(xl)可以直接无视,因为最后你得到这个几率在inference的时候,x是声音信号是已知的,你是穷举y,看那个可以让P(x,y)最大。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笔下万码生谋略

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值