提到深度学习,你可能会想到认猫、认脸,或者下围棋、翻译……其实,这项技术还能用在很多你意想不到的地方。
那么,“深度学习的最新进展能带来哪些产品上的突破?”
Quora上就有这样一个问题,而Google Brain的研究工程师Eric Jiang也给出一个最高赞的答案。下面就是Jiang的回答,大周末的,让我们一起来涨涨姿势:
Deep Learning是指包含以下特征的一类机器学习技术:
▪ 大规模神经网络(包含百万级的自由变量);
▪ 高性能计算(上千个并行处理器);
▪ 大数据(例如百万级的彩色图像、棋谱等)
目前,深度学习技术已经在众多领域达到了先进水平,例如视觉、声音、机器人、自然语言处理。深度学习最近的进展吸收了统计学习[1, 2]、增强学习和数值优化的思想。关于这个领域的概况,见参考文献[9, 10]。
我下面列出一些借助目前的深度学习技术才可能实现的产品类别,排名不分先后:
定制化数据压缩、压缩感知、数据驱动的传感器校准、离线AI、人机交互、游戏、艺术助手、非结构化数据挖掘、语音合成。
假设你在设计一个视频直播应用,希望用一套有损编码方案来减少需要向互联网上传的包。
你可以用H.264这样现成的编码解码器,但是H.264并不是最理想的解决方案,因为它是为通用视频校准的,也就是从猫咪视频到故事片都能用。改用为FaceTime视频而校准的编解码器可能会更好,因为当我们利用了“屏幕中间总是有张脸”这一点,能省下更多流量。
然而,设计一个这样的编码方案是有难度的。我们要怎样说明脸在什么位置,视频对象有多少根眉毛、眼睛是什么颜色、下巴是什么形状等等特征?如果头发挡住了眉毛怎么办?图像中没有脸或者有多个人的脸怎么办?
这时候,深度学习就派上用场了。自动编码器是一种神经网络,只是它的输出和输入数据一样而已。学习这个“恒等映射(identity mapping)”之所以重要,是因为这个自动编码器的隐藏层神经网络比输入层要小。这个“信息瓶颈”迫使自动编码器在隐藏层中学习一种数据的压缩表示(compressed representation),这种压缩表示还将被神经网络的其它层解码回原始形态。
通过端到端的训练,自动编码器等深度学习技术可以适应你数据的细微差别。不同于主成分分析法(PCA),编解码步骤不受(线性)仿射变换的限制。PCA学习的是一种“编码线性变换”,自动编码器学习的是“编码程序”。
这让神经网络更加强大,能用于更复杂的、特定领域的压缩,从在Facebook上存大量自拍到加载速度更快的YouTube视频,科学数据压缩再到降低你个人iTunes资料库所占的空间,都能用上这种技术。设想一下,假如你的iTunes资料库为了让你的音乐少占一点空间,它可能专门学习一种“乡村歌曲编码器”哦!
压缩感知和有损压缩的解码方面紧密相关。很多有趣的信号都有特定的结构,也就是说,信号的分布并不完全是任意的。这说明实际上,我们不需要为了获取信号的完美重建而在奈奎斯特极限采样,只要我们的解码算法可以正确地找出它的结构。
深度学习适用于这个任务,因为我们不需要人工标注特征就能用神经网络来学习稀疏结构。以下是一些产品应用:
· 超分辨率算法(waifu2X),就是美剧CSI迈阿密里“增强”按钮的真实版;
· 使用WiFi无线电波干扰可以透视墙壁另一侧的人(MIT Wi-Vi);
· 基于不完全观察(例如2D图像、部分遮挡的图像)解译3D结构;
· 声纳、激光雷达信息的更精确重现。
好的传感器和测量装置通常依赖于昂贵、精密的部件。
我们以数码相机为例。数码相机假设镜头中的玻璃镜片遵循一种精密的几何结构,拍照时,内置的处理器负责用光线通过透镜的等式,来计算出最终的图像。
如果透镜有刮痕、弯曲、变形,就打破了相机原本的假设,图像的质量也不会好。
再举一个例子。为了便于计算[4],我们目前用在MRI和心电图中的解码模型会假设头盖骨是一个正球体。这在一定程度上是可行的,但有时,检测出的肿瘤位置会有几毫米的误差。
更精确的摄影和MRI成像技术应该对几何误差进行补偿,无论这些误差来自潜在错误源还是制造缺陷。
幸运的是,深度学习给了我们借助数据校准解码算法的能力。
不同于“均码”的解码模型(例如卡尔曼滤波器),我们可以针对每个受体或者测量仪器进行调整,从而表示出更复杂的偏差。如果相机镜头有刮痕,我们可以训练解码软件对变化了的几何形态进行补偿。也就是说,我们不再需要以极高的精度制造和排列传感器,也就节约了大量资金。
某些情况下,我们可以在完全去除了硬件的情况下,让算法去进行补偿。哥伦比亚大学的计算摄影学实验室开发了一种没有镜片的相机,也就是软件定义成像(software-defined imaging)。
能在不联网的情况下运行AI算法,对要求低延迟(例如机器人、自动驾驶汽车)或者没有稳定网络连接(如旅行方面)的应用来说至关重要。
深度学习在这方面尤其合适。训练阶段结束后,神经网络的前馈环节运行得非常快,另外,把大型神经网络一直缩小到可以在智能手机上运行也很简单,虽然准确率上会有所损失。
Google在Google Translate应用的离线拍照翻译功能上已经这么做了[6]。
这种技术还带来一些其他可能:
· 离线仍保持某些功能可用的虚拟助手;
· 告诉你植物、蘑菇等是否有毒能不能吃的荒野求生应用;
· 自带TPU(Google的Tensor Processing Unit)芯片[11]、能实现简单避障、导航功能的小型无人机。
深度神经网络是第一种能真正看见、听见我们的世界,并且健壮性达到可接受水平的模型,这开启了很多人机交互的可能性。
现在,我们可以利用摄像头来识别手语、读书给人类听。实际上,深度神经网络已经可以用完整的句子来描述它们所见。百度的盲人助手小明(DuLight)项目就是一个能把画面转换成语音的耳机。
我们的人机交互不局限在视觉相关的领域,深度学习也可以用于校正脑电(EEG)接口,让截瘫人士能更快地与计算机交流,也能为类似手势识别工具Soli[7]的项目提供更精确的解码技术。
在计算上,游戏是非常具有挑战性的,因为它同时实时运行着物理模拟、AI逻辑、渲染、多玩家互动。这其中很多部件的复杂度都达到了至少O(N^2),因此,我们现有的算法已经触碰到了摩尔定律的天花板。
深度学习在几个不同方面推进了游戏能力的边界。
显然,有一个方面是游戏AI。在现在的电子游戏中,AI为非玩家角色(NPC)设计的逻辑无非是一串“如果-则-否则”的表述拧在一起,来模仿智能行为。对于高级玩家来说,这种AI不够智能,导致单人模式下的角色互动在某种程度上缺乏挑战性,即使在多人游戏中,最聪明的也通常是人类玩家。
深度学习会改变这一状况。Google旗下DeepMind的AlphaGo向我们展示了深度神经网络与梯度策略学习结合,可以强大到能在围棋这样复杂的游戏中击败最强的人类选手。AlphaGo所用的深度学习技术可能很快将用于游戏的NPC上,利用玩家的弱点来提供更吸引人的游戏体验,其他玩家的游戏数据可以被发往云端供AI学习。
深度学习在游戏中的另一个应用是物理世界的模拟。我们也许可以把非线性动力问题转换成一个回归问题,而不用从基本原理出发来模拟流体和粒子。比方说,如果我们训练一个神经网络,让它学习支配流体动力学的基本规律,在游戏中就能快速评价,不需要对N-S方程(Navier-Stokes equations)大规模实时求解。
实际上,Ladicky & Jeong 2015[8]已经这么做了。
对于每秒不能低于90帧的VR应用,这可能是现有硬件限制下的唯一可行方案。
第三,深度生成模型可以用于创建无限丰富的程序性内容,例如动物群、角色对话、动画、音乐,也许还有游戏的故事线本身。刚刚有游戏开始探索这个领域,例如无人深空(No Man’s Sky)就有潜力成为一款具有无限内容的游戏。
最后,作为蛋糕顶上樱桃一样的点缀,深度神经网络很适合平行小批求值,就是说运行在一块GPU上的AI逻辑可以同时模拟出128个NPC、32处水流。
由于神经网络对于图像、音频、文本都有着很好的感知能力,我们可以用它来绘画[13]、作曲[14]、写小说[15]也就不奇怪了。
多年来,人们一直在尝试让计算机作曲、绘画,不过直到深度学习出现,我们才开始真正生成出“好结果”,现在苹果的App Store中已经有几个App为取乐使用了这类算法,但我们可能很快就会看到专业的内容创作软件中将这类算法用作辅助的生成手段或滤镜。
在从网页上获取信息方面,深度学习还没有达到人类的水平,但是深度神经网络赋予机器的视觉能力,让它们足以理解超文本之外的内容。
例如:
· 从扫描的传单分析事件;
· 识别EBay上哪些商品是相同的;
· 通过摄像头辨别客户情绪;
· 不借助RSS从网页上提取博客内容;
· 将照片信息整合到金融估值工具、保险单、信用评分中。
从生成模型的发展水平、数据的丰富程度来看,以摩根·弗里曼或者斯嘉丽约翰逊的声音读文章给你听的应用迟早要出现。我在Vanguard游戏里的密码就是我的声音。
· 自适应操作系统/网络堆栈调度:在操作系统中安排线程和进程是一个非常难的问题,我们目前还没有非常令人满意的解决方案,现代操作系统、文件系统和网络传输协议TCP/IP的调度算法还相当简单。我们或许可以用小型神经网络来适应用户特定的调度模式。
· 显微镜软件的菌落计数、细胞追踪(用于生物实验研究)
· “以机器学习替代模拟”的策略已经在药物设计领域发挥作用,大幅提升了找到哪种化合物有帮助、哪种有毒性的效率。
[1] Auto encoding variation all bayes [1312.6114] Auto-Encoding Variational Bayes, https://arxiv.org/abs/1312.6114
[2] One shot deep generative models,https://arxiv.org/pdf/1603.05106v2.pdf
[3] Deep Reinforcement Learning: Pong from Pixels, http://karpathy.github.io/2016/05/31/rl/
[4] http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3790855/
[5] http://web.media.mit.edu/~gordonw/courses/ComputationalPlenopticImaging/CPICourseNotes.pdf
[6] How Google Translate squeezes deep learning onto a phone, https://research.googleblog.com/2015/07/how-google-translate-squeezes-deep.html
[7] Project Soli, https://atap.google.com/soli/
[8] Data-driven Fluid Simulations using Regression Forests, https://graphics.ethz.ch/publications/papers/paperJeo15a.php
[9] http://www.nature.com/nature/journal/v521/n7553/full/nature14539.html
[10] Deep Learning in Neural Networks: An Overview, http://people.idsia.ch/~juergen/deep-learning-overview.html
[11] Google supercharges machine learning tasks with TPU custom chip, https://cloudplatform.googleblog.com/2016/05/Google-supercharges-machine-learning-tasks-with-custom-chip.html
[12] http://arxiv.org/pdf/1410.1090
[13] [1508.06576] A Neural Algorithm of Artistic Style, http://arxiv.org/abs/1508.06576
[14] Composing Music With Recurrent Neural Networks, http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/
[15] Writing with the machine, https://www.robinsloan.com/notes/writing-with-the-machine/