- 深入淺出AI算法:基礎概覽
- 呂磊
- 4014字
- 2021-08-13 20:18:17
1.1 打開算法之門
1.1.1 算法簡史
算法存在的前提是數據,有數據才能有算法。最早關于人類記錄數據的例子是公元前18 000年前出現的符木。生活在舊石器時代的部落人民學會了在樹枝上刻下凹痕來記錄日常的物品供應和一些簡單的交易活動,并且能夠通過比較樹枝的凹痕進行基本的計算,進而對一些事情做出簡單的預測,如食物可以儲存多久不變質。
到了公元前4000年左右,在發源于亞洲西部亞美尼亞高原的幼發拉底河與底格里斯河河畔(兩河流域),居住著一群人類最早的居民——蘇美爾人,他們創造了璀璨的蘇美爾文明,也就是美索不達米亞[1]文明的開端。
在像美索不達米亞那樣極其惡劣的氣候下,知道播種和收獲的準確時間是必不可少的,因此有必要找到某種確定時間的可靠途徑。最簡單的方法是利用月亮的盈虧循環。月亮由最初的蛾眉月到下一個最初的蛾眉月共需要29天半的時間,人們就考慮將這樣一個循環視為一個基本的計時單位(我們將其稱為一個月),然后在月亮累計運行12個這樣的計時單位(6個29天,6個30天)后,一“年”就過去了,又到了開始播種的時候。不幸的是,他們不知道一年實際上是地球繞太陽公轉一周的時間,月亮的12次循環或12個月比一個太陽年少11天。在900年后,蘇美爾人才了解到,每隔幾年他們就要在其年歷上另加一個閏月,才能準確地預測季節的循環。
通過感受季節的周期性更替,結合對太陽和月亮的觀察,蘇美爾人花了900年的時間收集數據,完成了人類的第一個算法模型——太陰(月)歷。隨后,蘇美爾人發明了度量,包括12單位度量和60單位度量,這便是人類最早的十二進制和六十進制?,F在世界各國通行的時間度量方法,每天分為24小時,每小時包含60分鐘,每分鐘包含60秒,鐘表刻度盤上走一圈為12小時,還有以12為基本計量單位的“打”,都是在十二進制和六十進制的基礎上發展而來的。在公元前2500年左右,蘇美爾人就已經掌握了加、減、乘、除四則運算的計算方法,形成了早期比較簡單的幾何與代數方法論。
時間線走到公元前300年左右,一種耳熟能詳的算法——輾轉相除法,由古希臘數學家歐幾里得提出,因此這個算法又稱為歐幾里得算法。輾轉相除法的意思是兩個正整數a和b(a > b)的最大公約數,等于a除以b的余數與b的最大公約數。該算法的具體步驟如下。
(1)輸入兩個正整數a和b;
(2)計算a除以b的余數r;
(3)如果r等于0,則最大公約數為當前的b值,算法結束;
(4)如果r不等于0,則a=b,b=r,跳轉至步驟(2)。
在公元100年左右,比較全面的算法研究出現在由我國古代的張蒼和耿壽昌撰寫的《九章算術》中。作為我國古代的數學名著,《九章算術》的內容十分豐富,全書采用問題集的形式,總結了自春秋戰國至秦漢以來的數學成就,對246個與生產、生活有聯系的應用問題逐一提供了與之相應的解決之法。不過,《九章算術》存在著不可忽視的缺點,那就是全書沒有任何數學概念的定義,在各個問題的解決方法中,也沒有給出相關的理論推導與證明。直到三國時期,數學家劉徽給《九章算術》作注,才彌補了這個缺陷。
總之,早期的算法研究傾向于計算和解決與日常生活息息相關的數學問題。隨著算法理論的發展和人類科技的進步,算法研究逐漸轉向研究數據本身的規律和價值,尤其是在生產與生活中產生的大量數據所帶來的預測價值和決策價值。
到了20世紀上半葉,數理統計學蓬勃發展。作為數學的一個重要分支學科,數理統計學主要研究隨機數據的收集、匯總與分析之法,然后對相應的實際問題做出預測和推斷。這期間先后誕生了影響至今的兩大統計學派——頻率學派和貝葉斯學派。從20世紀初開始,以Fisher和Pearson為主要代表人物的頻率學派,推動數理統計學發展成為一門成熟的學科。頻率學派從自然的角度出發,試圖直接給事物本身建模,認為概率就是頻率,描述數據分布的參數是固定的,可以使用估計方法得到數據分布的參數值。然而,頻率學派這種類似上帝視角的問題切入法,并不能很好地解決所有的實際問題。在20世紀中葉以后,曾一度被頻率學派扼殺的貝葉斯[2]統計迅速發展壯大起來,和頻率學派分庭抗禮。貝葉斯學派否定了頻率學派的概率就是頻率的觀點,并且不從描述事物本身入手,而是從觀察者角度出發,構造出了一套在貝葉斯概率體系下,對事物不確定性做出推斷的框架和方法。當然,無論是頻率學派,還是貝葉斯學派,都貢獻了一系列非常實用的算法并沿用至今。例如,頻率學派的最大似然估計(Maximum Likelihood Estimate,MLE)在神經網絡模型中應用廣泛;貝葉斯學派的蒙特卡羅方法(Monte Carlo Method)在強化學習的探索和發現中起到了非常關鍵的作用。總之,兩大學派的理論都很重要,缺一不可,并無高下之分。
從20世紀下半葉開始,在兩大統計學派的激烈博弈中,感知機學習、統計學習、歸納學習、淺層學習等陸續萌芽發展,這類研究數據本身規律和價值的算法,稱為機器學習算法。到了20世紀80年代,機器學習算法逐漸成了一個獨立的研究方向。在這段時間,誕生了大量關于機器學習的算法,其中一些比較典型的、具有代表性的算法將在后續的章節中介紹。
注意:為了避免概念混淆,本書有關特定數學問題的算法(前言中提到的信息學算法,詳見第3章)統稱為基礎算法,有關研究數據規律和價值的算法(詳見第4章)統稱為機器學習算法(或AI算法)。
1.1.2 算法與人工智能
相信有不少讀者是抱著對人工智能的興趣閱讀本書的。在比算法世界更大的世界中,人們談論更多的也是人工智能,而非算法。那么,二者到底有什么關系?
人工智能的概念從提出到現在已經過去了半個多世紀,但是關于人工智能的定義卻依然存在爭議。我們不妨仔細審視一下“人工智能”,它由“人工”和“智能”兩個詞組成。
先看“智能”一詞,它的字面意思是智慧和能力。在自然界,智能可以分為個體智能和群體智能兩種。除了人類,被廣泛認為具備個體智能的生物還有大猩猩、海豚和章魚等,具備群體智能的生物有蜂群、蟻群和沙丁魚群等。在個體智能中,只能表現興奮和抑制兩種狀態的人類大腦神經元,形成了復雜的思維與智慧。在群體智能中,通過分泌信息素完成交流的螞蟻,構成了分工明確、井然有序的蟻群。從這個角度來看,無論是個體智能,還是群體智能,都是由大量簡單行為連接轉化而成的。在20世紀中期,馮·諾依曼[3]受此啟發,提出了元胞自動機(Cellular Automata,CA)。元胞自動機中單個個體的算法非常簡單,其狀態改變只受周圍直接相連的其他個體狀態影響。例如,假設個體只有0和1兩種狀態,算法設定個體本身的狀態跟隨周圍個體中多數狀態值的變化而變化。令人難以置信的是,這些由簡單算法構成的元胞自動機,居然成功模擬出了螞蟻、大雁、洄游魚類等動物的一些群體智能行為。
再看“人工”一詞,字面理解為由人創造。所謂人工智能,就是由人創造的智能。上文提到的由算法驅動的元胞自動機體現出的群體智能行為,就是一種由人創造的智能。
所以,人工智能離不開算法,算法是產生人工智能的直接工具。
1.1.3 什么是數據分析
顧名思義,數據分析(Data Analysis)就是對數據進行分析,即對收集到的數據進行匯總與統計,并且從中提取和歸納出有價值的信息。數據分析一般會預先確定一個明確的統計指標,如總和、均值等;然后采用相應的計算方法和工具,得到預定統計指標的結果;最后采用合適的形式將結果展示出來。
數據分析作為算法研究的第一步,從古至今從未改變,如古代關于天文、歷法研究的第一步就是長期收集和匯總數據。因此,從工作職能上區分,與算法工程師相比,數據分析工程師一般只需專注于數據分析模塊。
我們通過一個實例表明數據分析到底在做什么。例如,“關于大學生手機使用情況調研”課題,數據分析的目標之一是統計各種數量總和與均值,包括但不限于不同年級、不同性別的大學生購買和使用不同款式品牌的手機數量總和與均值。然后將這些統計值使用合適的圖表展示出來。例如,使用條形圖展示“最受男生歡迎的手機型號排序”“銷量最高的大學生手機型號排序”“最受大學生歡迎的手機品牌排序”的統計結果,使用折線圖展示“大學生每月新購的手機數量”“大學生一周中每天的平均通話時間”的統計結果。
1.1.4 什么是數據挖掘
顧名思義,數據挖掘(Data Mining)就是對數據進行深入研究,其目的不僅是獲得數據統計分析的表層結論,更多的是挖掘數據與數據之間的內在關系。從這個層面而言,數據挖掘的精髓在于探索,探索數據潛在的模式、規律和規則,是一種深層次的數據分析。數據挖掘既有基于統計的算法,又有基于模型的算法。雖然基于模型的算法和機器學習算法存在不少重合之處,但它們的側重點不同。
數據挖掘作為機器學習算法研究中承上啟下的一步,比數據分析更能深入數據,并且不完全依賴于算法模型。因此,與算法工程師相比,數據挖掘工程師對數據模式與規律、規則等數據方面的“嗅覺”要更敏銳。
在“關于大學生手機使用情況調研”的課題中,基于統計的數據挖掘,可以研究一些特征的共現情況。例如,根據“視頻”“游戲”“聊天”“拍攝”等標簽的分析統計結果,結合固有人群標簽(性別、年級、專業等)的統計結果,可以得出各個標簽之間的關聯度分析結果?;谀P偷臄祿诰?,可以研究相似群體。例如,“具備相似手機使用習慣的大學生”有哪幾類,每個類別下的大學生分別具備什么樣的特質,等等。
1.1.5 什么是機器學習
顧名思義,機器學習(Machine Learning)就是讓機器自己去學習。既然讓機器自己學習,就需要人工預先指定一套學習規則,這套既定的學習規則就是機器學習的算法模型。從這個層面來說,機器學習的精髓在于優化,即根據收集到的數據樣本,優化指定機器學習算法模型中的各項參數。
機器學習作為算法研究的最后一個環節,從狹義上來說,其重點強調的是模型的選擇與參數優化的方法。因此,與算法工程師相比,機器學習工程師專注于模型層面的研究[4]。
在“關于大學生手機使用情況調研”的課題中,機器學習可以利用所有能提取到的大學生特征,基于模型完成某些特定場景中的預測或決策任務。例如,機器學習可以通過模型預測幫助電商平臺推薦更適合大學生用戶群體的手機品牌與型號,通過模型決策幫助手機廠商提高面向大學生手機市場的投資收益率(Return on Investment,ROI),等等。