炼丹 深度学习 炼丹技艺
转载
UI矩阵, 正着来和反着来, 分别进行mean的操作, 结果会明显提升, 这个事情屡试不爽.
先别急着写代码,多花一点时间进行数据预处理:
了解数据分布并找出其中规律
发现重复样本和错误标签
奇妙新颖的说法:神经网络是数据集的压缩版本
搜索,过滤,排序
可视化可以发现异常值,异常值能揭示数据的质量或预处理中的一些错误
设置端到端的训练评估框架:
在训练之前,建立一个完整的训练+评估框架
选择一个简单又不至于搞砸的模型
固定随机种子
- 使用固定随机种子,保证运行代码的两次结果相同,消除差异因素
简单化:
在评估中添加有效数字
- 对整个测试集进行评估,不要只绘制批次损失函数图像,然后用Tensorboard对它们进行平滑处理。
在初始阶段验证损失函数
初始化
人类基线
设置一个独立于输入的基线
过拟合一个batch
验证减少训练损失
在训练模型前进行数据可视化
- 将原始张量的数据何标签可视化,可节省调试次数
- 揭示了数据预处理,数据增广中的问题
可视化预测动态
使用反向传播来获得依赖关系
- 将第i个样本的损失设置为1.0, 运行反向传播一直到输入,确保在第i个样本上有非零梯度
概括一个特例
- 对正在做的事情编写一个具体的函数,运行,在以后的过程中确保能得到相同的结果(??)
过拟合:
挑选模型
- 为数据选择合适的架构
- 不要总想着一步到位
- 例:如果要做图像分类,复制粘贴ResNet-50, 然后再去做一些其它架构
Adam方法是安全的
- 在设定基线的早期阶段,使用学习率3e-4的Adam
- Adam对超参更加宽容,包括不良学习率
一次只复杂化一个
- 如果多个信号输入分类器,建议逐个输入,然后增加复杂性,确保性能逐步提升
- 如:先插入较小图像,再将图像放大
不要相信学习率衰减默认值
- 如果不小心,代码可能过早地将学习率衰减到零,导致模型无法收敛
- 完全禁用学习率衰减避免以上情况发生
正则化:
获取更多数据
数据扩增
有创意的扩增
- 域随机化:Domain Randomization
- 模拟
- 巧妙地混合
- 把数据插进场景
- GAN
预训练
跟监督学习死磕
- 不要对无监督训练太兴奋
- 无监督到现在也没有非常强大成果
- 虽然NLP领域有了BERT,有会讲故事的GPT-2
输入低维一点
- 把可能包含虚假信号的特征去掉
- 因为过高维容易造成过拟合,尤其数据集不大时
模型小一点
- 给网络加上领域知识的限制,把模型变小
- 在ImageNet的骨架上放全连接层,这种操作已经被平均池化取代(???)
减小批尺寸
Dropout
权重衰减
早停法
试试大点的模型
调参:
随机网格搜索
- 网格搜索听起来确实诱人,但是随机搜索才是最好的
- 如:参数a是有用的,参数b起不了作用。应该对a取样更彻底一些,不要只在几个固定点多次取样。
超参数优化
- 有很多贝叶斯优化工具箱(???很多人给好评)
- 大神个人经验:State-of-the-Art都是用实习生做出来的(???)
还能怎么压榨:
模型合体:
- 把几个模型结合在一起,保证2%的准确度。
- 如果买不起太多算力,用蒸馏把模型集合成一个神经网络。
放那让它训练:
- 有些时候,损失看起来是趋于平稳。但是可以试试继续训练,没准能到State-of-the-Art。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。