深度学习深理解(八)- 结构化机器学习项目

来源:互联网 发布:软件迭代记录 编辑:程序博客网 时间:2024/06/11 12:36

总结一下今天的学习过程

昨天由于装双系统,耽误了一天,打断这周暂时学习结束吴恩达老师的前三部分的课程(因为后期两部分没有开课)

幸运的是,今天学习比较努力 哈哈哈,将计划两天的课程今天一天学习完了


机器学习的策略:

  1. 收集更多的数据
  2. 增加训练集的多样性
  3. 增加使用梯度下降法的训练时间
  4. 尝试其他优化算法:比如Adam算法等
  5. 扩大或者缩小神经网络的规模
  6. 尝试dropout或者L2正则化
  7. 修改神经网络的架构:如激活函数、隐藏单元的数目、层数等

正交化

  1. 在训练集上表现不错,损失函数最小:4,5
  2. 在开发集有很好的表现:1,6
  3. 在测试集上有很好的表现:由于过拟合了,需要更大的开发集
  4. 在开发集或者测试集上有很好的表现:改变开发集或者改变成本函数

设置一个单实数评估指标

  1. 查准率
  2. 查全率
  3. FI score:调和平均数

训练集、开发集、测试集的设置

  1. 开发集和测试集来自于统一分布
  2. 使用开发集+单实数评估指标来固定目标
  3. 训练集则会影响逼近的速度
  4. 规模:
  5. 早起:100~10000:7/3或者6/2/2
  6. 现在:100万:98/1/1
  7. 测试集的目的:评估投产系统的性能,足够大,能以高置信度评估系统整体性能

可避免的偏差、方差、误差

偏差:训练集与人类误差偏大

办法:

  1. 训练更大的网络
  2. 更长时间得网络
  3. 更好的优化算法
  4. 改成RNN、CNN
  5. 更好的神经网络架构

方差:训练集中抽取的开发集表现不好

办法:

  1. 正则化:L2正则化、Dropout正则化
  2. 数据增强
  3. 不同的神经网络架构

误差:开发集表现不好

办法:

  1. 收集更多的错误例子
  2. 手动检测,查看各个分类造成错误的比例
  3. 尝试了解训练集和开发测试集的具体差异
  4. 将训练集变得更像开发集、测试集

拟合程度:测试集表现不好


快速搭建一个深度学习系统

  1. 设立开发集合测试集还有评估指标
  2. 搭好一个机器学习系统模型,进行训练、迭代,查看算法表现、评估指标表现
  3. 进行偏差分析、方差分析、误差分析、确定下一步优化前进方向
  4. 将你要关注的数据分布作为开发集和测试集

迁移学习

神经网络可以从一个任务中习得知识、或者部分知识、并将这些知识应用到另一个独立的任务中

做法:将最后一层的输出以及相关权重w、b删除。重新生成一层或者几层输入输出,如果数据量大,就将前面的权重一起重新生成

作用:用更少的数据,将一些能力能做其他应用中做的更好、更快,比如:低层次的特征:边缘检测、曲线检测、阳性对象检测、结构信息、图形形状信息、图形识别、学到的点、线、面等

意义:

  1. 在A、B有同样的类型数据时,比如音频、图像等,想从任务A中学习并迁移一下知识到到任务B中
  2. A比B数据多
  3. A中的低层次特征可以帮助B的学习

多任务学习:并行的

同时开始学习,试图让单个神经网络同时做几件事情,然后希望是每个任务都能帮助其他所有任务

例如在无人驾驶领域

与softmax不同:softmax是将单个标签分配给单个样本

意义:

  1. 训练一组任务,可以共用低层次特征
  2. 每个任务的数据量很接近
  3. 你可以训练一个足够大的神经网络,同时做好所有工作

端到端的学习

优点:

真的只是让数据说话

所需手工设计的组件更少

缺点:

需要大量的数据

排除了可能有用的手工设计的组件

访谈:

CS231n课程等一些我现在只能听听看看而不知道涵义的名词


美好的一天,明天加油!

阅读全文
0 0
原创粉丝点击