1. 程式人生 > >系統學習機器學習之系統認識

系統學習機器學習之系統認識

概述

機器學習(MachineLearning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的效能。它是人工智慧的核心,是使計算機具有智慧的根本途徑,其應用遍及人工智慧的各個領域,它主要使用歸納、綜合而不是演繹。

研究意義

學習是人類具有的一種重要智慧行為,但究竟什麼是學習,長期以來卻眾說紛紜。社會學家、邏輯學家和心理學家都各有其不同的看法。
比如,Langley(1996)定義的機器學習是“機器學習是一門人工智慧的科學,該領域的主要研究物件是人工智慧,特別是如何在經驗學習中改善具體演算法的效能”。(Machine learning is a science of the artificial. The field’s mainobjects of study are artifacts, specifically algorithms that improve theirperformance with experience.’)
Tom Mitchell的機器學習(1997)對資訊理論中的一些概念有詳細的解釋,其中定義機器學習時提到,“機器學習是對能通過經驗自動改進的計算機演算法的研究”。(MachineLearning is the study of computer algorithms that improve automatically throughexperience.)
Alpaydin(2004)同時提出自己對機器學習的定義,“機器學習是用資料或以往的經驗,以此優化計算機程式的效能標準。”(Machine learning is programming computers to optimize a performancecriterion using example data or past experience.)
儘管如此,為了便於進行討論和估計學科的進展,有必要對機器學習給出定義,即使這種定義是不完全的和不充分的。顧名思義,機器學習是研究如何使用機器來模擬人類學習活動的一門學科。稍為嚴格的提法是:機器學習是一門研究機器獲取新知識和新技能,並識別現有知識的學問。這裡所說的“機器”,指的就是計算機,電子計算機,中子計算機、光子計算機或神經計算機等等。
機器能否象人類一樣能具有學習能力呢?1959年美國的塞繆爾(Samuel)設計了一個下棋程式,這個程式具有學習能力,它可以在不斷的對弈中改善自己的棋藝。4年後,這個程式戰勝了設計者本人。又過了3年,這個程式戰勝了美國一個保持8年之久的常勝不敗的冠軍。這個程式向人們展示了機器學習的能力,提出了許多令人深思的社會問題與哲學問題。
機器的能力是否能超過人的,很多持否定意見的人的一個主要論據是:機器是人造的,其效能和動作完全是由設計者規定的,因此無論如何其能力也不會超過設計者本人。這種意見對不具備學習能力的機器來說的確是對的,可是對具備學習能力的機器就值得考慮了,因為這種機器的能力在應用中不斷地提高,過一段時間之後,設計者本人也不知它的能力到了何種水平。
機器學習有下面幾種定義: “機器學習是一門人工智慧的科學,該領域的主要研究物件是人工智慧,特別是如何在經驗學習中改善具體演算法的效能”。 “機器學習是對能通過經驗自動改進的計算機演算法的研究”。 “機器學習是用資料或以往的經驗,以此優化計算機程式的效能標準。”一種經常引用的英文定義是:A computer program is said to learn from experience E with respectto some class of tasks T and performance measure P, if its performance at tasksin T, as measured by P, improves with experience E.
機器學習已經有了十分廣泛的應用,例如:資料探勘、計算機視覺、自然語言處理、生物特徵識別、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、DNA序列測序、語音和手寫識別、戰略遊戲和機器人運用。
也就是說,機器學習在大型資料庫方面的應用稱為資料探勘。在工程學中,稱為模式識別。

發展史

機器學習是人工智慧研究較為年輕的分支,它的發展過程大體上可分為4個時期。
第一階段是在20世紀50年代中葉到60年代中葉,屬於熱烈時期。
第二階段是在20世紀60年代中葉至70年代中葉,被稱為機器學習的冷靜時期。
第三階段是從20世紀70年代中葉至80年代中葉,稱為復興時期。
機器學習的最新階段始於1986年。
機器學習進入新階段的重要表現在下列諸方面:
(1) 機器學習已成為新的邊緣學科並在高校形成一門課程。它綜合應用心理學、生物學和神經生理學以及數學、自動化和電腦科學形成機器學習理論基礎。
(2) 結合各種學習方法,取長補短的多種形式的整合學習系統研究正在興起。特別是連線學習符號學習的耦合可以更好地解決連續性訊號處理中知識與技能的獲取與求精問題而受到重視。
(3) 機器學習與人工智慧各種基礎問題的統一性觀點正在形成。例如學習與問題求解結合進行、知識表達便於學習的觀點產生了通用智慧系統SOAR的組塊學習。類比學習與問題求解結合的基於案例方法已成為經驗學習的重要方向。
(4) 各種學習方法的應用範圍不斷擴大,一部分已形成商品。歸納學習的知識獲取工具已在診斷分型別專家系統中廣泛使用。連線學習在聲圖文識別中佔優勢。分析學習已用於設計綜合型專家系統。遺傳演算法與強化學習在工程控制中有較好的應用前景。與符號系統耦合的神經網路連線學習將在企業的智慧管理與智慧機器人運動規劃中發揮作用。
(5) 與機器學習有關的學術活動空前活躍。國際上除每年一次的機器學習研討會外,還有計算機學習理論會議以及遺傳演算法會議。

主要策略

學習是一項複雜的智慧活動,學習過程與推理過程是緊密相連的,按照學習中使用推理的多少,機器學習所採用的策略大體上可分為4種——機械學習、通過傳授學習、類比學習和通過事例學習。學習中所用的推理越多,系統的能力越強。

基本結構

表示學習系統的基本結構。環境向系統的學習部分提供某些資訊,學習部分利用這些資訊修改知識庫,以增進系統執行部分完成任務的效能,執行部分根據知識庫完成任務,同時把獲得的資訊反饋給學習部分。在具體的應用中,環境,知識庫和執行部分決定了具體的工作內容,學習部分所需要解決的問題完全由上述3部分確定。下面我們分別敘述這3部分對設計學習系統的影響。
影響學習系統設計的最重要的因素是環境向系統提供的資訊。或者更具體地說是資訊的質量。知識庫裡存放的是指導執行部分動作的一般原則,但環境向學習系統提供的資訊卻是各種各樣的。如果資訊的質量比較高,與一般原則的差別比較小,則學習部分比較容易處理。如果向學習系統提供的是雜亂無章的指導執行具體動作的具體資訊,則學習系統需要在獲得足夠資料之後,刪除不必要的細節,進行總結推廣,形成指導動作的一般原則,放入知識庫,這樣學習部分的任務就比較繁重,設計起來也較為困難。
因為學習系統獲得的資訊往往是不完全的,所以學習系統所進行的推理並不完全是可靠的,它總結出來的規則可能正確,也可能不正確。這要通過執行效果加以檢驗。正確的規則能使系統的效能提高,應予保留;不正確的規則應予修改或從資料庫中刪除。
知識庫是影響學習系統設計的第二個因素。知識的表示有多種形式,比如特徵向量、一階邏輯語句、產生式規則、語義網路和框架等等。這些表示方式各有其特點,在選擇表示方式時要兼顧以下4個方面:
(1)表達能力強。
(2)易於推理。
(3)容易修改知識庫。
(4)知識表示易於擴充套件。
對於知識庫最後需要說明的一個問題是學習系統不能在全然沒有任何知識的情況下憑空獲取知識,每一個學習系統都要求具有某些知識理解環境提供的資訊,分析比較,做出假設,檢驗並修改這些假設。因此,更確切地說,學習系統是對現有知識的擴充套件和改進。
執行部分是整個學習系統的核心,因為執行部分的動作就是學習部分力求改進的動作。同執行部分有關的問題有3個:複雜性、反饋和透明性。
程式碼示例

//在gcc-4.7.2下編譯通過。
//命令列:g++-Wall-ansi-O2test.cpp-otest
#include<iostream>
usingnamespacestd;
voidinput(int&oper,constboolmeth)
{
//meth為true則只判斷1,為false則判斷1或0
while(true)
{
cin>>oper;
if(meth&&oper==1)
break;
elseif(oper==0||oper==1)
break;
cout<<"輸入錯誤,請重新輸入。"<<endl;//判斷引數
cin.sync();//避免極端輸入導致死迴圈
cin.clear();
}
}
intmain(void)
{
cout<<"1+1=2嗎?那要看您怎麼教我了,不要驚訝我會學習的"<<endl;
intladd,radd,aprs,rcnt(0),wcnt(0);//定義輸入與結果,正確次數與錯誤次數
cout<<"開始學習……"<<endl;
for(inti(0);i!=10;++i)
{
cout<<"引數1(必須是1):"<<flush;//提示輸入引數
input(ladd,true);
cout<<"引數2(必須是1):"<<flush;
input(radd,true);
cout<<"結果:"<<(ladd+radd)<<endl;//輸出結果
cout<<"您對這滿意嗎(滿意輸入1,不滿意輸入0):"<<flush;//評價等級
input(aprs,false);
if(aprs)//判斷使用者評價
++rcnt;
else
++wcnt;
cout<<"正確次數:"<<rcnt<<"錯誤次數:"<<wcnt<<endl;//錯誤次數
}
if(rcnt>wcnt)//判斷學習結果
cout<<"主人告訴我1+1=2。"<<endl;
else
if(rcnt<wcnt)
cout<<"主人告訴我1+1!=2。"<<endl;
else
cout<<"我不明白主人是什麼意思。"<<endl;
intterm;//退出部分
cout<<"您對我的表現滿意嗎?滿意請輸入1不滿意請輸入0:"<<flush;
input(term,false);
if(term)
cout<<"謝謝我會繼續努力學習"<<endl;
else
cout<<"謝謝我會繼續努力學習D"<<endl;
//cin>>term;//在Windows上測試時啟用
return0;
}

本程式將根據您的評價判斷執行結果 “1+1=2”,實際上僅用了最簡單的 if else for語句。這就是一個機器學習的例子,通過環境影響來進行學習。通過本例我們不難看出,在人工錯誤的引導下,機器會給出錯誤的答案 1+1不等於2。所以此類學習方法,一定要在正確引導下實踐,否則會得到最壞的結果。學習完畢後,計算機會記錄本次學習結果,存入資料庫,下次執行相應任務時,再將結果調出執行。

分類

基於學習策略的分類

學習策略是指學習過程中系統所採用的推理策略。一個學習系統總是由學習和環境兩部分組成。由環境(如書本或教師)提供資訊,學習部分則實現資訊轉換,用能夠理解的形式記憶下來,並從中獲取有用的資訊。在學習過程中,學生(學習部分)使用的推理越少,他對教師(環境)的依賴就越大,教師的負擔也就越重。學習策略的分類標準就是根據學生實現資訊轉換所需的推理多少和難易程度來分類的,依從簡單到複雜,從少到多的次序分為以下六種基本型別:
1)機械學習 (Rote learning)
學習者無需任何推理或其它的知識轉換,直接吸取環境所提供的資訊。如塞繆爾的跳棋程式,紐厄爾和西蒙的LT系統。這類學習系統主要考慮的是如何索引存貯的知識並加以利用。系統的學習方法是直接通過事先編好、構造好的程式來學習,學習者不作任何工作,或者是通過直接接收既定的事實和資料進行學習,對輸入資訊不作任何的推理。
2)示教學習 (Learning frominstruction或Learning by being told)
學生從環境(教師或其它資訊源如教科書等)獲取資訊,把知識轉換成內部可使用的表示形式,並將新的知識和原有知識有機地結合為一體。所以要求學生有一定程度的推理能力,但環境仍要做大量的工作。教師以某種形式提出和組織知識,以使學生擁有的知識可以不斷地增加。這種學習方法和人類社會的學校教學方式相似,學習的任務就是建立一個系統,使它能接受教導和建議,並有效地存貯和應用學到的知識。不少專家系統在建立知識庫時使用這種方法去實現知識獲取。示教學習的一個典型應用例是FOO程式。
3)演繹學習 (Learning bydeduction)
學生所用的推理形式為演繹推理。推理從公理出發,經過邏輯變換推匯出結論。這種推理是”保真”變換和特化(specialization)的過程,使學生在推理過程中可以獲取有用的知識。這種學習方法包含巨集操作(macro-operation)學習、知識編輯和組塊(Chunking)技術。演繹推理的逆過程是歸納推理。
4)類比學習 (Learning byanalogy)
利用二個不同領域(源域、目標域)中的知識相似性,可以通過類比,從源域的知識(包括相似的特徵和其它性質)推匯出目標域的相應知識,從而實現學習。類比學習系統可以使一個已有的計算機應用系統轉變為適應於新的領域,來完成原先沒有設計的相類似的功能。
類比學習需要比上述三種學習方式更多的推理。它一般要求先從知識源(源域)中檢索出可用的知識,再將其轉換成新的形式,用到新的狀況(目標域)中去。類比學習在人類科學技術發展史上起著重要作用,許多科學發現就是通過類比得到的。例如著名的盧瑟福類比就是通過將原子結構(目標域)同太陽系(源域)作類比,揭示了原子結構的奧祕。
5)基於解釋的學習(Explanation-based learning, EBL)
學生根據教師提供的目標概念、該概念的一個例子、領域理論及可操作準則,首先構造一個解釋來說明為什該例子滿足目標概念,然後將解釋推廣為目標概念的一個滿足可操作準則的充分條件。EBL已被廣泛應用於知識庫求精和改善系統的效能。
著名的EBL系統有迪喬恩(G.DeJong)的GENESIS,米切爾(T.Mitchell)的LEXII和LEAP,以及明頓(S.Minton)等的PRODIGY。
6)歸納學習 (Learning frominduction)
歸納學習是由教師或環境提供某概念的一些例項或反例,讓學生通過歸納推理得出該概念的一般描述。這種學習的推理工作量遠多於示教學習和演繹學習,因為環境並不提供一般性概念描述(如公理)。從某種程度上說,歸納學習的推理量也比類比學習大,因為沒有一個類似的概念可以作為”源概念”加以取用。歸納學習是最基本的,發展也較為成熟的學習方法,在人工智慧領域中已經得到廣泛的研究和應用。

基於所獲取知識的表示形式分類

 
學習系統獲取的知識可能有:行為規則、物理物件的描述、問題求解策略、各種分類及其它用於任務實現的知識型別。
對於學習中獲取的知識,主要有以下一些表示形式:
1)代數表示式引數
學習的目標是調節一個固定函式形式的代數表示式引數或係數來達到一個理想的效能。
2)決策樹
用決策樹來劃分物體的類屬,樹中每一內部節點對應一個物體屬性,而每一邊對應於這些屬性的可選值,樹的葉節點則對應於物體的每個基本分類。
3)形式文法
在識別一個特定語言的學習中,通過對該語言的一系列表示式進行歸納,形成該語言的形式文法。
4)產生式規則
產生式規則表示為條件—動作對,已被極為廣泛地使用。學習系統中的學習行為主要是:生成、泛化、特化(Specialization)或合成產生式規則。
5)形式邏輯表示式
形式邏輯表示式的基本成分是命題、謂詞、變數、約束變數範圍的語句,及嵌入的邏輯表示式。
6)圖和網路
有的系統採用圖匹配和圖轉換方案來有效地比較和索引知識。
7)框架和模式(schema)
每個框架包含一組槽,用於描述事物(概念和個體)的各個方面。
8)計算機程式和其它的過程編碼
獲取這種形式的知識,目的在於取得一種能實現特定過程的能力,而不是為了推斷該過程的內部結構。
9)神經網路
這主要用在聯接學習中。學習所獲取的知識,最後歸納為一個神經網路。
10)多種表示形式的組合
有時一個學習系統中獲取的知識需要綜合應用上述幾種知識表示形式。
根據表示的精細程度,可將知識表示形式分為兩大類:泛化程度高的粗粒度符號表示、??泛化程度低的精粒度亞符號(sub-symbolic)表示。像決策樹、形式文法、產生式規則、形式邏輯表示式、框架和模式等屬於符號表示類;而代數表示式引數、圖和網路、神經網路等則屬亞符號表示類。

按應用領域分類

 
最主要的應用領域有:專家系統、認知模擬、規劃和問題求解、資料探勘、網路資訊服務、圖象識別、故障診斷、自然語言理解、機器人和博弈等領域。
從機器學習的執行部分所反映的任務型別上看,大部分的應用研究領域基本上集中於以下兩個範疇:分類和問題求解。
(1)分類任務要求系統依據已知的分類知識對輸入的未知模式(該模式的描述)作分析,以確定輸入模式的類屬。相應的學習目標就是學習用於分類的準則(如分類規則)。
(2)問題求解任務要求對於給定的目標狀態,??尋找一個將當前狀態轉換為目標狀態的動作序列;機器學習在這一領域的研究工作大部分集中於通過學習來獲取能提高問題求解效率的知識(如搜尋控制知識,啟發式知識等)。

綜合分類

綜合考慮各種學習方法出現的歷史淵源、知識表示、推理策略、結果評估的相似性、研究人員交流的相對集中性以及應用領域等諸因素。將機器學習方法區分為以下六類:
1)經驗性歸納學習 (empiricalinductive learning)
經驗性歸納學習採用一些資料密集的經驗方法(如版本空間法、ID3法,定律發現方法)對例子進行歸納學習。其例子和學習結果一般都採用屬性、謂詞、關係等符號表示。它相當於基於學習策略分類中的歸納學習,但扣除聯接學習、遺傳演算法、加強學習的部分。
2)分析學習(analyticlearning)
分析學習方法是從一個或少數幾個例項出發,運用領域知識進行分析。其主要特徵為:
•推理策略主要是演繹,而非歸納;
•使用過去的問題求解經驗(例項)指導新的問題求解,或產生能更有效地運用領域知識的搜尋控制規則。
分析學習的目標是改善系統的效能,而不是新的概念描述。分析學習包括應用解釋學習、演繹學習、多級結構組塊以及巨集操作學習等技術。
3)類比學習
它相當於基於學習策略分類中的類比學習。在這一型別的學習中比較引人注目的研究是通過與過去經歷的具體事例作類比來學習,稱為基於範例的學習(case_based learning),或簡稱範例學習。
4)遺傳演算法(geneticalgorithm)
遺傳演算法模擬生物繁殖的突變、交換和達爾文的自然選擇(在每一生態環境中適者生存)。它把問題可能的解編碼為一個向量,稱為個體,向量的每一個元素稱為基因,並利用目標函式(相應於自然選擇標準)對群體(個體的集合)中的每一個個體進行評價,根據評價值(適應度)對個體進行選擇、交換、變異等遺傳操作,從而得到新的群體。遺傳演算法適用於非常複雜和困難的環境,比如,帶有大量噪聲和無關資料、事物不斷更新、問題目標不能明顯和精確地定義,以及通過很長的執行過程才能確定當前行為的價值等。同神經網路一樣,遺傳演算法的研究已經發展為人工智慧的一個獨立分支,其代表人物為霍勒德(J.H.Holland)。
5)聯接學習
典型的聯接模型實現為人工神經網路,其由稱為神經元的一些簡單計算單元以及單元間的加權聯接組成。
6)增強學習(reinforcementlearning)
增強學習的特點是通過與環境的試探性(trial and error)互動來確定和優化動作的選擇,以實現所謂的序列決策任務。在這種任務中,學習機制通過選擇並執行動作,導致系統狀態的變化,並有可能得到某種強化訊號(立即回報),從而實現與環境的互動。強化訊號就是對系統行為的一種標量化的獎懲。系統學習的目標是尋找一個合適的動作選擇策略,即在任一給定的狀態下選擇哪種動作的方法,使產生的動作序列可獲得某種最優的結果(如累計立即回報最大)。
在綜合分類中,經驗歸納學習、遺傳演算法、聯接學習和增強學習均屬於歸納學習,其中經驗歸納學習採用符號表示方式,而遺傳演算法、聯接學習和加強學習則採用亞符號表示方式;分析學習屬於演繹學習。
實際上,類比策略可看成是歸納和演繹策略的綜合。因而最基本的學習策略只有歸納和演繹。
從學習內容的角度看,採用歸納策略的學習由於是對輸入進行歸納,所學習的知識顯然超過原有系統知識庫所能蘊涵的範圍,所學結果改變了系統的知識演繹閉包,因而這種型別的學習又可稱為知識級學習;而採用演繹策略的學習儘管所學的知識能提高系統的效率,但仍能被原有系統的知識庫所蘊涵,即所學的知識未能改變系統的演繹閉包,因而這種型別的學習又被稱為符號級學習。

學習形式分類

1)監督學習(supervisedlearning)
監督學習,即在機械學習過程中提供對錯指示。一般實在是資料組中包含最終結果(0,1)。通過演算法讓機器自我減少誤差。這一類學習主要應用於分類和預測 (regression & classify)。監督學習從給定的訓練資料集中學習出一個函式,當新的資料到來時,可以根據這個函式預測結果。監督學習的訓練集要求是包括輸入和輸出,也可以說是特徵和目標。訓練集中的目標是由人標註的。常見的監督學習演算法包括迴歸分析和統計分類。
2)非監督學習(unsupervisedlearning)
非監督學習又稱歸納性學習(clustering)利用K方式(Kmeans),建立中心(centriole),通過迴圈和遞減運算(iteration&descent)來減小誤差,達到分類的目的。

研究領域

機器學習領域的研究工作主要圍繞以下三個方面進行:
(1)面向任務的研究
研究和分析改進一組預定任務的執行效能的學習系統。
(2)認知模型
研究人類學習過程並進行計算機模擬。
(3)理論分析
從理論上探索各種可能的學習方法和獨立於應用領域的演算法
機器學習是繼專家系統之後人工智慧應用的又一重要研究領域,也是人工智慧和神經計算的核心研究課題之一。現有的計算機系統和人工智慧系統沒有什麼學習能力,至多也只有非常有限的學習能力,因而不能滿足科技和生產提出的新要求。對機器學習的討論和機器學習研究的進展,必將促使人工智慧和整個科學技術的進一步發展