以下全文转载自 作者:李杰克 微信公众号:小白AI之路
写在前面
Hello,World!
这是我的第一篇文章,如果你还没系统地学习过AI算法相关知识,它应该能够让你对AI有些新的认知和理解、多些信心,至少你不会再觉得AI是那么高不可攀、遥不可及,相反,AI是普通人也可以理解、学习和实现的。
大概可以用以下几个标签简单概括我:前互联网产品经理、大学学渣、非计算机专业、不懂编程,可以说是除了瞎逼逼,啥也不会…
跟点进这篇文章的你一样,我最开始也是惊叹和憧憬于AI的神奇伟大无所不能,马上就要改变世界取代人类啊~
不一样的可能是,我当时脑子一热:放弃数年的产品经验,开始自学编程(python)和AI实现算法(传统机器学习和深度学习算法),走上转型AI之路。
最开始决定转型其实也是蛮纠结的,初期在网上看到经验分享,感觉机器学习的门槛真的是高的一逼啊。
文章中各种出现高等数学、线性代数和概率论的东东, 把我这个学渣吓得瑟瑟发抖…..
某个周六晚上,在酒吧里喝掉几杯啤酒后,借着酒意我做出了决定:搞,是个坑我也跳了…请稍稍脑补不懂编程还是学渣的我当时那种略带悲壮而又自我感动的状态!
然后就开始苦哈哈地补高数、线代、概率论,苦哈哈地学python编程,苦哈哈地看Andrew Ng、Peter Harrington、Siraj等一众大神的书籍视频学习机器学习….
苦哈哈的状态持续了一段时间,随着学习的推进,慢慢我也可以熟练地使用python写算法写脚本,传统机器学习和深度学习中的经典常用算法,也基本都算学习和实践过了。
我得到的结论是:传统机器学习和深度学习的门槛并没有那么高,至少是以算法工程师为主要需求的“工程应用领域”的门槛,是没有那么高的。
网上确实有很多不错的资料,但总是充斥着较多的数学、生涩的描述,其实并不是很适合作为小白的我们(请大牛自动屏蔽哈)入门。
作为毫无技术背景从零开始入门机器学习的产品经理,我或许更能理解同为小白的你的痛点和需求,我自己的公众号“小白AI之路”的初衷,也是希望能够通过更有趣、更直观、更少数学的方式跟零基础的童鞋共同学习AI相关知识。
叨逼叨结束,下面进入正题,快!上车吧!AI可以很简单!
一、让我们先来说说“AI是什么”
首先,我们先来界定接下来所要讨论的AI的定义和范畴。
AI是Artificial Intelligentce的缩写,中文是大家广知的“人工智能”。 AI可以理解为让机器具备类似人的智能,从而代替人类去完成某些工作和任务。
很多小伙伴对AI的认知可能来自于《西部世界》、《AI》、《超能陆战队》、《机器人总动员》、《超能查派》等影视作品,这些作品中的AI都可以定义为“强人工智能”,因为他们能够像人类一样去思考和推理,且具备知觉和自我意识。
但强人工智能在现实中的发展基本处于停滞状态,目前AI的研究和应用基本都集中在“弱人工智能”领域,弱人工智能可以理解为机器看起来像是智能的,但并不会具备知觉和意识。
弱人工智能领域的AI实现,可以分为两种方式:
一种是通过对相关规则进行编程,让机器能够按照程序中存在的逻辑处理特定任务,从结果来上看机器是智能的;
另一种是我们不给机器规则,取而代之,我们喂给机器大量的针对某一任务的数据,让机器自己去学习,继而挖掘出规律,从而具备完成某一任务的智能,这种方式,也就是我们今天的主角——机器学习。
不好理解?举一个简单的例子,如果我们需要让机器具备识别狗的智能:
第一种方式意味着,我们需要将狗的特征(毛茸茸、四条腿、有尾巴…)告诉机器,机器将满足这些规则的东西识别为狗;
第二种方式意味着,我们完全不告诉机器狗有什么特征,但我们喂给机器10万张狗的图片,机器就会自个儿从已有的图片中学习到狗的特征,从而具备识别狗的智能。
AI可以说是跟机器学习紧密联系在一起,那我们在来说下我们今天的主角——机器学习。
首先,机器学习从模型层次结构的角度可以分为浅层学习和深度学习,简单介绍下两者:
- 浅层学习(Shallow Learning)
浅层学习与深度学习(Deep Learning)相对,它的模型层次较浅,通常没有隐藏层或只有一层隐藏层。
浅层学习常见的算法有线性回归、逻辑回归、随机森林、SVM、K-means、RBM、AutoEncoder、PCA、SOM等等。
隐藏层什么鬼?这些算法什么鬼?没关系,能记上一两个名字很好,暂时记不住也没关系,我们以后会捡重要的来讲。
浅层学习算法可以做一些预测、分类、聚类、降低数据维度、压缩数据和商品推荐系统等工作。
- 深度学习(Deep Learning)
深度学习的“深”是因为它通常会有较多的隐藏层,正是因为有那么多隐藏层存在,深度学习网络才拥有表达更复杂函数的能力,也才能够识别更复杂的特征,继而完成更复杂更amazing的任务。
令很多童鞋惊叹“AI无所不能,马上就要改变世界、取代人类”的领域,基本都跟深度学习有关系。
目前深度学习的研究和应用,主要集中在CNN和RNN;跟着我狠狠地把这些名词记下来(至少缩写要记下来哈),他们会成为后续文章介绍的重点。
CNN为Convolutional Neural Networks的缩写,也就是卷积神经网络,目前是计算机视觉、图像分类领域最主要的算法,当然也有人将它应用于自然语言处理领域。
接下来举些CNN应用场景的例子,让大家有个较直观的印象:
1)前两年大火的Prisma可以将机器学习名画的风格并迁移到新的图片上。
2)深受妹纸喜爱各种美颜相机的滤镜,也是会用到人脸检测,用上之后感觉自己萌萌哒。
3)交通监控视频识别来往车辆的车型,目前有些公司的产品还可以识别车牌号。
4) 商场监控视频能够识别人脸,顺便还能根据已有数据判断这个人是否以前来过商场。
5)当下最火的无人车中,无人车需要用计算视觉去观察和理解这个世界。
RNN为Recurrent Neural NetWorks的缩写,也就是递归神经网络,基于RNN还衍生出了LSTM(Long-Short-Term-Memerory)和GRU(Gated Recurrent Unit)等一系列算法,这些算法拥有记住过去的能力,所以可以用来处理一些有时间序列属性的数据,在处理语言、文字等方面有独到的优势。
RNN及其衍生算法可用于语音识别、机器翻译、合成音乐等等,我们仍然来简单举几个的例子:
1) 以Siri、小娜、小冰、小度为代表的对话机器人,调戏Siri让她bbox和唱歌讲段子并不能充分体现你的无聊,下次你可以试试让Siri和小娜互相对话。
2) 以谷歌翻译为代表的机器翻译,不管是文字翻译还是语音翻译,都可以把人类翻译虐成渣渣。
3) 老罗在锤子发布会上大吹特吹的能够以极高准确率和极快速度将语音转化为文字的讯飞输入法。
4)有粉丝等不及乔治·马丁老爷子写《冰与火之歌》第六部,就自己用LSTM算法学习了《冰与火之歌》的前五部后续写了第六部,据说AI这部作品中还揭示了前几部中埋了很久的悬念。
二、说AI简单,因为AI本质上都是一个函数
如果你坚持看到这里,你对AI的理解和认知大概率已经击败了你朋友圈里50%经常分享AI将改变世界取代人类的好友们。
此刻你已经可以在聊天中用对方大概率听不懂的CNN、RNN、LSTM等一众名词来彰显你的逼格了。
但是,作为稳重踏实、拥有内涵、崇尚科学的新时代好青年的我们来说,这还远远不够,我们总是希望能够不动声色、低调内敛、用对方看似都懂实则不懂的东西去装更高规格的逼。
接下来,请跟我学习下正确的装的方式:XX,你知道么?其实,AI很简单,因为AI本质上都是一个函数。说的时候一定要有种云淡风轻的状态,仿佛吃饭喝水那般自然。
看着对方有点迷离困惑的眼神,这个时候你要贴心去解释一下,以彰显你的善解人意,请再次跟我学:
是这样的,XX,这其实很好理解,AI其实就是我们喂给机器目前已有的数据,机器就会从这些数据里去找出一个最能满足(此处用“拟合”或可提升逼格)这些数据的函数,当有新的数据需要预测的时候,机器就可以通过这个函数去预测出这个新数据对应的结果是什么。
说完之后,请微微抬头看向远方,感慨一下:万物自有其道,人世间多少复杂的东西到末了还是要归于纯粹啊。
但是,装逼有风险,风险请自行承担…
其实可能你暂时也没有太理解,不要慌,我们偷偷继续理解一下。
对于一个具备某种智能的模型而言,一般具备以下要素:数据+算法+模型,请狠狠地记住这三个词;记住了这三个词,AI的本质你也就搞清楚了。
这个时候我们再把高冷的猫也请出来,我们来用一个能够区分猫和狗图片的分类器模型来帮助理解这个问题:
“数据”就是我们需要准备大量标注过是“猫”还是“狗”的图片,为什么要强调大量,因为只有数据量足够大,模型才能够学习到足够多且准确的区分猫和狗的特征,才能在区分猫狗这个任务上,表现出足够高的准确性;当然数据量不大的情况下,我们也可以训练模型,不过在新数据集上预测出来的结果往往就会差很多。
“算法”指的是构建模型时我们打算用浅层的网络还是深层的,如果是深层的话我们要用多少层,每层有多少神经元、功能是什么等等,也就是网络架构的设计。相当于我们确定了我们的预测函数应该大致结构是什么样的,我们用Y=f(W,X,b)来表示这一函数,X是已有的用来训练的数据(猫和狗的图片),Y是已有的图片数据的标签(该图片是猫还是狗),聪明的你会问:W和b呢?问得好,函数里的W(权重)和b(偏差)我们还不知道,这两个参数是需要机器学习后自己找出来的,找的过程也就是模型训练的过程。
“模型”指的我们把数据带入到算法中进行训练,机器就会去不断地学习,当机器找到最优W(权重)和b(偏差)后,我们就说这个模型是train成功了,这个时候我们的函数Y=f(W,X,b)就完全确定下来了。然后我们就可以在已有的数据集外给模型一张新的猫或狗的图片,那模型就能通过函数Y=f(W,X,b)算出来这张图的标签究竟是猫还是狗,这也就是所谓的模型的预测功能。
到这里,你应该已经能够理解AI的本质了。我们再简单总结下:不管是最简单的线性回归模型、还是较复杂的拥有几十个甚至上百个隐藏层的深度神经网络模型,本质都是寻找一个能够良好拟合目前已有数据的函数Y=f(W,X,b),并且我们希望这个函数在新的未知数据上也能够表现良好。
三、AI算法模型的实现可以说是相当easy啦
如果你坚持看到这里,那请你为自己打call!因为你对AI的理解和认知应该大概率已经击败了你朋友圈里70%经常分享AI将改变世界取代人类的好友们。
接下来我们再往前走一步,简单说一说实现一个AI模型可以多么简单,看完后,相信你会信心爆棚的!
其实李杰克(也就是我啦)最早也是抱着异常悲壮各种被虐地心情走进AI的。学习大概分为三块:
- 学习AI第一语言python:
这里我要为python疯狂打call,因为python作为万能胶水语言能做的事情实在太多,并且..它还异常容易上手。
我大概花了50个小时学习了python的基础语法,然后就开始动手写代码去爬小说、爬网易云音乐的评论等等程序。
额…据说很多人第一个python的爬虫是去爬不可描述的网站上那些没穿衣服的可爱的女孩子们的相片…
总之,python是整个过程并不耗精力的环节,但是刚开始背记语法确实是无聊无趣的,需要些许的小坚持,给你提个醒哟…
- 学习传统机器学习和深度学习相关算法:
这块算是花费我最多精力和时间的环节,看了蛮多的视频、书籍,还有网上的各种博文,还自己去补了高数线代概率论相关知识。
但结论是,如果你仅仅关注工程领域实现的话,其实很多算法压根没有必要用那么数学的东西去推导,换种方式你的理解和时间成本会下降很多。我也希望之后能够用尽可能简单有趣的方式跟大家分享和学习。
- 算法和模型的实现:
最开始我尽可能去理解和推导算法,然后用python代码去实现算法再train模型,那个时候觉得啊算法还是要吃透啊,代码能力也要很重要啊,不然你TM的模型都建不起来啊,小伙砸你要静下心来慢慢搞啊。
后来,我开始接触到深度学习大杀器——Google的深度学习框架Tensorflow。
真的是一度有些蛋蛋的忧郁呢,我也算是鼓起了些勇气、下了些决心、放弃了些机会开始转型的,我还指着靠AI当上CEO、迎娶白富美、走上人生巅峰呢。但是…
不是说好的有很高的数学门槛么?
不是说好的很高大上大家都搞不懂的么?
不是说好的需要深刻理解算法才能更好train出好model的么?
为什么算法模型损失函数优化方法Tensorflow都内置好了,而且只需要异常简单的调用就好了?
再后来,我接触到了Keras,一个基于Tensorflow构建的深度学习框架,当然也有基于Theano的版本(Theano什么鬼,暂时你也可以不用关心的)。
如果说Tensorflow是可以把一个模型代码量大大减少的框架,那么Keras就是让模型代码量可以少到掉渣的框架。
刚才跟大家说了那么多猫狗分类器模型,现在就给大家看下这个分类器模型代码在Keras框架可以少到什么程度!!!
那么寥寥几行代码就把一个拥有着卷积层、池化层和全连接层并且使用Adam这个较高级优化方法的深度学习网络架构写出来了,你自己感受下在Keras下实现深度学习算法模型有多简单了吧…
有没有为自己的惊奇发现感到开心!
写在最后
“小白AI之路”第一篇文章已经快到尾声了,如果你坚持看到了这里,那大概率你对AI的理解和认知已经击败了你朋友圈里90%经常分享AI将改变世界取代人类的好友们。
接下来我们的目标是从剩下的10%里往上爬,我也希望能够通过更有趣、更直观、更少数学的方式跟大家分享和学习AI相关知识。当然我也还是一个AI世界的小学生,也还在努力地学习和奔跑。如果大家想要继续follow这一些系列文章或者想要与我交流的,可以关注我的公众号“小白AI之路(AI-Learning)”,当然也可以加我的私人微信号“mayiyanzhi”做更多的探讨和交流!
如果大家觉得还算有那么一丢丢的收获并且身边也有朋友在关注和学习AI的话,请随肆无忌惮随意分享哈!顺便助我摆脱零粉丝蛤蛤蛤!