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

转自:https://blog.csdn.net/T7SFOKzorD1JAYMSFk4/article/details/78960039
本题节选自《BAT机器学习面试1000题》,1000题系列作为国内首个AI题库,囊括绝大部分机器学习和深度学习的笔试面试题、知识点,可以作为机器学习自测题,也可以当做查漏补缺的资料库。七月在线AI题库(网页版及APP版)见“阅读原文”

  1. LSTM神经网络输入输出究竟是怎样的?
    @YJango,本题解析来源:https://www.zhihu.com/question/41949741
    Recurrent Layers——介绍(https://zhuanlan.zhihu.com/p/24720659?refer=YJango)

第一要明确的是神经网络所处理的单位全部都是:向量

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

常规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)

注:同样是保留了Mini-batch gradient descent的训练方式,但不同之处在于多了time step这个维度。
Recurrent 的任意时刻的输入的本质还是单个向量,只不过是将不同时刻的向量按顺序输入网络。所以你可能更愿意理解为一串向量 a sequence of vectors,或者是矩阵。

python代码表示预测的话:

import numpy as np
#当前所累积的hidden_state,若是最初的vector,则hidden_state全为0
hidden_state=np.zeros((n_samples, dim_input))
#print(inputs.shape):(time_steps, n_samples, dim_input)
outputs = np.zeros((time_steps, n_samples, dim_output))

for i in range(time_steps):
#输出当前时刻的output,同时更新当前已累积的hidden_state outputs[i],
hidden_state = RNN.predict(inputs[i],hidden_state)
#print(outputs.shape):(time_steps, n_samples, dim_output)
但需要注意的是,Recurrent nets的输出也可以是矩阵,而非三维张量,取决于你如何设计。

若想用一串序列去预测另一串序列,那么输入输出都是张量 (例如语音识别或机器翻译 一个中文句子翻译成英文句子(一个单词算作一个向量),机器翻译还是个特例,因为两个序列的长短可能不同,要用到seq2seq;

若想用一串序列去预测一个值,那么输入是张量,输出是矩阵 (例如,情感分析就是用一串单词组成的句子去预测说话人的心情)

Feedforward 能做的是向量对向量的one-to-one mapping,
Recurrent 将其扩展到了序列对序列 sequence-to-sequence mapping.
但单个向量也可以视为长度为1的序列。所以有下图几种类型:0?wx_fmt=jpeg
除了最左侧的one to one是feedforward 能做的,右侧都是Recurrent所扩展的

若还想知道更多

可以将Recurrent的横向操作视为累积已发生的事情,并且LSTM的memory cell机制会选择记忆或者忘记所累积的信息来预测某个时刻的输出。

以概率的视角理解的话:就是不断的conditioning on已发生的事情,以此不断缩小sample space

RNN的思想是: current output不仅仅取决于current input,还取决于previous state;可以理解成current output是由current input和previous hidden state两个输入计算而出的。并且每次计算后都会有信息残留于previous hidden state中供下一次计算

往期题目:

BAT机器学习面试1000题系列(第1~60题)

BAT机器学习面试1000题系列(第61~100题)

BAT机器学习面试1000题系列(第101~200题)

BAT机器学习面试1000题系列(第201~250题)

BAT机器学习面试1000题系列(第251~255题)

BAT机器学习面试1000题系列(第256~260题)

BAT机器学习面试1000题系列(第261~265题)

BAT机器学习面试1000题系列(第266~270题)

BAT机器学习面试1000题系列(第271~275题)

BAT机器学习面试1000题系列(第276~280题)

BAT机器学习面试1000题系列(第281~285题)

BAT机器学习面试1000题系列(第286~290题)

BAT机器学习面试1000题系列(第291~295题)

BAT机器学习面试1000题系列(第296~300题)

BAT机器学习面试1000题系列(第301~305题)

你可能感兴趣的:(算法学习)