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