C 1.1 無需數學基礎如進行機器學習

註:如果有一定數學基礎的話也可以看看,接受任何形式的批評。

1.寫在前面

寫這篇文章之前壓力很大,因為數學是機器學習所必須的東西。

凡事都都有個但是,但是轉念一想,現在這個開源軟體搞得這麼紅火的階段是不是可以對一些機器學習進行概念性的了解就進行編程?想想也是可行的,因為現在對於機器學習來講更重要的其實是調參數的過程。我見過很多人啥數學都沒有學但是人家看文檔愣是能做個機器學習項目,這說明兩個問題,第一現在機器學習庫太強大了第二機器學習不用數學也玩的轉,只要知道各種概念大概是什麼意思就行。

那麼我們最重要的其實只是形象化的理解各個過程就可以了。然後搭建個網路還是個很容易的事情的。

2. 什麼是機器學習

所謂機器學習就是通過我們給定的大量樣本總結規律用於之後數據預測的演算法。

這裡有個概念就是訓練樣本和標籤。機器學習在學習之前需要我們給定大量的訓練數據,這也稱為訓練樣本。對於很多機器學習項目來說,這個樣本是有標籤的。舉個例子來說,給了我們一萬個圖形數據,同時給了每個圖形所代表的動物是什麼,這個所代表的動物就是標籤,而這一萬個圖形數據和標籤就是是我們所說的訓練樣本。機器學習的過程就是從給定的這麼多圖形數據中進行學習。

這樣看來絕大部分機器學習其實就是一個函數:

y=f(x)

這裡把x看做一個樣本,那麼每個樣本對應於一個輸出y,這個作為預測結果。當然我們對於給定的樣本是有真實結果的,將其寫作d。那麼機器學習的過程實際上是不斷的調整函數 f(x) 的輸出,使得其不斷接近於d的過程。當然如何接近我們得有一個評價指標,這個指標就是我們所說的損失函數(loss function),這個損失函數最常用的就是相減後取平方。也就是預測結果和真實結果越接近那麼損失函數越接近與0。

對於一些機器學習來說這個過程就有些細微的變化,我們這個函數是固定的,比如過去常用的sigmoid激活函數:

y=sigmoid(wcdot x)

這種情況下需要調整的顯然就是w了,這個w我們稱之為權值,也就是說,我們通過不斷的調整w使得函數輸出的y(也就是預測結果)與真實結果越來越接近。

這裡可以看到機器學習所得到的並不是一個確定的結果,一個大的方向就是接近就好,能更接近當然更好。

3. 什麼是迭代

上面所說的不斷調整w的過程就是所謂的迭代的過程。這個迭代是要選擇一個初始值的我們記為 w_0 ,之後每次迭代所得到的w,其下標都會加1作為區分。顯然這個w的序列的調整不是無目的的,他有著數學理論做支撐,但是我們不必就深究細節。但是一定要知道的是這個迭代過程是這樣的:

w_{n+1}=w_n+m

也就是權值的調整實際上是在上面的權值加上一個數,作為新的權值w的值。再次強調下,這個m的計算實際上是比較複雜的,所以有機器學習庫幫助我們完成這個過程。甚至於都不用顯示的去完成這個迭代過程,我們只需要告訴我們的機器「讓那個loss越來越小」就行了,當然機器會要求你提供一些樣本讓他學習。

4.矩陣和樣本

矩陣可以看成一個數據表。

一般而言數據的存儲方式是類二維矩陣的,每一行存儲一個數據,而每個數據有多個屬性。也就是類似於我們的表格,同時也是一個二維矩陣,因此對矩陣用行向量、列向量進行表示的話含義也不盡相同:

M=egin{bmatrix} v_{col1}, cdots, v_{coln} end{bmatrix}\ M=egin{bmatrix} v_{row1}\ vdots \v_{rowm} end{bmatrix}

v_{col} 代表列向量,而 v_{row} 代表行向量。

當然這個可能比較抽象,我們用一個更加具象的例子來表示:

M=egin{bmatrix} &身高&年齡&體重 \ 員工1 & 190&30&80\ 員工2 & 180&40&70\ 員工3 & 170&50&60\ 員工4 & 160&60&50\ end{bmatrix}

這裡列向量代表不同樣本的同一屬性,比如對於上面的例子而言 v_{col1} 就代表身高。而行向量就代表每個員工自己的[身高,年齡,體重]這些屬性。這個矩陣很可能有很多的員工,而屬性很少,所以矩陣行數通常比列數多。

那麼數據壓縮是什麼意思呢?

比如我表示員工的身高和體重等各種數據用了30個屬性。但是通過換算,我可以用5個屬性就可以完全還原所有30個屬性。這個減少屬性的過程就是所謂的數據壓縮,換算的演算法可以有PCA,SVD等。我們以後在給定和存儲的數據的時候可能就不用去存儲三十列數據那麼多。存5列就夠了。


推薦閱讀:

長鏈剖分之O(nlgn)-O(1)求k級祖先
天天演算法 | Medium | 7. 最長不重複子字元串:Longest Substring Without Repeating Characters
萬物演算法
【數學】數學規劃簡介
求長度小於 1000 的字元串的最長子序列的思路應該是怎樣的?

TAG:机器学习 | 深度学习DeepLearning | 算法 |