注:以下皆为个人理解,如有错误请大家指正
LSTM的隐藏输出维度
在使用keras搭建多层LSTM神经网络的时候,有时会这么写:
1 | model = Sequential() |
其中LSTM的第一个参数,如上述代码中的128,256,代表的其实不能叫作神经元的个数,应该理解为隐藏层输出的维度,或者隐藏层输出的神经元个数。对于多层LSTM,也需要输出到下一层的LSTM,如下图,第一层LSTM的隐藏层的输出维度为5: 
LSTM按时间展开
实际LSTM的空间结构就像上面的一样,只是为了方便图示化,所以按时间展开,在代码实现时需要指定在哪一个时间步外接(或者说计算)多层感知机。一般如果是按时间序列的所有前面时间的特征来预测下一时刻的特征,则在最后一个时间步接多层感知机。接了多层感知机也可以进行分类或回归任务。
训练术语
Batch Size(批大小)
- 有时整个数据集过大,如果一次性使用全部数据集,可能会耗费很大的资源,比如需要较大的存储和训练时间,所以将整个数据集分为 N 个 Batch,然后每次用一个 Batch进行一次梯度下降迭代
- Batch size 指的是每次模型权重更新时所使用的样本数(注意这里是指更新一次参数,也即梯度下降迭代一次)
- 经过N个Batch的就相当于进行了 N次梯度下降迭代,此时其实也可能已经找到了最优参数
- 这里的一大假设就是数据来源同分布(distribution),那么即使是不同Batch的数据也是同一分布,那么我们就可以使用每一个Batch计算一个梯度,进行一次迭代(iteration),最终能够完成整个梯度下降
Epoch(周期)
- Epoch 是指整个训练数据集被神经网络完整地遍历一次的次数
- 在每个 epoch 中,模型会一次又一次地使用数据集中的不同样本(即上面的一个Batch)进行训练,每使用一个Batch进行一次梯度下降迭代(iteration),更新一次权重,经历N次迭代,遍历了所有数据集,完成一次Epoch
- 一次 epoch 完成后,数据集会被重新随机划分为新的 Batch
- 训练多个 epoch (也即我们使用数据集进行多次训练) 的目的是让模型不断地学习,提高性能,直到收敛到最佳性能或达到停止条件
问题
使用batch进行梯度计算的时候这个梯度是怎么计算的呢?猜想如下:
- 根据本次batch构建误差函数,那么就可以得到这个误差函数关于模型参数的函数
- 根据上次batch计算出的梯度更新了模型参数,在上次更新的模型参数上,利用本次batch计算出的梯度再次更新模型参数,以便下次使用新的batch的时候使用
- 重复上述两步直到一次epoch完成或者收敛或者达到停止条件
具体正确的实现过程后续有精力了再仔细查找资料和验证。