我正在尝试通过Graves于2005年发表的有关音素分类的论文来理解RNN在序列标记上的高级应用。
总结问题:我们有一个庞大的训练集,包括(输入)单个句子的音频文件和(输出)专家标记的各个音素的开始时间,停止时间和标签(包括一些“特殊”音素,例如静默,以便每个音频文件中的每个样本都标有一些音素符号。)
本文的重点是在隐藏层中应用带有LSTM存储单元的RNN。(他使用了几种变体和几种其他技术作为比较。为了使事情简单,我目前仅对单向LSTM感兴趣。)
我相信我了解网络的体系结构:对应于10毫秒音频文件窗口的输入层,以音频工作的标准方式进行了预处理;LSTM单元的隐藏层,以及对所有可能的61个电话符号进行一键编码的输出层。
我相信我了解通过LSTM单元的向前通过和向后通过的(复杂但直接)的方程式。它们只是微积分和链式规则。
在几次阅读本文和几篇类似文章之后,我不明白的是何时确切地应用反向传播算法,何时确切地更新神经元中的各种权重。
存在两种可能的方法:
1)逐帧反向传播和更新
Load a sentence.
Divide into frames/timesteps.
For each frame:
- Apply forward step
- Determine error function
- Apply backpropagation to this frame's error
- Update weights accordingly
At end of sentence, reset memory
load another sentence and continue.
要么,
2)逐句反向传播和更新:
Load a sentence.
Divide into frames/timesteps.
For each frame:
- Apply forward step
- Determine error function
At end of sentence:
- Apply backprop to average of sentence error function
- Update weights accordingly
- Reset memory
Load another sentence and continue.
请注意,这是一个有关使用Graves论文(与个人相关)的RNN训练的一般问题:在序列上训练RNN时,是否在每个时间步都应用了反向传播?每个时间步均调整重量吗?或者,类似于严格前馈体系结构上的批量训练,是否在应用反向传播和权重更新之前在特定序列上累积并平均了误差?
还是我比我想象的还要困惑?