zoukankan      html  css  js  c++  java
  • 李宏毅机器学习课程笔记-9.5详解基于LSTM的RNN

    1层LSTM神经元的架构

    根据上述内容,你可能看不出LSTM与RNN有什么关系,接下来具体介绍LSTM在RNN中的应用。

    假设我们现在有一些LSTM(下图中白色部分)作为神经元,每个LSTM的memory cell里都存了一个scalar值(下图中红框中内容),把这些scalar连接起来就组成了1个vector (c^{t-1}),即关于上个input(时间点为t-1)的memory。

    img

    在时间点t,输入为1个vector (x^t),它会经过4个线性的transform得到(z^f,z^i,z,z^o)(z^f,z^i,z,z^o)这4个vector的dimension数量和LSTM神经元的数量相等,这4个vector的1个dimension即为1个LSTM神经元的输入(4个vector的第1个dimension为第1个LSTM神经元的输入)。

    1个LSTM神经元的运算方法

    下图是单个LSTM神经元的运算方法,其4个input分别是(z)(z^i)(z^f)(z^o)的其中1维(1维为1个神经元的输入)。每个LSTM神经元的input是各不相同的,但它们可以共同运算。

    1个LSTM神经元的运算方法如下图所示。

    img

    (f(z^f))与上一个时间点的memory (c^{t-1})对应的cell值相乘,加上(g(z))(f(z^i))的乘积,得到该时刻该cell中的值(c^t),最终再乘以output gate的信号(f(z^o)),得到输出(y^t)

    1个LSTM神经元在相邻时刻时的运算方法

    img

    上图是同1个LSTM神经元在2个相邻时刻的运算方法,其中与前文描述略有不同的是,这里还需要把当前时刻该神经元的输出(y^t)以及该神经元中cell保存的值(c^t)(peephole)都连接到下一时刻的输入上。因此在(t+1)时刻,神经元不只是考虑当前的输入(x^{t+1}),还要看前一时刻该神经元的输出(h^t)和cell保存值(c^t)

    如何考虑结合(t+1)时刻的输入(x^{t+1})和上一时刻该神经元的信息(h^t,c^t)呢?====>(x^{t+1})(h^t)(c^t)这3个vector并在一起,乘上4个不同的转换矩阵,得到该神经元(t+1)时刻的4个输入(z)(z^i)(z^f)(z^o)

    多层LSTM在相邻时刻的运算方法

    img

    上图中左边一列的2个LSTM代表2层LSTM,右边一列的2个LSTM则代表它们在下一时刻的状态。即横向是时间轴,纵向是层轴。

    虽然看起来很复杂,感觉不一定work,但LSTM在RNN中已成为了标准做法。


    Github(github.com):@chouxianyu

    Github Pages(github.io):@臭咸鱼

    知乎(zhihu.com):@臭咸鱼

    博客园(cnblogs.com):@臭咸鱼

    B站(bilibili.com):@绝版臭咸鱼

    微信公众号:@臭咸鱼

    转载请注明出处,欢迎讨论和交流!


  • 相关阅读:
    sass学习笔记1
    javascript 数组的深度复制
    div+css定位position详解
    滚动加载图片(懒加载)实现原理
    移动端布局经验
    js 扁平化输出数组
    axiso基本使用及python接收处理
    JSP内置对象
    JSP基本语法
    tomcat环境搭建
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/14656744.html
Copyright © 2011-2022 走看看