深度学习LSTM神经网络输入输出究竟是怎样的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习LSTM神经网络输入输出究竟是怎样的?相关的知识,希望对你有一定的参考价值。

在长短期记忆 (LSTM) 网络中,输入通常是一系列数据点,例如语言翻译任务中的单词序列或时间序列预测任务中的传感器读数序列。输入数据通过输入层传递,输入层将输入数据转换为一组可由 LSTM 网络处理的内部表示。
然后,输入数据的内部表示通过一系列LSTM层传递,这些层使用一组“存储单元”来存储和检索长时间的信息。每个LSTM层还包括一组“门”,用于控制进出存储单元的信息流,允许LSTM有选择地存储和检索信息,并忘记不再需要的信息。
LSTM网络的输出通常是基于输入数据和存储在存储单元中的信息的预测或分类。例如,在语言翻译任务中,输出可能是翻译的句子,而在时序预测任务中,输出可能是序列中的预测未来值。
总体而言,LSTM网络的输入是一系列数据点,输出是基于输入数据和存储在LSTM层的存储单元中的信息的预测或分类。
参考技术A 蓝海大脑深度学习高性能计算液冷工作站研究人员表示:第一要明确的是神经网络所处理的单位全部都是:向量

下面就解释为什么你会看到训练数据会是矩阵和张量

常规feedforward 输入和输出:矩阵

输入矩阵形状:(n_samples, dim_input)

输出矩阵形状:(n_samples, dim_output)

注:真正测试/训练的时候,网络的输入和输出就是向量而已。加入n_samples这个维度是为了可以实现一次训练多个样本,求出平均梯度来更新权重,这个叫做Mini-batch gradient descent。 如果n_samples等于1,那么这种更新方式叫做Stochastic Gradient Descent (SGD)。

Feedforward 的输入输出的本质都是单个向量。

常规Recurrent (RNN/LSTM/GRU) 输入和输出:张量

输入张量形状:(time_steps, n_samples, dim_input)

输出张量形状:(time_steps, n_samples, dim_output)本回答被提问者采纳

LSTM神经网络输入输出究竟是怎样的?

输入输出都是向量,或者说是矩阵。LSTM用于分类的话,后面一般会接softmax层。个人浅薄理解,拿动作识别分类举例,每个动作帧放入LSTM中训练,还是根据task来训练每个LSTM单元的Weights。所以LSTM的单元数量跟输入和输出都没有关系,甚至还可以几层LSTM叠加起来用。分类的话,一般用最后一个单元接上softmax层。LSTM结构是传统的RNN结构扩展,解决了传统RNN梯度消失/爆炸的问题,从而使得深层次的网络更容易训练。从这个角度理解,可能会容易很多。今年的ResNet也是使传统的CNN更容易训练weights。看来deeplearning越来越深是趋势啊。如果说训练,就一个关键,所谓LSTMUnroll,将RNN展开成一个静态的“并行”网络,内部有“侧向连接”,实现长的短时记忆功能(状态“记忆”在LSTMCell里)。如果说预测,也就一个关键,要将Cell的h和C弄出来,作为当前状态(也就是所谓“记忆”)作为init参数输入,这样,携带了当前记忆状态的网络,预测得到的就是下一个输入了,所谓的recurrent了。那份代码里还包含了一个使用cudnn的实现(built-inRNNoperator),这是一个高性能的版本,可以真正干活的。原来我也尝试搞懂一些天书般的公式,很快发现从那里入手是个错误。强烈推荐:理解LSTM网络(翻译自UnderstandingLSTMNetworks)只要有一点点CNN基础+半个小时,就可以通过这篇文章理解LSTM的基础原理。回答你的问题:和神经元个数无关,不知道你是如何理解“神经元”这个概念的,输入输出层保证tensor的维数和输入输出一致就可以了。

参考技术A

常规feedforward输入和输出:矩阵输入矩阵形状:(n_samples,dim_input)输出矩阵形状:(n_samples,dim_output)注:真正测试/训练的时候,网络的输入和输出就是向量而已。加入n_samples这个维度是为了可以实现一次训练多个样本,求出平均梯度来更新权重,这个叫做Mini-batchgradientdescent。如果n_samples等于1,那么这种更新方式叫做StochasticGradientDescent(SGD)。Feedforward的输入输出的本质都是单个向量。常规Recurrent(RNN/LSTM/GRU)输入和输出:张量输入张量形状:(time_steps,n_samples,dim_input)输出张量形状:(time_steps,n_samples,dim_output)注:同样是保留了Mini-batchgradientdescent的训练方式,但不同之处在于多了timestep这个维度。Recurrent的任意时刻的输入的本质还是单个向量,只不过是将不同时刻的向量按顺序输入网络。所以你可能更愿意理解为一串向量asequenceofvectors,或者是矩阵。

参考技术B

关于如何输入的问题,LSTM是一个序列模型,对于输入数据也是一个序列,LSTM每个时间步处理的是序列中一个时刻的输入,比如你当前输入是一个汉字“我”,因为模型只能接受的是数值向量,因此需要embedding,“我”就需要变成了一个向量,假如是[0.1,0.8,3.2,4.3](通过wordembedding技术获得),这里向量维度是4,那么就需要4个神经元去接收向量中的每个元素,而这四个神经元就构成了当前时刻的LSTMUnit,其他时刻也是这样,从而完成输入。因此就可以知道输入层神经元(LSTMunit中神经元数)的个数等于词向量的size。

以上是关于深度学习LSTM神经网络输入输出究竟是怎样的?的主要内容,如果未能解决你的问题,请参考以下文章

[透析] 卷积神经网络CNN究竟是怎样一步一步工作的?(转)

实现Bidirectional LSTM Classifier----深度学习RNN

深度学习究竟是什么样的学习?

深度学习项目五:利用LSTM网络进行情感分析(NLP)

Keras深度学习实战(33)——基于LSTM的序列预测模型

深度学习多变量时间序列预测:GRU算法构建时间序列多变量模型预测交通流量+代码实战