【结构化机器学习项目】Lesson 2--机器学习策略2

2023-12-24 23:48

本文主要是介绍【结构化机器学习项目】Lesson 2--机器学习策略2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

课程来源:吴恩达 深度学习课程 《结构化机器学习项目》
笔记整理:王小草
时间:2018年6月3日


1.误差分析

1.1 误差分析

当算法还没有到达human level时,你需要去分析算法带来的误差,并且决定接下去应该如何优化,从而减小误差。这个过程叫做误差分析

将设在猫狗分类的任务上,若dev set上的error有10%,此时你需要找出这些错误的case,然后统计猫错分成狗,和狗错分成猫各自的比例,如果你发现:
狗错分成猫的比例是5%
猫错分成狗的比例是95%
则此时,你无需再花大量时间在处理dog上,否则最多提升5%的正确率;而应该去分析后者。

比如针对猫的图片,将所(一部分)有bad cases找出来之后,依次分析每个badcase造成的原因,并进行统计个二类错误的比例,比如

image像狗像大的猫科动物图片太模糊comments
1pitbull
2
3
%of taotal8%43%3%

有了这个表之后,就可以针对每个问题用相应的方法去逐个解决问题。

对error analysis做一个总结
(1)找出所有bad cases
(2)逐一对每个badcase 分析找出原因
(3)分析对应的error 类别
(4)统计不同error类别站总体的比例
(5)发现问题的优先级
(6)构思新的优化方法

1.2 清除错误标注数据

(1)分析错误标注的数据

在训练集中,有人为标记错的样本很正常,因为人也不能百分之百保证正确,但这个标记错分为两类:
a.随机标记错,比如太累了或者没看清,有的时候把猫标成狗,有的时候会把狗标记成猫;
b.系统性错误,比如这批标记的人,就真的没有见过吉娃娃狗,以为他们是猫,于是把所有吉娃娃狗都标记成猫了。

  • 对于随机错误,只要整体的训练样本足够大,则放着也没事,因为深度学习会对训练集中的随机错误有很好的鲁棒性;
  • 但对于系统错误,则必须修正,因为分类器会学到错误的分类

因此,在误差分析中,统计badcase的同事也顺便把标注错误的数据也统计一下,然后分析是否有必要花时间去修正。
若标注错误的比例很小,对dev/test set的评估有较大影响,则需要修正
否则不修改也行。

(2)修正错误标注数据的注意点
- 若对训练集进行修正,记得也要给dev/test set进行同样的操作,以保证它们的分布是一致的。
- 对分类器分对的例子也应该有审核,也有可能有标记错误的例子。
(不过一般不会对分对的例子检查,否则实在太耗时,尤其是分类器准确率较高的情况下)

1.3 快速搭建你的第一个系统并进行迭代

建立一个全新的机器学习系统的步骤:
(1)建立训练集,开发集,测试集,以及评价指标–>制定好target
(2)快速建立一个初步的模型,并观察在训练/开发/测试集上的评估指标的表现
(3)使用bias/variance分析 & error分析 来一步一步优化模型。
(注意分析并确定优化的步骤,尤其是error anlysis, 可以发现不同error类型的重要性,找到正确的优化方向)

2.训练集与开发/测试集不相配

2.1 训练集与开发/测试不同分布怎么办?

问题:
训练集来自网络专业的图片,清晰美丽,有200,000份
测试集来自于APP用户上传的图片,模糊,取景不佳, 有10,000份
而算法更关注模型在测试集上的表现。
但若在用户上传的图片数据训练,则数据量太小,而在网络图片上训练,又无法正确应用到测试集的分布上。

怎么办呢?

法1:
将两类数据混合,再随机分出train/dev/test set:
training set: 205,000
dev set: 2500
test set: 2500

这样做的优点是:train/dev/test set都来自于同一个分布

缺点是:在每个数据集中,APP的用户图片比例非常非常少,以至于评价指标的好坏并不能满足真正业务需求需要评估水平的。因为业务上,可能是想得到对于用户图片的识别的评价指标。

法2:
将2类数据混合,并且
training set: 200000张来自于web, 5000张来自于user
dev set: 2500 来自于user
test set: 2500 来自于user

这样做的优点是:由于dev/test是来自于用户,因此优化模型在它们上的变现与实际业务需求目标相吻合

缺点是:training和dev/test的分布不同了

2.2 不相配数据分布产生的偏差与方差

假设training set和dev set来自不同分布,且error如下:
human error: 0%
training error: 1%
dev error: 10%
此时尴尬的是由于training set和dev set来自不同分布,因此不知道training error和dev error的方差9%,到底是来自于算法不好导致的方差,还是来自于分布不同导致的。

又怎么办呢?

为了区分以上两个原因分别带来的error,可以这样做
(1)将原训练集随机打乱,分割成training set和training-dev set(两组数据同分布)
(2)在新的training set上训练模型
(3)计算模型在training set, training-dev,dev set上分别的error

假设结果是:

training error1%
training-dev error9%
dev error10%

则8%的误差来自于模型无法泛化的variance导致的

若结果是:

training error1%
training-dev error1.5%
dev error10%

则8.5%的误差来自于分布不同导致

若结果是:

human error0%
training error10%
training-dev error11%
dev error12%

则有10%的avoidable bias(可避免偏差)

若结果是:

human error0%
training error10%
training-dev error11%
dev error22%

则有10%的avoidable bias(可避免偏差),还有11%的分布不同导致的误差

总结:
image_1cescv16j1qoj19qkp9ilc4e7s9.png-26.4kB

2.3 解决数据不匹配问题

(1)利用误差分析分析差异的原因

(2)使得训练数据与dev/test数据分布相同
比如人工合成数据:
在音频识别中,若发现training set中是清晰的声音,但是dev set中许多汽车的噪音,则进行合成数据,在training set中也加入汽车噪声,从而使得两者分布相同。

3.其他学习任务

3.1 迁移学习

如何进行迁移学习?
(1)在数据集A上训练一个神经网络(比如训练了猫狗分类的)
(2)将以上训练好的神经网络用在B数据集上训练(比如X光照片分类)
- 若B数据集size小,则可只重新训练最后一层的参数
- 若B数据集size大,则可重新训练整个神经网络的所有参数(将原训练好的神经网络的参数作为初始参数,即通过A数据集进行预训练初始参数pre-train the weight of NN)
以上过程叫做fine-tuning

为什么进行迁移学习?
在原数据集上学到的边缘特征,有助于在新数据集中有更好的算法表现(比如结构信息,图像形状信息等其中有些信息可能会有用)

什么时候进行迁移学习?
(1)taskA,B必须有相同的input,比如都是image或者都是音频
(2)当对于你想要解决的问题数据集很小的时候,则先用大量数据做预训练,然后用少量的目标数据做迁移学习。
(3)A数据的low level特征对学习B数据有帮助的时候

3.2 多任务学习

如何进行多任务学习?
迁移学习:串行的,先执行taskA–>再迁移到taskB上。
多任务学习:并行的,使用同一个神经网络同时实现多个目标。

多任务的例子:
input:一张交通的图片
同时实现多个目标:检测是否有行人+是否有车+是否有stop sign+是否有light。

以上例子换成神经网络图如下:
image_1cf2jhjl31bv91lia1hku3a63lp9.png-34.4kB
输出层有4个神经元,分别对用4个task的二维预测结果

损失函数的形式是:
image_1cf2jkqcvdq3ioqs3017f81bo8m.png-12.6kB
即单个样本的损失,是该样本上4个task的损失之和。

训练以上神经网络即为多任务学习。

注意:对于标记的训练样本,不需要对每一张图片都做以上4个label的完备标记,可以有些图片缺少某些Label,也不影响神经网络的训练。

什么时候进行多任务学习?
(1)当一系列task可以共享low level特征的时候
(2)usually(not always),每个任务单独所具备的训练样本很少的时候。

4.端到端深度学习

4.1 什么是端到端深度学习

以语音识别为例:
传统的方式:语音–>认为提取特征–>words–>transcript
端到端的方式:语音———————–>transcript
(端到端的方式需要足够大的数据,小数据上传统的方式更好)

对于人脸识别,并非end to end 最好,一般分成以下2小步:
(1)识别人脸并取出人脸部分
(2)将人脸部分放大的制定大小,再喂给神经网络

对于机器翻译
如今又大量的2种语言的对应训练数据,因此目前end to end在机器翻译中表现优异

对于根据X照片判断小孩的年龄
(1)现将X照片中的每一块骨头都识别出来并取出
(2)测量长度等去匹配表中对照
(3)判别年龄
因为X光照的年龄数据其实很难得到,因此不适用于end to end.

4.2 评价端到端深度学习

优点:
让神经网络自己学习x–>y的映射,无需人为设计与提取特征或中间表达式

缺点:
(1)需要大量数据
(2)排除了某些可能非常有用的人为设计的东东

考虑是否需要用end to end 深度学习的时候可以问自己一个问题:
do you have sufficient data to learn a function of compexity needed to map x to y?

这篇关于【结构化机器学习项目】Lesson 2--机器学习策略2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533553

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学