机器学习与移动开发

通常,数据科学家对移动开发的概念很模糊,并且移动应用程序开发人员不参与机器学习。 Prisma AI的工程师Andrei Volodin居住在这两个世界的交汇处,并向Podlodka播客演示者讲述了它的感受。

利用这一时刻,Stas Tsyganov(Tutu.ru)和Gleb Novik(Tinkoff Bank)首先明确指出, 没有人在移动设备上训练神经网络 。 而且还发现,在机器学习中,没有魔术师。 讨论了深度学习,强化学习和胶囊网络等现代技术。

结果,由于Podlodka是有关移动开发的音频表演,因此他们来到她身边,发现了这一切在移动设备上的工作原理。

接下来是此对话的文本版本,播客条目在此处

关于Andrei Volodin,cocos2d和Fiber2d


GLEB:请向我们介绍一下您自己。 你在做什么

ANDREW:我是一名移动开发人员,但是在经典的iOS开发中我做的很少。 我的职责实际上不包括使用UIKit。 我是GitHub上非常流行的Cocos2d游戏引擎的主要开发人员。 目前,我是Prisma的GPU工程师。 我的职责包括将神经网络集成到视频卡上,并与增强现实(尤其是VR-kit)配合使用。

GLEB:太酷了! 关于cocos2d尤其有趣。 据我所知,这个框架是很久以前出现的。

安德鲁:是的,大约在2009年。

GLEB:您从一开始就使用它?

安德鲁:不。 我只是在2015年才成为主要开发人员。 在此之前,我是核心贡献者。 为开发项目提供资金的适当的公司破产了,接受了发展资金的人们离开了,我成为了领导者。 现在,我是该论坛的管理员,可以帮助新手解决一些问题,我已经发布了最后几个版本。 也就是说,我目前是主要的维护者。

GLEB:但是cocos2d还活着吗?

ANDREW:很可能不是,主要是因为它是用Objective-C编写的,并且有很多遗留物。 例如,我支持我用它编写的一些旧玩具,其他开发人员-我的遗留项目。 在当前的引擎中,您可能听说过Fiber2d。 这也是我的项目。

Fiber2d是第一个移植到Android的Swift游戏引擎。 我们在iOS和Android上推出了完全由Swift编写的游戏。 关于这一点,也可以在Github上找到。 这是cocos2d社区发展的下一个里程碑。

关于手指上的机器学习


GLEB:今天让我们开始逐步走向我们的主题。 今天,我们将讨论机器学习及其周围的一切 -与手机连接和不连接。 首先,让我们弄清楚什么是机器学习。 我们将尽一切可能用手指来解释,因为并非所有移动开发人员都熟悉它。 你能告诉我们这是什么吗?

ANDREW:基于经典定义, 机器学习是在数据集中搜索模式 。 一个典型的例子是神经网络,现在非常流行。 其中有与分类有关的网络。 分类任务的一个简单示例是确定图片中显示的内容:有某种图像,我们想了解它是什么:狗,猫或其他东西。

用标准代码编写此代码非常困难,因为尚不清楚如何执行此操作。 因此,使用了数学模型,称为机器学习。 它们基于以下事实:从大量示例中提取某些定律,然后使用这些定律,可以对原始数据集中未包含的新示例进行准确的预测。 简而言之,这就是。

GLEB:因此,是否正在学习有关使用训练数据集更改模型的故事?

ANDREW:在训练过程中,模型通常保持不变。 也就是说,您选择某种架构并学习它。 如果我们以不限于所有机器学习的神经网络为例,那么粗略地说,最初所有权重都是零或其他相同的值。 当我们将数据提供给学习框架时,每个新示例的权重都会稍有变化,最后它们会倒入经过培训的机器中。

STAS:此模型的最终目的是快速提供一些不是来自训练样本的数据,从而快速获得结果?

ANDREW:是的,但不仅仅是速度。 例如,某些任务无法用不同的方式解决-例如,分类示例非常简单。 在发射分级网之前,没有任何解决方案可以理解图中显示的内容。 也就是说,在某些领域这是直接革命性的技术。

关于体力劳动和机器学习


STAS:我最近告诉祖母什么是机器学习。 她最初以为机器学习就是机器教人的时候。 我开始向她解释,实际上,相反,我们正在尝试教机器,以便机器执行某种任务。

我介绍了机器学习解决的问题。 在激发机器学习之前,大多数都是由人们执行的。 而且,这不算是低技能的工作,但高科技程度也不高。 这些是一个人可以执行的最简单的操作。 你能想象得到吗?

安德鲁:那也可以说。 实际上,现在仍需要进行此类工作,但这只是为了准备用于机器学习的数据集。 的确,在某些领域,例如医学领域,机器学习可以稍微简化日常工作并稍微简化流程。 但并非总是如此。 我不会说机器学习的重点是促进愚蠢的工作。 有时它做得很聪明。

STAS:您能举一个这样的智力作品的例子吗?

ANDREW:例如,我们的Prisma应用程序-许多可能使用了它(这不是广告!)不能说这是智力工作,人们经常将图像重绘为图片,而神经网络则将其重绘-您给它提供正常的图片并获得新的东西 。 此外,人们可以争论它是否美丽,但无可争议的事实是,这是一个人无法做的事情,或者花费大量时间。

关于故事


GLEB:是的,我认为这是一个很好的例子。 大概值得看一下这个故事。 这个话题发展了多长时间? 在我看来,几乎是从编程的一开始,至少是很久以前。

ANDREW:是的,总的来说,现在应用的大多数概念都是在90年代开发的。 自然地,现在已经出现了新算法,并且当时算法的质量也得到了提高。 而且尽管有一种感觉突然引起了对机器学习的突然兴趣,但实际上,人们对它的兴趣由来已久。

早期的进展是由于这些事实主要是数学模型,并且数学在发现方面长期稳定。

当前的爆炸仅仅是由于我们周围的铁容量显着增长这一事实,主要是由于使用了视频卡。 由于今天我们能够进行大量的并行计算,因此出现了新技术-机器学习,加密货币等。

在大多数情况下,当前的兴趣以及通常的潮流都与它成为可能这一事实有关。 这些计算可以更早完成,但灾难性的长。 现在,它们花费了相当合理的时间,因此每个人都开始使用它。

关于铁


STAS:我目前正在上一门课程,并且在那里,我需要训练各种模型。 我在工作的MacBook上训练了其中一些。 是的,在某些情况下,您可能需要等待5分钟,而模型并不是最好的模型,平均准确度约为85%,但是最主要的是它们可以正常工作。 很明显,在战斗中您想提高这个百分比,也许对于生产而言,它并不是很合适。

ANDREW:是的,这样的模型可能不是很有趣。 这很可能是由于最简单的预测等等。 例如,实际上,训练样本的重量为90 GB,而所有这些可能需要一周的时间来学习。 诸如Nvidia之类的公司吹嘘他们现在已经发布了新的特制Tesla图形卡,您可以在24小时内训练Inception V3! 这被认为是直接的突破,因为之前花费了数周时间。

数据集越多,模型的结构越复杂,学习所需的时间就越多 。 但是性能不是唯一的问题。 原则上,如果您确实需要它,可以等待一个月。 问题与推理有关-以后如何应用该神经网络。 在使用过程中,还必须表现出良好的性能。

STAS:尤其是因为我希望所有内容都可以在移动设备上工作并能快速工作。

ANDREW:我不认为它最初是针对移动应用程序而开发的。 这样的繁荣始于2011年的某个地方,然后都是台式机解决方案。 但是现在,社区的真正兴趣得到了支持,因为包括iPhone在内的事实已经可以启动实时工作的网络。

GLEB:Stas,您说的最终结果取决于视频卡的功能以及整个系统。 也就是说,它不能正常工作吗?

ANDREW:并非如此,但我不确定该模型是否会在低功率机器上进行训练。

GLEB:顺便说一句,我记得5年前,当神经网络蓬勃发展时,我们的老师说,新事物都是旧的遗忘。 一切都已经在70-80年代了,因此无法正常运行,此后一直无法正常运行。 可能他们还是错的。

安德鲁:是的。 对于某些任务,机器学习现在非常困难。 客观地讲,它们可以起作用。

关于深度学习


GLEB:有一种时髦的东西-深度学习。 与我们所讨论的有什么不同?

安德鲁:我不会说有区别。 机器学习只有一些子集,其中有很多。 您需要了解,所谓的深度学习是机器学习的一部分,通常称为神经网络 。 之所以称为深度,是因为神经网络中有许多层,并且层越多,神经网络越深。 名字由此产生。

但是还有其他类型的机器学习。 例如,到目前为止,基于树的机器学习已成功用于面部跟踪,因为它比神经元快得多。 它还用于排名,显示广告等。

也就是说,深度学习不是别的东西。 这实际上是机器学习的一个子集,其中包括许多内容。 如今,仅深度学习已成为最受欢迎的方法。

关于神经网络理论


STAS:我想谈谈神经网络的理论,我会更轻松地尝试。 您说他们有很多层。 从理论上讲,如果我们有一层,并且在平面上有一些对象,那么在一层的帮助下,我们实际上可以将该平面分为两部分,对吗?

安德鲁:不,不是。

STAS:是什么使我们拥有大量的图层(如果在手指上)?

安德鲁:什么是神经网络? 让我们弄清楚。 这只是一个数学函数,它以一组数字作为输入,并给出一组数字作为输出-仅此而已。

里面有什么? 现在最流行的是在其中进行卷积的卷积网络-彼此之间简单地存在许多矩阵乘法,将结果相加,并在每一层中执行这些操作。 另外,在各层之间存在所谓的激活,它仅使神经网络更深。

由于线性变换的组合是线性变换,因此在制作10个线性层之后,它们仍可以表示为一个线性层。 为了使各层不塌陷,在它们之间存在某些使该函数为非线性的数学动作。 为了增加参数数量,这是必需的。

粗略地说,神经网络只是大量数字,然后以某种方式应用于我们的数据,例如图片。 但是一张图片-实际上也是一组数字-只是一系列像素。 当我们训练网络时,我们考虑例如1500万个参数(每个数字是一个单独的参数),在某些启发式算法的帮助下,它们可以稍微向左移动一点,向右移动一点。 由于有如此众多的参数,因此获得了如此出色的结果。

精确地需要深度训练,以便有许多这样的参数,并且所有内容都不会折叠到一层。

GLEB:似乎或多或少清楚。

ANDREW:深度学习是机器学习的一个子集。 但是出于某种原因,关于这个话题的炒作还是出现了-尤其是一段时间前,从所有的裂缝中,我想您可能会听说过深度学习。 我不知道这是否合理。

GLEB:我认为如此受欢迎是由于它产生了令人印象深刻的结果。

关于任务


STAS:借助神经网络,您可以解决大多数机器学习问题,对吗?

安德鲁:是的。

STAS:然后让我们谈谈使用机器学习方法可以解决哪些任务?

ANDREW:实际上,这是一个敏感的话题,因为实际上您需要停止对正在发生的事情进行理想化和浪漫化。 正如我所说,那里没有人工智能。 这是一个纯数学模型和数学函数 ,可以将某物相乘,等等。

从侧面看,现在机器学习在某些类别的任务上已经停滞了一点。 例如,分类(我们一开始就谈到的示例),对象的跟踪及其分段。 最后一个在我们的粘性AI应用程序中-它选择一个人,然后删除背景。 当例如检测到癌细胞时,还存在生物医学分割。 有一些生成网络可以从随机数中学习,然后可以创建一些新的东西。 有样式转换任务和其他任务。

但是,目前尚没有使用机器学习的便捷平台和基础架构。 例如,您有一个问题,您一个人可以轻松解决,但作为程序员,您不能解决它,因为它很复杂并且不能仅仅编写命令式算法。 但是同时,主要由于存在数据短缺问题,因此也无法训练神经网络。 为了训练神经元,除了非常正式的,在特定规则中描述的内容外,还需要包含许多示例的大型数据集。 另外,您需要此神经网络的体系结构。

也就是说,首先需要以数字形式对输入数据进行形式化 ,制作模型架构本身,然后以数字形式对输出数据进行形式化,以某种方式对其进行解释。 为此,您需要一个功能强大的数学工具,并且通常需要了解一切的工作原理。 因此,在我看来,现在在像我们这样的专业公司之外使用神经元有点疲软。

一些以前没有解决过的任务,神经元就学会解决很酷。 但是没有神经元来解决所有未解决问题的事情。

GLEB:在哪些领域中,您通常会看到哪些神经网络通常不适合使用的全局问题?

ANDREW:很难立即回答。 我们面临着我们正在处理的任务,而在这些任务上不可能训练神经网络。 例如,现在游戏行业对学习非常感兴趣,甚至有些神经元具有人工智能。 但是,举例来说,这尚未在AAA游戏中使用,因为所有这些都相同,目前无法训练抽象士兵的人工智能使其表现得像人一样,使它看起来自然。 很难

关于Dota


STAS:您是否听说过Dota已经赢得了人工智能?

安德鲁:是的,但是还是有点不同。 可以说Dota是一个漂亮的数学游戏。 我不想得罪任何人,但是实际上,这就像跳棋一样,都是一样的游戏。 有某些规则,您只需遵守这些规则即可。

但是,与此同时,创建某种自然行为仍然存在困难,这些行为主要与少量数据和少量能够做到这一点的工程师相关。

例如,在Google,工程师正在使用神经网络来训练3D人体模型来行走-只是使其移动即可。 它总是看起来很糟糕,人们不会那样走路。

关于TensorFlow


STAS:您说过,实际上,没有一种根本不了解机器学习的简单而廉价的解决机器学习问题的方法。 无论如何,事实证明这必须摸索。 我想了解TensorFlow。 谷歌似乎正在努力确保即使不是很精通此事,背景也不是很多的人也能解决一些简单的问题。 告诉我TensorFlow是什么,您怎么可能呢?

安德鲁:来吧。 TensorFlow 实际上并不是最简单的事情 。 这是最流行的所谓学习框架之一-通用学习框架,不一定是神经元。 这不是可用的最高级别的框架。 例如,有Keras,它是TensorFlow上的高级抽象。 在那里,您可以用更少的代码来做同样的事情。

典型任务的解决非常简单,因为,尤其是Github,已经有很多示例和存储库。 假设您的公司在图片上搜索了一家书店,那么原则上来说一切都很好。 您去了Github,这里有一些示例,您可以了解如何拍摄照片的特征,编写特征的搜索-完成!

实际上,大量任务就是这种情况。 如果您可以通过典型的方式将问题转移到机器学习中已经解决的问题上,那么一切都很棒。 但是,如果您拥有直接独特的东西,无法编码的东西,并且需要被称为人工智能的东西,那么我不会说TensorFlow是最简单的方法。 要理解它,您需要花费大量的时间。

STAS:据我了解,在Google方面,他们发挥着什么以及框架和功能?

ANDREW:是的,他们现在正在非常积极地发展,并且通常在努力使社区中的每个人都相互迷惑。 他们有一个平台,如果您准备共享结果,它们将为您提供服务器以及更多服务。 唯一的条件是您必须与所有人共享此内容,即该平台不打算用于商业用途。

关于问题


GLEB:让我们回顾一下机器学习领域中存在的问题。 最相关的是什么? 首先是数据。

安德鲁:是的。 最近,我什至看到一个模因-一张悲伤的照片和签名“当我发现很酷的架构时,却没有数据集可以训练它。” 确实存在这样的问题。

GLEB:好吧,但是我们有一个庞大的数据集,可以在一周内训练模型。 随着时间的流逝,问题如何解决? 粗略地说,对我们来说就像编译一样,在某些艰难的iOS项目中,最坏的情况下只有15分钟的编译时间通常会更快。 这里的情况是一样的,只是现在只有两个星期。 , .

: — , , - . — — . . , , R&D , : «, !» — - , , , 0,5%: «, , !» . , .

: , , - , , . ? . , — , 70%. , , . , . , , .

: , , , . , . , - , . .

: , .



: , . .



: , ? , , , — ?

: , , . , .

-, , . , computer science. , .

. , 500 Python, . . . , . , , .

, . - , . , .

: , Python - , , C++? , .

: , . - learning , , TensorFlow, TensorFlow. ,

— , TensorFlow. TensorFlow — 1 — , , .

. , iOS . , learning , , Caffe, Torch, TensorFlow ., .

, , , . R&D - , . . () : « !» — , . C++.

:

  • , . , .
  • .



: . , , .

: , ? , ?

: , . , — . : , , : «, , — », - . , , -, - . , . .

. , , , .

: Google , Google Street Maps. , .

: , - .

Data Scientist


: . , — , , ?

: , .

: , , , , data scientist'. , - . . , , . — !

, . , -, . .

: hype train.

: , , data scientist . , .

: , . - data scientist'?

: . , . , , , Git- . Data scientist - , . , code review, unit- — . , .

: , , .

: , , - , , Kaffe 2, PyTorch — ! : « Data scientist TensorFlow».

GPU-


. , , , Swift, UI-kit, . , , .

, - , . , . , , . enterprise.

- , , , . , , . , .

: , . GPU - . , — . , Junior GPU . , , .



: — .

: , ?

: , , - .

: — ?

: , , -, - .

: , ?

: . , , , , . Macbook Air. — - , , .

, Nvidia Titan , . , .



: ? , Nvidia , . , , . ?

: print , . NIPS, , , . , , . - , — , .

. ONNX , . . , . , , . , - , . .



: , . , , , ?

: , . , . , . , — , ..

, . , . — , , . . , , . , , .

reinforcement training


: . , , , , AlphaGo. , , , reinforcement training.

: Reinforcement training — . , . , , , . , , . , . Reinforcement training , , , , : « !»

, AlphaGo — , . , . , , . , . AlphaGo , reinforcement training, , .

, , , , .

: , 10 170 — . , AlphaGo . , . , , , . — , - !

, , , . , , . , !



STAS:我想问一下遗传算法。 根据描述,似乎遗传算法也可以归因于强化学习。 就像他们想象的那样,有一代人,我们将每一个人纳入一个世代中,它执行某些任务,评估其行动,然后根据这些估计,选择最佳的。 然后,我们对它们的特定属性进行了杂交,创建了新一代,添加了一些突变,现在我们有了新一代。 并且我们重复这些操作,试图增加这一代每个特定成员的最终效用。 这似乎是有道理的。 是否考虑过强化训练?

ANDREW:不,遗传算法仍然有些不同。

STAS:它们与机器学习有关吗?

安德鲁:我不会那么说。 我现在不接受它,但是我们像其他所有人一样,在大学通过了遗传算法,在我看来,这件事更简单,更不受管制,总之,势在必行。 即,预先知道将要输入什么,将要输出什么。 但是,在机器学习中,情况有所不同-在这种精神下,存在某种可能性,预测的准确性。

也许我会被比我更了解术语的人纠正,但是从我的头顶上我会拒绝。

STAS:事实证明,遗传算法不用于解决大多数实际问题吗?

ANDREW:是的,它们大多采用更多算法,在实践中我很少见到它们。

关于胶囊网络


GLEB:机器学习还有另一个子集-所谓的胶囊网络。 同样,让我们​​不要太深入。 简要地告诉我这是什么以及为什么现在有这种趋势?

ANDREW:这是一个非常新的话题,只有几个月的历史了。 杰弗里·欣顿(Jeffrey Hinton)发表了一篇文章,并说当前的卷积网络是通往无处可走的道路,我们为它的发展方向提供了新的视野。 社区含糊其辞地接受了这一说法,并将其分为两个阵营:有人说这是一种夸大其词,而有人说这是一件大事。

但是,如果您用手指进行解释,则卷积网络如何工作? 以处理图像的神经元为例。 有一个卷积-一列矩阵贯穿整个步骤,就像扫描它一样。 在此步骤的每次迭代中,所有这些卷积都将应用到该片段上,并且每个卷积都变成一个新的条件像素,但是在更大的维度上,将对所有网格重复此操作。

但是卷积网络的问题在于,到达第一层的所有数据都到达最后端-也许不是全部,但它们都会影响并都到达最后阶段。 粗略地说,如果需要确定图像的某些部分(例如一只猫),则无需扫描整个图像。 在某个位置定位猫最可能位于的区域就足够了,并且像人一样只考虑它。

这就是胶囊网络的工作方式。 我不会承诺对它们的内部进行专业的解释,而是根据我的理解:胶囊网络内部有某些树,每个后续胶囊仅接收输入的相关数据。 也就是说,通过它们并不能传递我们最初接受的所有输入,并且在每个新层中(我不知道如何用封装网络来表达),仅处理真正需要的数据-仅处理重要数据。 这是卷积网络和封装网络之间的关键区别。

GLEB:听起来很有趣,但是我不太明白-只是有关的图像吗?

ANDREW:不,仅此而已。 我用图像只是为了解释。 关键思想是:让我们不要驱动所有数据和所有功能,而只驱动与下一层相关的功能。

有关游戏的更多信息


STAS:听说在AlphaGo之后,你们将在星际争霸中击败所有人吗?

ANDREW:被迫让您失望,但我并没有真正遵循。 并不是说电子竞技对我来说很有趣,但是未来已经变得越来越清楚。 例如,已经有接受过Dota培训的初创公司。 他们作为私人教练来分析您的比赛方式,并说您不够出色,他们在电子竞技比赛中训练了自己的数据。 有一些初创公司可以预测谁会赢,等等。

现在有很多人在这方面工作,主要是因为有很多钱在花。 但是就我个人而言,这对我完全不感兴趣,因此很遗憾,我没有关注新闻和趋势。

STAS:您认为为战略游戏创建良好的人工智能的困难是什么? 我是否正确理解,基本上这是很多选择?

安德鲁:是的。 实际上,当我解释说人工智能在AAA游戏中仍然没有使用,但同时在AlphaGo和其他地方使用时,我们已经讨论了这一点。

围棋游戏的所有复杂之处在于,在每一步中您只需放置一个筹码即可勾勒出一块石头,而《星际争霸》是一件非常复杂的事情。 在那里,您可以沿几乎无限数量的轨迹发送单位,构建不同的构造集,等等。所有这些都是一个参数。

加上困难在于神经网络并不总是像人一样思考。 例如,当我们建立一个单元时,我们会记住这一点。 但是每次都会运行许多神经元。 当然,有些递归网络可以记住他们过去的成就。 它们特别用于翻译和文本信息,当生成句子时,神经元使用越来越多的数据。

需要形式化全部信息和选项的事实,这是一个巨大的困难,即要找到一个训练数据集,以便它仍能以某种方式充分响应对手的动作,也可能是一百万,这与玩游戏不同。或国际象棋。

STAS:我知道-参数很多。

GLEB:但是我不知道是什么,很明显DotA的参数较少,但是从任何地方发送等都差不多。

STAS:在这里,安德烈(Andrei)简化为这样一个事实:首先,您拥有一个单位,而选件的数量要少得多。

安德鲁:老实说,我一生中从未玩过第二个Dota,但据我所知,这是一个超级确定性游戏。 有3个走廊和塔需要被摧毁。

GLEB:是的,但是在《星际争霸》中,尽管我一点都不玩,但也有一些方法和相同的单元。 您说其中有很多,但是很可能它们总是分批驱动。 即,结果大致相同。

STAS:在战斗中,您仍然需要正确地分别布置每个单元。 当它们不装在包装中,而是开始排列时,立即会有更多参数。

ANDREW:您的问题是您认为这些类别是:放置一个单位,等等,但是始终忘了神经元只是一个矩阵-数字相乘。 在那里,您必须形式化诸如任务之类的东西。 假设有一张《星际争霸》的地图,上面有某种任务-击败一名玩家或其他什么都没关系。 所有这些都需要以数学原语的形式呈现,而这恰恰是最困难的。

如果真的是人工智能,那么Dota和StarCraft之间的差距将很小。 《星际争霸》的机制可能稍微复杂一些,但大致相同。 但是由于我们使用数字进行运算,因此很难正式化。

关于相互学习网络


STAS:在我们使用手机之前,我有最后一个要问的问题。 我不知道如何正确调用它,但是有一种方法可以使一个神经网络本质上跟随另一个神经网络并尝试找到模式。

ANDREW:我现在不承担对它的工作原理的解释,但是我可以肯定地知道,当两个神经网络相互牺牲学习时,有时会听到一些超酷的算法。 这方面的专业知识对我来说是完全不可访问的,但这听起来很酷。 据我所知,这是用于生成网络的。 不幸的是,我不能说更多。

STAS:很好。 您给了最重要的关键字,剩下的就是Gleb了,读者会很容易用Google搜索。

关于手机(Apple)


GLEB:让我们继续我们已经使用了很长时间的手机。 首先,当我们谈论移动设备上的机器学习时,我们该怎么办?

ANDREW:顺便说一下,您有针对iOS开发人员的播客吗?

GLEB:我们不是iOS播客。 是的,斯塔斯?

STAS:是的,适用于移动开发人员。 为什么会这样?

安德鲁:只是因为情况截然不同。 苹果公司一直以来都擅长于集成软件和硬件,并因此而闻名,因此它非常优雅地吸引了机器培训的炒作。

苹果在2014年推出了Metal Graphics API。 东西被缝入其中,例如计算机着色器等。随着iOS 10的出现,所有这些都允许在Metal Performance Shaders框架中包含来自神经网络(特别是卷积神经网络)的许多层,激活和其他运算符。

它只是起到了很大的推动作用,因为通常,在视频卡上的计算速度比在中央处理器上快许多倍。 当苹果公司有机会迅速地读取移动视频卡时,就不需要编写自己的数学运算符等等。 它直接射击非常困难。 一年后,他们发布了CoreML(稍后再讨论)。

苹果有一个很好的基础。 我不知道他们是否有这样的愿景,或者是巧合,但是他们现在客观上是移动设备上机器学习行业的领导者。

关于手机(Android)


不幸的是,在iOS上实时运行的功能相当出色,但在Android上却无法实现。 这不仅是因为Android很烂。 还有其他因素-首先,Android的基础设施非常多样化:设备薄弱,设备强大-您无法承受一切。

如果在所有iOS设备上都支持Metal,则在Android上已经更加复杂-一个版本支持OpenGL,而其他地方则完全不支持。 在某个地方有Vulkan,在某个地方没有。 所有制造商都有自己的驱动程序,这些驱动程序当然不会进行任何优化,而只是最低限度地支持该标准。 甚至您可能会在GPU上的Android上运行某些神经网络,并且它们的运行速度与在CPU上的运行速度相同,因为使用共享内存的效率非常低。

在Android上,现在情况不好。 这是相当令人惊讶的,因为Google是领导者之一,但在这方面有点下垂。 显然,Android上现代机器学习功能的质量缺乏实现。

以我们为例,即使在应用程序中,并非所有功能都以相同的方式工作。 即使在性能相当的旗舰设备上,在iOS上快速运行的功能在Android上也较慢。 从这个意义上讲,目前,作为平台的Android处于下垂状态。

关于CoreML


STAS:既然他们谈到了CoreML,那么谈论TensorFlow Lite可能是正确的。

ANDREW:CoreML实际上是一匹黑马。 去年他出来时,每个人都首先说:“哇,好酷!” 但是后来很明显,这只是Metal的一个小包装。 长期致力于机器学习的公司,包括我们的公司,早已拥有自己的解决方案。 例如,就速度和其他参数而言,我们的测试解决方案显示出比CoreML更好的结果。

但是CoreML的主要问题是无法自定义。 有时,您需要在神经网络中(而不是在Metal中)建立一个复杂的层,并且需要自己编写。 在CoreML中,不可能嵌入您的图层,因此您必须将其降级到Metal,然后自己编写所有内容。

最近,CoreML添加了它,现在这个框架变得更加有趣。 如果您是公司或应用程序中根本不涉及机器学习的开发人员,则可以两行运行一些神经元,然后在GPU上快速运行它。 结果显示了CoreML的性能测试,与定制解决方案和裸机相当。

也就是说,CoreML运作良好。 有点潮湿,有bug,但是每个月都会越来越好。 苹果正在积极推出更新,而不是我们习惯的方式,这些更新来自苹果框架,每年一次或在半主要版本的iOS上发布。 从这个意义上说,CoreML正在积极更新,一切都很棒。

TensorFlow Lite在CoreML中提供了一个转换器,CatBoost在CoreML中也支持了一个转换器。 简而言之,苹果再次做了一切。 他们发布了一个开源转换器,并说:“让我们用CoreML编写所有转换器”-许多学习框架都对此提供了支持。

最初,人们对CoreML持怀疑态度,而在最后一个WWDC上,CoreML开发人员最普遍的问题是:“为什么不允许从Internet下载模型? 您为什么不让他们加密?” 有可能获得这些模型,结果是盗取了知识产权。

现在,所有内容都已修复,增加了功能,目前,CoreML绝对是这种意义上的领先平台。

STAS:您可以更详细地谈论这个吗? 事实证明,现在您不能再存储模型,而只能从某个地方加载它?

ANDREW:是的,已经可以了。 以前,当我们问到这个问题时,开发人员笑着说:“只看标题。” 确实有设计师可以将文件传输到其中,并且所有内容都可以整合在一起。

但是其中的CoreML模型非常有趣。 它们实际上是存储权重的普通二进制文件,但它们又是生成的swift文件,然后会创建隐式类。 您可以在应用程序中使用这些类,然后编译器将此模型编译为一些文件。

现在,使用某些技巧和方法,可以使此模型具有可移植性。 您可以通过加密来保护自己的知识产权,并减轻应用程序的重量。

总的来说,CoreML现在朝着正确的方向发展。 从App Review的角度来看,并不是所有事情都可以合法完成,没有黑客就不能轻松完成所有事情,但是开发人员如何改进框架是显而易见的。

STAS:太酷了! 我想补充一点,CoreML看起来像一个典型的解决方案。 相对而言,当您想在应用程序中使用机器学习来做一些简单的事情时,它很方便。 看来,如果这是一项典型的任务,那么Apple会在您找到现成的模型,数据集及更多内容的情况下,尽可能简化整个路线。 这只是一个典型问题的故事,因为对于他们来说,可能一切都已经准备就绪。

ANDREW:对于典型的任务,这通常是超级好的! 没有夸张-实际上需要两行代码才能运行模型。 从这个意义上讲,是的,这非常酷,特别是对于独立开发人员或没有员工研发部门但又想添加一些酷东西的公司。

但这并不是那么有趣,因为典型的任务是在Github和Metal上解决的-尽管可以稍微复杂一点,但您可以将这段代码复制到自己的代码中并放在服务器场中。

现在,重要的是,此框架不仅朝着经典的日常任务迈进,而且朝着集成解决方案迈进。 这真是太酷了!

关于手机培训


GLEB:您说在Metal出现之后,就可以在手机上训练模型了吗?

ANDREW:不,不可能进行手机培训。 这没有任何意义,您只能运行它。 如果我这样说,我就保留了。 当然,在手机上,没有人教任何东西。

STAS:我也没有听到有关手机培训的任何消息。

GLEB:我也没有听到,但是我考虑了一下。 当然,从直觉上看,这是一件奇怪的事情。 但是绝对没有有趣的任务,何时才有意义?

安德鲁:很难想象它们。 如果有类似的事情,那么只能进行分布式学习。 甚至有关于如何执行此操作的科学文章,但据我了解,您在问如何从同一部手机收集的数据中学习? 只是即使您收集了很多(不会发生),也要花很长时间才能知道它永远不会结束,而且没人会把培训代码移植到移动平台上,因为为什么? 培训总是在服务器上进行,而推理总是在设备上进行。

STAS:但最终结果是这样的。 如果您是一家公司,则希望拥有类似的东西,需要数据,然后可以从用户那里收集数据,也就是定期自己加载数据。

ANDREW:是的,但是工作原理有所不同。 您可以将所有用户的数据收集到一个位置中的热服务器中,在那里进行培训,然后将完成的模型发送回去。 但这并不是让每个人都教一些东西。

STAS:另一方面,手机会变热-在冬天,它会很重要,但可能会持续很长时间。

关于手机和未来


GLEB:在将机器学习应用于移动设备方面还有其他有趣的事情吗? 我们谈论了我们已经拥有的东西。 展望未来会很有意思-因此我们通常希望在我们的移动平台上收到一些超级食品,超级解决方案。

: , , performance — , , . , - , .

. , style- , . .

CoreML . , , . , , : , , — , Android, iOS, . , , iOS Android.

, , , , — Android, iOS, Github . - — Uber , Horovod. Apple — , . , , , , — .

, . , , , — , , - . , .



: , , ? , , ? .

: , — (M. Bishop. Pattern Recognition and Machine Learning. Christopher. Springer. 2006), - . , , 3D , , - . . , — , — .

, , , . , -, , Andrew Ng Coursera. , .

, , , — MNIST. Hello World, .

, , , , - , . - , , , .

: ?

: advanced- Andrew Ng! , , Kaggle, , . , , — Data Scientist.

— , , , . , — R&D . , . . , , .

. , Kaggle, - — 90% .

总结


: . , , , , .

  • , — . , , — .
  • .
  • .
  • - .
  • , , , .
  • , . , , , - - !
  • — , , CoreML — , .

, .

, AppsConf 2018 , 8 9 .

80 , Call for Papers — 3 . , , .

Source: https://habr.com/ru/post/zh-CN416477/


All Articles