本篇主要针对RNN(LSTM)而言的总结。
1.学习率
一般根据损失值的变化来调整。
增大学习率。(情况:训练较慢,损失值一直处于缓慢减少的趋势)
减小学习率。(情况:损失值波动变化,时大时小)
自适应。
(一般时候,大家习惯将学习率从0.1,0.01,0.001,0.0001慢慢尝试)
2.Minibatch大小(影响迭代次数和训练速度,值太小导致速度太慢,太大致使计算成本过高也许会降低准确度)
一般训练存在两种做法:
一种是在线随机训练。(单个数据训练forword pass,caculate error,backpropagation) ----Online(stochastic) minibatch_size=1
另一种是将整个数据集馈送给训练步长。------Batch,批训练 minibatch_size=total
一般minibatch取值可以考虑32,64,128,256(这,4个值是一篇文章得出的准确率较高的三个值)或其他值,具体根据数据情况决定。准确度会随着批量的值不同有所改变
一般调整minibatch的同时也需要调整学习率
3. 训练迭代次数(后面用epoch表示)
直观的都是观察误差,手动,要是误差还在降低就不停下来。
早期停止技术来训练模型,大致原理是监督验证误差并在验证误差停止下降时停止训练,此处还会灵活处理,验证误差往往会来回波动,尽管它整体呈下降趋势,所以不能在验证误差第一次增高时就停止训练,在最后10-20步没有任何改进情况下停止。(tensorflow提供方法)
4.隐藏单元/层的数量
在实践中(别人的实践),3层神经网络的性能通常优于2层神经网络,但是更深的(4,5,6层)帮助不大。这与卷积神经网络形成鲜明对比,人们发现在卷积神经网络中深度对良好的识别系统极其重要的组成部分。
5.RNN超参数
选择一个cell类型:如LSTM cell、Vanilla RNN cell、门控循环单元cell
模型的深度:即我们堆叠了多少个层
单词嵌入,嵌入的纬度。
在实践中LSTM和GRU的性能优于Vanilla RNN
如果RNN需要输入单词,那么需要为嵌入向量选择大小。(一篇《如何生成良好的单词嵌入》表明嵌入的大小越大,某些任务的性能越高)