機器學習
機器學習是(使用樣本獲取近似函式的)統計學的一個分支。我們有一個確實存在的理論函式或分佈用以生成資料,但我們目前不知道它是什麼。我們可以對這個函式進行抽樣,這些樣本選自我們的訓練集。
圖片標註示例:函式: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)logP(x)。
KL 散度:DKL(P || Q)= Ex〜P [logP(x)Q(x)]。這是 P 和 Q 的相似分佈(不是真正的測量,不對稱)的測量方法。
交叉熵:H(P,Q)= H(P)+ DKL = -Ex〜PlogQ(x)。
最大似然:p 是資料,q 是模型:θML=argmaxθQ(X;θ)。假設 iid 並使用 log:θML=argmaxθΣxlogQ(x;θ)。由於每個資料點等可能:θML=argmaxθH(P,Q;θ)。變化的 KL 的唯一分量是熵:θML=argmaxθDKL(P || Q;θ)。
最大後驗:
θMAP=argmaxθQ(θ| X)=argmaxθlogQ(X |θ)+ logQ(θ)θMAP=argmaxθQ(θ| X)=argmaxθlogQ(X |θ)+ log_Q(θ)。
這就像基於 Q(θ)之前的正則化項。
機器學習
機器學習是(使用樣本獲取近似函式的)統計學的一個分支。我們有一個確實存在的理論函式或分佈用以生成資料,但我們目前不知道它是什麼。我們可以對這個函式進行抽樣,這些樣本選自我們的訓練集。
圖片標註示例:函式: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)logP(x)。
KL 散度:DKL(P || Q)= Ex〜P [logP(x)Q(x)]。這是 P 和 Q 的相似分佈(不是真正的測量,不對稱)的測量方法。
交叉熵:H(P,Q)= H(P)+ DKL = -Ex〜PlogQ(x)。
最大似然:p 是資料,q 是模型:θML=argmaxθQ(X;θ)。假設 iid 並使用 log:θML=argmaxθΣxlogQ(x;θ)。由於每個資料點等可能:θML=argmaxθH(P,Q;θ)。變化的 KL 的唯一分量是熵:θML=argmaxθDKL(P || Q;θ)。
最大後驗:
θMAP=argmaxθQ(θ| X)=argmaxθlogQ(X |θ)+ logQ(θ)θMAP=argmaxθQ(θ| X)=argmaxθlogQ(X |θ)+ log_Q(θ)。
這就像基於 Q(θ)之前的正則化項。