機器學習算法
什么是程序(Program)
計算機程序,是指為了得到某種結果而可以由計算機(等具有信息處理能力的裝置)執行的代碼化指令序列(或者可以被自動轉換成代碼化指令序列的符號化指令序列或者符號化語句序列)。
通俗講,計算機給人干活,但它不是人,甚至不如狗懂人的需要(《小羊肖恩》里的狗是多么聰明可愛又忠誠於主人)。那怎么讓它干活呢,那就需要程序員用某種編程語言來寫程序,編程語言就是計算機能理解的語言,計算機可以執行這些程序(指令),最終完成任務。
下邊的C++程序是完成n的階乘:
int n = std::atoi(argv[1]); //求n的階乘 double result = 1.0; for (int i = 2; i <= n; i++) { result *= i; } std::cout << n << "的階乘是:" << result << std::endl;
什么是算法(Algorithm)
算法是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示一個或者多個操作。
舉個簡單的例子,並且大家生活中都能用得上的。現在做個小游戲,A在紙上隨機寫了一個1到100間的整數,B去猜,猜對的話游戲結束,猜錯的話A會告訴B猜的小了還是大了。那么B會怎么做呢,第一次肯定去猜50,每次都猜中間數。為什么呢?因為這樣最壞情況下(log2100log2100)六七次就能猜到。
這就是二分查找,生活中可能就會用得到,而在軟件開發中也經常會用得到。
再來看一個稍微復雜一點點的算法,【快速排序】,面試中考的頻率非常高非常高,甚至可以說是必考。
什么是機器學習算法(Machine Learning)
機器學習的定義
《機器學習》書中的定義:
關於某類任務 T 和性能度量P,如果一個計算機程序能在T上以P衡量的性能隨着經驗E而自我完善,那么我們稱這個計算機程序在從經驗E中學習。
比如AlphaGo:
- 任務 T :下棋
- 性能標准 P :擊敗對手的百分比
- 訓練經驗:和自己對弈或者比賽經驗。
再比如自動駕駛: - 任務T : 通過視頻傳感器在高速公路上行駛
- 性能標准P:平均無差錯行駛里程
- 訓練經驗E:注視人類駕駛時錄制的一系列圖像和駕駛指令。
百度百科的定義:
機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、算法復雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的性能。
它是人工智能的核心,是使計算機具有智能的根本途徑,其應用遍及人工智能的各個領域,它主要使用歸納、綜合而不是演繹。
機器學習的主要任務
監督學習:
(1)分類:將實例數據划分到合適的分類中。
KNN(k-近鄰算法)、決策樹、朴素貝葉斯、Logistic回歸、SVM(支持向量積)。
(2)回歸:預測數值型數據。
無監督學習:
(1)聚類:將數據集合分成由類似的對象組成的多個類的過程。
K-MEANS(K均值聚類)
神經網絡(Neural Network)與深度學習(Deep Learning)
生物學啟示
人工神經網絡ANN的研究一定程度上受到了生物學的啟發,生物的學習系統由相互連接的神經元(neuron)組成的異常復雜的網格。而人工神經網絡由一系列簡單的單元相互密集連接構成的,其中每一個單元有一定數量的實值輸入,並產生單一的實數值輸出。
據估計人類的大腦是由大約10111011次方個神經元相互連接組成的密集網絡,平均每個神經元與其他104104個神經元相連。神經元的活性通常被通向其他神經元的連接激活或抑制。
生物的神經元:
人工神經元(感知機):
多層感知機:
神經網絡表示
1993年的ALVINN系統是ANN學習的一個典型實例,這個系統使用一個學習到的ANN以正常的速度在高速公路上駕駛汽車。ANN的輸入是一個30*32像素的網格,像素的亮度來自一個安裝在車輛上的前向攝像機。ANN的輸出是車輛行駛的方向。
淺層學習
20世紀80年代末期,用於人工神經網絡的反向傳播算法(也叫Back Propagation算法或者BP算法)的發明,給機器學習帶來了希望,掀起了基於統計模型的機器學習熱潮。這個熱潮一直持續到今天。人們發現,利用BP算法可以讓一個人工神經網絡模型從大量訓練樣本中學習統計規律,從而對未知事件做預測。這種基於統計的機器學習方法比起過去基於人工規則的系統,在很多方面顯出優越性。這個時候的人工神經網絡,雖也被稱作多層感知機(Multi-layer Perceptron),但實際是種只含有一層隱層節點的淺層模型。
20世紀90年代,各種各樣的淺層機器學習模型相繼被提出,例如支撐向量機(SVM,Support Vector Machines)、 Boosting、最大熵方法(如LR,Logistic Regression)等。這些模型的結構基本上可以看成帶有一層隱層節點(如SVM、Boosting),或沒有隱層節點(如LR)。這些模型無論是在理論分析還是應用中都獲得了巨大的成功。相比之下,由於理論分析的難度大,訓練方法又需要很多經驗和技巧,這個時期淺層人工神經網絡反而相對沉寂。
深層學習
深度學習的實質,是通過構建具有很多隱層的機器學習模型和海量的訓練數據,來學習更有用的特征,從而最終提升分類或預測的准確性。因此,“深度模型”是手段,“特征學習”是目的。區別於傳統的淺層學習,深度學習的不同在於:1)強調了模型結構的深度,通常有5層、6層,甚至10多層的隱層節點;2)明確突出了特征學習的重要性,也就是說,通過逐層特征變換,將樣本在原空間的特征表示變換到一個新特征空間,從而使分類或預測更加容易。與人工規則構造特征的方法相比,利用大數據來學習特征,更能夠刻畫數據的豐富內在信息。
Deep learning本身算是machine learning的一個分支,簡單可以理解為neural network的發展。
一種典型的用來識別數字的卷積網絡是LeNet-5。當年美國大多數銀行就是用它來識別支票上面的手寫數字的。能夠達到這種商用的地步,它的准確性可想而知。
LeNet-5的網絡結構如下:
與機器學習相關聯的概念
數據挖掘(Data Mining)
數據挖掘=機器學習+數據庫。數據挖掘是在大型數據存儲庫中,自動地發現有用信息的過程。
自然語言處理 (Natural Language Process)
自然語言處理=文本處理+機器學習。自然語言處理技術主要是讓機器理解人類的語言的一門領域。在自然語言處理技術中,大量使用了編譯原理相關的技術,例如詞法分析,語法分析等等,除此之外,在理解這個層面,則使用了語義理解,機器學習等技術。作為唯一由人類自身創造的符號,自然語言處理一直是機器學習界不斷研究的方向。按照百度機器學習專家余凱的說法“聽與看,說白了就是阿貓和阿狗都會的,而只有語言才是人類獨有的”。如何利用機器學習技術進行自然語言的的深度理解,一直是工業和學術界關注的焦點。
模式識別(Pattern Recognition)
模式識別=機器學習。兩者的主要區別在於前者是從工業界發展起來的概念,后者則主要源自計算機學科。
統計學習(Statistical Learning)
統計學習近似等於機器學習。統計學習是個與機器學習高度重疊的學科。因為機器學習中的大多數方法來自統計學,甚至可以認為,統計學的發展促進機器學習的繁榮昌盛。例如著名的支持向量機算法,就是源自統計學科。但是在某種程度上兩者是有分別的,這個分別在於:統計學習者重點關注的是統計模型的發展與優化,偏數學,而機器學習者更關注的是能夠解決問題,偏實踐,因此機器學習研究者會重點研究學習算法在計算機上執行的效率與准確性的提升。
計算機視覺(Computer Vision)
計算機視覺=圖像處理+機器學習。圖像處理技術用於將圖像處理為適合進入機器學習模型中的輸入,機器學習則負責從圖像中識別出相關的模式。計算機視覺相關的應用非常的多,例如百度識圖、手寫字符識別、車牌識別等等應用。這個領域是應用前景非常火熱的,同時也是研究的熱門方向。隨着機器學習的新領域深度學習的發展,大大促進了計算機圖像識別的效果,因此未來計算機視覺界的發展前景不可估量。
語音識別(Speech Recognition)
語音識別=語音處理+機器學習。語音識別就是音頻處理技術與機器學習的結合。語音識別技術一般不會單獨使用,一般會結合自然語言處理的相關技術。目前的相關應用有蘋果的語音助手siri等。
計算機圖形學、數字圖像處理、計算機視覺
- 計算機視覺( Computer Vision,簡稱 CV),是讓計算機“看懂”人類看到的世界,輸入是圖像,輸出是圖像中的關鍵信息;
圖片 -> dog or cat?
圖片 -> [xyz xyz xyz ... xyz] - 計算機圖形學(Computer Graphics,簡稱 CG),是讓計算機“描述”人類看到的世界,輸入是三維模型和場景描述,輸出是渲染圖像;
[xyz xyz xyz ... xyz] -> 圖片 - 數字圖像處理(Digital Image Processing,簡稱 DIP),輸入的是圖像,輸出的也是圖像。Photoshop 中對一副圖像應用濾鏡就是典型的一種圖像處理。常見操作有模糊、灰度化、增強對比度等。
圖片 -> ps后的圖片
再說聯系
- CG 中也會用到 DIP,現今的三維游戲為了增加表現力都會疊加全屏的后期特效,原理就是 DIP,只是將計算量放在了顯卡端。通常的做法是繪制一個全屏的矩形,在 Pixel Shader 中進行圖像處理。
- CV 大量依賴 DIP 來打雜活,比如對需要識別的照片進行預處理,增強對比度、去除噪點。
- 最后還要提到今年的熱點——增強現實(AR),它既需要 CG,又需要 CV,當然也不會漏掉 DIP。它用 DIP 進行預處理,用 CV 進行跟蹤物體的識別與姿態獲取,用 CG 進行虛擬三維物體的疊加。
面試——把自己嫁出去
面試官面的是什么
我個人的經驗一次正規的面試包括幾個部分:
- 基礎能力:數據結構與算法通過做一些智商題、ACM,一般筆試題會從leetcode找。基礎能力除了基本的數據結構與算法外,經常還會考察求職者對一門編程語言的掌握程度。
- 工作經歷:在哪些公司工作過,做過哪些項目,能不能把做過的東西很清晰的很系統的講出來。(注:哪怕不是自己做過的東西,求職者能很好的講出來,面試官也會給加分)
- 溝通能力:性格是否比較好,是否能愉快的溝通,是不是能融入團隊。其實有時就是看顏值,通俗說能否看對眼。哪怕能力不怎么好,但是面試官司覺得人不錯,工作能干得了,值得培養也沒問題。
求職者要的是什么
- 錢
- 成長
- 開心
面試要注意什么
- 技術能力是核心
- 謙虛謹慎誠實是打動面試官的重要因素
- 溝通也很重要
- 適當美化自己的經歷,但不吹牛,也不要過分謙虛
參考資料:
Deep Learning(深度學習)學習筆記整理系列之(三)
《機器學習》Tom M.Mitchell
《機器學習實踐》Peter Harrington
《數學之美》吳軍
《統計學習方法》李航
《計算機視覺、圖形學和圖像處理,三者有什么聯系?》張靜
《從機器學習談起》 計算機的潛意識
《計算機視覺與計算機圖形學的對立統一》卜居