李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录


李宏毅2021年机器学习作业2学习笔记

  • 前言
  • 一、问题描述
  • 二、实验过程
    • 2.1 跑助教提供的baseline
    • 2.2 修改激活函数
    • 2.3 Normalization
    • 2.4 Drop out
    • 2.5 提高epoch
    • 2.6 weight_decay
    • 2.7 在2.5的基础上继续提升epoch到120
    • 2.8 增加模型层数
    • 2.9 增大batchsize
  • 三、总结

前言 声明:本文参考了李宏毅机器学习2021年作业例程,开发平台是kaggle notebook。
一、问题描述 【李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录】实质是一个多分类问题。
B站作业讲解视频
Kaggle地址
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

我们可以借助于深度学习的框架(例如:Tensorflow/pytorch等)来帮助我们快速实现网络的搭建,在这里我们利用Pytorch来实现。
二、实验过程 2.1 跑助教提供的baseline 李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分: 0.68869 0.68917
2.2 修改激活函数 操作:将softmax改成ReLU
结果:训练loss有所降低,acc有所增加 过拟合
Kaggle得分:0.69913 0.69891
2.3 Normalization 操作:对每个线性层激活函数后加入BatchNorm1d
结果:loss有所降低,acc有所增加
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.69998 0.70150
操作:对每个线性层激活函数前加入BatchNorm1d
结果:在loss和acc上不如前者
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.70116 0.70284(略优于前者)
2.4 Drop out 操作:选择2.3中第二种模型的基础上,对除最后一个线性层外其他线性层加入dropout(0.2)
结果:李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.72448 0.72586(优于前者)
2.5 提高epoch 操作:在2.4的模型上提高epoch(20->50)
结果:李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.72761 0.72809(略优于前者)
2.6 weight_decay 操作:在2.4的模型上加入weight_decay(0.001)
结果:李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.71481 0.71620
说明weight decay效果不好
2.7 在2.5的基础上继续提升epoch到120 结果:
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.72839 0.73008
2.8 增加模型层数 操作:在2.7的基础上增加两层线性层
结果:验证集loss想先降低后上升,过拟合。在epoch13时,验证集loss最低。李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.73160 0.73286
2.9 增大batchsize 操作:在2.8的基础上增加batchsize(64->128), epoch换成20
结果:
李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Kaggle得分:0.73158 0.73216
三、总结 李宏毅机器学习|李宏毅2021年机器学习作业2(classification)实验记录
文章图片

Optimizer
使用Adam
激活函数
用ReLU,效果比sigmioid好得多。
network架构
  1. 加上batch normalization,加速收敛,为避免batch不能代表数据分布,将batch size调大
  2. 加上dropout,虽然batch normalization一定程度上可以替代dropout的效果,但还是有使
  3. 用 L1/L2正則,避免overfitting
epoch太多不一定好,如果不保存最优模型的话,最终结果可能严重的过拟合。
代码链接:
https://github.com/Wangdaoshuai/LHYML2021-Spring

    推荐阅读