在刚刚结束HBO的《硅谷》第四季,剧中人物杨建开发出了一款热狗识别应用“Not Hotdog”,里面用到了机器学习。其实如果他们像过去的科技剧那样,做一些截屏也未尝不可,或者搞一个勉强可用的应用糊弄一下也是可以理解的。但值得称道的是,“Not Hotdog”背后的研发工程师蒂姆·安格拉德(Tim Anglade)对人工智能是相当认真的。
安格拉德并没有使用谷歌CloudVision API这样的开发工具,而是迎难而上,用TensorFlow和Keras不断展开实验。因为Not Hotdog运行在本地移动设备,所以安格拉德遇到了所有移动端机器学习开发者都要遭遇的挑战。
在Medium上面的一篇博文中,安格拉德称他最初努力对Inception构架进行再训练,利用笔记本电脑安装的eGPU对数千张热狗照片进行迁移学习(transfer learning)操作。但即便如此,他的模型仍然太大,无法可靠运行于移动设备上。
所以,他试用了SqueezeNet,这是一个更加精简的网络,不需要占用太多内存。不幸的是,尽管SqueezeNet大小合适,但其表现因过度拟合和拟合不足而受到很大制约。
即便使用大量热狗和“不是热狗”的照片进行训练,这种模式也无法充分领悟到构成热狗一般要素的抽象概念,反而作出了错误的判断,例如将热狗上的辣酱与热狗划上等号。
幸运的是,谷歌刚刚发布了他们的MobileNets文章,提出了在移动设备上运行神经网络的新方法。谷歌提出的解决方案是采用介于经过渲染的Inception构架和脆弱的SqueezeNet之间的中间路线。更为重要的是,它允许安格拉德轻松对网络作出微调,实现平衡的准确性和计算的可用性。
安格拉德将来自GitHub的开源框架Keras作为起始点,然后作出一系列调整,对整个模型进行简化和优化,令其专用于单一目的。
接着,安格拉德用由15万张图片组成的数据集对最终模型进行训练。在这15万张图片中,有14.7万张不是热狗,只有3000张属于热狗的图片。安格拉德故意设计出这一比例,旨在反映世界上大部分物体不是热狗的事实。
大家可以点击下方阅读原文浏览他的整篇文章,安格拉德介绍了关于这款应用的几乎一切细节。比如在应用提交给苹果App Store商店审核以后,如何利用CodePush对神经网络进行实时注入升级。尽管安格拉德纯粹出于玩笑的目的开发了这款应用,但文章的最后他还是花了很大篇幅严肃地讨论了UX/UI重要性以及在机器学习过程中他所面对的问题。
翻译:皓岳