王榮良
思維與意識:計算思維無法繞開的話題
2016年1月28日,一則谷歌新聞刷爆朋友圈:谷歌旗下DeepMind公司研發的圍棋程序AlphaGo擊敗了法國國家圍棋隊總教練、歐洲圍棋冠軍樊麾,AlphaGo五戰全勝。這是人工智能領域的重要進展。(截至發稿,AlphaGo與李世石的圍棋大戰落下帷幕,人工智能以4:1贏得了勝利——編者注)
計算機和人類在棋類中的較量已不罕見,在三子棋、跳棋和國際象棋等棋類上,計算機都先后完成了對人類的挑戰。值得一提的是,1997年的人機大戰,當時IBM公司研發的超級計算機“深藍”戰勝了國際象棋冠軍卡斯巴羅夫。不過國際象棋的算法要比圍棋簡單得多,國際象棋中取勝只需“殺死”國王,而圍棋中則用數子或比目的方法計算勝負,并不是簡單地殺死對方棋子。
AlphaGo的獲勝震驚了圍棋界,對擁有2500多年歷史的圍棋而言,計算機在此之前從未戰勝過職業棋手。AlphaGo的獲勝也震驚了計算機人工智能領域,圍棋看起來棋盤簡單、規則不難,縱橫各19條等距離、垂直交叉的平行線,比賽雙方交替落子,目的是在棋盤上占據盡可能大的空間,但圍棋比起國際象棋的困難點在于,它要求學會察覺棋盤上布局的微妙模式,而不是僅僅計算不同棋局狀態下的權值。DeepMind公司宣稱其采用了政策網絡(policy network)和價值網絡(value network)兩種深度神經網絡,支持機器深度學習,人工智能變得更強大了。
計算機技術正在節節逼近擁有高級智慧的人類。然而,大多數人至今仍在懷疑計算機是否真的能“看清”攝像頭前形形色色的真實世界,或者通過麥克風“聽懂”說話聲。盡管計算機處理數據的速度極快,但對外界的感知能夠與有意識的人類一樣嗎?
“深藍”計算機可以戰勝國際象棋大師卡斯帕羅夫,AlphaGo可以戰勝歐洲圍棋冠軍樊麾,但是,這些計算機不一定能夠對我們生活中習以為常的現象進行合理的判斷。例如,讓計算機“看”一幅藍鯨蹲在東方明珠塔頂的圖片,它不一定能及時發現錯誤。而這些問題對一個學齡前兒童來說,卻不是一個難題。
這就說明,人的意識及其對應的思維活動與計算機所采用的方法有很大的不同,計算機并不能具備意識,遠沒有達到能夠思維的程度。計算機所表現出來的智能,是靠人類賦予它的方法來實現的。
人類具有意識和思維。街上走著一位美女,男士一般都會回頭多望幾眼,這種行為往往是不由自主的,是一種本能,也是一種潛意識。這種潛意識是非常直接的,一般不經過大腦思考,是由感知造成的第一反應。潛意識的形成來自于人的自然屬性,是物種進化與長期文化認同后內化的結果。當外部環境造成的刺激直接迎合上自身內在的需求與認同時,腦部有關神經元放電刺激行為神經與內分泌神經,后面的行為便自然產生了,其反應時間幾乎為零。
除了潛意識外,人類還具有后建意識,就是高層次的理性意識,這是與地區文化背景和本人知識儲備有關系的。例如,一個人在商店里買一件衣服,首先要選喜歡的顏色、式樣,這是審美問題,其次要看價格是否能承受得起、是否合身等,這里面有一整套思維模式,包括辯證取舍、價格比較、購買緣由等,到最終決定是否購買再到執行。這一過程是理性意識支撐下的思維決策過程??梢韵胂?,人的思維決策系統是一個立體網狀結構,也可以比喻成知識體系的信息通道。當人根據目的開始建立理性意識時,思維系統就高速運轉,像計算機的CPU一樣開始在硬盤里搜索需要的信息,即在個人的知識體系中不斷比較篩選后建立起意識,在符合心理認同后開始執行。這里,心理認同是很重要的一個環節,當心理不能認同時,這種意識只能成為一種一閃而過的意念,不會付諸行為。
現在回到計算思維。從對AlphaGo的討論可以發現,計算機并不具備意識和思維,但AlphaGo的出現之所以在業界引起震驚,正是因為它采用了深度學習技術,向著人類的意識與思維逼近,其表現更為接近人類的實際問題解決方法,盡管這與“人類級別的人工智能”還相距甚遠。而從有關人類的意識與思維的討論中,我們可以發現,計算思維應該是人類的思維,是一個人儲備了計算學科相關知識以后在理性意識支撐下的活動。
計算思維方法:計算思維教育的內容
人們很難描述自己的思維。在完全清醒的時候,我們通過大腦考慮一些事情,這是在思維;當我們睡著的時候,有些事情也仍會縈回腦際,我們把這種現象稱為夢境;我們也會做白日夢,是一些雜亂無章的思緒;或者有時候在我們頭腦中出現不能控制的一系列觀念或想法,這是不是思維,卻很難講。
杜威在《我們怎樣思維》一文中提出反省思維(reflective thinking),這種思維是對某個問題進行反復的、嚴肅的、持續不斷的深思。其一,反省思維是由一系列連續的被思考的事情組成的,反省思維是一個過程,這些事情不是偶發的,而是有前后關系的,前者事件決定后者,后者是前者正當的結果,受前者的制約;其二,反省思維所涉及的事情通常不是對事物的看見、聽到、觸摸等直接觀察記錄,而是通過思考獲得的,這也符合思維間接性的特征;其三,反省思維不只是在頭腦中反映一系列的虛構故事,而是有目的的,它必須得出一種結論,這一結論必須是通過思考得以證實。通過專心的思考,把一團亂麻似的思考弄得順理成章,把含混不明的思緒弄得一清二楚。
那么,思維是如何在大腦中形成一系列的事情,從一件事情連接到另一件事情的呢?這就需要方法。方法是人類認識客觀世界和改造客觀世界應遵循的某種方式、途徑和程序的總和。在思維過程中運用的方法可稱為思維方法,是人們通過思維活動為實現特定思維目的所憑借的途徑、手段或辦法,也就是思維過程中所運用的工具和手段。例如,三角形內角之和,我們反復測量不同形狀三角形的內角,發現三個角之和約等于180度,我們可以推斷出:任意三角形的內角和可能都等于180度。這里,大腦使用的方法是歸納法,是從個別事實推演出一般的邏輯思維方法。如果我們要嚴格證明“任意三角形的內角和等于180度”(如下圖),需要采用演繹的證明方法,運用已知的定理,先證明“∠1=∠A”、“∠2=∠B”,從而一步一步推演證明“三角形內角和等于180度”。
抬起頭,觀察天空,從云朵的變化可以推測天氣的變化。作為探索活動,通過觀察,然后對觀察的數據進行分析,這是經典物理最常用的方法。例如,開普勒通過長期天文觀察和數據分析,發現了火星的運動規律:火星畫出一個以太陽為焦點的橢圓(開普勒第一定律);由太陽到火星的矢徑在相等時間內畫出的面積相等(開普勒第二定律)。
回到日常生活中的一個平凡的事例:當一個不熟悉當地道路的旅行者走到道路的分岔口時,猶豫不決,究竟走哪一條路才對呢?他有兩種辦法可以選擇:觀察周邊環境,作出判斷,選擇一條路徑;或者從左到右依次對每條岔路進行嘗試,發現錯誤,退回來探索下一個岔口,從而找到正確的路徑。第一種方法依據預判斷,有一定的運氣成分。第二種方法是一種典型的回溯搜索法,在計算機中經常應用,盡管可能花費更多的精力,但可以保證得到正確的或者最佳的答案。第二種方法還蘊涵了這樣一個核心思想:給出一個從左到右的搜索規則,經過有限次的操作,一定能得到最終結果,這就是計算的思維方法。
大部分思維,特別是科學類思維,都是由以下兩種方法支持其思維活動的:一種是基本方法,即邏輯,這是推演思維活動的最基本工具,否則,人們就可評價說“思維不合邏輯”,即推演是不合理的;另一種就是其對應的學科方法。計算思維體現的是機械計算,是人腦對實現機械計算的計算裝置及其計算實現過程的反映。人腦對計算實施原理與過程的思考,必定需要由計算的方法來規范,這樣,人們才能理解計算,并運用計算來設計系統、解決問題、指導人們的行為,這就是計算思維。而方法是計算思維的具體內容表達,方法學習是計算思維教育的有效途徑。
構造與簡潔:計算思維方法的特征
人類能夠通過文字、音樂以及計算機等信息載體把獲得的知識和經驗儲藏在外界環境中,再以學習的形式把這些信息轉化為儲存在大腦中的記憶并加以利用。目前的計算機鮮有主動的學習功能,也不可能主動將儲藏在外界環境中的知識和經驗轉化為可記憶的信息。
AlphaGo的出現之所以在業界引起震驚,還在于它具有自主學習方法的雛形。目前的計算機幾乎完全依靠機械方式把信息精確地記錄下來,而不善于利用記憶的信息自發地進行歸納推理等信息活動。因此會有這樣一種情況出現,人們要記住一張臉,通常要比記住一個外語單詞容易,而計算機則相反,計算機識別、記憶一張人臉要比記住一個城市的電話簿還要困難,這是因為機械般的精確記憶是計算機的強項。因此,把握計算思維的方法,首先需要理解基于機械計算的方法特征。
計算思維方法的特征之一是構造性。構造性主要體現在兩個方面。
其一,方法是可以表達的,并且是準確的、無歧義的表達,能表達出明確的操作,其對應的方法就是“形式化”,用約定的格式、文字或語法表達計算操作。形式化表達有不同的層次,在計算裝置內部核心,用電流、電壓訊號或者字符“0”和“1”表示;在計算機開發應用層次,人們可以用操作命令、計算機語言來表示;對于系統開發人員,還可以用流程圖來表達,這一層次只是用于表達開發人員的設計思想,規范設計行為。從外向內,從人向計算機,每一層次的形式化表達都可以向內層轉換。每一層向內層的轉換都需要經歷抽象和形式化,即將外一層的功能描述經抽象以后,按當前層的格式要求形式化表達。例如,開發人員可以將用戶需求經抽象之后用例圖或流程圖表示;計算機可以將程序設計高級語言轉換為機器語言執行。其二,每一個操作環節構成的操作步驟是相關的,即每一步操作都是有目的的,前一步操作為后一步操作提供依據,所有操作組合在一起,完成一個特定的算法,并且是在有限次的操作中完成的。當我們把一系列設定的操作遞交給計算機以后,計算機可以以此序列執行,類似于人腦的思維是由一系列有序的事情組成,我們也可以說計算機也在“思維”,顯然這種思維不是真正的思維,而是計算機執行固定的操作序列。不同的操作序列組合,實現了不同的算法,如枚舉法、冒泡排序法等,體現的是不同的計算方法和計算目標。上例中的旅行者,采用從左至右有規律地依次嘗試每一種道路的走法,并保證一定能夠得到最終解,就是典型的構造特性。
簡潔是計算思維方法的另一特征,它也體現在兩個方面。其一,基本操作盡可能簡單,復雜操作可以轉化為簡單操作執行。例如,乘法操作可以用若干個加法操作來完成。實際上,實現機械計算的計算機并不“聰明”,只適合做簡單的工作,只是以它的速度優勢,通過快速處理簡單的事,來完成復雜的工作。因此,機械計算是適合做簡單操作的重復執行,這也是計算思維的方法特征。其二,簡潔同樣體現在形式化表達方式上。用循環結構表示重復執行操作,不僅可以節省大量的表達空間,而且簡單明了,是人腦思維概括性和間接性的典型表現。按功能劃分模塊,是結構化程序設計的基本思想,對寫入的程序使用邏輯結構,使得理解和修改更有效、更容易。至于面向對象的方法,將數據和操作封裝在一起,將接口與實現分離,可以將現實世界以對象的形式進行更簡潔和直觀的表達。
理解本質:計算思維方法教育的核心
計算思維是人的思維,是人指示計算機工作的思維。計算思維的方法指導著思維過程與走向,因此,對方法的學習,是計算思維教育的有效途徑。
從計算思維對應的計算學科來看,是源于數學,同時又有工程屬性。因此,計算思維的方法可以從兩個維度描述:數學方法和工程方法。計算思維的數學方法包括抽象、構造、遞歸、形式化等,計算思維的工程方法包括系統方法、分治法、結構化方法、面向對象方法等。
計算是為了數據處理。從數據處理角度來看,計算思維的方法有三類:其一,物理世界與計算機世界數據轉換的方法,如用二進制數對物理世界和現象進行編碼以便計算處理,用可視化的方法表示各種對象等。其二,數據的管理方法,如先將信息聚焦成“庫”,再對基于“庫”所聚焦的大量信息進行管理、分析與研究。其三,數據加工的方法,如用算法的思維確定數據加工的有效步驟。
計算機原理以及相關計算方法的學習,是計算思維教育的有效途徑。計算思維的方法教育不能僅停留在利用計算機解決問題上,而應該通過方法理解人與計算機的關系。算法與計算機有著不可分割的關系,計算機無法獨立于算法而存在,算法卻不一定要依賴計算機才能存在,但離開了計算機,算法的實際作用就要大打折扣。以枚舉法為例,逐個考察了某類事件的所有可能情況,因而得出一般結論,這是枚舉法的基本教學要求,并在此基礎上構造循環結構。但是,如果不闡述枚舉法是通過犧牲時間來換取答案的全面性,學生也就沒有進一步思考的動力,包括思考計算機的速度優勢,枚舉法的進一步優化,等等。
計算思維的方法教育要體現計算的核心思想,而不能流于形式。以遞歸為例,遞歸是一個重要的概念,也是教學難點,一層層的嵌套調用會讓初學者犯暈。“從前有座山,山里有座廟,廟里有個老和尚給小和尚講故事:從前有座山,山里有座廟……”老師們通常都用這個古老的故事來幫助學生理解遞歸,這其實是對遞歸的一種誤讀,最多只是讓學生在形式上有想象,但會陷入到無限的循環之中,與計算學科解決問題能行性是不一致的。從遞歸所體現的核心思想來看:其一,反映了將一個復雜的問題簡單化處理方式,這反映了計算思維簡潔的特性;其二,每次簡單化后的問題表達方式與原方式是一致的,這也反映了計算思維簡潔的特性;其三,是有終止的,問題簡化到一定程度,一定是可以解決的,這反映了計算思維的構造特性;其四,遞歸是一種漂亮的形式化表達,可以用有限的步驟描述實現近于無限功能的方法。最后需要說明的是,在計算學科遞歸應用相當廣泛,程序的自我調用只是其中之一。
結論
AlphaGo的出現,不僅反映了計算機人工智能專家在機器學習方面的研究逼近人類智慧的努力,同時也引發了哲學家們對計算機發展到何等水平才能算是擁有意識與思維的討論。對于人類而言,在簡單記憶和機械計算方面明顯不如計算機的情況下,人們的學習重點不應放在簡單知識的記憶和方法的模仿,而應是通過知識與方法的學習形成思維與意識。
我們無法憑空開展計算思維教育,計算學科的基礎知識和基本方法是計算思維教育的基石,尤其是計算思維方法,是計算思維的一種外顯形式。所以,通過計算思維方法的教學是開展計算思維教育的有效途徑。但是,計算思維方法的學習,不是計算思維教育的根本目標,而是應該通過對方法的學習,形成計算思維及相關意識。因此,在計算思維方法的教學中,一定要把握計算思維方法的特征和本質,而不是方法的形式。
在中小學,與算法相關的方法教學已實施多年,計算思維的提出,對相關方法教學提出了新的要求。同時,依據不同學段學生的年齡心智特征,梳理計算思維的方法教育內容,是一項有意義也有挑戰性的工作。