RNN 的工作原理
循环神经网络 (RNN) 是一种深度学习结构,它使用过去的信息来提高网络处理当前和将来输入的性能。RNN 的独特之处在于该网络包含隐藏状态和循环。循环结构支持网络以隐藏状态存储过去的信息,并对序列进行运算。
RNN 怎么知道如何将过去的信息应用于当前输入?该网络有两组权重:一组用于隐藏状态向量,另一组用于输入。在训练期间,网络会学习输入和隐藏状态的权重。在实现时,输出基于当前输入以及隐藏状态,而隐藏状态基于以前的输入。
展开的单个 RNN 单元,显示信息如何通过数据序列的网络。该单元的隐藏状态作用于输入以产生输出,并且隐藏状态会传递给下一个时间步。
LSTM
实际上,简单的 RNN 在学习长期依存关系时会遇到问题。RNN 通常通过反向传播来训练,在反向传播中,它们可能遇到梯度的“消失”或“爆炸”问题。这些问题会导致网络权重变得非常小或非常大,从而限制学习长期依存关系的有效性。
一种特殊类型的 RNN——长短期记忆 (LSTM) 网络可克服此类问题。LSTM 网络使用额外的门来控制隐藏状态中的哪些信息可以输出,并传递到下一个隐藏状态。这就使网络能够更高效地学习数据中长期关系。LSTM 是一种常用的 RNN。
RNN(左)和 LSTM 网络(右)的比较。
双向 LSTM 可学习时间序列数据或序列数据的时间步的双向依存关系。当您希望网络在每个时间步都从完整时间序列中学习时,这些依存关系会很有用。另一个学习长期依存关系的 RNN 变体是门控 RNN。您可以在 MATLAB® 中训练和使用双向 LSTM 和门控 RNN。
使用 MATLAB 中的 RNN 示例快速入门
使用深度网络设计器创建简单的序列分类网络
使用深度学习进行时间序列预测
使用长短期记忆网络进行 ECG 信号分类