LSTM学习笔记

先前学习

Karpathy博客链接:[传送门](http://karpathy.github.io/2015/05/21/rnn-effectiveness/)
Colah博客链接:[传送门](http://colah.github.io/posts/2015-08-Understanding-LSTMs/)
B站干货课程:[传送门](https://www.bilibili.com/video/av30578651?from=search&seid=9493375067974870259)
  神经网络模拟了人脑处理未来信号的行为过程。每一个信号都有一个合理的weights。下图为一个神经元的样子:

神经元本身不是"线性"的,而是“二值”的,根据刺激决定是否“兴奋”,因而存在activation function,信号达到一定强度才会on。从数学角度,不太像是神经网络。

RNN

  人类不会每秒钟都从头开始思考。对于每个词的理解,都是建立在对之前的词的理解上的。传统的神经网络做不到这一点。RNN解决了这个问题,它们是带有循环的网络,信息可以“持续存在”,解决sequence问题。

可以将循环神经网络视为同一个网络的多个副本,每个副本都将消息传递给后继者。
RNN是双向变深的,通常“很大”。

  RNN的一个吸引力是他们可能能够将先前信息连接到当前任务(环线),例如使用先前的视频帧参与对当前帧的理解。但是有一些情况需要更多的背景信息(时间较长的记忆关系),RNN有可能无法学习连接信息。理论上,RNN绝对能够处理这种“长期依赖性”。人类可以仔细挑选参数来解决这种形式的问题。遗憾的是,在实践中,RNN似乎无法学习它们。庆幸的是,LSTM没有这个问题!

代码看RNN

  核心部分,RNN的API十分友好,它接受x,输出y。

rnn = RNN()
y = rnn.step(x) # x is an input vector, y is the RNN's output vector
class RNN:
  # ...
  def step(self, x):
    # update the hidden state
    self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x))
    # compute the output vector
    y = np.dot(self.W_hy, self.h)
    return y

两层的RNN:

y1 = rnn1.step(x)
y = rnn2.step(y1)

LSTM

  长短期内存网络–通常只称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖性。LSTM可以选择性忘记不重要的信息,只关联重要的信息。所有的递归神经网络都有一个神经网络的重复模块链的形式。在LSTM中,这个重复模块有4层。

一些符号的意义如下:

LSTM的核心思想

  LSTM最关键的是细胞的状态,也就是贯穿整个图像的最上方一条线。它像是一条传输带一样,数据只是有一些线性的互动。想做到信息顺其运送而不发生改变很简单。

LSTM可以通过gates改变细胞状态,包含一个sigmoid神经层和一个逐点乘法运算。sigmoid输出从0到1的一个数字,表示每种元素应该传输多少。LSTM有三个这样的gates,控制细胞状态。   LSTM可以衡量信息是否重要,而不是“无脑”传递。

一步一步看LSTM

  LSTM的第一步是决定要从状态中丢弃什么信息。这是由一个叫做“forget gate layer”的sigmoid层实现的。它检查ht−1和xt,并输出一个针对每一个Ct-1的介于0与1之间的事情。

  LSTM的第二步是判断要在细胞状态中存储什么新的信息。由两部分组成,包括一个叫做“input gate layer”的sigmoid层决定需要更新什么内容;和一个tanh层创建需要被加入现在state的结果向量。
  LSTM的第三步是根据自身input以及要不要忘记衡量自己的价值,最终传递到output layer,决定输出。

LSTM的应用

对于不确定性很高的内容(语音识别、手写识别),LSTM非常重要。

  • input不是sequence,output是
     上传一张图片,生成文字描述
  • input是sequence,output不是
     视频分类,财经数据分析
  • input和output都是sequence
     语音翻译。

Bi-LSTM

介绍博客:传送门
训练代码博客:传送门
  BiLSTM是Bi-directional Long Short-Term Memory的缩写,是由前向LSTM与后向LSTM组合而成。LSTM模型可以捕捉到较长距离的依赖关系,但是无法捕捉反向的语义依赖(e.g. ”这个餐厅脏得不行“,“不行”修饰的是“脏”)。Bi-LSTM可以解决这个问题。
  对“我爱中国”进行编码:

Tree-LSTM

介绍与计算博客:传送门

空白方框是一个LSTM的单元。文本序列为x1,x2,x4,x5,x6。x是输入序列,y是每个x输入后经过LSTM一个时间片段的预测输出。树型结构展示了结果y之间的依靠关系。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值