ML2021Spring-hw1

ML2021Spring-hw1TaskDescriptionCOVID-19dailycasespredictionTrainingdata:2700samplesTestingdata:893samplesEvaluationmetric:Roo

Task Description

COVID-19 daily cases prediction
Training data: 2700 samples
Testing data: 893 samples
Evaluation metric: Root Mean Squared Error (RMSE)

Sorce: https://www.kaggle.com/c/ml2021spring-hw1/overview

Version 1 Simple Baseline

网络

Net(
(net): Sequential(
(0): Linear(in_features=93, out_features=64, bias=True)
(1): ReLU()
(2): Linear(in_features=64, out_features=1, bias=True)
)
(criterion): MSELoss()
)

Loss:0.7265
LATEST SCORE:1.46586

改进方向:
  • Feature selection: 40 states + 2 tested_positive (TODO in dataset)
  • DNN architecture (layers? dimension? activation function?)
  • Training (mini-batch? optimizer? learning rate?)
  • L2 regularization
  • There are some mistakes in the sample code, can you find them?

Version 2 My approvement

1.1 DNN architecture layers
引入BN层,加速模型训练
  1. BN概念
    传统的神经网络,只是在将样本x输入输入层之前对x进行标准化处理,以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据x进行标准化,还对每个隐藏层的输入进行标准化。

(那为什么需要对每个隐藏层的输入进行标准化呢?或者说这样做有什么好处呢?这就牵涉到一个Covariate Shift问题)

  1. Covariate Shift问题
    Convariate shift是BN论文作者提出来的概念,指的是具有不同分布的输入值对深度网络学习的影响。当神经网络的输入值的分布不同是,我们可以理解为输入特征值的scale差异较大,与权重进行矩阵相乘后,会产生一些偏离较大地差异值;而深度学习网络需要通过训练不断更新完善,那么差异值产生的些许变化都会深深影响后层,偏离越大表现越为明显;因此,对于反向传播来说,这些现象都会导致梯度发散,从而需要更多的训练步骤来抵消scale不同带来的影响,也就是说,这种分布不一致将减缓训练速度。

而BN的作用就是将这些输入值进行标准化,降低scale的差异至同一个范围内。这样做的好处在于一方面提高梯度的收敛程度,加快模型的训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性,也降低了对后层网路的影响,各层网路变得相对独立,缓解了训练中的梯度消失问题。
(因此总结起来,BN的作用主要有)

  1. BN的作用
    缓解DNN训练中的梯度消失问题
    加快模型的训练速度
使用Dropout,减小过拟合

卷积层参数较少,加入dropout作用甚微
较低层,有噪音,较高层,全连接层加入dropout可以增加模型的鲁棒性,泛化性能。

决定dropout之前,需要先判断是否模型过拟合
先dropout=0, 训练后得到模型的一些指标(比如: F1, Accuracy, AP)。比较train数据集和test数据集的指标。

过拟合:尝试下面的步骤。
欠拟合:尝试调整模型的结构,暂时忽略下面步骤。
dropout设置成0.4-0.6之间, 再次训练得到模型的一些指标。

如果过拟合明显好转,但指标也下降明显,可以尝试减少dropout(0.2)
如果过拟合还是严重,增加dropout(0.2)
重复上面的步骤多次,就可以找到理想的dropout值了

1.2 DNN architecture activation function

LeakyReLU的提出就是为了解决神经元”死亡“问题,LeakyReLU与ReLU很相似,仅在输入小于0的部分有差别,ReLU输入小于0的部分值都为0,而LeakyReLU输入小于0的部分,值为负,且有微小的梯度。

实际中,LeakyReLU的α取值一般为0.01。使用LeakyReLU的好处就是:在反向传播过程中,对于LeakyReLU激活函数输入小于零的部分,也可以计算得到梯度(而不是像ReLU一样值为0),这样就避免了上述梯度方向锯齿问题。

超参数α的取值也已经被很多实验研究过,有一种取值方法是 对α随机取值,α的分布满足均值为0,标准差为1的正态分布,该方法叫做随机LeakyReLU(Randomized LeakyReLU)。原论文指出随机LeakyReLU相比LeakyReLU能得更好的结果,且给出了参数α的经验值1/5.5(好于0.01)。至于为什么随机LeakyReLU能取得更好的结果,解释之一就是随机LeakyReLU小于0部分的随机梯度,为优化方法引入了随机性,这些随机噪声可以帮助参数取值跳出局部最优和鞍点,这部分内容可能需要一整篇文章来阐述。正是由于α的取值至关重要,人们不满足与随机取样α,有论文将α作为了需要学习的参数,该激活函数为PReLU(Parametrized ReLU)。

集大成者ELU(Exponential Linear Unit)
通过上述的讨论可以看出,理想的激活函数应满足两个条件:

1.输出的分布是零均值的,可以加快训练速度。
2.激活函数是单侧饱和的,可以更好的收敛。

LeakyReLU和PReLU满足第1个条件,不满足第2个条件;而ReLU满足第2个条件,不满足第1个条件。两个条件都满足的激活函数为ELU(Exponential Linear Unit),函数图像如下图:

在这里插入图片描述
表达式为:
在这里插入图片描述
输入大于0部分的梯度为1,输入小于0的部分无限趋近于-α,超参数取值一般为1.

1.3 Training optimizer
tune these hyper-parameters to improve your model’s performance

使用Adam

1.4 L2正则项
1.5 结果

LATEST SCORE:1.07509(↓0.39077)

Version 3 引入模型融合

今天的文章ML2021Spring-hw1分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/64191.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注