【笔记】离终极智能的下一个一步之遥

思索机器学习的新方向,漫漫,还是有些无力。
被一个问题困扰良久,仍不得解。这个问题是什么呢——图像里对象的计数问题。
众所周知,现在的图像中对象计数有比较成熟的一套算法,你看YOLO, SSD, ResNet, MaskRCNN满天飞,都是在往bounding box上钻。然后问题就变成了找到bounding box再计算正确box的数量。这其中的算法实际上包含了两个步骤:

  • 第一步:训练一个机器学习的模型,让它能够识别boudning box和这个box里对象的分类
  • 第二步:写一个程序,用一个变量,一个循环遍历所有box,判断分类是不是符合计数要求,是那么变量++

那么这个算法有没有问题呢,当然有。我们慢慢展开。

首先第一个问题是,我们知道现有的基于bounding box的模型能识别多个对象是因为有anchor method的原因。anchor method其实限制了模型的精度,它只能识别出有限的对象,如果图片中的对象数量超过了anchor method当时训练的规模,它就抓瞎了。这样算法也就会出现错误的风险。

第二个问题是,现在的机器学习,分类已经如火纯青,但是在计数上没有什么进展。设想,如果有一个小孩子,被教完计数,他可以数出图片中的指定类型的对象有多少个;也就是说,给定一个输入图片,输出直接是一个数字,中间的过程是小孩子自己在学习中生成的。并不是像我们现在的算法,先用机器学习再手动写一个计数程序。那么,计算机如何学习计数?

我们来看一下现在的机器学习大概做了什么:一些设定好的layers,数据一次通过,最后得到一个分类或者一个回归结果;这里,回归结果其实可以映射成一种分类,所以我们不妨设模型最后得到了一个分类。那么由这种模型进行组合,其实是形成了一个大的状态机,或者走出了类似于马科夫链的图结构;换句话说,我们在使用matrix的时候,它计算最终成为一个分类,我们不妨把这个分类简化为2值分类,那么其实一个模型如果是二分类,就是完成了一次大if判断,把他们组合起来也就是很多if;什么意思呢?就是说,现在的机器学习模型帮助人类能快速生成规模庞大的if群,以前程序员只能写个十几个if,现在能写几千万个,那它的精度确实高了很多,也能执行很复杂的任务了,可是和智能相去甚远。而光靠if很难完成学习计数,这就是现在机器学习的瓶颈。

遇到瓶颈,怎么突破呢?下一个一步之遥是什么呢?

我们再来看看计数的过程,人在图片中计数一般是专注于某个区域,开始识别并计数,并重复专注某区域识别计数累加;在完成一个区域的同时,会使用记忆去标记这个区域已完成,这中间其实是又一个规划过程,而这个规划过程中其实使用了一种重复,或者说循环。是了,我们现在还没有找到稳定表述循环的方法。熟悉汇编或者C的开发者应该比较清楚,for或者while其实最终都是编译成goto的,那么这个goto具体是如何能在机器学习中实现呢?最简单的循环其实是可以实现的,比如在机器学习的模型中加入一个gate层,它的结果为0就让数据流继续往下走,为1就让数据流跳转到另一个层上。但是这个跳转,看似简单,它如何去学习,还需要更多研究。当然随机跳转,竞标赛最后取最好的遗传算法可以胜任这个任务,但是学习模型如何收敛又是另一个巨坑…其实机器学习的最终,就是可以自主生成一个满足需求的可执行程序…

生而为人,也是否是一个满足需求的程序?

你可能感兴趣的:(数据处理,机器学习,瓶颈,if,循环)