热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

李宏毅svm_李宏毅2020ML/DL补充StructuredLearningStructuredSVM

李宏毅2020MLDL补充StructuredLearningStructuredSVM【李宏毅2020MLDL】补充:StructuredLearning:Stru

李宏毅2020 ML/DL补充Structured Learning Structured SVM

【李宏毅2020 ML/DL】补充:Structured Learning: Structured SVM

我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

本次笔记补充视频 BV1JE411g7XF 的缺失部分。在另一个UP主上传的2017课程BV13x411v7US中可找到。本节内容 131 分钟左右。

内容承接上一节课,我们需要一个更加有效的 FFF 。还是,要解决 Structured Learning 的三个问题。并且用目标检测作为例子。

对于第一个问题 Evaluation ,我们假设模型 F(x,y)F(x,y)F(x,y) 是线性的。这个具有一般性,为后文讨论打基础。

对于第二个问题 Inference ,穷举所有 yyy ?实际上,会有比较有效率的方法可以穷举,比如:Branch and Bound algorithm, Selective Search, Viterbi Algorithm 。我们假设问题二已经解决。

我们今天研究如何解决问题三,即训练问题。并且假设前两个问题都解决了。

今天的内容分为 8 个层次,见 Outline 。

首先来讨论 Separable case ,包括算法收敛步数上界的数学证明。

接着,对 Non-separable 这种情况进行讲解,包括 Cost Function 的定义。

在 Considering Errors 中,定义了更合的 Cost Function 。

接着,我们来讨论 Regularization 。

之后,我们来讨论,为什么我们讲的这个东西是 Structured SVM 。

最后经过推导,发现 Structured SVM 中约束过多,如何解决?进入 Cutting Plane Algorithm for Structured SVM 。

简单拓展一下 Multi-class and binary SVM (用于分类问题)。

最后,我们将讨论与 DNN 结合等内容, Beyond Structured SVM (open question) 。

文章目录本节内容综述

小细节Example Task: Object Detection

Outline

Separable caseAssumption: Separable

Structured Perceptron

Math

How to make training fast?

Non-separableDefining Cost Function

(Stochastic) Gradient Descent

Considering ErrorsDefining Error Function

Another Cost Function

Gradient Descent

Another Viewpoint

More Cost Functions

Regularization

Structured SVM

Cutting Plane Algorithm for Structured SVMCutting Plane Algorithm

Find the most violated one

Multi-class and binary SVMMulti-class SVM

Binary SVM

Beyond Structured SVM (open question)Involving DNN when generating Φ(x, y)

Jointly training structured SVM and DNN

Replacing Structured SVM with DNN

Example Task: Object Detection

结构化学习可以做的目标检测方法不仅仅是画正方形,如上,右边的骨骼分析等等都可以完成。

Outline

Separable case

Non-separable case

Considering Errors

Regularization

Structured SVM

Cutting Plane Algorithm for Structured SVM

Multi-class and binary SVM

Beyond Structured SVM (open question)

Separable case

Assumption: Separable

如上,我们定义了一个 δ\deltaδ ,同形状各点在线上的投影,一定大于等于 δ\deltaδ 。

我们希望红色比同形状的蓝色的内容,离线更远。

Structured Perceptron

如上,可以使用结构化感知器来解决这个问题。

Math

将证明,最多迭代 (R/δ)2(R / \delta)^2(R/δ)2 次,就可以找到最优解:

δ\deltaδ:margin

RRR:the largest distance between ?(x,y)\phi(x,y)?(x,y) and ?(x,y′)\phi(x,y')?(x,y′)

而与 space of y 无关。

如上,w 发现一笔错误,就会更新。y^\hat{y}y^? 是某一个正确的 y ,而y~\tilde{y}y~?是某一个错误的数据 y 。

并且,假设存在一个 w^\hat{w}w^ 满足上图性质,可以不失一般性地假设 ∣∣w^∣∣=1||\hat{w}||=1∣∣w^∣∣=1 。

如上,发现,随着更新的进行,w^\hat{w}w^ 与 wkw^kwk 的夹角在变小,即 cos 的值越来越大。

而把 w^?wk\hat{w}\cdot w^kw^?wk 拆开,得到如上关系:w^?wk≥w^?wk?1+δ\hat{w}\cdot w^k \ge \hat{w}\cdot w^{k-1} + \deltaw^?wk≥w^?wk?1+δ。

而又有 w0=0w^0 = 0w0=0,因此由递推式,得到关系:w^?w0≥kδ\hat{w}\cdot w^0\ge k\deltaw^?w0≥kδ。

此外,我们考虑 cos 中的分母,∣∣wk∣∣||w^k||∣∣wk∣∣。

如上,发现展开后最后一项是小于 0 。假设两个特征向量的距离一定小于 R2R^2R2 ,可以进行如上推导。

因此,分子分母都有了一个范围,最后得到 coscoscos 的下界。

因此,得证。

李老师只是想告诉我们,尽管反例样本可能有很多,但是算法的更新并没有我们想象的困难。

How to make training fast?

如上,从 δ\deltaδ 与 RRR 考虑,加快训练速度。但是增加其中一者,另一者就也跟着增加。

下面我们开始考虑 Non-separable 。

Non-separable

如上,对于这种情况,我们仍有 w 可以进行优化。如上图,左边的 w 就好于右边的 w 。

Defining Cost Function

Define a cost C to evaluate how bad a w is, and then pick the w minimizing the cost C.

如上 C 最小值一定是 0 ,因此 C 是小于等于 0 的。

(Stochastic) Gradient Descent

Find w minimizing the cost C:

C=∑n=1NCnC=\sum_{n=1}^N C^nC=n=1∑N?Cn

Cn=max?y[w??(xn,y)]?w??(xn,y^n)C^n = \max_y [w\cdot \phi(x^n,y)]-w\cdot \phi(x^n , \hat{y}^n)Cn=ymax?[w??(xn,y)]?w??(xn,y^?n)

我们只需要求出 ?Cn\nabla C^n?Cn 。

这其实可以计算的。

如上。

因此,其算法如上(上图有一处笔误,y~n\tilde{y}^ny~?n应该等于argmax)。

Considering Errors

如上,我们不应把所有错误都平等地对待。

Defining Error Function

如上,不同问题有不同检测方式,比如目标检测,如 IoU ,交并比。

Another Cost Function

因此,我们重新定义了 Cost Function 。我们管这段指标上的距离叫 margin 。

Gradient Descent

如上,重新定义了 yyy 。为了应对问题 2.1 ,要自己根据 case 进行设计一下。

Another Viewpoint

如上,有另一种观点,我们实际上在优化的,是cost function 的 upper bound 。

如上是证明,很简单。

More Cost Functions

如上,还有其他费用函数,如 Margin rescaling , Slack variable rescaling 。

Regularization

Training data and testing data can have different distribution. w close to zero can minimize the influence of mismatch.

如上,在迭代中加一项,weight decay 。

Structured SVM

如上,我们对 CnC^nCn 做一个移项,进而得出对所有的 y 的一个规律。

因此,我们转换出了一个规划问题。并且,把 CnC^nCn 记为 ?n\epsilon^n?n ,叫做松弛变量。

如上,如果 y=y^ny=\hat{y}^ny=y^?n ,那么 ?n≥0\epsilon^n \ge 0?n≥0 。因此,对于所有 y≠y^ny\neq\hat{y}^ny?=y^?n 的情况,则列出原式;而此外,再加上 ?n≥0\epsilon^n \ge 0?n≥0 就可。

此外,我们还可以从“松弛变量”本意来理解,如果没有松弛变量,我们可能很难满足所有约束。

这个符合 SVM 的形式,可以用 SVM package 中的 solver 来解决。

Cutting Plane Algorithm for Structured SVM

如上,www与?\epsilon?形成的平面为空间中的彩色曲面。但是,每个约束都是一个线条,限制其只有某一边可取。

Cutting Plane Algorithm

如上,在没有约束时,右下角值最小。我们只要找到“砖石”即可。而很多约束其实都没有用。我们将起作用的边的集合叫做 working set 。

使用迭代的方法去找。

如上,动态地检测哪些是起了作用的约束。求解的同时,可以改变(增加) working set 中的原始:

使用 working set 中的约束求解,让这个 QP 问题可解;

每次求解完成,看哪些约束没有被满足,如果有,那就把最没有被满足的那个,加入 working set 。

Find the most violated one

什么是“最没有被满足的那个”呢?

如上,定义一个 Degree of Violation 。

最终,Cutting Plane Algorithm 如上图所示。直到 working set 不再改变为止。

Multi-class and binary SVM

Multi-class SVM

对于多类别 Multi-class SVM 的建模如上。

对于 Inference ,就是穷举标签。

在训练中,可以进行些推导,将等式关系带回原约束式。并且,还可以定义错误的惩罚。

Binary SVM

对于二分类问题,则可以定义更多特殊的关系。可以推导回原来的SVM。

Beyond Structured SVM (open question)

Involving DNN when generating Φ(x, y)

宏毅老师的实验室在 2010 年用这个方法做了语音辨识。

Jointly training structured SVM and DNN

如上,可以把 θ\thetaθ 与 www 即神经网络与 SVM 的参数一起学习。

Replacing Structured SVM with DNN

此外,也可用 DNN 代替 SVM 。

李宏毅2020 ML/DL补充Structured Learning Structured SVM相关教程



推荐阅读
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 使用Spring AOP实现切面编程的步骤和注意事项
    本文介绍了使用Spring AOP实现切面编程的步骤和注意事项。首先解释了@EnableAspectJAutoProxy、@Aspect、@Pointcut等注解的作用,并介绍了实现AOP功能的方法。然后详细介绍了创建切面、编写测试代码的过程,并展示了测试结果。接着讲解了关于环绕通知的使用方法,并修改了FirstTangent类以添加环绕通知方法。最后介绍了利用AOP拦截注解的方法,只需修改全局切入点即可实现。使用Spring AOP进行切面编程可以方便地实现对代码的增强和拦截。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
author-avatar
帝姬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有