Day 01:以100张图理解 Neural Network -- 观念与实践

转载
陈昭明先生大作

前言

这一波人工智慧(Articial Intelligence,AI)风潮方兴未艾,产学研界发表不少的具体研发成果,例如AlphaGo、机器人、无人驾驶自动车、ChatBot、人脸辨识、语音辨识...等,加上各种媒体新闻不断吹捧,搞的好像不懂AI的资讯人,就快要失业了,于是,狂买了近二十本的相关书籍,准备好好的努力一下,一窥 AI 奥秘,刚好藉由铁人赛督促自己,记录过程并将心得与同好分享,也希望能获得各位先进的指教。

AI的演进

人工智慧其实已经历了三波热潮,如下图,前两波都功败垂成,只留下一些美丽的愿景。


Day 01:以100张图理解 Neural Network -- 观念与实践_第1张图片
image.png

图. AI 的三波热潮, 资料来源:http://www.testleo.com/blog/archives/6121 。

为什么这一波会成功? 主要有几个动力:

  1. 资料增加与整理:拜网际网络之赐,资料以指数的速度大量的增加,又因大型网络公司的掘起,他们投注许多的人力与资金,标注(Labelling)训练资料,用于改善自身的核心业务 -- 社群媒体(social media),并开放给一般研究者使用,例如 image.net就拥有超过近1400万张标注的图片,作为影像辨识的训练/测试资料集。另外,手机的盛行让企业轻易蒐集大量的用户行为资料,物联网(IoT)的风潮也会产生大量的感测器资料,这些都将成为 『机器学习』(Machine Learning) 的养分。
  2. 硬体的发展:依摩尔定律的经验法则,积体电路上可容纳电晶体的数量每隔24(或 18) 个月便会增加一倍,以及强大的云端运算/资料中心、还有专为AI设计的CPU/GPU/FPGA/晶片,在在都显著提升伺服器端及用户端设备的运算速度。
  3. 演算法:各种演算法推陈出新,配合GPU算术运算的优势及分散式计算的实现,利用数学/统计理论,计算大量资料,形朔各种模型,应用在影像、语音、文字辨识、处理与回应上,使机器具备人脑一般的智慧。

种种的因素擘划出美丽的未来愿景,还是海市蜃楼? 且看未来发展。


Day 01:以100张图理解 Neural Network -- 观念与实践_第2张图片
image.png

图. 第三波AI的动能,资料来源: 人工智能,请准备迎接冬天

机器学习(Machine Learning)

这一波AI的主轴就是『机器学习』(Machine Learning),强调让『机器自我学习』,藉由资讯的蒐集与演算法的改进,让机器可以吸收知识,自我学习,并根据学习的成果(即预测的准确性)修正与反馈,不断提升机器的智慧。这种解决问题的方法与传统的系统开发想法有所不同,Machine Learning 不只靠演算法解决问题,也靠不断累积的资料,将之转化为『知识』,深植于模型内,请参考下图说明:

Day 01:以100张图理解 Neural Network -- 观念与实践_第3张图片
image.png

图. 传统程式开发方式 vs. Machine Learning 解决问题方式

神经网路(Neural Network)

Machine Learning 目前偏向大量使用统计理论作为建立模型的基础,尤其是 Data Mining 方法,包括『决策树』(Decision Tree)、迴归分析(Regression)、支援向量机(SVM)、聚类分析(Clustering)、贝氏分类演算法(Naive Bayes classifier)...等,但目前最夯的是『神经网路』(Neural Network),它主要是模仿生物的神经系统,透过层层连接的『神经元』(Neuron),建立传导的模型,以推论输入(Input)到输出(Output)的过程。


Day 01:以100张图理解 Neural Network -- 观念与实践_第4张图片
image.png

图. 神经系统,图片来源:李宏毅 一天搞懂深度学习

实作环境(Implementation)

现在网路大厂纷纷推出『神经网路』(Neural Network)的框架(Framework),而且大都是Open Source(佛心来也),以支援Python语言为主流,安装方便,入门的门槛也很低,只要写个十几行的程式,就能辨识阿拉伯数字,乍看一下,好像依样画葫芦,就可以写出个应用系统了,但是每一个演算法都有很多的假设与适用范围限制,可以直接套用,解决问题的机率其实很低,因此,还是要了解其原理,进而知道其假设、限制及可变通的方式(至少调调参数吧!),才能真正解决问题,若把乌龟辨识为枪枝,那就窘了。

这个系列的发文,会以 Google TensorFlow 的框架为基础,採用架构在它上面的Keras为程式开发主轴,它同时也支援其他框架,如 CNTK、Theano,这类的程式(Keras、TFLearn) 称为 Meta Framework,是学习 Neural Network 很好的学习工具。

发文内容

由于 Machine Learning 技术主要是建构在统计及数学的基础上,再加上众多演算法(Algorithms) ,对于从事应用系统开发多年的我而言,要在短时间内打通任督二脉,甚至能动手开发,实在很艰辛,虽然在校学统计6年(从来没应用过,所以也忘得差不多了),又开发系统多年,在自学过程中,仍然频频卡关,脑袋打结,虽然如此,还是在过程中有很大的收穫,因此,为降低读者的学习障碍,撰文以『轻鬆/快乐学习』为出发点,用图说故事,希望有助于釐清各个演算法观念、原理与实作。

系列发文将包括以下内容:

  1. Neural Network 的概念与原理
  2. 开发环境建置
  3. 各类范例程式说明
  4. 各种演算法(Algorithms):CNN、RNN、LSTM 等。
  5. 各式应用:Style Transfer、Image Captioning ...等。

观念会尽量以图说明,原理会牵涉统计,但不会有数学推导(因为我也不会),实作会以Python/Keras程式撰写,读者可以各取所需,不必吃满汉全餐。

由于铁人赛时间紧迫,一边读书、一边看/写程式、一边撰文,发文内容如有谬误,还请各位先进不吝指正,也请各位不要期望过高,毕竟小弟也是刚入门而已。

你可能感兴趣的:(Day 01:以100张图理解 Neural Network -- 观念与实践)