圖1.學習大資料集
當資料集量為m=1億時,進行梯度下降將會花費較大時間。
可以使用小量資料集進行訓練,然後得出學習曲線。
左圖是高方差,右圖是高偏差。
總之是要通過高效的學習演算法來進行大資料學習。
圖2.批梯度下降
假設是美國人口普查的資料,m=3億,如果需要每次讀入,並且計算(for every j=0,....n),對每乙個引數θ都有這麼乙個計算,就非常複雜了。
圖3.批與隨機梯度下降
批梯度下降中,θ_j的更新是代價函式j(θ)對θ_j的偏導數。
隨機梯度下降中,將平方項單獨作為乙個cost函式,對樣本1~m遍歷,每個樣本都更新θ_j,此處的梯度更新是對cost函式來說,不用求和。
那麼重要的就是對訓練樣本需要進行隨機化,這樣可以加快收斂速度。
圖4.隨機梯度下降
隨機梯度下降中,首先需要隨機化初始資料;
由於沒有求和項,迴避批梯度下降快很多。
圖中紅線表示批梯度下降,洋紅線表示隨機梯度下降,中間可能方向會發生偏差,但最終會落到乙個範圍內。
那麼最終的內層迴圈for多少次呢? 平常1~10次就很合理了(取決於資料及大小)。
那麼對於資料集人口普查3億資料來說,1-3億,只遍歷一次資料集即可得到最優結果。
圖5.三種梯度下降對比
批梯度下降:每次迭代都使用全部m個樣本;
隨機梯度下降:每次迭代使用1個樣本;
mini-batch梯度下降:每次迭代使用b個樣本。
即每次迭代對b各樣本求和,它的執行速度是在批梯度下降和隨機梯度下降之間的。
圖6.mini-batch梯度下降
假設b=10,m=1000,那麼mb梯度下降即每次使用10個資料進行一次更新;
相較於批梯度下降,它不需要乙個迴圈遍歷所有的,只需要遍歷b個即可。
如果對更新式找到合適的向量化方法及引數b就可以實現平行計算,將比隨機梯度下降更快。
圖7.檢查收斂
對批量梯度下降檢測收斂,通常是畫出j(θ)曲線,橫軸時迭代次數。
對隨機梯度下降,在進行更新θ之前計算出cost值,可以對每1000次迭代(對1000條樣本)得出乙個cost均值,並且以此曲線。
圖8.cost曲線出現情況分析
1.藍色曲線表示cost隨迭代次數增加緩慢下降,有波動地下降,紅色曲線最終下降平衡點較藍線小,可能原因是學習率更小。
2.藍線表示每遍歷1000個資料求cost均值得出的曲線,波動較大,紅色曲線表示增大每次取點的資料量。
3.當波動較大,且cost不下降時,則需要調整演算法,調整特徵或者學習率。
4.當cost程上公升趨勢時,很可能是學習率過大,需要使用較小的α。
圖9.隨機梯度下降
對於學習率α的選擇,通常是將其設定為乙個固定的常數。
但有時,如果想讓θ收斂,那麼可以隨著迭代次數增加減小α,這樣在接近最優值時,波動會變小。
但是公式中的兩個常數的選擇需要花費時間,所以通常是將其設定為常數。
現在有乙個**,需要根據使用者的起點終點給出運費**,並根據使用者是否最終選擇了本**作為y;
那麼此時x可以有多個特徵,比如起點、終點、運費等,想要學習最優的引數θ。
演算法的運算過程是,獲取到使用者的(x,y),並且使用它更新θ。
此處更新式中,並沒有y(i)這樣的上標,也就是不是對乙個固定的訓練集來說的,它是從 **的角度採取資料,是開放的。
這樣能更好的捕獲使用者的偏好。
圖11.產品搜尋例子
那麼可以將x設定為[與使用者搜尋匹配的特徵數,產品描述符合詞數,,,,]這樣作為特徵向量,那麼如果使用者點選了就是y=1,否則y=0,目標是要學習y=1的情況下,θ最優。
重點就是,不會有乙個固定的訓練集, 而是去獲取使用者樣本,從使用者樣本中學習,然後丟棄使用下乙個。
圖12.減少對映進行平行計算
比如對乙個資料集進行梯度下降的時候,很有可能資料量很大,在乙個機器上計算的速度比較慢;
那麼可以將資料放到不同的機器上,進行平行計算,提高運算速度,最終將計算結果進行合併傳送給中心伺服器。
也適用於同一臺機器上的多核並行運算。
第十八章 B樹
施工中施工中 基本操作主要包括 搜尋b樹,建立空b樹,插入關鍵字。18.3放出刪除關鍵字的 class program region 磁碟操作 為結點初始化對應的磁碟頁 private static node t allocate node t 磁碟寫操作 private static void d...
第十八章 定製特性
目錄 18.1 使用定製特性 18.2 定義自己的特性類 18.3 特性構造器和字段 屬性資料型別 18.4 檢測定製特性 18.5 兩個特性例項的相互匹配 18.6 檢測定製特性時不建立從attribute派生的物件 18.7 條件特性類 定製特性 利用定製特性,可宣告式地為自己的 構造新增註解來...
第十八章 18 2 3節練習
練習18.18 已知遊俠面的swap的典型定義 參見13.3節,第457頁 當mem1是乙個string時程式使用swap的哪個版本?如果mem1是int呢?說明在這兩種情況下名字查詢的過程。void swap t v1,t v2 解答 這裡典型定義應該指的是有乙個專為string交換而建立的swa...