如果我們有乙個低方差的模型,增加資料集的規模可以幫助你獲得更好的結果。我們應 該怎樣應對乙個有 100 萬條記錄的訓練集?
以線性回歸模型為例,每一次梯度下降迭代,我們都需要計算訓練集的誤差的平方和, 如果我們的學習演算法需要有 20 次迭代,這便已經是非常大的計算代價。
首先應該做的事是去檢查乙個這麼大規模的訓練集是否真的必要,也許我們只用 1000 個訓練集也能獲得較好的效果,我們可以繪製學習曲線來幫助判斷。
隨機梯度下降法
隨機梯度下降演算法在每一次計算之後便更新引數 θ,而不需要首先將所有的訓練集求和, 在梯度下降演算法還沒有完成一次迭代時,隨機梯度下降演算法便已經走出了很遠。但是這樣的 演算法存在的問題是,不是每一步都是朝著」正確」的方向邁出的。因此演算法雖然會逐漸走向全 局最小值的位置,但是可能無法站到那個最小值的那一點,而是在最小值點附近徘徊。
小批量梯度下降
小批量梯度下降演算法是介於批量梯度下降演算法和隨機梯度下降演算法之間的演算法,每計算 常數 b 次訓練例項,便更新一次引數 θ。
通常我們會令 b 在 2-100 之間。這樣做的好處在於,我們可以用向量化的方式來迴圈 b 個訓練例項,如果我們用的線性代數函式庫比較好,能夠支援平行處理,那麼演算法的總體 表現將不受影響(與隨機梯度下降相同)。
隨機梯度下降收斂
現在我們介紹隨機梯度下降演算法的除錯,以及學習率 α 的選取。
在批量梯度下降中,我們可以令代價函式 j 為迭代次數的函式,繪製圖表,根據圖表來 判斷梯度下降是否收斂。但是,在大規模的訓練集的情況下,這是不現實的,因為計算代價 太大了。
在隨機梯度下降中,我們在每一次更新 θ 之前都計算一次代價,然後每 x 次迭代後,求 出這 x 次對訓練例項計算代價的平均值,然後繪製這些平均值與 x 次迭代的次數之間的函 數圖表。
當我們繪製這樣的圖表時,可能會得到乙個顛簸不平但是不會明顯減少的函式影象(如 上面左下圖中藍線所示)。我們可以增加 x 來使得函式更加平緩,也許便能看出下降的趨勢 了(如上面左下圖中紅線所示);或者可能函式圖表仍然是顛簸不平且不下降的(如洋紅色 線所示),那麼我們的模型本身可能存在一些錯誤。
如果我們得到的曲線如上面右下方所示,不斷地上公升,那麼我們可能會需要選擇乙個較 小的學習率 α。
我們也可以令學習率隨著迭代次數的增加而減小,例如令: a=
cons
t1in
tera
tion
numb
er+c
onst
2 隨著我們不斷地靠近全域性最小值,通過減小學習率,我們迫使演算法收斂而非在最小值附 近徘徊。 但是通常我們不需要這樣做便能有非常好的效果了,對 α 進行調整所耗費的計算 通常不值得
假定你有乙個 供運輸服務的公司,使用者們來向你詢問把包裹從 a 地運到 b 地的服務, 同時假定你有乙個**,讓使用者們可多次登陸,然後他們告訴你,他們想從**寄出包裹, 以及包裹要寄到**去,也就是出發地與目的地,然後你的**開出運輸包裹的的服務**。 比如,我會收取50來
運輸你的
包裹,我
會收取 20 之類的,然後根據你開給使用者的這個價 格,使用者有時會接受這個運輸服務,那麼這就是個正樣本,有時他們會走掉,然後他們拒絕 購買你的運輸服務,所以,讓我們假定我們想要乙個學習演算法來幫助我們,優化我們想給用 戶開出的**。
假使我們正在經營一家物流公司,每當乙個使用者詢問從地點 a 至地點 b 的快遞費用時, 我們給使用者乙個**,該使用者可能選擇接受(y=1)或不接受(y=0)。
現在,我們希望構建乙個模型,來**使用者接受**使用我們的物流服務的可能性。因 此** 是我們的乙個特徵,其他特徵為距離,起始地點,目標地點以及特定的使用者資料。 模型的輸出是 p(y=1)。
一旦對乙個資料的學習完成了,我們便可以丟棄該資料,不需要再儲存它了。這種方式 的好處在於,我們的演算法可以很好的適應使用者的傾向性,演算法可以針對使用者的當前行為不斷 地更新模型以適應該使用者。
每次互動事件並不只產生乙個資料集,例如,我們一次給使用者 供 3 個物流選項,使用者 選擇 2 項,我們實際上可以獲得 3 個新的訓練例項,因而我們的演算法可以一次從 3 個例項 中學習並更新模型。
對映化簡和資料並行
對映化簡和資料並行對於大規模機器學習問題而言是非常重要的概念。之前 到,如果 我們用批量梯度下降演算法來求解大規模資料集的最優解,我們需要對整個訓練集進行迴圈, 計算偏導數和代價,再求和,計算代價非常大。如果我們能夠將我們的資料集分配給不多台 計算機,讓每一台計算機處理資料集的乙個子集,然後我們將計所的結果彙總在求和。這樣 的方法叫做對映簡化。
具體而言,如果任何學習演算法能夠表達為,對訓練集的函式的求和,那麼便能將這個任 務分配給多台計算機(或者同一臺計算機的不同 cpu 核心),以達到加速處理的目的。
例如,我們有 400 個訓練例項,我們可以將批量梯度下降的求和任務分配給 4 臺計算機 進行處理:
很多高階的線性代數函式庫已經能夠利用多核 cpu 的多個核心來並行地處理矩陣運 算,這也是演算法的向量化實現如此重要的緣故(比呼叫迴圈快)。
大規模機器學習
如果我們有乙個低方差的模型,增加資料集的規模可以幫助你獲得更好的結果。我們應 該怎樣應對乙個有 100 萬條記錄的訓練集?以線性回歸模型為例,每一次梯度下降迭代,我們都需要計算訓練集的誤差的平方和,如果我們的學習演算法需要有 20 次迭代,這便已經是非常大的計算代價。首先應該做的事是去檢查乙個這麼大...
機器學習 大規模機器學習
當資料有大量的資料,比如1億以上的時候,如果想擬合乙個線性回歸或者邏輯回歸時,梯度下降演算法的計算量將是非常龐大的。預檢查 為什麼不用1000個樣本,而需要用11億個?遇到高偏差問題時候,選擇合適大小的資料集即可,再增加資料集並不會改善,處理方式為尋找新的模型。如果是低方差的模型,增加資料集的規模可...
機器學習大規模學習平台架構
對於已有的開源的機器學習框架,很多都是單機環境下部署的,但是對於大公司層面的機器學習的應用需求,簡單的單機,分布式spark機器學習平台很難滿足公司的大資料應用需求,因為不僅要求具有正確性,還要求高效性和穩定性。這裡面存在很多的問題,比如模型如何在多台機器上跑,引數如何分布在多台伺服器上,構成par...