Skip to content

Latest commit

 

History

History
61 lines (60 loc) · 7.43 KB

c3_w1.md

File metadata and controls

61 lines (60 loc) · 7.43 KB

week1: Machine Learning Strategy 1

  • 训练时可采取的一些机器学习策略罗列:
    • 收集更多数据
    • 收集更多样的训练集
    • 使用梯度下降时, 训练更长时间
    • 尝试用 Adam 代替梯度下降
    • 尝试更大/更小的神经网络
    • 尝试 Dropout regularization
    • 增加 L2 regularization
    • 调整神经网络架构
      • 替换激活函数
      • 增减隐层单元数
      • ...
    • ...
  • 正交 Orthogonalization 的重要性, 以机器学习中的链式假设为例进行说明: 当我们训练一个模型时, 首先希望它在训练集上有一个好的表现, 有一些技术手段能做到这一点, 比如更大的神经网络, 使用 Adam 算法等; 前一点得到保障之后, 我们希望 dev set 也能表现得足够好, 也有一些技术手段, 比如正则化; 然后, 希望模型在测试集上也能有好的表现, 也有一些技术手段, 比如使用更大的 dev set; 最后希望模型在现实世界表现得足够好. 每一步, 都有一些技术手段可以使用, 我们最好使用相互正交的技术手段, 即在一个阶段使用的技术手段, 不会影响另一个阶段. 这样, 我们就能独立地改进模型在不停阶段的性能, 而不必担心对其他阶段造成太大影响. (更直观的例子: 开车的时候, 方向盘控制方向, 油门控制加速, 刹车控制减速; 但如果将加减速也加入方向盘的功能, 结果很可能会事与愿违)
  • 早停 Early Stopping 既会影响模型在训练集的表现, 也会影响其在 Dev set 上的表现, 根据正交性原则, 是一个不太可取的技术手段
  • 设置一个评估指标 Evaluation Metric 来挑选模型, 一般都是一个数值型的量, 方便量化比较模型
    • 准确率 Accuracy, 错误率 Error 是最简单的评估指标. 提供了样本被误分类的信息. Error 可以理解成是错误预测的总和除以预测的总数; Accuracy 则是正确预测的总数除以预测的总数, 或者说 1-ERR
    • 真正率 (true positive rate, TPR)假正率 (false positive rate, FPR) 是对于类别不平衡问题特别有用的评估指标. _假正率_是假正例 (实际标签为假, 被误判为真) 的总数除以真实反例的总数; _真正率_是真正例的总数除以真实正例的总数
    • 查准率 Precision (有时也翻译作精确率): 几乎是真正率的同义词. 计算是: 真正例的总数除以预测正例的总数
    • 查全率 Recall (有时也翻译作召回率): 计算公式是: 真正例的总数除以正例的总数 (真正例数 + 假反例数).
    • F1 Score: 一项综合考虑 Precision 和 Recall 的评估指标, 定义为 Precision 和 Recall 的调和平均数 Harmonic Mean
    • ...
  • 不同的应用场景, 优先考虑的评估指标有所不同. 比如疾病检查, 患者关心的是得病的几率, 他在乎的是查准率 (这也是为什么, 此处优先如此翻译); 但比如疾病预防, 医院希望将某疾病的病患都找出来进行隔离治疗, 这时医院可能优先考虑查全率, 宁抓错, 不放过, 如是也.
  • Dev set 搭配上单个实值评估指标, 能够加速迭代
  • 满足与优化指标 Satisficing and optimizing metrics 说的是, 当考虑多个评估指标时, 选择一个作为优化指标, 其他的作为满足指标. 顾名思义, 优化指标就是训练模型要不断提升/降低的量, 比如错误率; 而满足指标就是, 只要模型的性能在设定的容忍范围内即可, 而不在此范围内的, 均不予考虑, 比如内存消耗在 10 MB 以内.
  • 重要的事情说第二遍: 训练集与 (验证集, 测试集) 的数据分布可以不同, 但验证集与测试集的数据分布必须相同.
  • 验证集的目的, 是为了从多个训练好的模型中, 选择一个最优的. 因此, 只要能够区分不同算法/模型的性能就够了, 不必太大
  • 测试集的目的, 是为了检验最终模型的泛化能力, 也不必太大.
  • 有些情况下, 指标+验证 (metric+dev) 选出的最优模型在实际应用中不一定是最好的, 比如涉及情色内容的分类器. 此时, 就要对评估指标进行调整, 一种方法是使用权值 weights. 仍然以涉及情色内容的分类器为例, 原来, 我们使用的错误率计算是这样的: Sum(Indicator(y_pred==y))/m (其中 Indicator 是指示函数, m 是样本容量); 现在我们要坚决反情色内容, 可以这样 Sum(w*Indicator(y_pred==y))/Sum(w) 计算错误率, 为非情色图片设置很小的权值, 情色内容设置很大的权值, 那么误判情色图片就会造成一个极大的误差, 使最终的误差变大, 降低该分类器的指标.
  • 我们通过指标来评估模型的性能. 但根据正交的原则, 更恰当的做法是, 先根据要实现的目标, 定义好指标 (英文的描述比较通畅: figure out how to define a metric that captures what you want), 简而言之就是, 先设定好目标; 然后, 训练模型向目标看齐, 不断提升性能, 提升指标. 这样分两步的方式看似与之前没差别, 但实际上差别就在于一个是先定目标, 然后训练; 一个是不管怎样, 先训练, 然后选一个指标来评估其性能. 差别还是很大的
  • 一种评估机器学习性能的方式是和人比, 这里就引入了 human-level 的概念. 机器学习的准确度 Accuracy 提升有两道坎, 一道是 human-level, 人类非常擅长一些工作, 比如判断是猫与否, 因此将其设为第一道坎, 表达了对人类的尊重; 另一道坎是 贝叶斯可能误差 Bayes Possible Error, 这是学习任务的理论最优值, 可以说是, 看得到摸不着的天花板.
  • 当机器的水平逊于人类时, 要提升其性能, 可以参考以下几点:
    • 获得人类标记的数据
    • 手动分析错误, 思考人是如何判断的
    • 分析 bias/ variance
  • Course 2 的笔记中提到过: 训练误差与人类水平 (误差) 之间的差距, 吴恩达老师称为可避免偏差 avoidable bias, 训练误差与验证误差之间差距, 称为方差 variance. 根据此二者, 有四种情形: 低/高偏差, 低/高方差. 当偏差较大时, 应首先降低偏差, 提高模型在训练集上的性能; 方差较大时, 应关注降低方差.
  • Human-level error is a proxy for Bayes error.
  • 不同人, 对于相同任务的水平是不一样的: 专业的和业余的, 水平就明显不一样; 一群专业的, 水平一般也会比一个人高. 根据上面那句准则, 人类的最高水平就代表了 Human-level. 当然, 具体情况还得具体分析.
  • 在一些任务方面, 机器已经吊打人类了, 比如 TI7 上, AI 就击败了 Dendi. 当机器不如人类的时候, 学习任务/训练模型, 有一条比较清晰的脉络; 当机器超过人类之后, 一些情况下, 训练就会像陷入泥泞一样, 难于提高, 因为没有清晰的目标了.
  • 机器胜过人类的场景:
    • 在线广告
    • 产品推荐. 所有有时候找人推荐, 不如上亚马逊咯
    • 对率回归
    • 语音识别
    • 一些图片识别
    • 借贷分析
    • 医药
    • ...
  • 监督学习的两个基本假设:
    1. 训练能得到很好的性能
    2. 训练集的性能能够很好地泛化
  • 减小 avoidable bias 的一些手段:
    • 训练更大的模型
    • 训练更长时间/使用更优的优化算法
    • 调整神经网络架构/超参数搜索
  • 减小方差的一些手段:
    • 更多的数据
    • 正则化 (L2, dropout, 数据增强)
    • 调整神经网络架构/超参数搜索