演讲实录——AI Workshop

0
回复
127
查看
[复制链接]

185

主题

176

帖子

6449

安币

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-5-7 10:40:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-900274-80004.html

本文来自2019安卓巴士开发者大会现场实录,由于录入匆忙,内容可能存在偏差,欢迎大家扫描文末二维码查看现场实录视频和下载大会完整PPT。


江骏:不好意思,让大家久等。本来邀请函里面workshop一边演习一边敲,后来我自己试了一下,一个可能用到好多的库,还有今天的一些网络这边可能讲得太细,包括教大家如何用一些源来加速安装比较耗费时间,所以我今天还是走PPT的方式。如果身边有电脑的同志,立马可以开始试一下看。今天的主题可能偏向于AI入门级别,可能甚至于连入门都没有到的科普性的介绍。换句话说,我觉得从刚才的提问当中,我觉得我今天的定位还是很准确的,好多朋友今天过来可能是想了解一下AI怎么学习,或者说我第一次这个环境到底应该怎么准备,然后再看教程,大概这个AI是怎么学习起来的。这个里面很多内容也是结合了我接触到的各种各样的,包括已经是算法工程师的人,我在工作当中接触到他们,我觉得要么就是太着急,基础的东西一点都不会的那种,或者学的方向完全是错的,然后在工作当中就会遇到这个那个的问题,我觉得都是可以在今天这个分享里面,如果大家是刚开始学习的话,就可以提前避免掉。

今天大概就是分三个部分,一个是讲一些轻松一点AI技术的背景,然后TensorFlow大概简单介绍。然后稍微分享一下电商领域。当然今天在座的场景就更丰富了,各种物联网,电商我接触到的一些应用。第三个主要聊开发环境,还有一些基本的大概的小的代码片段,让大家一下子感觉到这是一个什么样的东西。


第一个AI,这三个词大家都是一起听到了,machine learning,Deep learning,AI是最大的,machine learning你可以用传统的方法,已经在很多场景非常有用,非常有效了,再深度学习出来之前,再预测一些有些问题上,已经准确率非常好了。Deep learning一出来把什么都踩在脚底下,我们看的应用相关的一个是图像相关的,你就可以做安防、人脸识别,好多东西,因为本来一张图片计算机是读不了、理解不了二进制的东西,这个图片上面有什么东西很难去理解。第二个是自然语言,可能以前也有很多基于统计的办法,但是它对于理解方面的也是等到DistBelief开始了继续去发力。


再讲到TensorFlow跟DistBelief什么关系,从一行代码就没有开始学,写的过程中遇到很多数学的运算,这个里面要保持你的实现编码代码能力非常高,不然的话你如果把自己一个很好的想法实现错了那就很悲催,你还以为是自己的模型不行,自己的想法不行,其实只是写的哪一行写做了而已。如果是那样子一个生产效率的话,深度学习是不可能有今天这样的繁荣,大家都可以玩这样子。对于这样的困境也不止谷歌,包括像卡菲尔,他们同一时间就遇到这个的问题,把这种运算、求导的事情写得很稳定,稳稳当当的,你这个算法工程师或者科学家只要写我的结构,然后怎么读数据、处理数据,这样子你的效率一下子就上去了。这个同一时期谷歌做了DistBelief这个框架,这个框架当时是不开源的,但是它已经能够为谷歌的一些Deeplearning模型的训练起到服务了。


但是随着时间的推移他们发现以下几个问题,一个模型大家可以理解有大有小,它这个在训练的时候,基本上用最简单的方式来说,模型要加载在内存里,如果你要训练GPU,你还要把一部分加载写存里面。这个谷歌的模型越做越大,发现这个显存放不下了,这个已经是一个挺严重的问题。那么在当时的情况下,它就要采用分布式训练的方式。其实现在大家遇到的如果是特别大的模型,在现在几个解决方案中,其实分布式训练仍然是其中的一个方案之一。另外一个它当时这个DistBelief主要设置的是处理图像这样一个场景的深度学习,对于其他的场景,比方说谷歌应用商店,帮你推荐,像这样的应用它自己写的框架就用不了了,出现了局限性。当时手机也没现在发达,更加不会考虑到这方面的需求。再另外一个它当时这个系统当时写的并不是工程方面写得特别好,在维护成本上反而变成一个比较大的成本。现在的话TensorFlow就是把刚才这些问题,不光是都解决了,而且在现代随着大家的关注、热度,开发人员越来越多,它的功能也是一年一年多了非常多出来,现在这个TensorFlow已经很轻松可以跑在这么多不同的设备上。


然后也有不同的语言,这个图颜色比较浅,这个主要想讲的现在TensorFlow它不仅是只关注你的模型训练,它从你的整个生态,从你数据怎么进来,怎么高效的读数据,其实这个是很多公司,包括阿里包括什么,都会去做自己的库,当我想要读大批量的数据的时候,比方说把这个读数据的东西写成一个Python库,写了之后怎么让这个效率高呢?你这个库里面一定要多线程用上,这样数据的吞吐量才大。对于这种事情TensorFlow也提供自己的方案了,有很搞笑的读取数据,存储模型,比如你这个存储模型用Python输入到其他的移动设备上。TensorFlow JS和TensorFlow Swift是用这两个语言写的,尤其是让TensorFlow不管是写代码都产生不一样的效果。所以为什么要用TensorFlow,它的整个生态,不管是应用到哪个层面,都很丰富、都很全。另外一个它也不是让大家迷信。这个时候它也在不断的推出库一些东西。


另外一个越来越多的公司意识到,我光训练到了模型是没有用的,我拿到一个模型很准,不过你这个东西我在线上有可能不断新的数据要进来,然后我的新模型要不断的训练,不停地发布到线上,整个这么一套模型,还有你的训练数据,还有预测的数据,所做的预处理是不是一样,跟算法其实并不是太相关,但是你要把模型用起来必须要考虑这些事情。这也是在DistBelief一火稍微退烧一下就发现这些问题。谷歌另外还有一个开源项目kubeflow它来解决。最后一个任何公司,每个算法公司都有权利它喜欢用什么,但是作为一个团队作为一个公司来说,它要有它的技术积累,大家协作、讨论,这要怎么用比较好。所以在这些角度上,TensorFlow也是一个比较好去积淀出东西的框架。


这个页面基本上我列举了一些,因为我本人做AI平台做了3年多,在饿了么和蚂蚁。其实我其实不需要说具体的什么商业里面他们是怎么用的,但是就是从我的这些用户里面,我基本上看到如果是电商场景都是这些内容。因为每个APP都有一个搜索框,搜索出来谁排第一个,除了交钱以外也是根据用户的喜好来排序的。对于搜索推荐来说,刚才讲的是搜索,还有一个推荐,比方说在你的一个订单页的下面,当你看订单页,如果它帮你推荐两个特别爱吃或者想要的,这个时候你们整体的GMV就相当于提高上去了。这个在营销场景上,你们希望吸引更多的用户用你们的APP,你们希望提高用户使用的频次,你们通过发红包这个方式,那么发红包怎么高效地去发红包的,这些用户会来用的,这样是比较好的。还有像商家代金券,它跟红包反过来,商家代金券是商家我愿意掏2万块钱来做这个运营,然后你帮我发这个代金券,这个券只能用在我们家。还有安全风控,这里面包括了商家端的,有异常的商家,薅羊毛的,商家也会薅羊毛,用户也会薅羊毛。然后对系统稳定性做检测。业务上面每个公司更加不一样,比方说送外卖就会预估配用时长。比如说新春集五福,运营的同学对这整个新春红包集五福要有一个操控,它不能说因为今天大家全都挤起来,那还玩什么。它要对自己的活动要有个掌控的感觉。


刚才讲了这么多应用,什么是machine learning,大家经常说机器学习机器学习,学了半年如果不准备搞这个,它反正学会就行了,如果准备搞这个它怎么学会了,它怎么学的呢,这是一个我不知道大家有没有去想的问题。


其实学习这两个字,我用这一章PPT就可以把最简单的原理给讲明白了。一个程序,那么一串数字它怎么学习。其实对于我们,我们要预测Y值,我们如果以线性的方式来做,这种权重WTX B,如果这个W和B都是来随机选的,由于我们这个W和B都是随便选的,现在这个模型肯定预测效果很不好。我们怎么评估这个模型好不好?其实就是我的预测值或我的真实值差得越小越好。那我们就定义,因为你要定义越小越好方法有很多,你可以自己想。但是这个地方抛砖引玉说一种最简单的方法,把它俩相减求个平方。就这样最简单的公示我们称它为损失函数。我们知道如果评估这个模型预测好坏之后,我们就相当于有一个目标,让什么样W和B让这个Loss越小,如果在咱们这个案例它始终是0,咱们理想上是比较好。通过什么方式来求W和B呢?现在在TensorFlow里面,大概就是通过这样的方式之后,很多科学家也在不断的研发新的Optimizer算法,让它求得很快。我们说模型就是存的W和B,你们把他们这个存下来,当然你要把整个你的网络结构也要存下来。有些难免为了讲得简单有讲不准确的地方。


我们讲的是一层,如果中间再加很多层,中间的层就称为hidden layer,隐藏层。为什么说深度学习呢?从图上的感觉也可以感觉出来,随着中间层越加越多。大概机器学习就是这样的概念。有了这样的概念之后我们面对一个问题什么去做呢?对于我们拿来一个数据,不管是人脸也好,还是股票数据也好,还是什么数据也好,往往我们把它切成三份,或者通常切成两份,一份做验证。训练和验证有什么,这些都是已知真实值。比方说用户会不会下一个单,都是已知真实值,我把训练这部分训练出了模型,我把验证值来验证一下这个模型好不好,如果好推到线上去服务。有了这些之后,很多人就开始搞TensorFlow了,抓紧开始看教程了。TensorFlow目前来说比较主体的还是用Python来写为主。当然以前很多相关的教程了。但是你看真正大家发的一些研究或者你用现成的模型还是Python为主的,所以还是推荐大家用Python入手。

好多人后来还是来问,他们问,这个包装到哪里去了,或者说这个Python2、Python3自己的环境搞得一团遭,这个到底装到哪里去了?这些问题不是说你搞机器学习搞Python遇到的问题,你只要写Python应该在第一时间就应该搞得清清楚楚的事情,如果把这个概念搞清楚之后,你的环境是放得干干净净的。像我的环境从来不会说我会弄乱我自己的环境,就是因为你很清楚你引破这个东西是怎么去工作的,当你敲Python的时候,后面这些东西你用到这些东西是如何工作的。这个也是导致我看到好多学机器学习,玩TensorFlow的,一开始听从大家用Anaconda这个事情,喜欢的人可能会觉得很好用,它把太多Python原原本本的东西,其实那些东西一点都不复杂,反而隐藏在背后了。所以我是从来不用Anaconda的。前面铺垫这么多,大家如果要用今天开始入手TensorFlow,你第一个学Python的话,看看你的理解和我的理解是否一样。


首先这个Python怎么inport这些包,这些管理的环境。你想强制指定你在外面加上Python这些环境变量,指定加上这些日录,也能够辅助Python找到你的包,所以找包就是这样子,很简单的一个事情。另外一个你的Python在装包的时候,PIP大家往往只知道敲PIP公司,但是它是跟着你的Python走的。只是加了一个重命名。这个也是很多人刚接触的时候,比如你机器上有Python2有Python3,为什么用不了,因为Python3装到Python2里面去了。


如果写Python写很长的时间,如果不用相关的产品的话,是很痛苦的,virtualenv,它能够帮你创造一个虚拟的环境。当你干完这个项目,你只要删除,又从这个环境跳出来,又是干干净净的了。另外一个如果说你觉得在你机器上装Python有点麻烦,因为你往往有些时候需求,比方说我机器有三个版本的Python,Python2.7,装Python往往在各个操作系统不是那么方便,还有你要管理我此时此刻这个我用的是哪个Python,我要清清楚楚,整个环境不希望乱成一锅粥的,你可以手动装,你管理好也没什么问题。如果说刚才的Virtualenv解决不同的问题,那么用Pyenv也可以管理得很好,对于用户来说,你只要用Pyenv就可以了,其实Anaconda就不可以了。


像这句它就会帮你把它能装的Python的版本list出来。你把3.6.8设成系统默认的,你用Pyenv创建一个Py3,你把它激活,这样就清清楚楚再用这个环境,绝对不会再乱成一锅粥,结合上几个PPT讲的Python怎么做的。你只要会用一个工具你就走遍Python天下。你用官方的TensorFlow的包找对应的你要的GPU的包还是什么包。


你把Python的环境都管好了以后,算法工程师都爱用这个jupyter notebook,这个在开发场景下非常实用的。基本上这个成为开发算法工程师的标配。右下角那个东西nteract,当你在机器上装好之后,这是一个小的App,你直接双击这个App,就可以用这个App原来要打开浏览器Notebook的一些功能。


然后TensorFlow之前在2.0正式出一个之前,通过Python它把你要的模型,就像刚才深入神经网络,定义出来,定义了之后,它把它生成graph,这个也陪伴了TensorFlow很长的时间,这个什么问题?调试起来特别欣慰。你如果用这样一个graph的方式,你断点停下来它还在构建这个,所以丝毫解决不了,所以当时调试也是很蛋疼,谷歌也发布一系列的程序来帮助客户,但这都是治标不治本。同时竞争对手又用一种很爽的方式迅速博得了大家的喜爱。其实至今也是很多人喜欢Python。它做成这样子,我想要通用一个方法的时候,我就可以立马拿到它的结果,敲一步执行一步。所以后来在TensorFlow2.0把它设成默认方式。你可以加上调试阶段,你在一些增强学习,或者说一些LP的领域对于这种条件判断,它在模型上是有这样的要求。


然后做相当于求导这个事情,求导相当于说只需要Gradients,把你的目标扔进去,它就把它的导函数给求出来,这个是X的平方,对于X的平方如果拿3是9,如果对它进行求导X平方是2X,把3代进去那就是6。如果是偏导数再出发也行。还记得我们刚才说机器是如何学习的吗?它其实就是通过往你的导函数反方向去靠近,让你的loss更加小。而现在有帮你自动求导,你设置一个模型,假如你定义这样一个模型,把它扔进求导的函数,再用这个优化器,让它不断地去,你可以理解去优化那个权重,放它越来越接近我们想要的方向。最后再把这些权重、这些变量存下来,这就是我们的训练完的模型了。它就是这样工作的。


最后这边我个人还是比较推荐比较官方一些教程。为什么?TensorFlow它的功能也是比较快的,现在好多的教程要么跑不了,要么它还在用的刚才讲的在那写代码,你可能学了半天学的是一个老版本,对于新版本来说几乎什么都用不上,所以还是比较推荐现在官方的版本。而且TensorFlow一路发展起来,从一开始TensorFlow的官方文档几乎没法看,到现在已经写得非常好了。大概我觉得如果是入门,或者说是初步接触这个,大概了解了,脑海中有这样的概念之后,自己后续就可以玩起来自己感兴趣的方向,谢谢大家,我今天的分享大概就是这样子。

讲师GitHub地址:https://github.com/ohmystack

现场PPT分享:关注【安卓巴士Android开发者门户】公众号,后台回复“420”获取讲师完整PPT。
大会现场视频小程序:





  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-900274-80004.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )