RNN 相比 DNN 在预测方面的优势
Advantages of RNN over DNN in prediction
我将要解决一个需要使用 RNN 或深度神经网络解决的问题。一般来说,问题是预测财务价值。所以,因为我得到了金融数据的序列作为输入,所以我认为 RNN 会更好。另一方面,我认为如果我可以将数据放入某种结构中,我可以更好地使用 DNN 进行训练,因为 DNN 中的训练阶段比 RNN 更容易。例如,我可以在使用 DNN 时获取最近 1 个月的信息并保留 30 个输入并预测第 31 天。
从这个角度看,我不明白 RNN 相对于 DNN 的优势。我的第一个问题是关于在这个问题中正确使用 RNN 或 DNN。
我的第二个问题有点基础。在训练RNN的时候,一个网络不是可以得到"confused"吗?我的意思是,考虑以下输入:10101111,我们的输入是一位数字 0 或 1,我们有 2 个序列 (1-0,1-0,1-1,1-1) 此后 1,多次出现 0。然后到最后,1之后是1,训练的时候,这不就成大问题了吗?也就是说,为什么系统在训练这个序列时不会混淆?
正如您自己回答的那样 - RNN 用于 序列 。如果数据具有顺序性质(时间序列),则最好使用此类模型而不是 DNN 和其他 "static" 模型。主要原因是 RNN 可以对负责每个结果的 process 进行建模,例如给定序列
0011100
0111000
0001110
RNN 将能够构建一个模型,"after seeing '1' I will see two more" 并在看到
时正确构建预测
0000001**** -> 0000001110
同时,对于DNN(和其他非序列模型),这三个序列之间没有任何关系,实际上它们唯一的共同点是"there is 1 on forth position, so I guess it is always like that"。
关于第二个问题。为什么不会混淆?因为它建模序列,因为它有内存。它根据之前观察到的一切做出决定,并假设您的信号具有任何类型的规律性,过去总会有一些发泄来区分两种可能的信号路径。再一次,RNN 比非循环模型更好地解决了这种现象。参见例如自然语言和近年来基于 LSTM 的模型所取得的巨大进步。
我认为您的问题措辞有点问题。
首先,DNN 是一种class 架构。卷积神经网络与深度信念网络或简单的深度 MLP 有很大不同。有适合时间序列预测的前馈架构(例如 TDNN),但这取决于您,您是对研究更感兴趣还是只是解决您的问题。
其次,RNN 与 "deep" 一样。考虑最基本的 RNN,Elman 网络:在使用时间反向传播 (BPTT) 进行训练期间,它们会及时展开 - 在 T 个时间步长上反向传播。由于这种反向传播不仅像标准 DNN 中那样 垂直 完成,而且还在 T-1 上下文层上 水平 完成,隐藏层的过去激活从 T-1 时间步 before 现在实际上被认为是在当前时间步激活。这张展开网的插图可能有助于理解我刚刚写的内容 (source):
这使得 RNN 在时间序列预测方面非常强大(应该可以回答您的两个问题)。如果您有更多问题,请阅读 Elman Networks。 LSTM 等只会让你感到困惑。了解 Elman 网络和 BPTT 是了解 任何 其他 RNN 所需的基础。
最后一件事您需要注意:vanishing gradient problem。虽然很想说让 T=infinity 并为我们的 RNN 提供尽可能多的内存:它不起作用。有很多方法可以解决这个问题,LSTM 目前非常流行,现在甚至有一些合适的 LSTM 实现。但重要的是要知道基本的 Elman 网络 可能 真的很难与 T=30.
我将要解决一个需要使用 RNN 或深度神经网络解决的问题。一般来说,问题是预测财务价值。所以,因为我得到了金融数据的序列作为输入,所以我认为 RNN 会更好。另一方面,我认为如果我可以将数据放入某种结构中,我可以更好地使用 DNN 进行训练,因为 DNN 中的训练阶段比 RNN 更容易。例如,我可以在使用 DNN 时获取最近 1 个月的信息并保留 30 个输入并预测第 31 天。 从这个角度看,我不明白 RNN 相对于 DNN 的优势。我的第一个问题是关于在这个问题中正确使用 RNN 或 DNN。
我的第二个问题有点基础。在训练RNN的时候,一个网络不是可以得到"confused"吗?我的意思是,考虑以下输入:10101111,我们的输入是一位数字 0 或 1,我们有 2 个序列 (1-0,1-0,1-1,1-1) 此后 1,多次出现 0。然后到最后,1之后是1,训练的时候,这不就成大问题了吗?也就是说,为什么系统在训练这个序列时不会混淆?
正如您自己回答的那样 - RNN 用于 序列 。如果数据具有顺序性质(时间序列),则最好使用此类模型而不是 DNN 和其他 "static" 模型。主要原因是 RNN 可以对负责每个结果的 process 进行建模,例如给定序列
0011100
0111000
0001110
RNN 将能够构建一个模型,"after seeing '1' I will see two more" 并在看到
时正确构建预测0000001**** -> 0000001110
同时,对于DNN(和其他非序列模型),这三个序列之间没有任何关系,实际上它们唯一的共同点是"there is 1 on forth position, so I guess it is always like that"。
关于第二个问题。为什么不会混淆?因为它建模序列,因为它有内存。它根据之前观察到的一切做出决定,并假设您的信号具有任何类型的规律性,过去总会有一些发泄来区分两种可能的信号路径。再一次,RNN 比非循环模型更好地解决了这种现象。参见例如自然语言和近年来基于 LSTM 的模型所取得的巨大进步。
我认为您的问题措辞有点问题。
首先,DNN 是一种class 架构。卷积神经网络与深度信念网络或简单的深度 MLP 有很大不同。有适合时间序列预测的前馈架构(例如 TDNN),但这取决于您,您是对研究更感兴趣还是只是解决您的问题。
其次,RNN 与 "deep" 一样。考虑最基本的 RNN,Elman 网络:在使用时间反向传播 (BPTT) 进行训练期间,它们会及时展开 - 在 T 个时间步长上反向传播。由于这种反向传播不仅像标准 DNN 中那样 垂直 完成,而且还在 T-1 上下文层上 水平 完成,隐藏层的过去激活从 T-1 时间步 before 现在实际上被认为是在当前时间步激活。这张展开网的插图可能有助于理解我刚刚写的内容 (source):
这使得 RNN 在时间序列预测方面非常强大(应该可以回答您的两个问题)。如果您有更多问题,请阅读 Elman Networks。 LSTM 等只会让你感到困惑。了解 Elman 网络和 BPTT 是了解 任何 其他 RNN 所需的基础。
最后一件事您需要注意:vanishing gradient problem。虽然很想说让 T=infinity 并为我们的 RNN 提供尽可能多的内存:它不起作用。有很多方法可以解决这个问题,LSTM 目前非常流行,现在甚至有一些合适的 LSTM 实现。但重要的是要知道基本的 Elman 网络 可能 真的很难与 T=30.