人工智慧學習筆記-基本概念
前段時間看了不少關於人工智慧方面的書籍部落格和論壇,深深覺得了人工智慧是個大坑,裡面有太多的知識點和學科,要想深入絕非易事,於是萌發了自己寫一些部落格把自己的學習歷程和一些知識點筆記都記錄下來的想法,給自己一個總結收穫,同時監督自己的動力,這樣咱也算是“有監督學習”了:)
這裡提到了“有監督學習”,在剛剛開始學習人工智慧/機器學習的時候經常看到,對於這個概念從一無所知到懵懵懂懂到略有了解也花費了一點時間,對於老鳥來說這些概念都太基本了因此沒有過多的篇幅來介紹,但對於新手來說,剛剛接觸一個新的領域的時候往往看到的都是一個個“高大上”的名詞,這種名詞多了,學習曲線就陡峭了,因此我們還是從基本的概念開始整理整理吧。因此這篇筆記就是一個基本概念的梳理,若有不恰的地方望不吝賜教。
人工智慧,機器學習,神經網路,深度學習的關係
剛剛接觸人工智慧的內容時,經常性的會看到人工智慧,機器學習,深度學習還有神經網路的不同的術語,一個個都很高冷,以致於傻傻分不清到底它們之間是什麼樣的關係,很多時候都認為是一個東西的不同表達而已,看了一些具體的介紹後才漸漸有了一個大體的模型。
此圖是筆者基於自己的理解而歸納的一個簡化的分類圖,人工智慧(Artificial Intelligence)是一個大的概念,它是機器學習的父類。
此處我將機器學習之外的人工智慧歸納成了“邏輯/演算法程式設計”,也就是通過程式設計將人類所知的知識和邏輯告訴機器,從而藉助機器的高速計算和海量儲存等能力實現一些人類才能做的“弱智慧”工作,我理解上個世紀的深藍計算機應該就是屬於這一類的吧,就是將國際象棋中所有可能的結果都通過預先編好的程式計算出來從而選擇最佳的下法(窮舉法)。從程式的實現上來說恐怕就是無數的if…else…吧。
而另一類就是基於資料的自我學習,即機器學習,把大量的資料告訴機器由機器自己去分析這些資料從而總結得出某種規律/邏輯,然後利用這種邏輯來處理新的資料。
毫無疑問,機器學習是人工智慧中最為火熱和最有前途的方向,讓人去“學習”那麼複雜的邏輯來告訴機器怎麼做還不如讓機器自己來學習呢,畢竟人都是懶的嘛,而“懶”就是人類進步的動力!
機器學習
機器學習是人工智慧最重要的內容,先來看看它的一個定義(當然有很多不同的定義):
“Machine learning is the idea that there are generic algorithms that can tell you something interesting about a set of data without you having to write any custom code specific to the problem. Instead of writing code, you feed data to the generic algorithm
這裡面有幾個重要的關鍵詞,就是你不用寫專門的業務邏輯程式碼而是通過輸入大量的資料給機器,由機器通過一個通用的機制來建立它自己的業務邏輯,也就是機器“自我學習”了業務的邏輯,當然這種學習後的邏輯可以用來處理新的資料。這和人類的學習過程有些類似,如下圖:
當然這並不能說明機器學習和人類的學習是一樣的,舉個簡單的例子,機器學習是不斷的訓練過程,其模型是在連續的優化調整中,隨著訓練資料越多其模型越準確,但是人類的學習不僅僅是一個連續學習過程,還有一種跳躍式學習,也就是常說的”頓悟“,這點是機器學習目前所沒有的。
同時我們也可以看到,機器學習是通過大量的資料來訓練得到模型的,因此其模型考慮的是相關性邏輯,而不是因果性邏輯,這和大資料分析的概念是一致的。
ok,總結起來說,機器學習就是”利用已有資料,得出某種模型,並利用此模型預測未來的方法“。
從前圖可見,機器學習主要包括了兩種學習方法,有監督學習和無監督學習,具體是代表什麼含義呢?
有監督學習和無監督學習
這兩個概念也是剛剛接觸機器學習經常碰到的概念,通俗/簡單點來說,所謂有監督學習就是訓練用歷史資料是既有問題又有答案,而無監督學習就是訓練用歷史資料是隻有問題沒有答案。
正式的說法一般是把答案稱之為標籤label
還有一種介於兩者之間的混合學習方法,稱為半監督學習
在無監督學習中,主要是發現數據中未知的結構或者是趨勢。雖然原資料不含任何的標籤,但我們希望可以對資料進行整合(分組或者聚類),或是簡化資料(降維、移除不必要的變數或者檢測異常值)。因此無監督演算法主要的分類包含:
- 聚類演算法 (代表:K均值聚類,系統聚類)
- 降維演算法 (代表:主成份分析PCA,線性判斷分析LDA)
有監督學習,可以根據預測變數的型別再細分。如果預測變數是連續的,那這就屬於迴歸問題。而如果預測變數是獨立類別(定性或是定類的離散值),那這就屬於分類問題了。因此有監督學習主要的分類包含:
- 迴歸演算法 (線性迴歸,最小二乘迴歸,LOESS區域性迴歸,神經網路,深度學習)
- 分類演算法(決策樹,支援向量機,貝葉斯,K-近鄰演算法,邏輯迴歸,隨機森林)
這裡面提到了很多的演算法,目前還不需要一一去掌握,相信在今後的學習中會經常看到,先混個眼熟:)
這些所有的演算法中,目前最熱的恐怕是深度學習了,但要了解深度學習必須先了解它的前任(前生,父類)。
神經網路
關於神經網路的介紹在網上有很多很多了,有不少大牛的介紹和課程,本人主要參考/推薦如下:
神經網路淺講:從神經元到深度學習
用平常語言介紹神經網路
因此不再贅述細節,做了一個不完全的總結圖:
好了,大體的一個機器學習的最最基本的概念總結完畢,其實學習這些基本概念還是比較簡單方便的,畢竟我們有強大的搜尋引擎,只要輸入“機器學習”就能得到海量的知識讓我們去學習,不過對於剛開始的初學者來說,先淺嘗即止即可,有了一個框架性的瞭解,為後續的深入學習做準備。
準備接下來做一些具體的程式碼學習了,從一些基本的機器學習的演算法做一些hello world :)