牟倫田
摘 要 本文介紹了人工智能時(shí)代的機(jī)器學(xué)習(xí)與大數(shù)據(jù)背景,分析了各種人工智能語(yǔ)言的特點(diǎn),以此為基礎(chǔ),提出了人工智能時(shí)代開(kāi)展計(jì)算機(jī)程序設(shè)計(jì)教學(xué)工作的幾點(diǎn)建議。希望本文對(duì)于高校的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)與時(shí)俱進(jìn)的發(fā)展起到拋磚引玉的作用。
關(guān)鍵詞 人工智能 人工智能時(shí)代 機(jī)器學(xué)習(xí) 大數(shù)據(jù) 計(jì)算機(jī)程序設(shè)計(jì)
中圖分類號(hào):G424 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.16400/j.cnki.kjdkx.2018.01.048
Computer Program Design Teaching in the Age of Artificial Intelligence
MOU Luntian
(Beijing University of Technology, College of Metropolitan Transportation, Beijing 100124)
Abstract This paper introduces the background of machine learning and big data in the era of artificial intelligence, and analyzes the characteristics of various artificial intelligence languages. Based on this, some suggestions are put forward to carry out computer programming in artificial intelligence. The author hopes this article is helpful to the development of computer programming in universities and advancing with the times.
Keywords artificial intelligence; the Age of Artificial Intelligence; machine learning; big data; computer program design
高性能計(jì)算與大數(shù)據(jù)的高速發(fā)展為機(jī)器學(xué)習(xí)尤其是深度學(xué)習(xí)提供了強(qiáng)大的引擎。自2006年取得突破以來(lái),深度學(xué)習(xí)一直長(zhǎng)驅(qū)直入,在圖像分類與語(yǔ)音識(shí)別領(lǐng)域取得了驕人的成績(jī),在圖像識(shí)別上甚至超過(guò)了人眼識(shí)別的準(zhǔn)確率。[1]尤其是2016年Google研發(fā)的機(jī)器人AlphaGo擊敗世界圍棋冠軍李世石,使人工智能在經(jīng)歷了兩次寒冬之后再次復(fù)蘇并以極其強(qiáng)勁的態(tài)勢(shì)進(jìn)入大眾的視野。事實(shí)上,人工智能正在全面進(jìn)入人類生產(chǎn)和生活的方方面面,成為繼互聯(lián)網(wǎng)之后第四次工業(yè)革命的推動(dòng)力量。人類正在進(jìn)入人工智能時(shí)代,人工智能正在成為這個(gè)時(shí)代的基礎(chǔ)設(shè)施。人臉識(shí)別、自動(dòng)駕駛、聊天機(jī)器人、工業(yè)和家居機(jī)器人、股票推薦,人工智能的產(chǎn)業(yè)應(yīng)用正在遍地開(kāi)花。[2]顯而易見(jiàn),無(wú)論對(duì)計(jì)算機(jī)專業(yè)還是其他專業(yè)的大學(xué)生,了解人工智能、甚至學(xué)習(xí)開(kāi)發(fā)人工智能應(yīng)用都是有必要的。那么,人工智能時(shí)代的內(nèi)涵是什么?有哪些人工智能編程語(yǔ)言?在程序設(shè)計(jì)教學(xué)上應(yīng)該做哪些調(diào)整?希望拋磚引玉,促進(jìn)計(jì)算機(jī)程序設(shè)計(jì)教學(xué)改革,培養(yǎng)出更加適應(yīng)人工智能時(shí)代要求的大學(xué)生。
1 人工智能時(shí)代的計(jì)算機(jī)程序設(shè)計(jì)背景
人工智能(Artificial Intelligence,AI),是研究、開(kāi)發(fā)用于模擬、延伸和擴(kuò)展人的智能的理論、方法、技術(shù)及應(yīng)用系統(tǒng)的一門新的技術(shù)科學(xué)。人工智能是計(jì)算機(jī)科學(xué)的一個(gè)分支,該領(lǐng)域的研究包括機(jī)器人、語(yǔ)音識(shí)別、圖像識(shí)別、自然語(yǔ)言處理和專家系統(tǒng)等。[3]當(dāng)前人工智能的快速發(fā)展主要依賴于兩大要素:機(jī)器學(xué)習(xí)與大數(shù)據(jù)。也就是說(shuō),在大數(shù)據(jù)上開(kāi)展機(jī)器學(xué)習(xí)是實(shí)現(xiàn)人工智能的主要方法。而計(jì)算機(jī)程序設(shè)計(jì)可視為算法+數(shù)據(jù)結(jié)構(gòu)。通過(guò)簡(jiǎn)單的將機(jī)器學(xué)習(xí)映射到算法、將大數(shù)據(jù)映射到數(shù)據(jù)結(jié)構(gòu),我們可以理解人工智能與計(jì)算機(jī)程序設(shè)計(jì)之間存在一定程度上的對(duì)應(yīng)關(guān)系。人工智能離不開(kāi)計(jì)算機(jī)程序設(shè)計(jì)。要弄清人工智能時(shí)代對(duì)計(jì)算機(jī)程序設(shè)計(jì)的新需求,需要首先對(duì)機(jī)器學(xué)習(xí)和大數(shù)據(jù)有一定的認(rèn)識(shí)。
機(jī)器學(xué)習(xí)(Machine Learning, ML)是一門研究計(jì)算機(jī)怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為以獲取新的知識(shí)或技能的多領(lǐng)域交叉學(xué)科,涉及概率論、統(tǒng)計(jì)學(xué)、逼近論、凸分析、算法復(fù)雜度理論等多門學(xué)科。機(jī)器學(xué)習(xí)是人工智能的核心,包括了很多方法,比如線性模型(Linear model)、決策樹(shù)(Decision tree)、神經(jīng)網(wǎng)絡(luò)(Neural networks)、支持向量機(jī)(Support Vector Machine)、貝葉斯分類器(Bayesian classifier)、集成學(xué)習(xí)(Ensemble learning)、聚類(clustering)、度量學(xué)習(xí)(Metric learning)、稀疏學(xué)習(xí)(Sparse learning)、概率圖模型(Probabilistic graph model)和強(qiáng)化學(xué)習(xí)(Reinforcement learning)等。[4]其中大部分方法都是數(shù)據(jù)驅(qū)動(dòng)的(data-driven),都是通過(guò)學(xué)習(xí)獲得數(shù)據(jù)不同抽象層次的表達(dá),以利于更好的理解和分析數(shù)據(jù)、挖掘數(shù)據(jù)隱藏的結(jié)構(gòu)和關(guān)系。
深度學(xué)習(xí)(Deep Learning)是機(jī)器學(xué)習(xí)的一個(gè)分支,由神經(jīng)網(wǎng)絡(luò)發(fā)展而來(lái),一般特指學(xué)習(xí)高層數(shù)的網(wǎng)絡(luò)結(jié)構(gòu)。深度學(xué)習(xí)也包括各種不同的模型,比如深度信念網(wǎng)絡(luò)(Deep Belief Network,DBN)、自編碼器(AutoEncoder)、卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)等。深度學(xué)習(xí)是目前主流的機(jī)器學(xué)習(xí)方法,在圖像分類與識(shí)別、語(yǔ)音識(shí)別等領(lǐng)域都比其他方法表現(xiàn)優(yōu)異。[5]
作為機(jī)器學(xué)習(xí)的原料,大數(shù)據(jù)(Big data)的“大”通常體現(xiàn)在三個(gè)方面,即數(shù)據(jù)量(Volume)、數(shù)據(jù)到達(dá)的速度(Velocity)和數(shù)據(jù)類別(Variety)。數(shù)據(jù)量大既可以體現(xiàn)為數(shù)據(jù)的維度高,也可以體現(xiàn)為數(shù)據(jù)的個(gè)數(shù)多。對(duì)于數(shù)據(jù)高速到達(dá)的情況,需要對(duì)應(yīng)的算法或者系統(tǒng)能夠有效處理。而多源的、非結(jié)構(gòu)化、多模態(tài)等不同類別特點(diǎn)也對(duì)大數(shù)據(jù)的處理方法帶來(lái)了挑戰(zhàn)??梢?jiàn),大數(shù)據(jù)不同于海量數(shù)據(jù)。在大數(shù)據(jù)上開(kāi)展機(jī)器學(xué)習(xí),可以挖掘出隱藏的有價(jià)值的數(shù)據(jù)關(guān)聯(lián)關(guān)系。
對(duì)于機(jī)器學(xué)習(xí)中涉及的大量具有一定通用性的算法,需要機(jī)器學(xué)習(xí)專業(yè)人士將其封裝為軟件包,以供各應(yīng)用領(lǐng)域的研發(fā)人員直接調(diào)用或在其基礎(chǔ)上進(jìn)行擴(kuò)展。大數(shù)據(jù)之上的機(jī)器學(xué)習(xí)意味著很大的計(jì)算量。以深度學(xué)習(xí)為例,需要訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò)其層次可以達(dá)到上千層、節(jié)點(diǎn)間的聯(lián)結(jié)權(quán)值可以達(dá)到上億個(gè)。為了提高訓(xùn)練和測(cè)試的效率,使機(jī)器學(xué)習(xí)能夠應(yīng)用于實(shí)際場(chǎng)景中,高性能、并行、分布式計(jì)算系統(tǒng)是必然的選擇??梢圆捎密浖脚_(tái)如Hadoop MapReduce或Spark,或者采用硬件平臺(tái)如GPU(Graphics Processing Unit,圖形處理器)或FPGA(Field-Programmable Gate Array,即現(xiàn)場(chǎng)可編程門陣列)。
2 人工智能時(shí)代的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言
人工智能時(shí)代的編程自然以人工智能研究和開(kāi)發(fā)人工智能應(yīng)用為主要目的。很多編程語(yǔ)言都可以用于人工智能開(kāi)發(fā),很難說(shuō)人工智能必須用哪一種語(yǔ)言來(lái)開(kāi)發(fā),但并不是每種編程語(yǔ)言都能夠?yàn)殚_(kāi)發(fā)人員節(jié)省時(shí)間及精力。Python [6]由于簡(jiǎn)單易用,是人工智能領(lǐng)域中使用最廣泛的編程語(yǔ)言之一,它可以無(wú)縫地與數(shù)據(jù)結(jié)構(gòu)和其他常用的AI算法一起使用。Python之所以適合AI項(xiàng)目,其實(shí)也是基于Python的很多有用的庫(kù)都可以在AI中使用。一位Python程序員給出了學(xué)習(xí)Python的7個(gè)理由:(1)Python易于學(xué)習(xí)。作為腳本語(yǔ)言,Python語(yǔ)言語(yǔ)法簡(jiǎn)單、接近自然語(yǔ)言,因此可讀性好,尤其適合作為計(jì)算機(jī)程序設(shè)計(jì)的入門語(yǔ)言。(2)Python能夠用于快速Web應(yīng)用開(kāi)發(fā)。(3)Python驅(qū)動(dòng)創(chuàng)業(yè)公司成功。支持從創(chuàng)意到實(shí)現(xiàn)的快速迭代。(4)Python程序員可獲得高薪。高薪反映了市場(chǎng)需求。(5)Python助力網(wǎng)絡(luò)安全。Python支持快速實(shí)驗(yàn)。(6)Python是AI和機(jī)器學(xué)習(xí)的未來(lái)。Python提供了數(shù)值計(jì)算引擎(如NumPy和SciPy)和機(jī)器學(xué)習(xí)功能庫(kù)(如scikit-learn,Keras和TensorFlow),可以很方便地支持機(jī)器學(xué)習(xí)和數(shù)據(jù)分析。(7)不做只會(huì)一招半式的碼農(nóng)。多會(huì)一門語(yǔ)言,機(jī)會(huì)更多。
Java也是AI項(xiàng)目的一個(gè)很好的選擇。它是一種面向?qū)ο蟮木幊陶Z(yǔ)言,專注于提供AI項(xiàng)目上所需的所有高級(jí)功能,它是可移植的,并且提供了內(nèi)置的垃圾回收。另外Java社區(qū)可以幫助開(kāi)發(fā)人員隨時(shí)隨地查詢和解決遇到的問(wèn)題。LISP因其出色的原型設(shè)計(jì)能力和對(duì)符號(hào)表達(dá)式的支持在AI領(lǐng)域占據(jù)一席之地。LISP是專為人工智能符號(hào)處理設(shè)計(jì)的語(yǔ)言,也是第一個(gè)聲明式系內(nèi)的函數(shù)式程序設(shè)計(jì)語(yǔ)言。Prolog與LISP在可用性方面旗鼓相當(dāng),據(jù)《Prolog Programming for Artificial Intelligence》一文介紹,Prolog是一種邏輯編程語(yǔ)言,主要是對(duì)一些基本機(jī)制進(jìn)行編程,對(duì)于AI編程十分有效,例如它提供模式匹配、自動(dòng)回溯和基于樹(shù)的數(shù)據(jù)結(jié)構(gòu)化機(jī)制。結(jié)合這些機(jī)制可以為AI項(xiàng)目提供一個(gè)靈活的框架。C++是速度最快的面向?qū)ο缶幊陶Z(yǔ)言,這對(duì)于AI項(xiàng)目是非常有用的,例如,搜索引擎可以廣泛使用C++。
其實(shí)為AI項(xiàng)目選擇編程語(yǔ)言,很大程度上都取決于AI子領(lǐng)域。在這些編程語(yǔ)言中,Python因?yàn)檫m用于大多數(shù)AI子領(lǐng)域,所以逐漸成為AI編程語(yǔ)言的首選。Lisp和Prolog因其獨(dú)特的功能,在部分AI項(xiàng)目中卓有成效,地位暫時(shí)難以撼動(dòng)。而Java和C++的自身優(yōu)勢(shì)也將在AI項(xiàng)目中繼續(xù)保持。
3 人工智能時(shí)代的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)
那么人工智能時(shí)代的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)在高校應(yīng)該如何開(kāi)展呢?下面給出一些初步的思考,供大家討論并批評(píng)指正:
3.1 入門語(yǔ)言
入門語(yǔ)言應(yīng)該容易學(xué)習(xí),可以輕松上手,既能傳遞計(jì)算機(jī)程序設(shè)計(jì)的基本思想,也能培養(yǎng)學(xué)生對(duì)編程的興趣。C語(yǔ)言是傳統(tǒng)的計(jì)算機(jī)編程入門語(yǔ)言。但學(xué)生學(xué)得并不輕松,不少同學(xué)學(xué)完C語(yǔ)言既不會(huì)運(yùn)用,也沒(méi)有興趣。有的非計(jì)算機(jī)專業(yè)的本科生甚至因?yàn)镃語(yǔ)言對(duì)計(jì)算機(jī)編程產(chǎn)生畏懼心理。因此,宜將Python作為入門語(yǔ)言,讓同學(xué)們輕松入門并快速進(jìn)入應(yīng)用開(kāi)發(fā)。有了Python這個(gè)基礎(chǔ),再學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言C++或JAVA,應(yīng)該可以觸類旁通。
3.2 數(shù)據(jù)結(jié)構(gòu)與算法
如前文所述,初略可以認(rèn)為計(jì)算機(jī)程序設(shè)計(jì)=數(shù)據(jù)結(jié)構(gòu)+算法。因此在學(xué)習(xí)編程語(yǔ)言的同時(shí)或之后,宜選用與入門語(yǔ)言對(duì)應(yīng)的教材。比如入門語(yǔ)言選Python的話,數(shù)據(jù)結(jié)構(gòu)與算法的教材最好也是Python描述。
3.3 編程環(huán)境
首先編程環(huán)境要盡量友好,簡(jiǎn)單易用,所見(jiàn)即所得,無(wú)需進(jìn)行大量繁瑣的環(huán)境配置工作。對(duì)于學(xué)生而言,像JAVA那樣需要做大量環(huán)境配置,不是一件容易的事。其次編程環(huán)境要集成度高,一個(gè)環(huán)境下可以完成整個(gè)編程周期的所有工作。再次編程環(huán)境要能夠提供跨平臺(tái)和多編程語(yǔ)言支持。最后編程環(huán)境應(yīng)提供大量常用的開(kāi)發(fā)包支持。Anaconda [7]就是這樣的一個(gè)編程環(huán)境,它擁有超過(guò)450萬(wàn)用戶和超過(guò)1000個(gè)數(shù)據(jù)科學(xué)的軟件開(kāi)發(fā)包。Anaconda以Python為核心,提供了Jupyter Notebook這樣功能強(qiáng)大的交互式文檔工具,代碼及其運(yùn)行結(jié)果、文本注釋、公式、繪圖都可以包含在一個(gè)文檔里,而且還可以隨時(shí)擦寫(xiě)更新。GitHub上有很多有趣的開(kāi)源Jupyter Notebook項(xiàng)目示例,[8]可供大家學(xué)習(xí)Python時(shí)參考。
3.4 案例教學(xué)
傳統(tǒng)的計(jì)算機(jī)程序設(shè)計(jì)教材和課堂教學(xué)過(guò)多偏重介紹編程語(yǔ)言的語(yǔ)法,既使課堂陷入枯燥,又讓學(xué)生找不到感覺(jué)。因此,提倡案例教學(xué),即教師在課堂上盡可能結(jié)合實(shí)際項(xiàng)目來(lái)開(kāi)展教學(xué)。教學(xué)案例既可以是來(lái)自教師自己的研發(fā)項(xiàng)目,也可以是來(lái)自網(wǎng)絡(luò)的開(kāi)源項(xiàng)目。案例教學(xué)的好處在于,學(xué)生容易理論聯(lián)系實(shí)際,縮短課本與實(shí)際研發(fā)的距離。
3.5 大作業(yè)
實(shí)驗(yàn)上機(jī)除了常規(guī)的基本知識(shí)的操作練習(xí)外,還應(yīng)安排至少一個(gè)大作業(yè)。大作業(yè)可以是小組(比如3名同學(xué))共同完成。這樣不但可以鍛煉學(xué)生學(xué)習(xí)致用的能力、提升學(xué)生學(xué)習(xí)的成就感,還以讓學(xué)生的團(tuán)隊(duì)精神和管理能力得到提高??芍^一舉多得。大作業(yè)的任務(wù)應(yīng)該盡可能來(lái)自各領(lǐng)域的實(shí)際問(wèn)題和需求,如果能拿到實(shí)際數(shù)據(jù)更好。
綜上,人工智能時(shí)代的新需求要求我們探索計(jì)算機(jī)程序設(shè)計(jì)的新的教學(xué)內(nèi)容和教學(xué)形式。唯有與時(shí)俱進(jìn)、不斷創(chuàng)新,才能使高校的計(jì)算機(jī)程序設(shè)計(jì)教學(xué)達(dá)到更好的教學(xué)效果,才能培養(yǎng)出適應(yīng)各行各業(yè)新需求的研發(fā)人才。 (下轉(zhuǎn)第134頁(yè))(上接第107頁(yè))
參考文獻(xiàn)
[1] LeCun, Y., Bengio, Y. and Hinton, G. E. Deep Learning, Nature, Vol. 521, pp 436-444, 2015.
[2] 杰瑞·卡普蘭.人工智能時(shí)代.浙江人民出版社,2016.
[3] 周志華.機(jī)器學(xué)習(xí).清華大學(xué)出版社,2016.
[4] Ian Goodfellow and Yoshua Bengio and Aaron Courville, Deep Learning, MIT Press, 2016.
[5] Python, https://www.python.org/.
[6] Anaconda, https://www.continuum.io/anaconda-overview
[7] Jupyter Notebook, https://github.com/jupyter/jupyter/wiki/A- gallery- of-interesting- Jupyter-Notebooks