本文是我在目标检测任务上实践深度学习方法的一点想法和疑惑,学历尚浅,视野有限,还请大家评论指正。
我们离人工智能还有多远?
这可说不准。我们现在对人类本身的智能还没有一个被广泛接受的理论和概念框架,你没办法定义终点时,你当然说不准你离它有多远。
在我看来,目前基于深度学习方法的模型,大部分实现的实际上是 在时间和规模尺度上对某些人类基本能力的延伸。如视觉系统中的人脸识别,我们本来把认脸作为自己的一项基本能力,但当规模扩大后,我们便无能为力:我们难以从上百万千万张脸中找到跟目标最相似的那一个。于是,人脸识别模型延伸了我们在规模层面上认脸的能力,同时还有时间上的。然而,你并不会把认脸这一能力称为智能,它真的只是我们的一项基本能力而已。就像交通工具是我们双腿的延伸,目前的智能系统只是我们熟知能力的延伸。
更远些,目前的智能系统还不能成为一个主动的行为对象,而且你应该对那些对智能系统使用拟人化表达的文章提起警惕。夏天,OpenAI的OpenAI Five1挑战Dota2人类玩家时,有媒体还报道OpenAI Five学习了上一局中人类的战术,并在自我进化。这里其实混淆了学习模型的训练过程和推断过程。模型进入推断时,唯一在学习的其实是OpenAI Five的研究者,他们在观察人类的战术,并思考如何将这些建模到自己的模型里。再远至智能系统是否有自由意志、有情绪感受等,那将进入社会学和哲学的范畴,至少在我看来目前缺乏概念工具去建立具有技术指导意义的严肃讨论。
那么,现在到底是什么状况?
现在我们找到了一种新的解决问题的范式:让渡一部分对模型的控制权和解释性,来提高对数据(和算力)的利用效率。过去,我们对问题进行逻辑上的解构,采用策略、规则、逻辑系统等将问题分解和逐步逐层解决。但这种方案并不能适用所有问题,尤其是那些我们尚不能理解的过程。与此同时,我们发现尽管不能理解个中原理,但我们有大量对这一过程的观察结果,于是,设计一个具有大量待定参数的模型,用这样的模型去拟合观察到的数据,便成了一种自然的方案。深度学习模型,则是在这一思路下的一种具有很高灵活性和扩展空间的建模方法。
于是,深度学习方法在享受高度灵活性对数据充分的利用效率同时,也背上了难以解释和公理化重负。从这个意义上讲,数据其实是模型的一部分。对于目前基于深度学习方法在某些任务上取得的进展,“达到可用”是比“超越人类水平”或者“解决问题”等更不容易引起困惑的表述。
怎样才是算复现了一个学习模型?
在一个纯净和自恰的数学论证过程中,定义、引理、推理依据都清清楚楚,我们只需完成逻辑上的验证,即可认为这一结论被我们接受了。然而,学习模型要通过一定的优化过程达到可用的程度,并严重依赖实验和复杂计算过程的研究方式,这些让 所使用的优化算法和工具栈都成了模型的一部分。
对于某一文章中描述的模型,我们如何判断其他人能够复现其结果?是否意味着,我们需要和作者从完全一样的随机初始化起点开始,使用完全相同的优化算法和优化器配置,经过同样的迭代次数,到达同样的模型参数状态?更深一点,我们所使用的编程语言对数据的表示、选用的浮点数精度、乃至硬件设备等,会不会对这一计算过程的复现产生影响?
我们如何确认一项工作的贡献?
依赖工程实现和计算过程带来的弊端,还体现在我们难以建立可以被广泛接受的贡献确认标准。我们很难判断某项工作带来的真正贡献以及如何确认和验证,不要误会,我没有奢求有一个像希尔伯特问题那样的纲领性指南。这提醒我们一项工作中最重要的部分实际上是作者的 消融实验(Ablation Study)。这些实验的对照设置是否能够支撑作者的改进之处?实验是否控制了足够的变量,对比是否合理?
另外,较为严苛的复现条件也限制了很多工作的可推广性,某项工作的改进常常并不能完全独立出来,在其他结构和模型上发挥同样出色的性能。这其实要求作者去做更多的鲁棒性和推广性实验,来支撑其改进之处的适用性。这里是我疑惑比较大的地方:我们该如何评定某项工作为解决某一问题做出的贡献?一个容易观测的指标是在标准评测集上的表现,但如何分离工作中提出的方法和评测这一指标过程带来的影响?如果需要给出某些工作做为基准,那这些工作该如何选取,选取后又如何控制变量来保证对要评测工作提出方法提供一个公允的基准呢?
前面提到,数据可以被认为是模型的一部分。于是,ImageNet这样的公开评测集可以作为标准来衡量不同模型的表现如何,这确实是一项重要的标准。然而,更为重要的还包括问题表述和评测标准的演进,我们需要更立体深入地认识目标问题,而非单纯地扩展数据集规模。当Google公布他们的Open Images数据集2时,更吸引我的不是规模有多大,而是是否提出了更公允清晰的评测标准(然而他们没有)。
怎样的论证和解释才是值得信服的?
目前,一部分工作的成果汇报和工程实现之间存在解释性的鸿沟。我们无法清晰地描述某些配置和做法其之所以如此的道理和实际发挥的效果,我们只能说实验表明是这样的。一个例子是在目标检测的单阶段模型代表性工作SSD中,作者提交的论文和开源的代码实现之间有相当大的距离。事实上,作者的代码充满了工程脚手架,我曾注意到一个将IOU阈值逐步衰减的超参3,但在最终的配置中却没有被使用,自然在论文中也没有提及。一个可能的原因是,作者进行的尝试没有取得预期的效果。那么问题是,如何确定,最终被使用的部分都有符合逻辑的解释,并且是必要的呢?
另一个重要的问题是术语的过载和滥用现象。这些情况下,某一名词被我们赋予了过多且并不近似的含义,常常会引起相当的困惑和沟通上的不便。比如特征(Feature)这一词,既在通用机器学习中代指跟实例相对的数据维度,又在神经网络中代表某一层张量,FPN论文4中为其加上高等级语义(High-level Semantic)这一修饰语则又暗示它还跟我们的视觉系统抽象出来用于辨别物体的概念有共通之处。这样的过载和滥用容易引起概念上的混淆和讨论时的误会,我们也许需要更规范和清晰的表述词库。
部分工作还存在被我称为“软数学化”的现象。在没有提供精准定义和定理体系的情况下,某些论文中借用一部分数学表述来解释自己做法的合理性,但让人难以判断的是这一部分表述的原本数学含义和背景是否符合论文中的情景。一个例子是提出Batch Normalization论文5中,作者用Internal Covariate Shift来解释使用归一化的原因,但这一术语的背景和定义等都不能自成体系。但这一点被不少人忽略了:它只要起作用就是了。再如MobileNetV2的论文6的附录部分用矩阵是否可逆来衡量使用ReLU单元后的信息损失,并用n-volume指代特征层所能表达的空间维度大小,且不说所用于衡量和指代的对象尚无广泛接受的定义,这些从代数中借用过来的概念本身就未经论证其适用的合理性。
结语
上面提到的这些相对保守且不成熟的认识和困惑并不能成为我们否定深度学习方法取得成就的理由,更应该成为前行路上某次小憩时做出的回顾和反思。上面的这些困惑来自于我并不够多的论文阅读经验,也仅局限在基于深度学习方法的图片分类和目标检测领域,还请读者多多评论交流。
- 1.OpenAI Five - OpenAI Blog ↩
- 2.Open Images Dataset V4 ↩
- 3.caffe/tree/ssd/src/caffe/util/bbox_util.cpp - GitHub ↩
- 4.Feature Pyramids for Object Detection - arXiv ↩
- 5.Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift - arXiv ↩
- 6.MobileNetV2: Inverted Residuals and Linear Bottlenecks - arXiv ↩