这篇文章是 DeepLearning.ai - Structuring Machine Learning Projects 的课程笔记
Orthogonalization正交法
- Fit training set well on cost function ( similar to human-level performance)
- Bigger network
- Adam
- …
- Fit dev set well on cost function
- Regularization
- Bigger train set
- Fit test set well on cost function
- Bigger dev set
- Performs well in real world
- Change dev set or cost function
Single number evaluation metric 单一量化评估指标
- Precision: 对于所有被识别为猫的图,有n%确实是猫
- Recall: 对于所有是猫的图片,n%被识别出来了
- F-1 Score: Precision和Recall的一种平均值(调和平均)
Satisficing and Optimizing metric 满足指标和优化指标
- 满足指标只要满足条件就可以,要更关注优化指标
- 如果同时关注多项指标,可以将其中的一项设为优化指标,使其表现尽可能地好;将另外的一项或多项设为满足指标,确保其表现满足要求
Train/dev/test distributions & Size of the dev and test sets
- 开发集和测试集需要来自相同的分布
- 传统的70/30划分已经不适用,应用更多的数据作为训练集,较少的数据作为测试
Human-level performance
- Human-level error as a proxy for Bayes error
- Avoidable bias: gap between human-level error and training error. (The gap between training error and dev error is called variance.)
Improving model performance
- 先看训练误差和贝叶斯估计误差值之间的差距,估计可避免误差,试着在训练集优化。
- 训练更大的模型
- 训练更长的时间
- 用更好的优化算法,如Momentum、RMSProp、Adam等
- 寻找更好的神经网络架构/超参数
- 再看开发集误差和训练集误差之间的差距,估计方差有多大,把训练集的结果推广到开发集。
- 用更多的数据来训练
- 正则化,如L2,dropout,数据集增强等
- 寻找更好的神经网络架构/超参数
错误分析 Error Analysis
- 快速建立机器学习应用并迭代
- Set up dev/test set and metric
- Build initial system quickly
- Use Bias/Variance analysis & Error analysis to prioritize next steps
Mismatched training and dev/test data
Training and testing on different distributions
- 将训练集和测试数据混合在一起,按比例得到train/dev/test数据集(不太好,一般用第二种方案)
- 优点:数据来自同一分布
- 缺点:dev集中可能某一分布的数据特别多,另一分布的数据很少(设置开发集的目的是找到最适合当前问题的网络,不应该在不能帮助解决问题的分布上花太多时间)
- 开发集和测试集包含目的分布的数据,训练集包含其他分布的数据以及少量目的分布的数据
Bias and variances with mismatched data distribution
如果训练集/开发集/测试集来自不同的分布,不能通过比较训练误差、贝叶斯误差和开发集误差之间的差距来选择优化方法
-
Training-dev set: Same distribution as training set, but not used for training. 拿出一小部分训练数据作为训练-开发集,在训练-开发集上使用传播算法
-
若训练误差是1%,训练-开发误差是9%,开发误差是10%,这是高方差问题,因为网络没能泛化来自同一分布的数据
-
若训练误差是1%,训练-开发误差是1.5%,开发误差是10%,这是数据不匹配的问题(失配问题),因为学习算法没有直接在训练-开发集或开发集上训练,而两者来自不同分布,但是它在训练-开发集上性能很好,但在开发集上表现不好,某种程度上,算法并未在我们关心的分布上训练的很好
-
若训练误差是10%,训练-开发误差是11%,开发误差是12%,这是高偏差问题。因为这里贝叶斯误差(human error)是0%,算法的表现比人类差太多
-
若训练误差是10%,训练-开发误差是11%,开发误差是20%,存在高偏差问题(可避免偏差问题)和失配问题
-
-
要关注的四个误差值(测试集的仅供参考):
- Human Level
- Training set error
- Training-Dev set error
- Dev error
- ( Test error )
-
两两之间的数据差可能体现的问题有:
- 可避免误差
- 高方差
- 数据失配
- 如果开发集和测试集性能差太多,可能存在对开发集数据的过拟合问题
Addressing data mismatch 解决数据失配问题
- 人工误差分析,理解训练集与开发/训练集之间的差距
- 当了解到开发集的难度时,收集更多与开发集类似的数据加入训练集
- 人工数据合成:可能会存在对某个子集的过拟合问题
Learning from multiple tasks
Transfer Learning 转移学习
Transfer from A to B
- Task A and B have the same input X
- You have a lot more data for task A than task B
- Low level features from A could be helpful for learning B
Multi-task learning 多任务学习
多个任务一起开始,一个神经网络同时完成多个任务
- Training on a set of tasks that could benefit from having shared lower-level features
- Usually: Amount of data you have for each task is quite similar
- Can train a big enough neural network to do well on all the tasks
End-to-end learning 端对端深度学习
- 优点:
- 让数据发挥主导作用——只要有足够大的神经网络,都能够训练
- 需要人类动手设计的组件(特征等)变少了
- 缺点:
- 需要大量数据
- 排除了一些具有潜在用途的手工设计的组件
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏