答读者问:如何入门人工智能

2,299 阅读10分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

问题

关于人工智能,如何才能快速入门,该去如何学习?

2.png

1.png

回答

1、我没有成功经验,只有失败经验

首先说,我写博客的主要目是输出倒逼输入。我既然写了,就得为了能写出东西而去学习,最起码我得先知道是怎么回事,然后才能用自己的语言描述出来。我是一个懒人,但是又想上进,就想出这么一个被强迫的办法。并不是我已经功成名就、知识多的往外涌了,才开坛论道,传道授业。

因为我没有成功,所以没有成功经验。

但是,机器学习我已经研究3年了,自从它被评为“2017年十大流行语”,我就开始关注它。

2018年4月,我开始在QQ空间记录学习内容,那时仅仅是给自己看。

6.png

到目前为止,兜兜转转,我依然没有什么建树,也没有成个名、成个腕儿,更没有获得个诺贝尔奖啥的。

虽然默默无闻,但是我这三年不是白白浪费的,我是没日没夜地浪费的,起码我知道浪费在哪里,这些失败经验,我可以告诉大家。

2、杀猪捅屁股,各有各的招

给大家看一张网上流传的人工智能入门路线。

入门缩略图.png

这张图密密麻麻地写满了你去学习-机器学习-的-学习路线,大约有上百项。

第一项最基础的就是“矩阵、线性代数”。其他还有DataFrames、Extract、Transform、RegEx、pdfs……

我的基础很差,学历不高。但是机器学习对基础学科的要求很高,起码也得是硕士才可以去搞。

我没有优势,所以我就想按这个路线去学习,立志要踏踏实实一步一个脚印,即便是像西天取经一样难,我也要坚持,虽然没有上三年的研究生,但是我要用六年的时间去自学相关的知识。

于是,我就先开始学习矩阵。网易公开课的可汗学院有矩阵的课程,我开始一节不落地学习。

矩阵.png

断断续续学了2个月,我在想,这么枯燥的课程有什么用,哪里能用到?

于是,我烦躁了,我开始直接看人工智能项目的代码。

我先看的《TensorFlow实战Google深度学习框架》这本书,翻开一看,妈呀还是矩阵:

矩阵代码.png

看不懂,很受挫,反思还是基础没打好,我就又返回去学习矩阵。

又学了一段时间,我跑到楼下同卖驴肉火烧的大哥(数学系本科创业)切磋了一下,感觉自己在餐饮行业的矩阵界已经无敌了。

翻开书一看,越过矩阵计算,它又讲概率,尤其涉及到各种公式的时候,又看不懂了。

概率.png

我又去学概率,因为代码是需要按照公式去写的。奔着打牢基础的目的,又学了1个月的概率分布。

我在想,如果按照这种节奏学下去,我再30年也未必能摸上人工智能的手。

我还是算了吧,我直接上项目吧。

3、别多想,干就完了

我开始找项目,从实战出发,以运行代码为主,运行代码看效果,提高兴趣。这时,第二本书《21个项目玩转深度学习:基于TensorFlow的实践详解》被我找到了。我开始搭环境运行书里的例子。

21个例子 1.png

21个例子 2.png

21个例子 3.png

21个例子 4.png

有时候,我根本不知道代码是什么意思,没关系,你就想,要全看懂得20年后,现在先跑起来例子,先感受它的神奇之处。如果想要了解,就去《TensorFlow实战Google深度学习框架》看看对应的理论讲解。

其实奔着这个目的,反而没有了心理压力。原来因为看不懂而上火,现在看不懂是依计划行事。

但是,道路依旧很坎坷。想成功运行起来一个项目,太难了,各种环境问题,各种配置问题,有时候需要一周甚至一个月的时间。但是,当你运行起来的时候,你会有种错觉:这些代码就是你写的,这个项目就是你的作品!

或许,那不是错觉,从某种维度上,那就是你的劳动成果。就如同你自己亲手组装了一台电脑,你不用在意CPU是不是你亲手制作的。

在解决问题的过程中,你会学到很多知识。这些知识,不是体系的,不像29集矩阵课程那样完整,它是散落的,只和这一次项目有关。

跑完了这些例子,虽然你还是不知道实现这些功能的细节。但是,你对深度学习会有一个层次上的了解。比如,讲到GAN,你知道是对抗生成网络,就是自己和自己干起来,自己造假,然后自己辨伪,你跑过一个例子,就是自动生成动漫头像的,你也知道想要搞定这些,先得需要一些动漫头像作为训练集。

跑完这些例子,你就知道了深度学习有哪些应用领域,有处理自然语言的,有处理图片的,有处理音视频的。当你看到自动打游戏,你会说这是通过“强化学习”来实现的,里面有什么经验池,走对了有奖励啥的。

为什么你突然会了解这些?因为你花了一周多的时间跑了一个例子啊,那个例子就是讲“强化学习”的,所以你才这么刻骨铭心。

到此,深度学习在我们心中相当于有了一个轮廓,虽然不知道它的面容,但是知道他是一个人。

sm1.jpg

4、嘛也不行,事情还得从长计议

至此,你以为你无敌了。

其实,你嘛也不是:你运行的只是别人写好的代码,只能实现固定的功能。

我问你,你成功运行过一个自动生成莎士比亚歌剧的例子,如果让你做一个自动生成曾国藩家书,你行吗?

你骄傲地认为就是替换数据集就可以,因为你试过将莎士比亚的数据替换成富兰克林的数据,是行得通的。

但是一换曾国藩的数据就完蛋了。原因就是英文和中文的分词方法是有区别的,但是他们的原理却是与语言无关的。你只需要改动某一个地方就可以,但就是不知道该改哪里。

当你想改造的时候,你发现,前面能跑通例子的成就感,是个错觉,你根本就控制不了它。

那好,那就去试着了解它的原理,只有懂了原理,才知道该在哪里开刀和缝合。

这就又回到了那个学习基础学科的起点。你又看到这些讨厌却又无法绕开的公式,像下面这样:

公式.jpg

虽然面临的还是同一个问题,看似又回到了起点,但其实差别很大。就像让你现在去高考,虽然还是不会做,但是你却知道了高考意味着什么,大学该去怎么有重点的学习和社交。

这时候,真得静下心来研究了,研究不要分心,不要扩展,就弄明白这一个点就行,因为精力有限。

这可能是比较艰难的时刻了,挺不过去就放弃了,挺过去了后面还会有更难的。

能到这一步,深度学习在我们心中相当于有器官了,我们能清楚地知道耳朵、眼睛在哪里,是什么形状。

sm3.jpg

5、不只是你迷茫,大家都有疑问

公式2.jpg

当你看到上面这些东西,终于能明白是什么意思的时候,你忽然发现,框架版本升级了,到了2.0不用再关心这些了。心情有点不愉悦。

1.0时,还需要关心原理的东西,还需要去设计矩阵结构,到了2.0完全不需要了。

此时,旧版的1.0你还没有完全搞明白,新版的2.0就到来了。

要不要学?

  • 坚持1.0:但是2.0真的很高效,你用1.0开发2个月还各种异常问题,别人用2.0三天就可以完成而且还稳定。
  • 尝试2.0:没有理论根基,变成了一个无脑的API调用者,不了解原理总感觉在鄙视链的最末一环。
  • 学完1.0再学2.0:再出来个3.0该怎么办?

6、官方的脚步,大多是趋势

我是从TensorFlow 1.x的张量、图、会话开始学习的,以我笨拙的资质,1.x生态的晦涩程度如同看那些公式。

但是当TensorFlow 2.x发布后,尤其针对初学者的高阶API,尤其是官方主推的keras,让编程变得极其简单,仅需几十行代码即可完成一个神经网络的训练和使用。

我纠结过一阵子,最后还是选择了新版本,也给其他人安利新版本。

原因有如下几点,这几点也是官方力推新版的理由:

  • 新版本简单易懂,入门容易。越简单,群众基础就会越大,生态会越强。如果全球就几个老头能掌握,那么它离灭绝就不远了,不管是技术还是老头。
  • 新版本经过包装,产能高效。你学习它,就是为了解决问题和创造价值的。既然新版可以更快更稳地产出效果,那么就该使用它。
  • 所谓原理鄙视,其实是代沟。你使用3.0版本会觉得4.0版本是无脑调用。其实,3.0刚出来时,也被2.0鄙视过。就像80年代的汽车驾驶员鄙视现在的司机不会修车一样,其实修车的工作不是消失了,只不过是换别人来做了。

7、交流区

总结一下:

  • 如果你的基础学科(编程、数学)很差,又想早点入门,并且目标不是当一个人工智能科学家,只想拿它当工具来解决问题。那么,我建议你直接找实战小项目,先运行起来再说,培养兴趣,积累经验。就像高中毕业就去打工,先体验挣钱的感觉。等到别人7年后硕士毕业开始去打工了,你再返回去上课。

  • 积极面对新技术、新语言、新版本,如果它能让更多的人用更少的投入去产生更多的价值,那它就是值得学习的,就是未来的方向。不要在意门槛高低,从肯德基的汉堡制作,到面粉生产,再到小麦种植,每个层级都有人做,而且都可以做的很好。

  • 可以通过分轮的方式去学习。不要着急弄清楚一切,允许自己有不懂的地方。就像画画,第一轮先画一个轮廓,第二轮区分一下布局,第三轮细化,第四轮润色,古人云:书读百遍其义自见。

sm.jpg

目前我依然是一个初学者,看着英文文档学习,只是一个搬运工,没有能力当大家的老师,只能在我博客涉及内容的范围内,给大家做一些详解。因为只要我写出来的,必定是我已经理解透彻的。

我打算建立一个交流区,一是更好地交流大家对我博客中的疑惑,另外也可以让大家彼此交流。

比如《CNN基础识别-想为女儿批作业》这一篇,github上传代码后。

hwangato就运行起来了。 4.png

但是YuZhiBo同学就没有跑通。 3.png

如果这俩能交流一下,一个指导别人跑通代码加深印象,掌握得更扎实;另一个得到别人帮助学到东西,技能有提高。

这样就没有我啥事了。