最近一段時間關(guān)于機(jī)器學(xué)習(xí)伸辟、人工智能等話題充斥著各大社區(qū)痢甘。作為一枚熱愛技術(shù)的系統(tǒng)工程師,我迫切想去揭開它神秘的面紗。
學(xué)習(xí)的過程是辛苦的扁位,尤其是在大學(xué)數(shù)學(xué)早就還給老師的情況下准潭。花了一點時間惡補(bǔ)了下線性代數(shù)域仇,又看了網(wǎng)上很多優(yōu)秀的博客刑然,總算小有收獲。特此將收獲總結(jié)歸納暇务,希望大家批評指正!
線性回歸
讓我們先來搞清楚什么是機(jī)器學(xué)習(xí)吧泼掠。
舉個具體的的例子。我們現(xiàn)在手上有一些關(guān)于房屋價格的數(shù)據(jù)樣本垦细,這些數(shù)據(jù)樣本包括了房屋的大小择镇、臥室數(shù)量、建造年份括改,以及這個房屋所對應(yīng)的價格腻豌。
然后機(jī)器學(xué)習(xí)就是讓我們利用已知的這些數(shù)據(jù)去訓(xùn)練出一個有關(guān)房屋價格預(yù)判的數(shù)學(xué)模型。
我們假設(shè)房屋價格符合線性模型嘱能,也就是下面的一般線性方程吝梅。
θ代表我們所選舉的特征所占的權(quán)重。我們在評估一個房屋價格的時候惹骂,會選取房屋的大小苏携、臥室數(shù)量等特征。
x則代表數(shù)據(jù)集中該特征的實際大小析苫。例如A房屋的面積是120平方米兜叨、3個臥室……
h(θ)就是在當(dāng)前特征向量θ下,對當(dāng)前數(shù)據(jù)樣本預(yù)測的房屋價格衩侥。
所以国旷,你可以理解為機(jī)器學(xué)習(xí)做的事情就是給你一堆歷史數(shù)據(jù),然后讓你找出一個最優(yōu)的h(θ)函數(shù)茫死。
初中的數(shù)學(xué)題目
已知一元一次函數(shù) y=ax+b
x=2 y=3
x=3 y=5
問:當(dāng)x=4時跪但,y=?
是不是覺得這道題目特別簡單?
其實機(jī)器學(xué)習(xí)做的事情和這道題目是一樣的峦萎,我們的目的就是求出a和b的值屡久,然后將x帶入數(shù)學(xué)函數(shù),求出目標(biāo)值y
只是我們在處理實際問題的時候爱榔,遇到的模型肯定不是一元函數(shù)被环、大部分情況下他們也不是一次函數(shù)。而且详幽,我們也不確定我們的數(shù)據(jù)就一定是符合某一種數(shù)學(xué)模型的筛欢,搞不好他都不是線性模型(這里我們先不討論這種情況)浸锨。
那這種情況我們肯定不能用初中數(shù)學(xué)的解法,去將x和y的值代入數(shù)學(xué)模型求參數(shù)版姑,那我們該怎么辦呢柱搜?
最小二乘法
沿用上面的一般性回歸假設(shè)函數(shù),我們預(yù)測的房價是h(θ),我們設(shè)真實的房價值是Y剥险。我們既然沒有辦法讓h(θ)和Y完全一樣聪蘸,那么我們可以讓他們的差盡可能的小,直到小到一個我們可以接受的誤差范圍表制。(比如房價500萬和500.1萬的誤差我們是完全可以接受的)
這樣健爬,我們又引入了第二個數(shù)學(xué)公式——誤差函數(shù)
好了,又到了名詞解釋時間了夫凸。
上標(biāo)i代表了是第i個訓(xùn)練樣本浑劳,后面的y含義一樣。
整個J(θ)的含義就是m個訓(xùn)練樣本夭拌,預(yù)測值和真實值差的平方和*1/2魔熏。
至于為什么乘以1/2就是為了后面求導(dǎo)計算方便,并沒有特殊意義鸽扁。因為我們的目的是求這個函數(shù)在何處求得最小值(取得最小值時θ的值)蒜绽,那么乘以1/2并不影響對θ的求值。
梯度下降
既然是誤差函數(shù)桶现,那我們必然需要想辦法讓這個誤差函數(shù)取得最小值了躲雅。
說到取最小值,那自然會想到對一個函數(shù)求導(dǎo)骡和,當(dāng)導(dǎo)數(shù)=0的時候就是函數(shù)的最小值的點了相赁。但我們是個多元函數(shù),所以只能挨個對每個變量求偏導(dǎo)慰于,然后讓函數(shù)沿著讓導(dǎo)數(shù)下降的方向移動钮科。
所以,我們需要對每一個特征讓它沿著導(dǎo)數(shù)遞減的方向去移動:
大家可能會問婆赠,怎么莫名其妙多出了一個α绵脯?
原因是這樣的,我們對一個函數(shù)求偏導(dǎo)數(shù)休里,我們得出的是這個函數(shù)是上升/下降和他們的幅度蛆挫,如果一個函數(shù)過于陡峭,我們很有可能移動過多妙黍,跑到了最低點的另外一邊悴侵,然后下一次迭代又跑到了另外一邊,循環(huán)往復(fù)……
所以拭嫁,我們就靠這個α來控制步長可免,避免移動過快或過慢 筒繁。
矩陣運算
其實,上面我們已經(jīng)可以解決一般線性方程求近似最小值的問題了巴元,但上面的方式不夠直觀,也不夠簡單驮宴,現(xiàn)在我們換一種解決方式——矩陣逮刨。
我們先將參數(shù)使用矩陣表示:
其中m代表是m個樣本。
當(dāng)我們將樣本使用矩陣表示以后堵泽,h(θ)的表示就變成了:
通過使用矩陣修己,我們只需要一次矩陣運算就可以將預(yù)期值h(θ)計算出來了,是不是很方便迎罗?當(dāng)然睬愤,還有更神奇的!
既然我們的h(θ)可以使用矩陣表示纹安,那我們的誤差函數(shù)J(θ)自然也可以使用矩陣去表示尤辱。
通過一個m*n的矩陣我們就可以將有N個特征值、M個訓(xùn)練樣本的誤差值表示出來厢岂。
上面我們是通過最小二乘法去表示損失函數(shù)的光督,現(xiàn)在我們將矩陣表達(dá)的誤差函數(shù)代入最小二乘法,得到下面的J(θ)表達(dá)式:
老套路塔粒,讓我們來看看使用矩陣的時候结借,θ在何種情況下J(θ)取得最小值,也就是我們的目標(biāo)θ矩陣卒茬。
在進(jìn)行公示推導(dǎo)之前船老,我們先復(fù)習(xí)幾個矩陣運算的基礎(chǔ)知識。
結(jié)合等式(2)和(3)我們又可以得出一個新的等式:
回憶完上面的線性代數(shù)基礎(chǔ)以后圃酵,我們可以下面開始我們愉快的推導(dǎo)了:
在第三步的時候柳畔,我們利用了一個實數(shù)的trace等于這個實數(shù)的性質(zhì)。
第四步的時候辜昵,我們利用了一個矩陣的trace=它的轉(zhuǎn)置矩陣的trace的性質(zhì)荸镊。
第五步的話,我們令A(yù)的轉(zhuǎn)置=θ;B=X和它轉(zhuǎn)置的積堪置;C=I躬存。
最后,我們令J(θ)的導(dǎo)數(shù)=0舀锨,這樣θ的取值就代表了J(θ)的最小值岭洲。
所以,使用矩陣表示損失函數(shù)最小值的最終公式變?yōu)?
我們使用矩陣的目的是為了讓我們的運算更簡單易懂,我們推導(dǎo)出矩陣表示表達(dá)時的θ求值函數(shù)以后坎匿,只需要對樣本參數(shù)做4次矩陣運算就可以求出特征矩陣,而不是像上面那樣用好幾個for循環(huán)盾剩。
怎么樣雷激,有沒有感覺數(shù)學(xué)真的很神奇!