機器學習是什麼?

機器學習(ML)是一門多領域交叉學科,涉及概率論,統計學,逼近論,凸分析,算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行爲,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。


機器學習是人工智能的核心,是使計算機具有智能的根本途徑,其應用遍人工智能的各個領域,他是主要使用歸納,綜合而不是演繹。


發展史:


機器學習是人工智能研究較爲年輕的分支,它的發展過程大體上可分爲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。
  所以此類學習方法,一定要在正確引導下實踐,否則會得到最壞的結果。

  學習完畢後,計算機會記錄本次學習結果,存入數據庫,下次執行相應任務時,再將結果調出執行。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章