Please enable JavaScript.
Coggle requires JavaScript to display documents.
训练模型 (训练策略 (怎样制定策略 (制定策略相关因素 数据量
计算能力, 原则 在有大量数据的时候,我们更倾向于使用简单的算法和更少的手…
训练模型
训练策略
怎样制定策略
-
原则
- 在有大量数据的时候,我们更倾向于使用简单的算法和更少的手工工程
- 在有少量数据的时候,我们从事更多的是手工工程
可选策略
定义
把从一个问题上学习到的知识,应用到另外一个相似的问题上
实现
步骤
ConvNet作为固定特征提取器
前面的卷积层保持不变,把前面的卷积层当做CNN Code,重新定义后面的全连接层
Fine-tune
- 不单只调整最后的全连接层,还会微调前面的卷积层
- 数据量越大,重新微调的参数越多越前,甚至可以全部重新训练
多种预训练模型
- 网上有很多已经训练好的的模型
- 不同模型针对的问题可能不一样
概述
在网上下载已经训练好的CNN,并根据数据量的大小,从后往前重新训练部分参数
-
实现方法
- 新数据量小而且新旧数据相似度高:只重新训练最后的全连接层
- 新数据量大而且新旧数据相似度高:整个网络尝试fine-tune
- 新数据量小而且新旧数据相似度低:截断某处网络,接入全连接层进行分类
- 新数据量大而且新旧数据相似度低:数据量越大,重新训练的参数就越多越前
使用建议
- 因为用的是已经训练好的模型,所以不能随意更改模型结构,否则提前训练的参数会无效
- 用与预训练相似的学习率
原因
- 卷积神经网络前面层训练的参数捕捉的特征基本相似
点、线、面,再到高级的五官特征等
- 训练需要大量的数据和运算能力
*后面层的神经网络大多是高级特征
猫、狗、人
数据扩充
怎样实现数据扩充
-
-
-
-
-
颜色转换
为图片的RGB三个色彩通道进行增减值,如(R:+20,G:-20,B:+20);PCA颜色增强:对图片的主色的变化较大,图片的次色变化较小,使总体的颜色保持一致
-
原因
机器学习对于随机错误并不敏感,但是对系统错误敏感,数据扩充加入了随机错误,但是吧该有的特征都留下来了
为什么要这样制定策略
- 有大量的数据,我们不需要为这个问题来精心设计特征,我们使用一个大的网络结果或者更简单的模型就能够解决
- 数据量太少,较大的网络结构或者模型很难从这些少量的数据中获取足够的特征,而手工工程实际上是获得良好表现的最佳方式
遇到的问题
原因
- 神经网络特意用随机性来确保能通过有效学习得到问题的近似函数
- 用随机的机器学习算法,要比不用它的效果更好
随机的地方
- 初始化的随机性,比如权值
- 正则化的随机性,比如dropout
- 层的随机性,比如词嵌入
- 最优化的随机性,比如随机优化
解决方法
重复实验
多次运行网络(30+),然后运用统计学方法概括模型的性能,并与其他模型作比较(推荐这种方法,但是由于有些模型的训练时间太长,这种方法并不总是可行的)
设置随机数字生成器的种子
- 随机生成器需要一个种子点开启该进程,在大多数实现中,通常默认使用以毫秒为单位的当前时间
- 最好在代码文件的顶部导入和调用seed函数
如果我仍然得到不同的结果,怎么办?
来自第三方库的随机性
试着将你的代码简化到最低要求(例如,一个数据样本,一轮训练等等),并仔细阅读API文档,尽力减少可能引入随机性的第三方库。
使用GPU产生的随机性
有证据显示如果你在堆栈中使用了 Nvidia cuDNN,这可能引入额外的随机源
来自复杂模型的随机性
这很可能是由后端库的效率造成的,或者是不能在内核中使用随机数序列(作者没有遇到过)
怎样初始化参数
权重
现知特性
破坏对称性
-
原理
- 如果同一层的两个神经元具有相同参数,那么学习算法将一直以相同的方式更新这两个单元
结论
- 用高斯或者均匀分布随机初始化模型的权重
- 每个单元计算不同函数的目标导致了参数的随机初始化
大初始值的两面性
优点
- 因为相互初始值相差较远,就会有更强的破会对称性的作用,有助于避免冗余的单元
- 有助于避免梯度消失
缺点
- 可能会导致混沌(对于输入中很小的扰动非常敏感,导致确定性钱箱传播过程表现随机)
- 梯度爆炸
- 较大的权重也会产生是的激活函数饱和的值
-
背景
- 设定改进的初始化策略是一项困难的任务,因为神经网络优化至今还未被很好地理解
- 对于初始点如何影响泛化的理解是相当原始的,几乎没有提供如何选择初始点的任何指导
偏置
概述
设置偏置的方法必须和设置权重的方法卸掉,设置为零在大多数权重初始化方案是可行的
例外情况
输出单元
原因
如果初始化权重足够小,那么该单元的输出仅由偏置决定,过大的偏置要更长的学习时间且可能导致饱和
做法
初始化偏置以获取正确的输出边缘统计通常是有利的(通过y=softmax(b)计算b)
避免神经元饱和
原因
如果将ReLU的神经元偏置设为0,那么该单元就会饱和,无法学习
做法
根据神经元类型选择偏置以避免初始化引起太大饱和
门电路单元
原因
如果门电路单元一开始就为0,那么就无法学习该门电路控制的输入了
-
学习分类
静态模型——离线学习
-
优点
- 易于构建和测试,对其进行迭代,直到达到良好效果再上线
- 易于对模型进行监控和验证
-
-
动态模型——在线学习
概述
数据随着时间的推移会越来越多,而且数据的更新对模型的预测有提升
-
缺点
- 随着时间推移不断为训练数据诸如新数据,定期同步更新版本
- 需要在监控、模型回滚、数据隔离和模型验证方面花费更多精力
-
方法
- Panda Approach(只训练一个模型,很稀有,所以是Panda)
- Caviar approach(同时训练多个模型)