吴恩达深度学习笔记(2)——结构化机器学习项目
机器学习策略
机器学习策略
- 收集更多数据
- 增加数据多样性
- 增加梯度下降迭代次数
- 尝试Adam优化算法
- 使用规模更大/更小的神经网络
- 使用
Dropout
- 添加$L_2$正则化
- 修改网络架构(激活函数、隐藏单元数目)
正交化
- 在训练集上性能良好(更大型的神经网络/更好的优化算法)
- 在开发集上性能良好(增加正则项/更多的训练样本)
- 在测试集上性能良好(更大的开发集)
- 在实际情况上性能良好(调整样本的分布)
单实数评估指标
- 查准率
Precision
:
$$\frac{\text{True Positive}}{\text{True Positive} + \text{False Positive}}$$
- 查全率
Recall
:
$$\frac{\text{True Positive}}{\text{True Positive} + \text{True Negative}}$$
F1-score
:
$$\frac{2}{\frac{1}{\text{Precision}}+\frac{1}{\text{Recall}}}$$
满足和优化指标
- 选择最好的分类器时,准确度和运算时间都要考虑
- 准确度是优化目标,运算时间是满足指标
训练/开发/测试集划分
- 确保开发和测试集来自同一分布
- 将所有数据打乱顺序,随机分配到开发集和测试集上
开发集和测试集的大小
- 传统的(小规模数据集)划分:训练集:测试集=70%:30%,或者训练集:开发集:测试集=60%:20%:20%
- 对于较大规模的数据集,训练集:开发集:测试集=98%:1%:1%
- 提升训练集样本数有助于提高模型的整体性能
- 测试集用于评估性能可以少于整体样本数的30%
- 为了评估不同的分类器,开发集需要足够大
改变开发集/测试集指标
- 在计算误差时,对错误的分类加大权重
- 误差评估:
$$Error=\frac{1}{m_{dev}}\sum^{m_{dev}}_{i=1}\mathcal{L}{(\hat{y}^{(i)}\not=y^{(i)})}$$
- 修改错误分类的权重后:
$$Error=\frac{1}{\sum w^{(i)}}\sum^{m_{dev}}_{i=1}w^{(i)}\mathcal{L}{(\hat{y}^{(i)}\not=y^{(i)})}$$
机器学习算法达到人类水平表现
- 贝叶斯最优误差
- 评估机器算学习误差产生的原因
- 更好的分析方差和偏差
可减少的偏差
- 用人类水平误差替代贝叶斯误差
人类水平误差
- 比较人类水平误差(贝叶斯误差)-训练集误差-开发集误差之间的差
- 训练集误差接近人类水平误差(贝叶斯误差),开发集误差较大:减少方差
- 训练集误差接近开发集误差,与人类水平误差(贝叶斯误差)差距较大:减少偏差
超过人类水平表现
- 结构化数据问题上,机器学习表现已经超过人类表现,例如:在线广告、产品推荐、物流预测、贷款申请情况预测
- 自然感知问题上,超越人类表现不容易
提高模型性能
- 训练集拟合程度较好,低偏差
- 开发集和测试集表现较好,低方差
- 训练误差和人类水平误差之间的差距是偏差的优化目标,可采取的方法包括:使用更大的模型、训练更久、使用更好的优化算法(Momentum、RMSprop、Adam)、更好的神经网络架构、改变超参数
- 开发误差和训练误差之间的差距是方差的优化目标,可采取的方法包括:收集更多数据、正则化($L_2$,
Dropout
,数据增强)、更好的神经网络架构、改变超参数
进行误差分析
- 大多数深度学习模型对随机误差鲁棒性强,但对系统误差鲁棒性差
- 评估某一错误原因占全部错误的比重,决定是否要对该类误差做单独处理
- 如果因为标记错误导致了误差,除了训练集,开发集和测试集上的数据也要修改,保证它们依然来自同一分布
- 同时需要考察虽然标记错误但分类正确的样本
快速搭建模型
- 快速建立第一个模型并进行迭代,利用方差和偏差评估模型的优化方向
- 在较为热门的领域,参考文献对训练自己的模型有较大的帮助
不同分布数据集的处理
- 方法1:把两组数组混合在一起。优点:训练集、开发集和测试集来自同一分布;缺点:开发集和测试集包含某一组数据的样本量太少,不是所需求的目标
- 方法2:50%投入训练集,其他分别投入开发集和测试集。优点:开发集和测试集包含所需要的优化目标;缺点:训练集、开发集和测试集并非来自同一分布
数据不匹配问题
- 训练-开发集
- 若训练集误差训练-开发集误差接近,开发集误差较大,则存在样本分布的问题
- 试图找到训练集和开发集/测试集样本之间的区别,使得训练样本的数据更接近于开发/测试样本或者获取更多相近似的样本
- 人工合成数据
迁移学习
- 如果想从任务A中迁移一些知识到任务B,若A和B属于同样的类型,A的数据比B的数据多得多,A低层次的特征可以帮助B的学习,迁移学习意义更大
多任务学习
- 例如要判断图像中是否有4种物体,则输出结果$\hat{y}$为$4\times1$的向量
$$Loss=\frac{1}{m}\sum^m_{i=1}\sum^4_{j=1}L(\hat{y}^{(i)}_j,y^{(i)}_j)$$
- 同时处理多个任务比多次处理单个任务性能要好,同时可以应对只有部分标签的情况
- 适用于训练的多个目标具有相同的低层次特征
- 如果想要从多任务学习中提升特定任务的性能,要让其余任务训练样本数量之和远大于特定任务的训练样本
- 可以建立更大的神经网络模型来提高多任务学习的性能
端到端的深度学习
- 在深度神经网络中输入$X$,直接输出$\hat{y}$,而无需手工提取特征
- 庞大的训练数据集使得端到端深度学习性能良好
- 优点:避免人的主观意志,不需要花时间手工设计功能
- 缺点:依赖大量数据,排除了手工设计功能