回覆列表
  • 1 # 機器之心Pro

    機器學習

    機器學習是(使用樣本獲取近似函式的)統計學的一個分支。我們有一個確實存在的理論函式或分佈用以生成資料,但我們目前不知道它是什麼。我們可以對這個函式進行抽樣,這些樣本選自我們的訓練集。

    圖片標註示例:函式:f⋆(圖片)→圖片描述 樣本:data∈(image,description)。注意:由於一個物體有許多有效的描述,所以描述是文字空間中的一個分佈:圖片描述〜文字。

    機器的目標是找到模型:有足夠的表現力來逼近真正的函式。有一個高效的演算法,它使用訓練資料找到函式最優解。而且此最優解必須對未知輸入有良好的泛化能力。

    機器學習的可能應用:將輸入轉換為另一種形式 - 學習「資訊」,提取並表達。例如:影象分類,影象標註。預測序列的遺漏值或未來值 - 學習「因果關係」,並進行預測。合成類似的輸出 - 學習「結構」並生成它。

    泛化與過擬合

    當你的模型過分依賴於訓練集從而不具備泛化能力,我們就稱之為過擬合。例如:一個學生記住了測試試卷的答案,那麼當考測試卷時他可以得分很高,但是考期末試卷時可能考的很差。

    有幾種權衡標準:模型表達能力:弱模型無法模擬函式,但功能強大的模型更容易過擬合。迭代訓練:訓練太少,沒有足夠的時間來擬合函式,訓練太多會引起過擬合。你需要在欠擬合模型和過擬合模型之間找到一個平衡點。

    標準技術是進行交叉驗證:留出部分「從未訓練過的測試資料」。在所有訓練完成後,我們將在最終測試集上執行該模型。在最後測試之後(您當然可以收集更多的資料)不能調整模型。如果對模型進行階段性的訓練,則需要為每個階段保留測試資料。

    深度學習是機器學習技術的一個分支。它是一個強大的模型,也得到了成功地推廣。

    前饋網路

    前饋網路表示具有函式族 u=f(x;θ) 的 y=f⋆(x)

    θ是模型引數。它可以是成千上萬個引數θ1...θT。

    f 是一個函式族。f(x;θ)是 x 的單個函式。u 是模型的輸出。

    你可以想象一下,如果你選擇了一個十分常見的函式族,其中之一有可能將類似於 f⋆。

    例如:用引數表示矩陣和向量:f(x→θ)()= [θ0θ1θ2θ3] x→+ [θ4θ5]

    設計輸出層

    最常見的輸出層就是:f(x;M,b)=g(Mx+b)

    M 和 b 就是上文說的θ 中的引數。

    線性變換 Mx+b 確保你的輸出層依賴於所有的輸入。

    非線性部分 g(x) 讓模型更好的擬合 y 的分佈。

    以圖片輸入為例,輸出分佈應該是:線性:y∈ℝ。例如,小貓的照片。Sigmoid:y∈[0,1]。例如,它是一隻貓的機率。Softmax:y∈RC 和Σy= 1。例如,是 CC 品種之一的貓的機率。

    為了確保 g(x)擬合真實分佈,可以使用:線性:g(x)= x。Sigmoid:g(x)= 11 + e-x。Softmax:g(x)c=exc∑iexi。

    Softmax 實際上是受限制的,通常 x0 設定為 1. 在這種情況下,Sigmoid 只是在 2 個變數中的 softmax。

    這就是為什麼最好選擇 g 的理論背景,但有很多不同的選擇。

    找到θ

    透過求解 J 的代價函式的以下最佳化問題求θ:minθ∈modelsJ(y,f(x;θ))

    深度學習的成功源自有一系列很好的演算法來計算最小值。

    那些演算法都是梯度下降法的變種:

    theta = initial_random_values()

    loop {xs = fetch_inputs()

    ys = fetch_outputs()

    us = model(theta)(xs)

    cost = J(ys, us)if cost < threshold: exit;

    theta = theta - gradient(cost)}

    直觀地講,你在每一個θ 選擇可以最大程度上降低損失的方向。

    這需要計算梯度 dcostdθt。

    你不希望梯度接近 0,這樣學習速度太慢或接近 inf,且不穩定。

    這是一個貪心的演算法,因此可能會收斂到區域性最小值。

    選擇損失函式

    這個損失函式可以是任何形式:絕對誤差的和: J=∑|y−u|。平方誤差之和: J=∑(y−u)2。只要最小值在同分布時出現,在理論上它將會起作用。

    用 u 表示 y 的分佈引數是一個不錯的主意。理由:通常自然過程是模糊的,任何輸入都可能有一系列的輸出。這種方法也能平滑地衡量我們的準確程度。最大似然估計:θML=argmaxθp(y; u)。因此,我們要最小化:J = -p(y; u)。對於第 i 個樣本:J = -ipip(yi; u)取對數:J"= - Σilogp(yi; u)。這稱為交叉熵。

    應用這個想法:y〜Gaussian(center = u):p(y; u)= e-(y-u)2。J=−∑loge−(y−u)2=∑(y−u)2。這促使平方和誤差作為一個不錯的選擇。

    正則化

    正則化是為了降低泛化誤差提出的,這並不表示它會提高訓練誤差。

    偏好更小的 θ 值:透過將θ的一些函式加入到 J 中,可以取到更小的引數。L2:J"= J +Σ|θ| 2。L1:J"= J +Σ|θ|。L0 不平滑。注意:對於θ→Mx + b,通常只新增 M。

    資料增多:透過更多的樣本減少過擬合。還要考慮從現有資料生成有效的新資料。旋轉,拉伸現有影象以建立新影象。將小噪音注入 x,網路層,甚至引數。

    多工學習:在幾個不同的任務之間共享一層。圖層被迫選擇與通用任務集相關的有用特徵。

    提前停止:保留從未接受過訓練的測試資料集,稱為驗證集。當驗證集的損失下降時,停止訓練。你需要一個額外的測試集才能真正測試最終模型。

    引數共享:如果你知道有關資料的常量,請將其硬編碼為選擇引數。例如:影象是平移不變的,所以每個小塊應該有相同的引數。

    剪枝:隨機關閉網路層中的一些神經元。神經元學習真正理解輸入資料。

    對抗:嘗試透過在這些點附近產生對抗資料,使訓練點附近的點不變。

    深度前饋網路

    深度的前饋網路改為使用:u=f(x,θ)=fN(…f1(x;θ1)…;θN)

    這個模型有 N 層。f1 ... fN-1:隱藏層。fN:輸出層。

    深層模型聽起來不夠好,因為它需要更多的引數。

    實際上,它實際上需要更少的引數,並且模型表現更好(為什麼?)。

    一個可能的原因是每層學習資料的越來越抽象的特徵。

    殘差模型:f"n(x)= fn(x)+ xn-1。資料可能來自過去,我們再加上一些細節。

    設計隱藏層

    最常見的隱藏層是:fn(x)=g(Mx+b)

    隱藏層與輸出層具有相同的結構。

    然而,對於輸出層工作良好的 g(x)卻不適用於隱藏層。

    最簡單和最成功的 g 是 ReLU :g(x)= max(0,x)。與 sigmoid 相比,當 x 非常大時,ReLU 的梯度不接近零。

    其他常見的非線性函式包括:

    調製 ReLU:g(x)= max(0,x)+αmin(0,x)。其中 alpha 為-1,非常小,或模型引數本身。直覺是這個函式具有 x <0 的斜率。實際應用中,它和 ReLU 差不多。

    Maxout:g(x)i=maxj∈G(i)xj。G 將範圍 [1..I] 分為子集 [1..m],[m + 1..2m],[I-m..I]。為了比較,ReLU 為ℝn→ℝn,maxout 為ℝn→ℝnm。它是每組 m 輸入的最大值,將其視為 m 段線性段。

    線性:g(x)= x。與下一層相乘後,相當於:fn(x)= g"(NMx + b")。這是有用的,因為可以使用引數較少的窄 N 和 M。

    最佳化方法

    我們使用的方法基於隨機梯度下降:選擇訓練資料的一個子集(一個小批次),並從中計算梯度。優點:不依賴於訓練集的大小,而是依賴於批次大小。

    有多種方法進行梯度下降(使用:gradient g,學習率ε,梯度更新Δ)梯度下降 - 使用梯度:Δ=εg。動量 - 使用指數衰減梯度:Δ=εΣe-tgt。自適應學習率,其中 ε=εt:AdaGrad - 根據梯度幅度逐漸學習:εt=εδ+Σg2t√εt=εδ+Σgt2。RMSProp - 慢指數衰減梯度梯度學習:εt=εδ+Σe-tg2t。Adam - 複雜

    牛頓法:由於技術原因很難應用。

    批歸一化是一個具有如下變換的層:y = mx-μσ+ by = mx-μσ+ b。m 和 b 是可學習的,而μ和σ是平均值和標準偏差。這意味著這一層可以完全獨立(假設上一層的分佈)。

    課程學習:首先提供容易學習的東西,然後再加入複雜的東西。

    簡化網路

    在這一點上,我們有足夠的基礎來設計和最佳化深網路。

    但是,這些模型非常普遍且龐大。

    如果你的網路有 N 個網路層,各層有 S 個輸入/輸出,引數空間|θ| = O(NS2)。這有兩個缺點:過擬合,訓練時間長。

    減少引數空間的方法有很多種:

    找出問題中的對稱性,選擇對稱性不變的層。

    建立具有較低輸出維度的層,網路必須將資訊歸納成更緊湊的表示形式。

    卷積層

    卷積網路透過使用卷積而不是矩陣乘法(用星號表示)簡化了一些層:fn(x)=g(θn∗x)

    上式適用於空間分佈的資料,適用於 1d,2d 和 3d 資料。

    1d: (θ∗x)i=∑aθaxi+a

    2d: (θ∗x)ij=∑a∑bθabxab+ij

    與數學定義略有不同,但是想法一致:每個點的輸出是附近點的加權和。

    優點:如果θ為零,則獲取區域性性的概念,除了在 i = 0 附近的視窗中。獲取轉換不變性的概念,因為每個點使用相同的θ。將模型引數空間複雜度從 O(S2)減少到 O(w2)。

    如果有 n 層卷積,一個基值將能夠影響半徑的輸出。

    實際考量:用 0 填充邊緣,以及填充範圍。平鋪卷積(在不同的卷積之間切換)。

    池化層

    與與卷積網路一起使用的公共層是最大池化層:fn(x)i=maxj∈G(i)xj

    與 maxout 相同,在 1d 中一樣。

    對於更高的尺寸,G 將輸入空間分割成區域塊。

    這減少了輸入資料的大小,可以將輸入的區域性區域的主要資訊保留下來。

    小的變動也是不變的。

    迴圈網路

    迴圈網路使用以前的輸出作為輸入,構成迴圈:s(t)=f(s(t−1),x(t);θ)

    狀態 s 包含過去的資訊,而 x 是每個步驟的輸入。

    這是比全動態模型更簡單的模型:s(t)= d(t)(x(t),... x(1);θ")所有的θ都是跨時間共享的 - 迴圈網路假定時間不變。RNN 可以學習任何輸入長度,而全動態模型對於每個輸入長度需要不同的 g。

    輸出:模型可以在每個時間步長返回 y(t):步中無輸出,只有最終狀態很重要。例如情感分析。y(t)= s(t),模型沒有內部狀態,因此功能較弱。但訓練更容易,因為訓練資料 y 就是 s。y(t)= o(s(t)),使用輸出層來轉換(和隱藏)內部狀態。但訓練更為間接,更難。一如以往,我們傾向於將 y 作為分佈引數。

    被選擇的輸出可以作為額外的輸入反饋到 f。如果沒有饋送,y 有條件地彼此獨立。當生成句子時,我們需要詞之間的條件依賴,例如:A-A 和 B-B 可能是有效的,但 A-B 可能無效。

    完成:輸入結束時完成。這適用於 x(t)→y(t)。輸出完成後,額外輸出 yend(t)。額外輸出剩餘輸出長度/總數的長度 ylength(t)。

    使用相同的梯度下降類方法完成最佳化。梯度是透過將迴圈體展開為平鋪式子,利用稱為反向傳播時間(BPTT)來計算的。

    BPTT 的一個難點是梯度Δ=∂∂st:Δ> 0:狀態爆炸,提供不穩定的梯度。解決方案是將梯度更新剪為合理的大小。Δ≈0:這允許狀態持續很長時間,但是梯度下降方法需要一個梯度才能工作。Δ<0:RNN 處於資訊丟失的恆定狀態。

    有一些 RNN 的變體,在幫助保持狀態 s(t)≈(t-1)之前應用一個簡單的方法: s(t)= fts(t-1)+ f(...):我們得到一個直接一階導數∂∂x。它允許我們從前面的步驟中傳遞梯度,即使 f 本身具有零梯度。

    長期記憶(LSTM)模型輸入,輸出和遺忘:s(t)= fts(t-1)+ itf(s(t-1),x(t);θ):輸出是:y(t)= ots(t)。它使用機率(稱為門):ot 為輸出門,ft 遺忘門,it 為輸入門。門通常是 sigmoid 層:ot = g(Mx + b)= 11 + eMx + b。長期資訊被保留,因為生成新的資料 g 和使用它是分離的。保留更多梯度資訊,因為過去和未來之間有直接聯絡。

    門迴圈單元(GRU)是一個更簡單的模型:s(t)=(1-ut)s(t-1)+ utf(rts(t-1),x(t);θ):門:ut 更新,rt 重置。沒有完全好的結構。

    對於剪枝,更喜歡 d(f(s,x;θ)),不儲存資訊,超過 d(s)丟失資訊。

    記憶體網路和注意機制。

    有用的資料集

    有大量類別的輸入資料,應用程式是無限制的。

    影象向量 [0-1] WH [0-1] WH:影象到標籤,影象到描述。

    每個時間片的音訊向量:語音到文字。

    文字嵌入,每個單詞對映到一個向量 [0-1] N:翻譯。

    知識圖:問題回答。

    自編碼器

    自編碼器有兩個函式,它們將 f 和解碼 g 從輸入空間編碼為表示空間。目標函式J=L(x,g(f(x)))

    L 是損失函式,影象相似時較低。

    主要思想是表示空間會學習重要的特徵。

    為了防止過擬合,我們有一些額外的正則化工具:稀疏自編碼器最小化:J"= J + S(f(x))。這是表示空間的正則化。

    去噪自動編碼器最小化:J = L(x,g(f(n(x)))),其中 n 表示噪聲。這迫使網路將噪聲與訊號區分開來。

    壓縮自動編碼器最小化:J"= J +Σ∂f∂x。這迫使編碼器平滑:類似的輸入獲得相似的輸出。

    預測自動編碼器:J = L(x,g(h))+ L"(h,f(x))。不是同時最佳化 g 和 h,而是單獨最佳化。

    另一個解決方案是訓練一個鑑別器網路 D,該鑑別器網路 D 輸出一個代表生成輸入機率的標量。

    表示學習

    主要思想就是我們透過最佳化 u=ro(f(ri(x);θ)) 來代替最佳化 u=f(x;θ)。

    ri 和 ro 是輸入和輸出表示,但這個思想可以應用於 CNN,RNN 等模型。例如,自編碼器的編碼器一半可用於表示輸入 ri。希望有其他的表示,使任務更容易。

    這些表示可以對大量資料進行訓練,並從基礎資料中學習到特徵。

    例如:單詞是非常稀疏的輸入向量(全零,有一個具有實際意義)。有更容易使用的單詞的語義表示。

    上手建議

    有一套成功的標準

    儘可能構建一個可行的模型

    從資料中迭代學習

    附錄:機率論

    機率是一個有用的工具,因為它允許我們建模如下:隨機性:真正的隨機系統(量子等)。隱藏變數:確定性,但我們看不到所有關鍵因素。不完整的模型:在對小擾動敏感的混沌系統中特別有用。

    閱讀論文和更先進的機器學習方法非常有用,但對搭建網路並不重要。

    機率:P(x,y)表示 P(x = x,y = y)。

    邊緣機率:P(x)=ΣyP(x = x,y = y)。

    鏈式法則:P(x,y)= P(x | y)P(y)。

    如果 x 和 y 是獨立的:P(x,y)= P(x)P(y)。

    期望:Ex∼P[f(x)]=∑xP(x)f(x)

    貝葉斯定理:P(x | y)= P(x)P(y | x)P(y)= P(x)P(y | x)ΣxP(x)P(y | x)

    自資訊:I(x)= - logP(x)。

    資訊熵:H(x)= Ex〜P [I(x)] = - ΣxP(x)log⁡P(x)。

    KL 散度:DKL(P || Q)= Ex〜P [log⁡P(x)Q(x)]。這是 P 和 Q 的相似分佈(不是真正的測量,不對稱)的測量方法。

    交叉熵:H(P,Q)= H(P)+ DKL = -Ex〜Plog⁡Q(x)。

    最大似然:p 是資料,q 是模型:θML=arg⁡maxθQ(X;θ)。假設 iid 並使用 log:θML=arg⁡maxθΣxlog⁡Q(x;θ)。由於每個資料點等可能:θML=arg⁡maxθH(P,Q;θ)。變化的 KL 的唯一分量是熵:θML=arg⁡maxθDKL(P || Q;θ)。

    最大後驗:

    θMAP=argmaxθQ(θ| X)=argmaxθlogQ(X |θ)+ logQ(θ)θMAP=arg⁡maxθQ(θ| X)=arg⁡maxθlog⁡Q(X |θ)+ log_Q(θ)。

    這就像基於 Q(θ)之前的正則化項。

  • 中秋節和大豐收的關聯?
  • 現在的婚姻生活,你們都過得跟想象中一樣麼?說實話吧?