前言
这应该不是一篇科普文。 自从几个月前开始关注Artificial Intelligence (AI)和Machine Learning (ML),我读过不少科普的文章。从中有一定的收获,大概对AI和ML有一些感觉了,其中有一些科普文章有一定的深度。但更多的感觉是,想真正了解AI和ML,掌握技术并且能够应用到实际的项目中去,那些科普文的内容是不够的,更何况可能有些作者本人的理解也不够深入,写的更是皮毛上的皮毛。很多都是看着很轻松,貌似看完觉得自己懂了一些,其实好像什么也没懂。
如果真想掌握技术的话,这不是一条好的途径。有的时候必须得Learn XXX the hard way。但同时,如果按照课本一张一张读,在教室一节一节课的上,又太慢了,尤其对于很多想自学的人不是很可行。同时,技术太多,技术进展又太快,已经不在学生阶段又想用学生阶段的方式来学,估计得越学越跟不上了。
很多人都有这个苦恼吧,我也有。这里我给不出什么灵丹妙药般神奇的解决方案,只是来分享下我自己亲测过的一些与AI和ML相关的资源吧。
1. Udacity Machine Learning Nanodegree
这算是我Machine Learning的启蒙。虽然说之前也看过不少别的课程或者视频了,但因为付钱上了这个课程,就要赶紧写作业,做project。人就是得靠外在动力驱使才能干的更好吧,性本贱。。。
我从这门课里收获还是蛮大的,但并不是说这个nanodegree好。相反,除了这门课里的五六个project还算不错,助教interactively批改认真之外,真的不值得花钱去上这门课。因为一是这个nanodegree的课都是Udacity里的免费课,二是有些老师我确实很不喜欢。如果可以说不礼貌的话,我要说有些老师教的就是屎,尤其是Georgia tech的这两个人,Charles Isbell and Michael Littman。如果他们对你的口味,就请忽略我的评论吧。
我在另一篇文章里详细列出了这个nanodegree的课程表(Udacity ML Nanodegree Syllabus)。主要来说,就是四块:
1) Model Evaluation and Validation
2) Supervised Learning
3) Unsupervised Learning
4) Reinforcement Learning
个人感觉其中Reinforcement Learning要比supervised/unsupervised Learning要难,完全不像一个概念。这个Reinforcement Learning的概念跟后面UC Berkeley的AI课讲的差不多,现在Machine Learning和Artificial Intelligence的分类比较杂,具体对待吧。这个RL的project是train一个很简单的self-driving car,用到了Q-learning的概念,当时做这个project的时候挺享受的。个人理解是这种RL得大量的试错,并且能否预先定义一个参数少并且够用的states对training的结果和速度非常重要。
如果你上了Udacity里的这五门课:
Intro to Machine Learning, Instructors: Katie Malone, Sebastian Thrun
Machine Learning for Trading, Instructors: Tucker Balch, Arpan Chakraborty
Machine Learning, Instructors: Charles Isbell, Michael Littman
Machine Learning: Unsupervised Learning, Instructors: Charles Isbell, Michael Littman
Reinforcement Learning: Charles Isbell, Michael Littman
那么这个Nanodegree里讲的内容就是这些课的子集。你只需要去Github下载课堂的project自己做就好了(Github udacity/machine-learning)。当然,是不会有人给你改作业的,你也拿不到这个小证书,但这些都真的很重要吗,可能每个人自己知道吧。
这门课没有教你code from scratch,基本就是教怎么用python的Sklearn的包。我做过的课堂project就放在这里了(Udacity_MachineLearning_Nanodegree Project Solutions).
2. Stanford CS231n class, Convolutional Neural Networks for Visual Recognition. (CS231n Convolutional Neural Networks for Visual Recognition)
李飞飞和另几个老外的课,非常非常推荐。既简单又深入。简单到你只要会python,会基本的数学就能上手。深入到,他们带着你从最简单的一些regression编到非常复杂的Convolutional Neural Network, LSTM, Recursive Neural Network。甚至用自己写的python程序编deep dream那种creepy的照片!注意,这里不用任何的deep learning的package。把作业都做完需要更多的时间,但一遍之后真正就掌握了,再不用听别人跟你扯什么是backpropagation,什么是卷积神经网络了。满打满算,从刚开始看class notes到编完一个复杂的Conv Net,我用了三周的时间,中间也花了不少时间自己推公式,思考对比,还算是比较值。做完后写了个小总结(Github Convolutional Neural Net from Scratch),LSTM那些我暂时还没有搞。
3. UC Berkely CS188 Class, Intro to AI (Berkeley AI Materials).
这门课我没有做作业,也没有很仔细的看课件,我是把所有的课程视频看了一遍。个人感觉,目前网络上能找到的最好的AI课程了吧,没有之一。AI的概念我不是很清楚,我感觉整个行业也有些模糊(以上说的神经网络应该算是AI吧),这个课里讲的AI很多是关于decision making, planning等等的,涉及到很多agent, state, action, policy, search等等的概念。还讲到很多的贝叶斯网络,markov model,hidden markov model等等的。
顺便说一句,Udacity上最早的MOOC课大概就是Intro to Artificial Intelligence,Sebastian Thrun和Peter Norvig教的(都是standford faculty),这个课讲的内容与UC Berkeley的课很像,但Berkeley的课更深入也更好一些。
4. Youtube channel
很神奇的是,Youtube里有很多个人或者组织办的channel,就是来讲课的。想想现在教学的方式真的是在变化,当然,能对传统教学的模式有多大冲击就是另一个话题了。
其中两个channel推荐:
Siraj Raval,这个印度小哥讲课很短(5-10分钟),非常炫酷,讲着讲着就唱一段Rap,听他的课觉对不犯困。而且他讲的东西都很应用很前沿,一开始接触有种惊叹的感觉。然而,在我试着跑他的模板Code并加以自己尝试之后,观点有所转变。这哥们很多code都是直接wrap别人的,造成的后果就是特别乱,package用的很杂。不知道为啥,反正他的很多模板code我都没有跑成功。多说一句,这哥们刚开始跟Udacity合作,开办了个人的AI课程。卧槽,印度人的这种能装逼能吹的能力真的得好好学一学。不管怎样,还是挺适合刚入门的人开开眼界的。
sentdex,一个美国本科小哥,完全非科班出身。可以看出来他自己对Machine Learning和AI并不是理解很深入,讲的基本上都是用Sklearn的包。但好处是他还有个个人网页 (Python Programming Tutorials),可以很方便的查一些内容。另外,这个小哥讲的非常入门,而且我亲测的,他讲的几乎所有的code都能跑,他也会手把手教你怎么安装一些软件或者package。虽然不够深入不够炫酷,但对于初学者来说,这种直接就能跑,也不用自己找bug的教程还是比较省心的。因为他讲的浅,所以基本一个月后你就不用去follow他了。
5. Udacity Artificial Intelligence Nanodegree & Udacity Self-driving Car Nanodegree
我还参加的Udacity AI nanodegree,之前搞的那个Machine Learning Nanodegree也搞完了。另外,我一个要好的学造汽车的哥们,也参加了Udacity Self-driving Car Nanodegree。
这两个一月份刚刚开始,都是第一期。模式跟以往的Udacity Nanodegree很不一样。以往的Nanodegree的课基本都是免费的公开课,而这两个的课都没用公开。另外,之前的Nanodegree都没有时间限制,你要是快的话,一个月就能全部结束。但这两个都要按部就班一个term一个term搞,一个term三个月吧。
从另一个角度看,就知道目前AI在社会有多火了。这两个课程都是要报名的,而且名额有限。也许是Udacity在搞饥饿营销吧。第一期的报名人数大大超过了名额。
从目前的课表看,这个AI nanodegree term 1的内容跟UC Berkeley的AI课很相似。而self-driving car的第一期教computer vision,主要就是让你用OpenCV以及用Tensorflow和Keras搞一搞神经网络。