How to get a solution?

我们所做的topic,一般有几个阶段:

Analysis: 分析问题,找到问题的关键

Modeling / Formulation: 对问题进行数学抽象,建立模型,或者formulate目标函数

Solving: 设计出求解的算法

Experiments: 实验

最近的工作都集中在Solving这部分,就说说这个吧。

求解的方法


求解问题有很多不同的方法,就我知道的来说,大概有这么几个大家族。

Heuristics

就是根据对问题的观察而设计的一些简单的方法,不一定遵循什么规范,或者有什么深刻的数学根据。这类方法往往比较简单易懂,intuition比较明显,很多时候 performance也挺不错的,不见得比高深的方法差,因而在实际工程中很受欢迎,几乎应用在全部的学科。不过,好像很多朋友对这类方法颇为不屑,认为“没有技术含量”,或者叫做“没有理论深度”。

确实,有相当部分的Heuristics纯粹粗制滥造,投机取巧。不过,还有很多Heuristics虽然简单,但是切中问题要害,在长期的复杂的实际应用中经受住了考验。这些方法,表面看来可能只是再简单不过的几条四则运算公式,说不上多少理论,但是并不代表它没有深刻的理论基础。一个典型的例子是Google PageRank中使用的传导公式(简单版本),道理和公式都很简单,可是,做过类似工作的朋友可能都知道,它和代数图论以及马尔可夫随机过程有着很深的联系。又比如,Fourier Transform在刚出来的时候,仅仅是工程师的一些heuristics,后来关于它的理论已经成为了泛函分析的一个核心组成部分,也是信号处理的理论基础之一。

真正好的heuristics,它的好处肯定不是瞎懵出来,而是有内在原因的。对它们的原理的探索,不断带动理论方面的发展,甚至创造了新的理论方向。说到这里,有人可能会argue,这是“理论家们在故弄玄虚混饭吃”。Hmm,这种说法我不能认同,但是,确实存在“把工程方法胡乱进行理论化”的事实。什么才叫有价值的理论化,而不是故弄玄虚,确实值得思考,这里先不展开了。

Analytical Solution

当你把问题formulate出来后,有些情况是直接可以从问题推导出解析解的。这种情况通常存在于objective function是Linear或者Quadratic的情况。大家都很喜欢这种情况的出现,理论漂亮,实现简洁。但是,据我的观察,很多情况下,这种elegance是通过减化模型换取的。把cost写成quadratic term,把distribution假设为Gauss,很多时候都能得到这样的结果。

我不反对进行简化,也欣赏漂亮的analytical solution,如果它把问题解决得很好。但是,这里面有个问题,很多能获得简单解析解的问题已经被做过了,剩下的很多难点,未必是一个简化模型能有效解决的。简化是一种很好的方法,但是,使用起来,尤其是在实际中的应用必须慎重,要清楚了解它们可能带来的问题。

比如说,很多模型喜欢使用差的平方来衡量误差大小。但是,这很早就被指出是unrobust的,一个很大的deviation会dominate整个optimization,使得solution严重偏离方向。如果这种robustness在待解决的问题中是一个必须考虑的要素,那么用平方误差就要仔细考虑了。

Numerical Optimization

如果formulation没有解析解,那么自然的想法就是使用数值方法求解。目前大家常用的是基于Gradient/Hessian之类的local optimization的方法,有时会加上random initialization。如果objective function是convex的,那么这种方法保证收敛到global optimal,这是大家很希望的。convex problem无论在formulation还是在solution的阶段,都是很有学问的。很多问题可以formulate成convex的,但是未必都那么直接,这需要有这方面的基础。Solving一个convex problem有现成的方法,但是,如果能对问题的结构有insightful的观察,可能能利用问题本身的特点大幅度降低求解的复杂度——这往往比直接把问题扔进solver里面等答案更有意义。

除了convex optimization,还有一种数值方法应用非常广泛,叫做coordinate ascend或者alternate optimization。大概的思路是,几个有关的变量,轮流选择某个去优化,暂时固定其它的。在Machine Learning里面非常重要的Expectation-Maximization (EM算法)就属于这个大家族。另外,很多复杂的graphical model采用的variational inference也是属于此类。使用这类方法,有两个问题:一个是如果几个variable之间相互影响,变一个,其他跟着变的话,那么直接使用这种方法可能是错误的,并不能保证收敛。另外一个问题是,如果problem不是convex的话,可能没有任何保证你得到的solution和global solution有联系。很可能,你得到的解和真正的全局最优解相差十万八千里。这个没有什么通用有效的途径来解决。不过,针对具体问题的结构特点,在求解过程中施加一定的引导是有可能的。

Dynamic Programming

这个方法更多见于经典计算机算法中,不过现在越来越多在Vision和Learning见到它的影子。主要思路是把大问题分解为小问题,总结小问题的solution为大问题的solution。至于如何设计分解和综合的过程,依赖于对问题的观察和分析,并无通用的法则可循。用DP解决问题的洞察力需要逐步的积累。不少经典算法就源自于DP,比如shotest path。一个可能有用的观察是,如果问题或者模型呈现链状、树状、或者有向无环图结构的,可能很有希望能通过DP高效解决。

Local Exchange

很多建立在图上的问题,都可以通过某种局部交换来达到全局的平衡。像Belief propagation, Junction tree等等在graphical model的重要inference方法,还有tranduction model,都用到了类似的策略。这在实践中被证明为非常有效。但是,并不是随便设计的局部交换过程都是收敛的。这里面需要关注两个问题:

(1)交换过程是不是能保证某些重要的invariance不被破坏;

(2)交换过程中,是不是有一个objective,比如距离全局平衡的deviation,它在每一步都保持单调。有很多交换过程,在有向无环图中保证收敛,但是,在带环图中由于信息的重复传递可能引起不稳定,或者不能收敛到正确的解。


Monte Carlo Sampling

蒙特卡罗采样的原理非常简单,就是用样本平均,来逼近期望(这个可能需要用intractable的积分完成,没法直接算)。求平均很简单,关键在于采样过程。我们求解问题,通常是在后验分布中采样,这种分布在大部分问题中,不要说直接采样了,可能连解析形式都没法给出。如果采样问题有效解决了,基本上我们研究的大部分问题其实都可以通过采样完成。

由于直接采样往往非常困难,于是就产生了其它的方法,间接做这个事情。一种想法就是,既然p(x)不好直接采,我找一个比较容易采样的 q(x)来逼近p(x),然后给从q(x)采出的每个样本加一个weight,p(x) / q(x)。这在理论上被严格证明是对的——这种方法叫做Importance Sampling。这里的问题在于,如果q(x)和p(x)不太接近,那么采样效率非常低下,如果在一个高维空间,可能采1000年都达不到要求。可是,要得到一个approximate很好的q(x)本身不比直接从p(x)采样来得容易。

还有一种聪明一点的方法,叫sequential importance sampling。在这里面q(x),不是一蹴而就建立起来的,而是每个样本先采一部分,然后根据那部分,确定下一部分的proposal distribution,继续采,也就是说q(x)和样本都是dynamically built up。这个方法在vision里面一个非常著名的应用是用于tracking,相应发展出来的方法论叫做particle filtering。

另外一大类重要的采样方法,叫Markov Chain Monte Carlo(MCMC)。这个的想法是,设计一个马尔科夫链,让它的平衡分布恰好是p(x),那么等它平衡时开始采。以前我们做随机过程作业是已知一个 markov chain,求equilibrium distribution,设计MCMC就是反过来了。最重要的MCMC方法莫过于Metropolis-Hastings Algorithm和Gibbs Sampling,前者常被用于设计在solution space的随机游走(Random walk),后者则是conditional sampling的基础方法。

可是Markov过程怎么转移呢。最简单的Random Walk结合acceptance rate之后理论上是对的。可是,让sampler随便乱走,猴年马月才能把solution space走一遍阿。于是,有人提出结合一个solution space的局部信息来引导它往有用的方向走。一个重要的方法叫做Hybric Monte Carlo(HMC),想法就是把它模拟成一个物理场,把要sample的分布视为波尔兹曼分布后获得物理场的势能,通过哈密顿动力学模型(其实就是牛顿力学的推广)来驱动sampler。可是,如果问题更为复杂呢,比如整个solution space有几个井,sample掉到某一个井可能出不来了。为了解决这个问题,一种重要的方法叫Tempering,就是开始给分子充分加热,让它获得足够的动能能在各个井之间来回跳,然后逐步冷却,从而能捕捉到多个势井。

Monte Carlo方法较早的时候主要用于统计物理,目前已经广泛应用于计算机,生物,化学,地质学,经济学,社会学等等的研究。这是目前所知道的用于求解复杂的真实模型的最有效的方法。它的核心,就是猜——你直接解不出来,只好猜了,呵呵。但是,怎样才能猜得准,则是大有学问——几十年来各个领域关于Monte Carlo研究的工作汗牛充栋,有很多进展,但是还有很长的路要走。

和这里很多留学生一样,我一向潜心于自己的学习和研究。可是最近,我们的世界并不宁静,我认识的不只一个在美国的朋友受到了不太友好的挑衅——在不知不觉中,我们可能已经身处反分裂和支持奥运的前线。我看到包括MIT CSSA在内的很多学生团体开始组织起来支持自己的祖国。我没有具体帮上什么,但是,我对所有在用自己的行动捍卫国家荣誉的同胞怀有最深的敬意。我也希望,我的努力,能让外国的朋友明白中国人是值得尊敬的。

Postscript:

以下是林达华(Dahua Lin)博士的经验。很棒的一个人,想要了解更多的可以点击下面这张图片:


他的个人主页:http://dahua.me/

更多资源请 关注博客:LinJM-机器视觉 微博:林建民-机器视觉

【林达华】How To Get A Solution相关推荐

  1. GitHub 标星 20000+,国产 AI 开源从算法开始突破 | 专访商汤联合创始人林达华

    作者 | 阿司匹林 责编 | 李雪敬 封图 | CSDN 下载自视觉中国 作为已经有4000多名员工的AI独角兽,商汤的一举一动备受关注. 从2018年开始,奔着"开源.统一.可复现&quo ...

  2. 观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考

    观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考 原创: 商汤科技 商汤SenseTime 今天 日前,由中国计算机学会(CCF).雷锋网.香港中文大学(深圳)联合举办的20 ...

  3. 图˙谱˙马尔可夫过程˙聚类结构----by林达华

    这又是林达华的一篇好文,将四个概念在某个方面解释的很清楚,特别是特征值和特征向量的意义,让人豁然开朗. 原文已经找不到了,好像是因为林达华原来的live博客已经失效,能找到的只有网上转载的文章(本来还 ...

  4. “概率模型与计算机视觉”-林达华

    "概率模型与计算机视觉" 林达华 美国麻省理工学院(MIT)博士 上世纪60年代, Marvin Minsky 在MIT让他的本科学生 Gerald Jay Sussman用一个暑 ...

  5. 林达华:Computer Vision的尴尬

    作者:林达华,个人主页:http://www.dahua.me/index.html 来源:https://dahuasky.wordpress.com/2008/09/13/computer-vis ...

  6. 专访商汤联合创始人林达华:商汤的开源战略,从算法做起

    记者 | 阿司匹林 作为已经有4000多名员工的AI独角兽,商汤的一举一动备受关注. 从2018年开始,奔着"开源.统一.可复现"的目标,商汤开始建设人工智能算法的开源体系.当时, ...

  7. 专访商汤科技联合创始人林达华丨一名AI人才,需要多少栽培?

    原创:谭婧 林达华,现任MMLab掌门.MMLab是香港中文大学多媒体实验室,也是港中文-商汤联合实验室.掌门的大部分时间花在全球多个实验室里,所以北京的记者想面对面采访,未必是件容易的事. 最终,我 ...

  8. 香港中文大学教授、麻省理工牛人林达华解说现代数学体系

    林达华,深度学习与计算机专家,香港中文大学教授.2004年于中国科学技术大学获得学士学位,2006年于香港中文大学获得信息工程硕士学位,2012年于美国麻省理工学院获得计算机科学博士学位. 为什么要深 ...

  9. 概率图模型(PGM)综述-by MIT 林达华博士

    声明:本文转载自http://www.sigvc.org/bbs/thread-728-1-1.html,个人感觉是很好的PGM理论综述,高屋建瓴的总结了PGM的主要分支和发展趋势,特收藏于此. &q ...

最新文章

  1. 3D模型在网页上显示
  2. oracle列设置标题,oracle实现某一列的值转换为列标题
  3. Exception processing async thread queue
  4. P3309-[SDOI2014]向量集【线段树,凸壳】
  5. Inspeckage,安卓动态分析工具
  6. 计算机系统-电路设计11-内存的内部电路实现(输入与输出同线)
  7. mybatis官网下载
  8. 微型计算机与接口技术总结,微机原理与接口技术课程总结
  9. html自动写对联,html左右对联代码
  10. Java-如何防范CSRF攻击
  11. 纯蓝ICON_学习教程
  12. java 接收 char字符型
  13. 安装 Adblock plus 插件彻底屏蔽Chrome 浏览器上的广告 以及Adblock plus 的使用教程(亲测有效)
  14. pc端点击按钮下载app
  15. 一步步教你搭建Android开发环境(有图有真相)--“自吹自擂:史上最详细、最啰嗦、最新的搭建教程”
  16. Vue element 自定义表单验证(验证联系方式、邮箱、邮政编码)
  17. システム関連の完了コード
  18. 33岁表哥,想放弃双休稳定的工作,转行学一门技术
  19. 一个应届本科找工作的感想和体验(2)--实习篇
  20. 安卓通讯录管理软件_细说|安卓系统50个你不知道的使用窍门!每个都值得你去收藏!...

热门文章

  1. AWS学习日志之SAA
  2. Socket/Node/Die/Core/Processor/ 针对CPU封装的精细区分
  3. Unity 角色朝向目标 / 动态转向动画
  4. ScriptManager和ClientScript的区别
  5. 十年项目经理总结的项目质量管理十要点
  6. LabVIEW AI视觉工具包(非NI Vision)下载与安装教程
  7. Linux部署springboot项目(从安装java开始)
  8. 算法题:用php生成excel列
  9. The following error occurred while installing.This is a fatal error andinstallation will be aborted.
  10. 高并发解决方案 超详细!!!