对于iOS开发人工智能意味着什么?

前言

近几年来人工智能的话题那是炙手可热。在国内很多大佬言必谈机器学习和大数据;在美国刚毕业的人工智能 PHD 也是众人追捧,工资直逼 NFL 四分卫。人工智能甚至成为了互联网领域茶余饭后的话题 —— 仿佛不懂人工智能就是落伍了。

笔者作为一名 iOS 开发者,对于如火如荼的人工智能和机器学习,也保持了密切的追踪和了解。这篇文章就是总结我在硅谷和西雅图的所见所闻,抛砖引玉的与大家分享一下我对于人工智能的思考。

人工智能是什么?

关于人工智能(AI),我们经常听到这样一些相关词:大数据(Big Data),机器学习(Machine Learning),神经网络(Neural Network)。那么这些词到底有什么区别?我们来看下面一则小故事。

从前有个程序员叫牛顿。他定义了一个方法来计算自由落体的速度:

func getVelocity(time t: second) -> Float {
return 9.8 * t
}

他是怎么得到这个方法的呢?牛顿自己被一个苹果砸中之后,做了大量的逻辑推导和实验论证之后,得到了这个公式。这是目前传统意义上的写程序方法 -- 理解清楚了事物的内在逻辑和真相后,由人来定义方法。直到今天,绝大多数程序都是这么写出来的。

而所谓的人工智能,就是机器自己定义方法。人工智能的实现方法有很多,比如可以让机器来模拟大脑,然后像人一样思考,从而定义方法。机器学习只是另一种实现人工智能的方法,就是由大数据定义方法。假如牛顿时期就有机器学习,它得出自由落体速度的过程是这样的:

  1. 收集尽可能多的自由落体实验数据。假如收集到的数据如下
负责人 速度 (m/s) 时间 (s)
伽利略 9.8 1
牛顿 19.6 2
达芬奇 29.4 3
亚里士多德 30 4
  1. 分析数据。机器学习会分析出,亚里士多德的数据有误不予采纳。其他三人的数据满足同一规律。

  2. 定义方法。根据上面数据,机器学习得出结论,速度 = 时间 * 9.8。

随着数据收集得越多,机器学习得到的结论就越准确。其实人类学习的过程也十分类似:书上有大量的知识(加工的数据),我们看了之后进行理解思考,然后得出自己的结论。

 

开普勒就是个著名的人肉的机器学习实践者:他前半辈子看星星,把观测到的数据记录下来;后半辈子用自己的逻辑和理解分析这些数据;最后得出行星运动的开普勒-牛顿模型。然后用这个模型去预测其他行星运转,同时新的数据用来修正模型的参数,使之逼近完美。

那么数据和人相比有什么优势呢?我认为是更快更准确。人在定义方法时,总是需要对该方法的前后因果、逻辑关系、各种情况都要求考虑周全,这有时需要花费很多时间去研究论证,而且忽略某些极端情况也时有发生,导致定义漏洞百出。而数据在互联网时代,获取的成本是很低的。在这样情况下,大量数据的轻易获得会使得方法定义越来越快;同时现实中数据涵盖的情况之广,也使得依次定义的方法更加准确。

吴军博士在《智能时代》一书中对大数据的优势进行了以下总结:“在无法确定因果关系时,数据为我们提供了解决问题的新方法,数据中所包含的信息可以帮助我们消除不确定性,而数据之间的相关性在某种程度上可以取代原来的因果关系,帮助我们得到想要的答案,这便是大数据的核心。”

我们回到上文牛顿自由落体速度的实验中去。实际上,机器学习拿到的实验数据,可能是以下的记载:

9月15日的夜晚,小雨微风。伽利略在比萨斜塔上扔下了1颗铅球,质量为4kg,初始速度为0,到达地面时间为6s多。

这个数据样本中有很多特征,时间、空气湿润度、风力、比萨斜塔的高度、铅球质量、初始速度、到达地面时间等等。那么自由落体速度到底跟哪些特征相关?如果让机器自己去分析,这就叫做无监督学习。如果我们告诉机器,不要 care 质量和时间,重点观测时间,这就叫做监督学习。后者在于借鉴了人类的智慧,这样机器学习就有了大致的方向。

至此,机器学习依然难以称得上“智能” -- 它无非是更快更准确的得出答案而已。如果仅仅如此,AlphaGo 就算将所有九段棋手的对弈研究透彻(这些对弈的输赢已定,相当于人为标注走法好坏,故为监督学习),水平也就十段而已,于九段相比,也就是略胜一筹,发挥更稳定一点。然而事实是,AlphaGo 的棋力要远胜人类最高水平。

其实 AlphaGo 在下棋时,每下几步,系统都会告诉它胜率是否提升。这种不断反馈的机制可以让 AlphaGo 实时强化棋力,并鼓励其尝试人类从没有下过的路数,从而实现超越人类。这种反馈的训练方式就叫做增强学习

 

最后讲讲神经网络是怎么回事。以我粗浅的理解,神经网络是由神经元组成,每个神经元都有对应的功能。比如,人工智能要识别一堆动物照片中的母狗,第一个神经元做的是判断哪些动物是狗,第二个神经元做的就是区分狗的公母。

上面这个例子中,我们是先让第一个神经元进行判断,再将结果传递给第二个神经元。也就是说,后者的输入是前者的输出,这就是神经网络分层的概念。所以 AlphaGo 这种大型神经网络,就是基于神经元分层这个原理。

因为机器学习的发展在人工智能领域一枝独秀。所以提到人工智能,几乎就相当于是在谈机器学习。

人工智能在 iOS 开发上有哪些应用?

前面说了这么多,肯定很多人要问:这些都很高大上,可惜我是 iOS 工程师,人工智能到底关我何事?其实人工智能在 iOS 上由来已久,且可能会深入我们的日常开发中,所以我们有必要对此高度敏感。这里笔者来分享一下人工智能在 iOS 上的应用。

首先,乔布斯老爷子早在若干年前就在 iPhone 上布局了智能语音助手 Siri。Siri 可谓是人工智能和机器学习在移动端上第一次成功的应用:它结合了语音识别(Speech Recognition)和自然语言处理(Natural Language Processing)两大人工智能操作(当然前者是后者的一部分)。后来因为苹果封闭的基因,Siri 的数据量一直没有上去,而我们都知道数据量是提高人工智能水平的关键,所以现在 Siri 现在一直很鸡肋。

 

同 Siri 类似,Facebook 在他们的 Messenger App 中集成了聊天机器人(Chatbot)。在去年的 F8 现场,我还清楚地记得他们号称这是 App 开发的新纪元 - 由聊天机器人和人工智能主导的 App 将取代传统手机应用,而 Messenger 将从一款聊天应用变成一个平台甚至是一个操作系统。这个跟微信的小程序战略类似,只不过多了人工智能的噱头。可惜的是,很多人工智能领域的大佬告诉我,聊天机器人离成熟还有很大距离。

Facebook Chatbot,通过人工智能优化的购物客服

到这里,人工智能在 iOS 端都没有比较成功的案例。直到这一款 App 的诞生:Prisma。老毛子 Alexey 在读了两篇论文 --《艺术风格的神经算法》和《利用神经卷积网络进行文理合成》之后,开发出了 Prisma 这款风格转换的 App。它的基本流程是这样:

  1. 用户上传照片
  2. 将照片传至云端,云端的神经网络分析识别照片
  3. 输出一副重新绘制的作品
  4. 将重绘的作品下载到手机端

 

这款 App 最难的地方在于第二步的耗时,即模型分析研究照片的风格。Alexey 优化了神经网络的细节,使得 Prisma 在重绘一张照片的耗时仅需几秒。之后的App 迭代,为了让速度更快,也为了解决海外用户连接云端的演示问题,神经网络的模型被直接部署在了移动端。利用 iPhone 强大的处理器直接进行离线图片绘制,这也让 Prisma 成为了第一款能够离线运行风格转换神经网络的手机运用。现在 Prisma 的处理一张图片的速度只需半秒不到,它也因为艺术和技术的完美结合而拿下 iOS 年度最佳应用,并且拥有了数亿用户。

最后再介绍一款 App:Topology Eyewear。这是一款订制眼镜的电子商务应用。其特点是对用户进行人脸识别,然后在手机端渲染出客户戴上不同眼镜的效果。

 

第三方 App 的成功,刺激了大厂在相关领域的重视。Snapchat,Instagram,WhatsApp 纷纷将人工智能技术引入了其滤镜效果。同时 Facebook 和 Google 也开始将 AI 框架情轻便化以方便部署在移动端。2017年刚过去的 WWDC,机器学习成为了整个大会最热门的词汇,同时苹果正式推出了 Core ML 框架。它涵盖视觉识别和自然语义处理两大内容,在提供很多训练好的模型基础上还有十分定制化的模型生成工具。操作的易用性让 Core ML 刚面世就受到广大开发者的追捧。

总体来说,移动应用 AI 化已经是一个基本趋势,正如李开复在哥伦比亚大学的毕业演讲中说:在未来,伴随着硬件、软件和网络带宽成本的下降,人工智能的成本几乎就是电费了。

iOS 开发者该何去何从?

首先我认为,iOS 和人工智能并不是对立关系,而是互补的关系。iOS 应用需要人工智能来提高自身的效率和拓展功能,人工智能技术需要在 iOS 平台上落实为产品。智能时代更多是移动时代的升级和补充,而不是取代。所以 iOS 开发仍有市场,我们无需担心人工智能会让我们失业。

但是,iOS 开发者需要拥抱人工智能。这届的 try! Swift 大会,有两个演讲专门提到了机器学习;如果你有读博客的习惯,你会发现 Facebook 的 iOS 技术专栏近年来几乎篇篇都要谈到借鉴人工智能技术开发的新功能。比如《The engineering behind social recommendations》,Facebook纽约的团队为了在移动端更好得面向用户推荐餐厅和旅游地点,利用了大数据和人工智能将大量相关的信息抽取出来,再针对用户的状态和地点进行推荐。Google 更是把人工智能融入到了绝大多数的 iOS 的应用中。如果 iOS 开发者拒绝人工智能,我们可能再也无法开发出让用户满意的应用。就像现在算法和计算机系统是程序员的基本功一样,未来人工智能也会是程序员的必备基本技能之一。

人工智能将给 iOS 开发带来很多新的机会。人工智能界的泰斗,迈克尔乔丹教授说 AI = IA + II + AA。作为 iOS 开发者我深以为然,下面是我对这句话的理解:

人工智能(Artificial Intelligence) = 智能放大(intelligence Augment)+ 智能基建(intelligent Infrastructure)+ 自动算法(Automatic Algorithm)。

  • 智能放大:即我们人类智慧的拓展。比如 Google 搜索拓展了我们获取知识的渠道;大数据可以帮助科尔改进金州勇士队的训练方案和优化战术选择。
  • 智能基建:即物联网。Amazon 的智能家居和 Amazon Go 无人超市,Uber 的无人汽车,IBM 的智慧城市,它们都会根据每个用户的需求进行个性化操作。
  • 自动算法:即各种各样的人工智能工具。深度学习、增强学习、神经网络的改进,以及 TensorFlow, Caffe, MXNet 等框架的推出和应用都属于这个范畴。

无论是哪一个方面,iOS 开发都可以大有作为。智能放大方面的 App 可以直接面向用户;智能机建一定需要 iOS 开发者在终端完成对用户的相应连接;自动算法的运用会让 iOS 应用更加强大。

最后,作为 iOS 开发者该如何学习人工智能?Core ML 是官方推出的工具,大家不妨从这里着手。WWDC 展示的 Core ML 开发步骤分为以下3步:

  1. 通过其他平台或框架得到机器学习模型
  2. 将模型导入 Xcode 中,Xcode 自动生成对应的 Swift 接口
  3. 使用 Swift 接口进行编程

使用场景为:

  • 情感分析
  • 物体识别
  • 个性化定制
  • 类型转换
  • 音乐标签
  • 手势识别
  • 自然语义识别

WWDC展示的物体识别应用

还有Google推出的TensorFlow,Facebook主导的Caffe,以及Amazon力捧的MXNet,都可以训练出很棒的 Core ML 模型供 iOS 开发使用。这几个框架大家也可以了解一下,这里吐血建议,研究人工智能框架,不推荐看中文书,直接去看英文文档效果更好。因为这些框架变化很快,书中内容淘汰得很快,而且有些理论知识还是看一手的资料更好。

结语

也有很多人不看好人工智能,认为现在炒作太热,只是概念,泡沫太多,难以落地变现。作为 iOS 开发者,从技术角度看,现在的人工智能技术已经足以大幅推动我们 App 的进步和拓展。与其作壁上观,不如进来亲身实践,希望这篇文章能给开发或者关注 iOS 的你带来一些启发。

对于iOS开发人工智能意味着什么的更多相关文章

  1. iOS开发——创建你自己的Framework

    如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...

  2. 转载:iOS开发之让你的应用“动”起来

    在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画 ...

  3. iOS开发系列--IOS程序开发概览

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  4. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  5. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

  6. iOS开发之窥探UICollectionViewController(五) --一款炫酷的图片浏览组件

    本篇博客应该算的上CollectionView的高级应用了,从iOS开发之窥探UICollectionViewController(一)到今天的(五),可谓是由浅入深的窥探了一下UICollectio ...

  7. IOS开发基础知识--碎片42

    1:报thread 1:exc_bad_access(code=1,address=0x70********) 闪退 这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象( ...

  8. iOS开发 滤镜的使用

    iOS开发之滤镜的使用技巧(CoreImage)   一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住com ...

  9. iOS开发学习概述及知识整理

    设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候,我们的app也没几天就要上线了.这个界面模仿了Evernote iOS app的风格. 我以迅雷不及掩耳盗铃之势开始在Xcode上编程,用 ...

随机推荐

  1. ios中修改数字键盘

    自定义文本框: #import <UIKit/UIKit.h> //自定义键盘的键定义 @interface DIYKey : NSObject { } @property(copy, n ...

  2. java http下载文件/上传文件保存

    private boolean downloadFile(String httpUrl, String savePath) { int byteread = 0; try { URL url = ne ...

  3. POJ 2337 Catenyms (欧拉回路)

    Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8173   Accepted: 2149 Descript ...

  4. Using Repository Pattern in Entity Framework

    One of the most common pattern is followed in the world of Entity Framework is “Repository Pattern”. ...

  5. 【MySQL】MySQL的约束

    在开始之前,笔者介绍一下笔者使用的数据库版本为5.7.所有的关系型数据库都支持对数据表使用约束,通过约束可以更好的保证数据表里数据的完整性.约束是在表上强制执行的数据校验,约束主要用于保证数据库里数据 ...

  6. 【MyBatis】MyBatis之如何配置

    1,MyBatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简 ...

  7. OpenCV 学习笔记03 边界框、最小矩形区域和最小闭圆的轮廓

    本节代码使用的opencv-python 4.0.1,numpy 1.15.4 + mkl 使用图片为 Mjolnir_Round_Car_Magnet_300x300.jpg 代码如下: impor ...

  8. numpy中的np.random.mtrand.RandomState

    1 RandomState 的应用场景概述 在训练神经网络时,苦于没有数据,此时numpy为我们提供了 “生产” 数据集的一种方式. 例如在搭建神经网络(一)中的 4.3 准备数据集 章节中就是采用n ...

  9. 1.angular之Hello World

    <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/271/qrv291e ...

  10. 使用Openssl的AES加密算法

    原文链接: http://blog.csdn.net/yasi_xi/article/details/13997337 Openssl是很常见的C接口的库,个人觉得易用.以下是AES加密的使用备忘.如 ...