機器學習的基本原理
文章來源: 歐洲聯盟2023-03-17 15:27:56

近日的ChatGPT很是火爆,讓人問起了人類何時將會滅亡。還有什麽是計算機做不到的嗎?以前的Google應答器就無所不能了!現在,人們已經開發出了很多機器自主作為、自我完善的應用程序了:(1)符合個人喜好的搜索引擎(廣告推送),(2)檢測欺詐信息的數據挖掘程序, (3) 信息過濾係統,(4)自動駕駛程序,(5)用於人臉識別的數字攝像頭,(6)AlphaGo下棋機器人,打遍人類棋手無敵手,(7)醫生機器人,(8)教師機器人,等等。

這些都隻不過是機器學習的應用程序而已,而機器學習僅僅是人工智能的一個領域。有人把人工智能稱為人類的最後發明,機器統治人類隻是時間問題。我一直擔憂,一個人如果不學習,遲早會淪為機器的奴隸。現在就來看看,機器是怎麽學習和思考的吧!還不算太晚。

什麽是機器學習?

機器學習(Machine Learning)這個詞是IBM的一個雇員,Arthur Samuel,在1959年提出的;他是計算機遊戲和人工智能的開拓者之一。機器學習指的是,在人工的反複訓練之下,機器能夠識別一些有意義的固定模式,並且能夠改正錯誤的格式。最早被製造出來的學習機器叫 ”CyberTron”, 使用打孔的磁帶存儲,去記錄、分析聲納信號、電磁波信號,以及語音格式。

機器學習是人工智能的一部分,專注於設計一些計算機程序/算法,能夠自動檢測數據中有意義的格式,並且還能隨著經驗的積累而完善。Tom M. Mitchell如此定義能夠學習的算法:它針對特定的任務集T,通過經驗E(訓練數據集)的模式識別,按照某種優異性度量P,對T中各項任務的認知及操作技能有所改善。也就是說,機器學習中的程序設計是麵向任務的。

機器學習程序還必須與人互動。傳統的工程設計並不需要反映人類或生物的習性:飛機並不需要理解鳥類;但機器學習的程序必須與其使用者互相溝通,機器所獲得的概念和技能必須要為使用者所理解,程序也要模擬人或動物的認知過程。機器學習作為一門科學,還需要從理論上探索新的學習方法、以及各種學習方法的分析比較。

Allan Turing 在他的文章《Computing Machinery and Intelligence》中提出了這麽一個問題:機器能夠思考嗎?有了機器學習的概念,就等於在問:機器能做人類所做嗎?答案是肯定的,盡管這會讓許多人感到恐懼。有機分子都可以人工合成,會思考的機器自然也可以人工造出。

為什麽要搞機器學習?

今天的計算機係統並不能真正地通過例子、類比、過去的任務等去學會如何執行一項任務,也不不會基於過去的錯誤而改善,更不會通過觀察或者模仿而獲得新的能力。為了讓計算機或者計算機控製的機器人去執行一項任務,必須由一個人先去製定一套完整的、準確無誤的算法,再編製成可由機器執行的程序;這是耗時耗力的苦差事。如果能夠讓機器自行獲取知識,就可以減輕手工編程的重負。

即使有了各種程序,機器也不知道何時何情執行何種程序;必須由人事先編製一套擇優而行的評估標準。學習樣本或者訓練數據集其實是隨機的,作出的決定也是隨機的,這就需要風險評估;概率模型就登堂了。機器學習作為一門科學,還需要探討各種可能的學習模型,以及模型的相容性(無矛盾性)、完備性(無限收斂性)、緊致性(有限可行性),這是一門科學的必要設製及最終目的。

如何實現係統的自我完善?其實這就是機器的性能提升。對於人來說,就是通過練習,逐步改善操作和認知的技巧;比如,彈琴,書畫,駕車等等。獲取如何動作的知識是提升技能的第一步,通過反複練習、不斷糾正偏差(與預定目標的差距),才是學習的目的。獲取知識是有意識的行為,提升技能則是下意識的行為。如果能夠通過邏輯推理,突破原定的目標,那就是創造出新的知識了:這也是機器學習的終極目標。

怎樣搞機器學習?

要讓機器能夠學習,首先要搞清什麽是學習。動物(尤其是人類)學習的過程通常包括(1)新知識的獲取,(2)總結/歸納、糾正偏差,(3)認知、操作技能的提高,(4)通過試驗發現新的理論/經驗,等。學習的方式/方法有:(1)通過觀察和記憶,(2)通過例子或者過往經曆(3)他人的指導,(4)書本、詞典,(5)網絡,(6)通過類比、反思等思維技巧,等等。

知識和技能的表述多種多樣,常見的有:(1)代數化的表達式,(2)決策樹,(3)形式邏輯表達式,(4)條件-行動規則,(5)框架和計劃,(6)圖形和網絡,(7)隨機過程,(8)計算機程序,或其它過程編碼,(9)生成算法,(10)分類與回歸分析,等等。

目前,機器學習研究的焦點有三個:(1)麵向任務的研究,開發各種學習係統及其性能評估,(2)人類學習過程的研究和計算機模擬,(3)獨立於應用領域(任務)的算法/學習方法的理論分析。這三個方麵是相輔相成的。

機器學習的目標有兩個:一是搞清基本概念:什麽是學習?機器能夠學習嗎?怎麽知道學習是否成功?怎麽量化知識?二是要針對各種任務,提出優良的算法。現在的許多軟件如Mathematica、Matlab,都包含了機器學習的一些算法,但其性能未知,也決不是最優的,更不是全部[也不是免費的,軟件開發者是有勞動代價的] 。要想有一部完善的、針對所有任務的算法集,還非得一個數理化生機的全才才能辦到,這決不是幾個專業的專才加在一起就能辦到的。

我有了計算一切的方法,有誰能夠教教我,把它們都變成可以機器執行的程序嗎?我自學過、也教過C語言、匯編語言,可是,程序寫起來太費時費力,有不有快一點的高級語言?Python嗎?太笨;HMTL嗎?沒有邏輯。大概需要有人去另創一門語言才行?