查看往期文章請點擊右上角,關注查看歷史新聞
所有文章都經過分類和組織,使您更容易查找和閱讀。 請在頁面菜單中找到它。
手寫數字的機器識別問題早已得到解決,MNIST數據集中機器識別的準確率已經超過99%。 事實上,這些問題還沒有通過硬編碼一一解決,我們不得不承認機器確實學到了一些東西。 但我們好奇的是機器學到了什么? 它是如何學習的?
問題設置
我們現在有 60,000 張手寫數字圖片,已在 MNIST 數據集中進行了標記。 每張圖片都可以看成一個(28,28)的二維域,如下圖所示。 我們需要從這些訓練數據中預測未標記的數據。
思路
我們得到一張未知的圖片,我們將它與訓練集中的所有圖片進行比較,我們找到訓練集中與它最相似的圖片,如果這張圖片的標簽是k,我們可以說我預測了未知的圖片的手寫數字也是k。 這種手寫數字識別方法確實有效。 KNN算法稍微提升了這種方法,取得了90%以上的好結果。 我們能夠使用這些方法非常快速地檢測到問題。
首先,我學到了什么? KNN算法實際上并沒有學習任何東西,它只是存儲了已知的數據,沒有真正的“訓練”過程,所以我們每次預測都需要大量的估計,我們拿出一個訓練數據集來與訓練數據集進行比較需要預測的事情需要大量資源。
另外,如果新的機器學習問題太復雜,例如識別人臉、對更復雜的圖像進行分類,而我沒有足夠大的訓練集怎么辦? 雖然我對每個復雜問題都有足夠的訓練集,但當我預測時,它會帶來更多耗時的問題來估計。
理想的訓練情境是怎樣的? 我的訓練過程可能需要一些時間,一旦我完成訓練,就需要非常快地做出預測。 例如,在新聞分類問題中,每天都會形成大量的數據,每天晚上也需要對大量的新聞進行分類,所以我們必須將預測時間限制在可控范圍內。 另一個例子是量化策略中的預測。 如果需要一天的時間來預測未來三天的市場,這些模型就不可靠。 高頻交易對時間的要求越來越嚴格。 如果下一步棋的預測過程需要30分鐘,那是絕對不可能打敗李世石的。
其實機器學習的過程應該大致分為三個步驟:
1. 做出基本假設(什么模型可能是正確的?),確定模型的空間:線性模型? 非線性模型? 簡單的模型? 復雜模型?
2.什么是“最好”的定義模型?:損失函數Loss
3.如何找到最好的? :梯度增長法
1. 什么模型可能是正確的?
這是一個可能有效的模型:
這也是一個潛在有效的模型:=*input
第一個是微軟的深度神經網絡模型。 模型非常復雜,參數很多,能夠學習的問題也比較復雜,學習過程比較慢,需要大量的數據來驅動機械效率高表示什么,需要高性能的計算能力。第二種模型很簡單,只是一條穿過原點的直線,也就是說,它的假設空間是全部
直線,訓練的過程就是在所有這樣的直線中尋找最好的一條,哪一條是“最好的”? 我們稍后再說吧。 我們現在可以知道的是,簡單的模型可以學習更少的問題,
這些模型只能將坐標系分為兩部分,并學習二分類問題。 他們連三類問題都學不會,甚至二類問題也學不會
它甚至無法學習這條直線,因為它假設空間中不存在這樣的直線。 另一方面,微軟的模型又高又復雜,可以學習k分類問題,盡管我可能需要大量數據和很多計算機,但至少我有學習的可能性。
由上可知,機器學習模型假設空間的選擇需要在估計效率和待解決問題的復雜度之間進行權衡。 解決簡單的問題,我們需要一個簡單的模型,這樣我們才能學習到性能好的模型,估計效率也高。 復雜問題上的復雜模型確保我們能夠學到一些東西,并且需要更多的數據和估計資源來進行訓練。
2. 在假設的空間中哪一個是最好的?
通過前面的介紹,我們現在知道機器學習問題需要已有的基本假設,然后在假設空間上搜索來尋找最優模型。 哪些是最好的?
我使用線性模型作為例子。
我的輸入可以轉換成一個大小為1*784的鏈表。 我們可以理解有784個特征。 我們對每個特征進行評分,最終結果表明它被分類到某個類別的可能性有多大。
比如我們判斷數字是否為0,
同理,判斷鏈表是否為1,也可以扣分
這樣,我們就有10個這樣的模型,我們就有10*784=7840個參數。 我們的學習過程其實就是找到最優的7840個參數,對應784維特征空間中的10個超平面(雖然相當于在二維平面中找到10條直線,但是輸入數據的維度很高,表示為超平面的直線)。 現在在這個模型中,我只需要輸入一張圖片,它就會告訴我這張圖片是[0,1,2,3,4,…..]的可能性是[0.01,0.03,0.8,0.09… .],我們知道模型預測 3。
那么哪些是最好的呢? SVM的最優定義是這樣的。 模型給出的結果是一個1*10的字段,表示圖像是手寫數字0到9的可能性。SVM要求正確標簽的分數至少比其他分數大1。 ,距離這些狀態越近越好。
例如,預測結果為[0.01, 0.01, 0.9, 0.01….]的模型肯定優于[0.1, 0.1, 0.6, 0.05,…..](SVM的預測分數可以小于1,這里是為了說明“可能性”,舉的例子都大于1)。 定義的最優值與SVM不同。 首先對線性模型的結果放一個函數,將結果壓縮到[0,1]的范圍來表示概率,然后估計與真實結果的交叉熵交叉。 交叉熵越大,交叉熵損失函數越小越好。 這里引入的損失函數(loss/)實際上是“最好”的物理表達。例如SVM的損失函數為
損失函數意味著模型的當前狀態偏離我定義的“最優”越多,損失函數就越大,所以找到最優模型就是最小化損失函數。
3. 如何搜索最優模型
我們已經知道機器學習就是在我們的假設空間中找到一個最優模型,而最優模型就是最小化損失函數。 如何最小化損失函數就對應了我們要解決的“如何尋找最優模型”。
我們知道機器學習是不斷調整參數,直到損失最小化。 也就是說每一個變化都會引起變化。這里引入微積分來估計Loss的梯度
梯度表示在當前狀態下,W每減少dW,b減少db,損失函數就會減少。 如果我每次讓W和b按照dW和db的范圍減小,損失函數就會減小一定量。因此學習/訓練過程可以表示為
一般是一個很小的數,以免學習范圍太大而達不到最優點。
總結
機器學習的問題非常復雜,復雜性主要表現在:解決復雜問題所需的模型也復雜,復雜的模型帶來更多的參數、更多的數據需求、更大的計算能力。 在我們的設計假設有空間的時候會有很多的設置等等。 當我們面對新的機器學習問題時,我們需要思考的是:
1. 我使用多復雜的模型?
超平面可以在線性模型中工作嗎? 多個超平面可以在線性模型中工作嗎? 不是,那么做非線性模型,有隱藏層的神經網絡能行嗎? 兩個呢? 十樓呢? ...(事實上,尋找特征往往比選擇模型更重要)
2. 我對最佳模型的定義是什么?
使用哪個損失函數? 什么樣的交叉熵? 什么樣的支持向量機?
3.如何找到最好的?
梯度增長? 其他方法?
上述三個問題背后都有大量的理論支撐。 學完這個理論后,你會發現機器學習和深度學習是一系列物理、計算機和統計工具的結合。 您對工具的理解還需要您掌握領域知識以及對數據或業務需求的敏感性。
在量化投資領域機械效率高表示什么,機器學習更像是一套驗證你投資想法的工具。 我們不可能把它當作一個黑匣子,輸入一些訓練數據,得到一個通用的預測模型。 不知道這一點很容易誤入歧途。
前面我們會在機器學習這條主線的基礎上介紹一些例子,主要介紹工具的使用。 使用的環境主要是++。 上次更新啦!