如何指导神经网络模型的调优设计?
来源:互联网 发布:我国网络安全形势 编辑:程序博客网 时间:2024/06/06 03:48
本文主要讲解一些参数初始化技巧和超参数的设置技巧,模型的理解和设计技巧,如何去指导我们对模型进行调优设计,如何从高(层数深)胖(卷积核庞大)的模型到高瘦或者矮(层数浅)瘦(卷积核较少)的模型去演变,同时性能得到优化或者保持!
训练的过程和阶段可以分为3个阶段:
欠拟合:模型没有很好地捕捉到数据特征(训练集和验证集的loss都大于0.3)。
刚刚好:模型已经完成了我们的任务,满足要求(训练集和验证集上的loss都小于0.01)。
过拟合:模型把数据学习的太彻底,以至于把噪声数据的特征也学习到了(训练集上loss小于0.01,验证集上loss大于0.3)。
遵守的基本原则:快速试错
基本流程:
1 小规模数据集和大模型
能用256个filter你就别用128个.直接奔着过拟合去.没错,就是训练过拟合网络,连测试集验证集这些都可以不用,检验模型流程对不对,是否可以过拟合。
2 LOSS设计要合理
3 观察loss价值大于观察准确率
4 确认分类网络学习充分
表现就是:如果是二分类, 你会发现, 刚开始的网络预测都是在0.5上下, 很模糊. 随着学习过程, 网络预测会慢慢的移动到0,1这种极值附近. 所以, 如果你的网络预测分布靠中间,再学习学习。
5 学习率的设置
6 对比训练集和验证集的loss
7 清楚receptivefield的大小
模型的理解技巧:
1 Visualize Layer Activations 中activationmatrix是否具备sparse和localized的特性(神经元特性的体现)
如果训练出的模型,用于预测某张图片时,发现在卷积层里的某个feature map的activation matrix可视化以后,基本跟原始输入长得一样,基本就表明出现了一些问题,因为这意味着这个feature map没有学到多少有用的东西。
2 Visualize Layer Weights中卷积层的weightmatrix是否具备smooth的特性
左图存在很多的噪点,右图则比较平滑。出现左图这个情形,往往意味着我们的模型训练过程出现了问题。
3 Retrieving Images That MaximallyActivate a Neuron感受野上的语义亲和性
4.Embedding the Hidden Layer Neuronswith t-SNE
通过t-SNE降维去认识数据。用高斯分布衡量高维和地位空间数据点之间进行数据聚类,得到相似性
5 Occluding Parts of the Image
高层特征如何收敛。每个卷积层学习到了什么东西
眼睛和鼻子与图片内部其他特征存在相关性
6 掩模图片的不同区域对分类预测结果以及feature map的activationvalue的影响
参数初始化技巧:
1 使用xavier
2 使用BN
通用技巧:
1 Relu:一个很万能的激活函数,可以很好的防止梯度弥散问题,当然最后一层的激活函数千万慎用relu。
2 明确任务目的:如果是连续的用identify(还是叫identity,记不清了),分类的用softmax,拟合回归的话我最后一层也经常不用激活函数,直接wx +b就行。
3 Batchnorm:可以大大加快训练速度和模型性能
4 Dropout:(让神经元以一定的概率不工作)防止过拟合,如果不知道怎么设比例的话,就直接设置为0.5。
5 Adam:这个优化函数是收敛非常快的一个优化函数
简短的注意事项:
1. 预处理: -mean/stdzero-center就够了, PCA, 白化什么的都用不上.我个人观点, 反正CNN能学习encoder, PCA用不用其实关系不大, 大不了网络里面自己学习出来一个.
2. shuffle, shuffle,shuffle.
3. 网络原理的理解最重要, CNN的conv这块, 你得明白sobel算子的边界检测.
4. Dropout, Dropout,Dropout(不仅仅可以防止过拟合, 其实这相当于做人力成本最低的Ensemble, 当然, 训练起来会比没有Dropout的要慢一点, 同时网络参数你最好相应加一点, 对, 这会再慢一点).
5. CNN更加适合训练回答是否的问题, 如果任务比较复杂, 考虑先用分类任务训练一个模型再finetune.
6. 无脑用ReLU(CV领域).
7. 无脑用3x3.
8. 无脑用xavier.
9. LRN一类的, 其实可以不用. 不行可以再拿来试试看.
10.filter数量2^n.
11.多尺度的图片输入(或者网络内部利用多尺度下的结果)有很好的提升效果.
12.第一层的filter, 数量不要太少. 否则根本学不出来(底层特征很重要).
13.sgd adam 这些选择上, 看你个人选择. 一般对网络不是决定性的. 反正我无脑用sgd + momentum.
14.batch normalization我一直没用, 虽然我知道这个很好, 我不用仅仅是因为我懒. 所以要鼓励使用batch normalization.
15.不要完全相信论文里面的东西. 结构什么的觉得可能有效果, 可以拿去试试.
16.你有95%概率不会使用超过40层的模型.
17.shortcut的联接是有作用的.
18.暴力调参最可取, 毕竟, 自己的生命最重要. 你调完这个模型说不定过两天这模型就扔掉了.
19.机器, 机器, 机器.
20.Google的inception论文, 结构要好好看看.
21.一些传统的方法, 要稍微了解了解. 我自己的程序就用过1x14的手写filter, 写过之后你看看inception里面的1x7, 7x1 就会会心一笑...
一方面我们能够看到DLmodel应用的门槛相较于shallow model要高,另一方面能够看到这个领域的快速进展。所以对这个领域的技术进展保持及时的跟进,对于模型的设计调优以及在业务中的真正应用会有着重要的帮助。像LR、GBDT这种经典的shallow model那样,搞明白基本建模原理就可以捋起袖子在业务中开搞,不需要再分配太多精力关注模型技术的进展的工作方式,在当下的DL建模场景,我个人认为这种技术工作的模式并不适合。也许未来随着技术、工具平台的进步,可以把DL也做得更为易用,到那时,使用DL建模的人也能跟现在使用shallowmodel一样,可以从模型技术方面解放出更多精力,用于业务问题本身了。
参考链接:
1 http://blog.csdn.net/willduan1/article/details/53070777
2 https://www.zhihu.com/question/25097993/answer/127374415
- 如何指导神经网络模型的调优设计?
- 如何打造一个伟大的产品3 - 三个木桶模型如何指导资源分配
- 最重要的设计指导原则
- C++ 的API 设计指导
- 重要的网站设计指导
- C++ 的API 设计指导
- 神经网络结构设计指导原则
- 人工神经网络的典型模型
- 人工神经网络的典型模型
- caffe神经网络模型的绘图
- 十二、神经网络模型的原理
- BP神经网络的预测模型
- 卷积神经网络模型如何辨识裸体图片
- 如何设计好词袋模型BoW模型的类类型
- 如何设计好词袋模型BoW模型的类类型
- 4用于cifar10的卷积神经网络-4.6设计模型训练和评估的会话流程
- 如何设计三维模型?
- 14种模型设计帮你改进你的卷积神经网络(CNN)
- docker Failed to get D-Bus connection 报错
- 异常向量表的创建
- 关于C++中函数能不能返回数组问题
- python Note II
- Spring自动装配的优缺点
- 如何指导神经网络模型的调优设计?
- 正向代理、反向代理和透明代理的讲解
- Java学习笔记 10 各种各样的代码块
- LeetCode:Same Tree
- Range based for loop
- 正向代理和反向代理的区别
- 数学找规律 number
- Set集合排序
- Tomcat下配置HTTPS