对于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 的你带来一些启发。

转载于:https://www.cnblogs.com/LiLihongqiang/p/7625868.html

对于iOS开发人工智能意味着什么相关推荐

  1. 【硅谷问道】对于 iOS 开发,人工智能意味着什么?

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

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

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

  3. 未来五年,iOS 开发如何前行?

    [CSDN 编者按]技术圈里一直倡导一句话,那便是"拥抱变化",因为技术始终在飞速地更新迭代,过去掌握的技能可能突然之间就过时了.在近几年,移动开发逐渐趋于稳定,而人工智能.区块链 ...

  4. 【IOS开发进阶系列】动画专题

    1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hello_Hwc/archive/123447.html 1.1 基本概念 1.1.1 CA ...

  5. IOS开发高手课第一篇 构建自己的IOS开发知识体系

    开篇词 | IOS开发锚定一个点,然后在这个点上深耕 你好,我是戴铭,欢迎你加入我的 iOS 开发专栏. 说起 iOS 开发,自然是绕不开 iPhone 和 App Store 这两个词.多少年过去了 ...

  6. 如何成为一名iOS开发高手

    "无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程." 作为当 ...

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

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

  8. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  9. iOS开发-面试总结(九)

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...

最新文章

  1. Kafka入门教程与详解
  2. 前端最新技术学习地址总结
  3. Kubernetes理论02
  4. 20210722-20211010当项目经理积累的管理经验_血泪史_项目管理经验001
  5. 顶级前端工程师需要具备的经验和最佳实践(这才是市场急需的前端):
  6. apicloud mysql 登录_PHP+MySQL实现前台的登陆注册。
  7. 盐池元宵转九曲【山乡元夕】
  8. react native camera
  9. SET NOCOUNT
  10. 拼装机器人感想_机器人学习心得体会
  11. 微型计算机内存储容量的基本单位是,计算机中用来表示内存储器容量大小的基本单位是()。...
  12. Python中的abc模块
  13. RandomAccess
  14. SOA 的定义 ——谢炯
  15. python 爬网站上的图片
  16. Spark 读 CSV格式文件 ,报错UnicodeDecodeError: 'utf8' codec can't decode byte 0xca in position 17: invalid c
  17. 数据科学家技能树(中文翻译版)
  18. TCP/IP协议基础(转)
  19. 【UV打印机】RYPC打印软件教程(七)-PCS说明(上)
  20. 【故障解决】ORA-06502错误解决

热门文章

  1. 有关hybris培训
  2. Winform的控件学习整理篇
  3. Python 下划线变量定义
  4. 数据结构课本课后题算法
  5. excel表格里公式里如何固定一个值 (=$a$1)(210)
  6. Android Studio远程连接真机
  7. 【第77篇】GPT-4技术报告
  8. 【Java】二代身份证号校验的工具类Java代码可直接使用
  9. Mac 下如何快速重启 Dock 栏?
  10. Git下载部署及常用命令