参数与超参数
首先,科普一下参数与超参数的区别。
- 参数:模型可以自动学习出的变量,如深度学习模型的权重,偏差等。
- 超参数:根据经验确定的参数,超参数不同,模型不同。如深度学习模型的学习速率,迭代次数,层数,每层神经元的个数等。
问题及解决
- 问题:训练过程中,模型recall为持续0,precision持续为1。
- 可能的解决方法:调整参数值,其中,包括学习率。
在【NLP_命名实体识别】Albert+BiLSTM+CRF模型训练、评估与使用中,超参数设置如下:
maxlen = 256
epochs = 1000
batch_size = 16
bert_layers = 12
learing_rate = 1e-5 # bert_layers越小,学习率应该要越大
crf_lr_multiplier = 0.1 # CRF层的学习率,必要时扩大,如1000
- 注意:这里的“learing_rate” 指bert层的学习率,而“crf_lr_multiplier”指crf层的学习率,具体见你的CRF层的学习率可能不够大 - 知乎 你的CRF层的学习率可能不够大
对于上文中一例:经过多次实验,发现 CRF 层的学习率为主体学习率的 100 倍以上时,转移矩阵开始变得合理起来(BERT 主体学习率为0.00001、CRF 层的学习率为0.01,即 1000 倍)。
浅析learing_rate
- 学习率
用于控制梯度下降中参数更新的幅度(速度)。
学习率过小,能保证收敛性,但会大大降低模型的优化速度,需要更多轮的迭代才能达到比较理想的优化效果。
如果幅度过大,可能导致参数的“摆动”特性。
为了更好地设置学习率,可以逐步减小已经设置好的学习率。
深度学习入门--学习率的独立设置 - 知乎 深度学习入门--学习率的独立设置
- 初始学习率
初始学习率:一个比较笨的方法就是从0.0001开始尝试,然后用0.001,每个量级的学习率都去跑一下网络,然后观察一下loss的情况,选择一个相对合理的学习率,但是这种方法太耗时间了,能不能有一个更简单有效的办法呢?——如何找到最优学习率? 如何找到最优学习率?
从自己和其他人一般的经验来看,学习率可以设置为3、1、0.5、0.1、0.05、0.01、0.005,0.005、0.0001、0.00001具体需结合实际情况对比判断,小的学习率收敛慢,但能将loss值降到更低
https://www.bilibili.com/read/cv6788702/ 学习率的调整方法
- 不断调整学习率
学习率的选择策略在网络的训练过程中是不断在变化的,在刚开始的时候,参数比较随机,所以我们应该选择相对较大的学习率,这样loss下降更快;
当训练一段时间之后,参数的更新就应该有更小的幅度,所以学习率一般会做衰减,衰减的方式也非常多,比如到一定的步数将学习率乘上0.1,也有指数衰减等。
训练全过程并不是使用一个固定值的学习速度,而是随着时间的推移让学习率动态变化。刚开始训练时,离下山地点的最优值还很远,可使用较大的学习率下得快一点,当快接近最优值时为避免跨过最优值,下山速度要放缓,即应使用较小学习率训练,具体情况下因为我们也不知道训练时的最优值,所以具体的解决办法是:在每次迭代后,使用估计的模型的参数来查看误差函数的值,如果相对于上一次迭代,错误率减少了,就可以增大学习率如果相对于上一次迭代,错误率增大了,那么应该重新设置上一轮迭代的值,并且减少学习率到之前的50%。因此,这是一种学习率自适应调节的方法。在Caffe、Tensorflow等深度学习框架中都有很简单直接的学习率动态变化设置方法。
https://www.bilibili.com/read/cv6788702/ 学习率的调整方法