【ML Tips】drop out & weight drop
type
Post
status
Published
date
May 13, 2022
summary
tags
Machine Learning
category
阅读笔记
password
slug
icon
炼HAN模型,模型在数据上出现了过拟合的问题(8个epoch后trainacc达到了90以上,但是验证集在第一个epoch后就开始下降)模型架构看,GRU+attention+全连接,全连接已经上了dropout,问题可能出在循环网络上
在粗略读了《Regularizing and Optimizing LSTM Language Models》一文,以及读了ADW-LSTM代码后,了解到了一种不同于dropout的,名为weight drop的防过拟合方法,下图为GRU层加入此方法前后效果对比:
加入前:

加入后:

过拟合改善,验证集acc最后大约提高2pct,下一步是研究改进基于股价计算的label(文本分类),这可能是提高模型绩效的根本方法
关于dropout 和 weight dropout的原理简单实现:
# DropOut # dropout只训练时起作用(对应torch的self.training参数),根据某个概率将数据矩阵X填0(从而在梯度更新时跳过某个参数) # ————其实思想有点类似于随机森林这类集成模型 def train(X,rate,training=True): mask = np.random.binomial(1,1-rate,size=X.shape) output = X * mask1 / (1-rate) # 保证期望一致 return output def test(X): return X # Weight Drop # 和DROPOUT几乎一样,区别在mask乘的是模型参数W(而非X) # Train orig_params = [] for n, p in model.named_parameters(): orig_params.append(p.clone()) p.data = F.dropout(p.data, p=drop_prob) * (1 - drop_prob) # Test for orig_p, (n, p) in zip(orig_params, model.named_parameters()): p.data = orig_p.data
最后附上AWD-LSTM论文中的消融,循环网络经过正则化后明显提升
