今天是新專欄《AI白身境》的第九篇,所謂白身,就是什麼都不會,還沒有進入角色。
咱們這個系列接近尾聲了,今天來講一個非常重要的話題,也是很多的小夥伴們關心的問題。要從事AI行業,吃這碗飯,至少應該先儲備一些什麼樣的數學基礎再開始。
下面從線性代數,機率論與統計學,微積分和最優化3個方向說起,配合簡單案例,希望給大家做一個拋磚引玉,看完之後能夠真正花時間去系統性補全各個方向的知識,筆者也還在努力。
作者 | 言有三
編輯 | 言有三
01 線性代數
1.1 向量
什麼是數學?顧名思義,一門研究「數」的學問。學術點說,線性代數是一個數學分支,來源於希臘語μαθηματικός(mathematikós),意思是「學問的基礎」。
數學不好,就不要談學問了,只能算知識(自己瞎加的,歡迎噴)。
按照維基百科定義:數學是利用符號語言研究數量、結構、變化以及空間等概念的一門學科,從某種角度看屬於形式科學的一種。所以一看見數學,我們就想起符號,方程式,簡單點比如這個。
複雜的比如這個
代數是數學的一個分支,它的研究對象是向量,涵蓋線、面和子空間,起源於對二維和三維直角坐標系的研究。
我們都知道歐式空間,任何一個向量(x,y,z)可以由三個方向的基組成
(x,y,z) = x(1,0,0)+y(0,1,0)+z(0,0,1)
它的維度是3,拓展至n就成為n維空間,這N維,相互是獨立的,也就是任何一個都不能由其他的幾維生成,這叫線性無關,很重要。
2.2 線性回歸問題
用向量表示問題有什麼用呢?
假如基友今天約你去吃飯,沒有說好誰買單,而根據之前的慣例你們從來不AA,今天你剛交了房租,沒錢了,那麼該不該去呢?我們可以先回歸一下他主動買單的機率,先看一下和哪些變量有關,把它串成向量。
X=(剛發工資,剛交女朋友,剛分手,要離開北京,有事要我幫忙,無聊了,過生日,就是想請我吃飯,炒比特幣賺了,炒比特幣虧了,想蹭飯吃),共11維,結果用Y表示
Y=1,表示朋友付款,Y=-1,表示不付款
好,我們再來分析下:
和Y=1正相關的維度: 要離開北京,有事要我幫忙,過生日,就是想請我吃飯,炒比特幣賺了
和Y=-1正相關的維度:想蹭飯吃
暫時關係不明朗的維度:剛發工資,剛交女朋友,剛分手,無聊了,炒比特幣虧了
好,拿出紙筆,今天是2019年1月22日,據我所知,這貨就是一個典型的死宅摩羯工作狂
剛發工資=0,時候沒到
剛交女朋友=0,不可能
剛分手=0,沒得選
要離開北京=0,不像
有事要我幫忙=0,我能幫上什麼忙
無聊了=1,估計是
過生日=0,不對
就是想請我吃飯=0,不可能
炒比特幣賺了=?,不知道
炒比特幣虧了=?,不知道
想蹭飯吃=?,不知道
這下麻煩了,有這麼多選項未知,假如我們用一個權重矩陣來分析,即y=WX,W是行向量,X是列向量
X1到xn就是前面那些維度。現在等於
假如我們不學習參數,令所有的wi與y=1正相關的係數為1,與y=-1正相關為-1,關係不明的隨機置為0.001和-0.001,那麼就有下面的式子
還是3個未知數,問題並沒有得到解決。
不過我們還是可以得到一些東西:
- 我們的模型還沒有得到訓練,現在的權重是手工設定的,這是不合理的,應該先抓比如1萬個樣本來填一下報告,把X和Y都填上。當然,要保證準確性,不能在報告中填了說自己會請客(y=1),實際吃起來就呵呵呵。這樣就是標籤打錯了,肯定學不到東西。
- 從X來看,這個朋友還是可以的,與y=1正相關的變量更多,但是,未必!因為現在X的維度太低了,比如這個朋友是不是本來就是小氣鬼或者本來就喜歡請人吃飯,比如是來我家附近吃還是他家附近吃,比如他吃飯帶不帶女孩等等。
- 上面提到了一些隨機性,比如權重W的隨機性,0.001或者-0.001,X本身的噪聲α,β,γ。
是不是很複雜,現實問題本來就很複雜嘛。不過如果你沒有經濟問題,那就可以簡單點,不管這個模型,只問你今天想不想吃飯,是就去,不想吃就不去。
線性代數就說這麼多,後面想好好學,一定要好好修行線性代數和矩陣分析,咱們以後再說,書單如下。
以下是一些關鍵詞,如果都熟練了解了第一階段也就OK了。
標量,向量,特徵向量,張量,點積,叉積,線性回歸,矩陣,秩,線性無關與線性相關,範數, 奇異值分解,行列式,主成分分析,歐氏空間,希爾伯特空間。
02 機率論與統計學
2.1 機率論
機率大家都知道吧,研究的是隨機性事件。大家應該都曾經飽受貝葉斯公式的折磨。
機率論中有以下幾個概念,還是以之前的吃飯問題,朋友主動叫我吃飯為事件X,也叫觀測數據,他請客了事件為Y,有以下幾個機率,其中P(A|B)是指在事件B發生的情況下事件A發生的機率。
(1) X的先驗機率,即朋友主動喊我吃飯的機率p(X),與Y無關。
(2) Y的先驗機率p(Y):即單純的統計以往所有吃飯時朋友請客的機率p(Y),與X無關。
(3) 後驗機率p(Y|X):就是給出觀測數據X所得到的條件機率,即朋友喊我吃飯,並且會請客的機率。
anyway,飯我們吃完了,現在回家,結果未來的女朋友打來電話問去幹嘛了,氣氛有點嚴肅,原來是吹牛皮過程中沒有看微信漏掉了很多信息。只好說去應酬了,妹子不滿意問你還有錢吃飯,誰請客。我說不吃白不吃啊,朋友請。
妹子又問,誰主動提出吃飯的!
正好,那不就是要算後驗機率p(X|Y)嗎?也就是飯吃了,誰提議的。
於是故作聰明讓妹子猜,還給了一個提示可以用貝葉斯公式,並且已知p(Y)=0.2,p(X)=0.8,再加上上面算出來的p(Y|X)
好了又回到了這個問題,3個未知變量。
不過沒關係,我們可以先用它們的數學期望來替換掉,數學期望就是一個平均統計。
這說明什麼?說明這一次吃飯,是朋友先動的嘴的機率p(X|Y)=0.002,那麼今天99.8%是自己跑出去蹭吃吹牛皮了。
接下來的問題就是搓衣板是跪還是不跪,貝葉斯公式解決不了。
事情結束後,要想好好搞下去,肯定是要學好機率論和統計學習的。
同樣,有一些關鍵詞要掌握。
不確定性,隨機變量,大數定律,聯合分布,邊緣分布,條件機率,貝葉斯公式,機率密度,墒與交叉墒,期望,最大似然估計,正態分布/高斯分布,伯努利分布,泊松分布,機率論與統計推斷,馬爾可夫鏈,判別模型,生成模型。
有意思的是:機率論還有一些東西是有點違背認知的,比如生日悖論。
一個班上如果有23個人,那麼至少有兩個人的生日是在同一天的機率要大於50%,對於60或者更多的人,這種機率要大於99%。大家都是上過學的少年,你在班上遇到過同一天生日的嗎?
2.2 傳統機器學習算法基礎
傳統機器學習算法本來不應該放在這裡說,但是因為其中有一部分算法用到了機率論,所以也提一句。
有很多人在知乎上問,搞深度學習還需要傳統機器學習基礎嗎?當然要!且不說這個傳統機器學習算法仍然在大量使用,光是因為它經典,就值得學習一下,依舊推薦一本書。
機器學習完成的任務就是一個模式識別任務,機器學習和模式識別這兩個概念實際上等價,只是歷史原因說法不同。
一個模式識別任務就是類似於識別這個圖是不是貓,這封郵件是不是垃圾郵件,這個人臉是不是你本人之類的高級的任務。
傳統的機器學習算法有兩大模型,一個是判別模型,一個是生成模型,我們以前講過,大家可以去看。
【技術綜述】有三說GANs(上)
傳統機器學習算法就不展開了,太多。
03 微積分與最優化
3.1 導數
機器學習就是要學出一個模型,得到參數嘛,本質上就是優化一個數學方程,而且通常是離散的問題,這個時候大殺器就是微積分了。
微積分是什麼,根據維基百科:
微積分學(Calculus,拉丁語意為計數用的小石頭)曾經指無窮小的計算,就是一門研究變化的學問,更學術點說就是研究函數的局部變化率,如下。
可知,在不同的X處它的導數是不相等的。如果遇到了一個導數為0的點,它很有可能就是最大值或者最小值,如下面的x=0點取得最小值y=0。
導數反映了y的變化趨勢,比如這個方程x>0時,導數大於0,則y隨著x的增加而增加。x<0時,導數小於0,則y隨著x的增加而減小。
所以看導數,我們就得到了目標y的變化趨勢,而深度學習或者說機器學習中需要優化的目標就是一個Y,也稱之為目標函數,價值函數,損失函數等等。通常我們定義好一個目標函數,當它達到極大值或者極小值就實現了我們的期望。
不過還有個問題,就是導數等於0,一定是極值點嗎?未必,比如鞍點。
上面的小紅點就是鞍點,在這個曲面上,它在某些方向的導數等於0,但是顯然它不是極值點,不是極大也不是極小,正因如此,給後面的優化埋下了一個坑。
如果你真的微積分也忘了,就需要補了。
3.2 數值微分
前面說了,機器學習就是要求解目標的極值,極大值極小值是等價的不需要糾結,通常我們求極小值。
上面的函數我們輕輕鬆鬆就求解出了導數,從而得到了唯一的極值,這叫做解析解,答案很唯一,用數學方程就能手算出來。
但是實際要優化的神經網絡上百萬個參數,是不可能求出解析解的,只能求數值近似解,就是用數值微分的方法去逼近。
數值微分的核心思想就是用離散方法近似計算函數的導數值或偏導數值,相信同學們在課程中都學過。
向前差商公式:
向後差商公式:
中心差商公式:
有了感覺咱們接著說
那麼,一般情況下要求解任意函數極值的方法是什麼呢?在深度學習中就是梯度下降法。
梯度下降法可以說是最廣泛使用的最優化方法,在目標函數是凸函數的時候可以得到全局解。雖然神經網絡的優化函數通常都不會是凸函數,但是它仍然可以取得不錯的結果。
梯度下降法的核心思想就是(公式比較多,就截圖了):
這一套對所有的函數f(x)都通用,所以以導數的反方向進行搜索,就能夠減小f(x),而且這個方向還是減小f(x)的最快的方向,這就是所謂的梯度下降法,也被稱為「最速下降法」,參數更新方法如下。
關於微積分和最優化,咱們就點到為止了,不然就超出了白身境系列的要求。要補這方面的知識,就比較多了,建議先找花書中的對應章節看看,找找感覺再說。
最優化的方法還有很多,目前在神經網絡優化中常用的是一階優化方法,不過二階優化方法也慢慢被研究起來,最後還是給出一些關鍵詞去掌握。
導數,偏導數,線性規劃,二次規劃,動態規劃,Hessian matrix,損失函數,正則項,一階優化方法(梯度下降法),二階優化方法(牛頓法)等等。
好嘞,掌握了這些,就大膽往前走,不用怕了。
總結
數學這種東西,學習就是三步曲,一看書,二做題,三應用,其他學習方法比如看視頻聽課基本都是扯淡。
另外,數學怎麼好都不過分。希望小白看完還能愛數學,畢竟這才剛剛開始一點點。
下期預告:下一期我們講AI在當前各大研究方向。