LSTM相关的一些问题

前言

最近在看深度学习相关的东西,就把一些自己想了很久,网上的答案也不是很详细的东西记录下来,可能会有部分错误,会不断改进哒。

RNN 与 LSTM 相关基础

  • 网上看到的RNN的网络图如下:

但是也可以将RNN的网络图画成如下的模式:

是不是很眼熟!对,LSTM只是在RNN的基础上进行了扩展,添加了很多gate来控制之前的记忆,以解决RNN可能引起的梯度弥散与梯度爆炸(这里可以参考YJango的循环神经网络——实现LSTM)的问题。

  • 传统的LSTM的网络图看上去特别复杂:

    • 小圆圈是point-wise的操作,比如向量加法、点乘等
    • 小矩形代表一层可学习参数的神经网络(重点啊!!!!!!!!
    • 上面的一条直线代表了LSTM的状态state,贯穿所有LSTM单元,gate控制对其添加或删除信息
    • 门(gate)是为了控制每次输入多少、遗忘多少、输出多少信息。通过学习和训练,来调节这个gate的值,以达到最好的效果。类似于一个阀门控制水流的多少,具体阀门的松紧即gate的值,需要通过反复学习训练来得到。
    • 遗忘们(forget gate)决定上一时刻的单元状态Ct-1有多少保留到当前时刻Ct;输入门(input gate)决定当前时刻网络的输入Xt有多少保留到单元状态Ct;输出门(output gate)来控制单元状态Ct有多少输出到LSTM的当前输出值ht。 具体可以参考: Understanding LSTM NetworksYJango的循环神经网络——实现LSTM 长短时记忆网络(LSTM) 因此,很多LSTM想不清楚的问题,可以直接用RNN来类比啦🤗~

LSTM的输入与输出

An example RNN with 4-dimensional input and output layers, and a hidden layer of 3 units (neurons). 
This diagram shows the activations in the forward pass when the RNN is fed the characters "hell" as input. 
The output layer contains confidences the RNN assigns for the next character (vocabulary is "h,e,l,o"); 
We want the green numbers to be high and red numbers to be low.

将”hello”这个单词的每次字母进行One-Hot编码,每输入一个字母预测下一个输出的字母是什么。例如,输入h对应输出e,输入e对应输出l,而输入l则可能对应l或者o。此处对应4维的输入与输出层,一个有着三个神经元的隐藏层。

batch_size input_size time_steps num_units layer_num class_num
1 4 4 3 1 4

再看下这个知乎回答上的这个图,可能会更加清晰一些:

作者:Scofield

  • 所以,LSTM的输入与输出是怎样的呢?可以完全类比RNN的输入与输出。

这张图我手工画的,可能有不对的地方,主要参考了Understanding LSTM in Tensorflow(MNIST dataset)

困惑了我最久的是num_units到底是什么,然后知乎这个回答好详细!

图中四个黄色的框框就是传统的前馈神经网络,而num_units就是这个前馈神经网络里面的隐藏节点啊啊啊啊。

关于张量(tensor)的一些疑惑

神经网络的处理单位均为向量,所以张量是什么?

主要参考这篇文章数学不行还学AI-第4话-图解张量,写的通俗易懂,我就不摘抄啦噜。

常见的张量有:

3D = 时间序列   (time, frequency, channel)

4D = 图像      (sample_size, width, height, color_depth)

5D = 视频      (sample_size, frames, width, height, color_depth))

总而言之,张量想要多少维就多少维,就看你的需求与设计啦。

暂时就写这么多吧,想到了再补充