人工智能需要多方面的知識和能力。
從機器學習的角度來講,我們需要了解監督學習,半監督學習,無監督學習以及增強學習等學習方法。
從計算機視覺的角度來講,根據加州大學伯克利分校的著名學者Jitendra Malik的觀點,我們需要解決計算機視覺的三個基本問題("3R"):重建(Reconstruction),識別(Recognition),以及再組織(Reorganization)。
作為"3R"中的重要一環,識別(Recognition)是一個非常重要而且相對容易上手的視覺問題。作為識別中最重要的基本問題,人臉識別(Face Recognition)一直以來都占據了大多數研究者的精力。
在這一系列教程里,我會詳細介紹一個人臉識別算法,基于這個算法,搭建人臉識別系統就基本完成了一大半,剩下的都是軟件方面的事情了。
為了使得教程盡可能簡單,我選用了人臉識別 領域里一個非常出名并且簡單的方法,并且盡量不介紹與本方法無關的知識,節省小孩的學習成本。當然,我并不是說與本方法無關的知識就是無用的。我只是希望大家經過盡可能少的學習就可以基本搭建起一個人臉識別算法。
這一個教程分3部分:
1. 第一部分是數學基礎部分,我介紹函數的概念,函數如何求導,函數如何得到最小值;矩陣的基礎知識,求導等等。
2. 第二部分是機器學習部分,我介紹“最小二乘回歸”這個非常簡單的機器學習模型,還會給出一些例子讓大家深入理解。
3. 第三部分是人臉識別部分,我會介紹我導師在2011年用“最小二乘回歸”這個模型設計出的人臉識別算法。該算法發表在計算機視覺國際頂級會議ICCV上,目前引用已經超過一千次。
本次教程介紹數學基礎。我盡量用淺顯易懂的語言讓孩子們明白背后的原理。
函數
函數在數學里就是一個對應關系。
比如孩子們在明年的今天,歲數會增加1,那么這用函數來表示就是“明年的歲數=今年的歲數+1”,這已經是函數了,不管你如何鄙視這個函數的簡單性。
那我們來看一個稍微復雜點的例子吧,我昨天特地去深圳看了電影《戰狼2》,里面出現的祖國的航母非常振奮人心,如果航母以變化的速度航行,那么航母的速度與時間之間有一個對應關系。
如果航母每小時增加或者減少的速度未定,我們可以用“航母的加速度”這個未知量來表示。就是說,航母下一個小時的速度=上一個小時的速度+航母的加速度。
到這里,我們就可以理解函數的導數這個概念,就是對函數求導之后得到的函數。函數導數表示的是函數變化的規律,其本身也是一個函數,表示的是航母加速度與時間之間的對應關系。
大家想想,航母在什么時候速度達到最大值?是不是當航母的加速度為0的時候?你真是太聰明了。
如果嚴格地來說,如果航母的加速度變成0,那么有兩種情況,一種是航母的速度達到最小值,另一種是航母的速度達到最大值。那到底該如何判斷呢?為了知道航母在加速度為0時的速度是最大值還是最小值,我們需要知道加速度的變化情況:如果加速度是由大于0變為0之后再小于0,那么在加速度等于0之前,航母一直在加速,在加速度等于0之后,航母一直在減速,在這種情況下的加速度等于0時,航母的速度達到最大值。反之,如果加速度是由小于0變為0再大于0,那么在加速度等于0之前,航母一直在減速,在加速度等于0之后,航母一直在加速,在這種情況下的加速度等于0時,航母的速度達到最小值。我們可以從下圖中得到直觀的理解:
總之,為了知道航母的速度在加速度等于0的時候到底是最大值還是最小值,我們需要對加速度這個函數再求一次導數,得到加速度的變化規律函數,這個函數反應的是航母的加速度的變化值與時間之間的關系。
為什么要學習函數,函數的導數?因為在很多工程問題(包括計算機,生物,金融)里,優化(optimization)是一個非常有用的工具,在優化中,我們需要時刻了解目標函數是什么,如何優化目標函數即如何使得目標函數最大化或者最小化。當然,在本系列教程里,我也會使用到最基本的優化技巧。
矩陣
函數是一種對應關系,可以兩個變量之間的對應關系,也可以是兩組變量之間的對應關系。那么每組變量可以有很多表達形式,比如向量(vector),矩陣(matrix),張量(tensor)等等。
向量其實就是把很多獨立的變量拼起來,組成一個列。如:
在上圖中,A是一個向量,i,j,k是三個互相垂直方向上的長度為1的向量,也叫單位向量。A在i,j,k三個方向上的長度分別為a,b,c,所以A向量是(a,b,c)。一般要豎著寫才符合國際規范。上面的向量A是三維的,其實向量可以不止3維,可以是任意維度的,比如B=(a,b,c,d,e,...)都是可以的。
矩陣其實就是把很多相同維度的向量拼起來,組成一個矩陣,一般一列(一豎條)就是一個向量。鑒于大陸和臺灣在行和列上面有分歧(具體見:兩岸線性代數用詞參照),我在這里介紹的列是英文里的column,就是豎條的一組向量,而行是英文里的row,就是橫條的一組向量。
雖然很多圖片是張量(彩色圖片有寬,高,RGB通道)或矩陣(灰度圖片有寬,高),但是我們一般采用灰度圖片,而且把灰度圖片拉伸為一個豎直方向上的向量,即一列。
如果函數表達的是矩陣與數值之間的關系,那么函數對矩陣的導數可以用函數對矩陣中的每個變量求導的方式得到。
具體的,我建議大家可以閱讀臺灣周老師的博客線代啟示錄。
如果英文比較好,可以閱讀MATH is FUN這個博客上的文章
更復雜的概念和運算方式不要求能理解,這里也不再詳述。
下次教程,我會介紹“最小二乘回歸”這個非常簡單的機器學習模型,還會給出一些例子讓大家深入理解。