1. 程式人生 > >Deep learning筆記(更新中)

Deep learning筆記(更新中)

在實踐中,alpha的一般取值為0:5,0:9 和0:99。和學習速率一樣,alpha也會隨著時間變化。一般初始值是一個較小的值,隨後會慢慢變大。隨著時間推移,改變alpha沒有收縮因子epsilon更重要。 自適應: AdaGrad 演算法,獨立地適應所有模型引數的學習速率,放縮每個引數反比於其所有梯度歷史平方值總和的平方根。 RMSProp演算法修改AdaGrad以在非凸設定下效果更好,改變梯度積累為指數加權的移動均值。 batch normalization batch normalization僅標準化每個單元的均值和方差,使得學習穩定,但允許單元和單個單元的非線性統計量之間的關係發生變化。 訓練中的均值和方差由mini batch的樣本貢獻,測試時為訓練階段收集的執行均值。 batch norm的意義和去掉網路中所以線性部分的作用類似,但後者的代價大得多。 無batch norm時,H的均值取決於H下層中引數的複雜關聯。在batch norm(加入超引數beta和gamma)中,gammaH′+beta的均值僅由beta確定。新引數很容易通過梯度下降來學習。 batch normalization作用於XW+b(比作用於X效果好)。 座標下降
當一個變數的值很大程度地影響另一個變數的最優值時,座標下降不是一個很好的方法。 座標下降(coordinate descent)一次優化一個座標。更一般地,塊座標下降(block coordinate descent) 是指對於某個子集的變數同時最小化。 Polyak平均 平均優化演算法在引數空間訪問軌跡中的幾個點。使用指數衰減計算平均值。 監督預訓練 在直接訓練目標模型求解目標問題之前,訓練簡單模型求解簡化問題的方法統稱為預訓練(pretraining)。 設計有助於優化的模型 現代神經網路的設計選擇體現在層之間的線性變換,幾乎處處可導的激勵函式,和大部分定義域都有明顯的梯度(如LSTM和maxout)。這些模型都具有簡化優化的性質。換言之,現代神經網路的設計方案旨在使其區域性梯度資訊合理地對應著移向一個遙遠的解。 其他的模型設計策略有助於使優化更簡單。例如,層之間的線性路徑或是跳過連線減少了從較低層引數到輸出最短路徑的長度,因而緩解了梯度消失的問題。一個和跳過連線相關的想法是新增和網路中間隱藏層相連的輸出的額外副本,如GoogLeNet和深度監督網路。這些“輔助頭”被訓練來執行和網路頂層主要輸出相同的任務,以確保底層網路能夠接受較大的梯度。當訓練完成時,輔助頭可能被丟棄。這是預訓練策略的替代方法。以這種方式,我們可以在一個階段聯合訓練所有層,而不改變架構,使得中間層(特別是低層)能夠通過更短的路徑得到一些有些如何更新的有用資訊。這些資訊為底層提供了誤差訊號。 連續方法和課程學習
許多優化挑戰都來自於代價函式的全域性結構,不能僅通過區域性更新方向上更好的估計來解決。解決這個問題的主要方法是嘗試初始化引數到某種區域內,該區域可以通過區域性下降很快連線到引數空間中的解。 連續方法(continuation method) 是一族通過挑選初始點使優化更容易的方法,以確保區域性優化花費大部分時間在表現良好的空間。思想是構造一系列具有相同引數的目標函式。 課程學習規劃學習過程的想法是,首先學習簡單的概念,然後逐步學習依賴於這些簡化概念的複雜概念。 初始化 初始化模型引數的方法有(1)簡單固定方法(2)隨機方法(3)用機器學習方法。 初始引數需要在不同單元間”破壞對稱性“。 每個單元的偏置和額外的引數(如編碼預測條件方差的引數)設定為啟發式選擇的常數。隨機初始 化權重。 幾乎總是初始化模型的權重為高斯或均勻分佈中隨機抽取的值。高斯或均勻分佈的選擇似乎不會有很大的差別。 更大的初始權重具有更強的破壞對稱性的作用,有助於避免冗餘的單元。它們也有助於避免在每層線性成分的前向或反向傳播中丟失訊號——矩陣中更大的值在矩陣乘法中有更大的輸出。如果初始權重太大,那麼會在前向傳播或反向傳播中產生爆炸的值。在迴圈網路中,很大的權重也可能導致混亂(chaos)(對於輸入中很小的擾動非常敏感,導致確定性前向傳播過程表現隨機)。在一定程度上,梯度爆炸問題可以通過梯度截斷來緩解(執行梯度下降步驟之前設定梯度的閾值)。較大的權重也會產生使得激勵函式飽和的值,導致飽和單元的梯度完全丟失。這些競爭因素決定了權重的理想初始大小。 設定偏置為非零值的情況:(1)如果偏置是作為輸出單元,那麼初始化偏置以獲取正確的輸出邊緣統計通常是有利的。(2)可能想要選擇偏置以避免初始化引起太大飽和(如relu偏置為0.1)。(3)一個單元會控制其他單元能否參與到方差中(如LSTM遺忘門偏置為1) 卷積神經網路
卷積對平移等變(equivariance),對尺度和角度變換不等變。 當輸入作出少量平移時,池化能幫助我們的表示近似不變(invariant)。對於平移的不變性是說當我們把輸入平移一微小的量,大多數通過池化函式的輸出值並不會發生改變。區域性平移不變性是一個很重要的性質,尤其是當我們關心某個特徵是否出現而不關心它出現的具體位置時。使用池化可以看作是增加了一個無限強的先驗:卷積層學得的函式必須具有對少量平移的不變性。當這個假設成立時,池化可以極大地提高網路的統計效率。 池化對於處理不同大小的輸入具有重要作用。 先驗被認為是強或者弱取決於先驗中概率密度的集中程度。弱先驗具有較高的熵值,例如方差很大的高斯分佈,這樣的先驗允許資料對於引數的改變具有或多或少的自由性。強先驗具有較低的熵值,例如方差很小的高斯分佈,這樣的先驗在決定引數最終取值時起著更加積極的作用。一個無限強的先驗對一些引數的概率置零並且要求禁止對這些引數賦值,無論資料對於這些引數的值給出了多大的支援。 卷積神經網路和全連線網路類似,但對於這個全連線網路的權值有一個無限強的先驗。這個無限強的先驗是說一個隱藏單元的權值必須和它鄰居的權值相等,但在空間中改變。這個先驗也要求除了那些處在隱藏單元空間連續的小的接收域以內的權值外,其餘的權值都為零。總之,我們可以把卷積的使用當作是對網路中一層的引數引入了一個無限強的先驗概率分佈。這個先驗是說該層應該學得的函式只包含區域性連線關係並且對平移具有等變性。類似的,使用池化也是一個無限強的先驗:每一個單元都具有對少量平移的不變性。 卷積和池化可能導致欠擬合,和任何先驗類似,卷積和池化只有當先驗的假設合理且正確時才有用。一些卷積神經網路為了既獲得具有較高不變性的特徵又獲得當平移不變性不合理時不會導致欠擬合的特徵,被設計成在一些通道上使用池化而在另一些通道上不使用。當一項任務涉及到要對輸入中相隔較遠的資訊進行合併時,那麼卷積所需要的先驗可能就不正確了。 通常零填充的最優數量(對於測試集的分類正確率)處於“有效卷積“和“相同卷積”之間的某個位置。 由卷積和隨後的池化組成的層,當賦予隨機權值時,自然地變得具有頻率選擇和平移不變性。他們認為這提供了一種廉價的方法來選擇卷積網路的結構:首先通過僅訓練最後一層來評估幾個卷積網路結構的效能,然後選擇最好的結構並使用更昂貴的方法來訓練整個網路。 貪心逐層式預訓練,獨立地訓練第一層,然後從第一層提取所有特徵一次,然後用那些特徵隔離訓練第二層,以此類推。 迴圈和遞迴神經網路 解釋RNN作為圖模型的一種方法是將RNN視為定義一個結構為完全圖的圖模型,且能夠表示任何一對y 值之間的直接聯絡(Markov鏈只有部分變數直接有直接關係)。 引數共享大大減少了RNN的引數,代價是優化引數可能變得困難。 在迴圈網路中使用的引數共享依賴於相同引數可用於不同時間步的假設。等效地,假設給定時刻t 的變數後,時刻t+1 變數的條件概率分佈是平穩的(stationary),這意味著之前的時間步與下個時間步之間的關係並不依賴於t。原則上,可以使用t作為每個時間步的額外輸入,並讓學習器在發現任何時間依賴性的同時,在不同時間步之間儘可能多地共享。相比在每個t 使用不同的條件概率分佈已經好很多了,但網路將必須在面對新t 時進行推斷。 RNN必須有某種機制來確定序列的長度。這可以通過多種方式實現。在當輸出是從詞彙表獲取的符號的情況下,我們可以新增一個對應於序列末端的特殊符號。當產生該符號時,取樣過程停止。在訓練集中,我們將該符號作為序列的一個額外成員,即緊跟每個訓練樣本x(t) 之後。另一種選擇是在模型中引入一個額外的Bernoulli輸出,表示在每個時間步決定繼續或停止。相比向詞彙表增加一個額外符號,這種方法更普遍,因為它適用於任何RNN,而不僅僅是輸出符號序列的RNN。例如,它可以應用於一個產生實數序列的RNN。新的輸出單元通常使用sigmoid單元,並通過交叉熵訓練。在這種方法中,sigmoid被訓練為最大化正確預測的對數似然,即在每個時間步序列決定結束或繼續。 RNN必須有某種機制來確定序列的長度。這可以通過多種方式實現。(1)在當輸出是從詞彙表獲取的符號的情況下,我們可以新增一個對應於序列末端的特殊符號。當產生該符號時,取樣過程停止。在訓練集中,我們將該符號作為序列的一個額外成員,即緊跟每個訓練樣本x(t) 之後。(2)另一種選擇是在模型中引入一個額外的Bernoulli輸出,表示在每個時間步決定繼續或停止。相比向詞彙表增加一個額外符號,這種方法更普遍,因為它適用於任何RNN,而不僅僅是輸出符號序列的RNN。例如,它可以應用於一個產生實數序列的RNN。新的輸出單元通常使用sigmoid單元,並通過交叉熵訓練。在這種方法中,sigmoid被訓練為最大化正確預測的對數似然,即在每個時間步序列決定結束或繼續。(3)確定序列長度T的另一種方法是將一個額外的輸出新增到模型並預測整數T本身。模型可以採出T的值,然後採T步有價值的資料。這種方法需要在每個時間步的迴圈更新中增加一個額外輸入,使得迴圈更新知道它是否是靠近所產生序列的末尾。這種額外的輸入可以是T的值,也可以是T-t即剩下時間步的數量。如果沒有這個額外的輸入,RNN可能會產生突然結束序列,如一個句子在最終完整前結束。 將固定長度的向量x對映到序列Y上分佈的RNN,適用於很多工如圖注,其中單個影象作為模型的輸入,然後產生描述影象的詞序列。觀察到的輸出序列的每個元素y(t)同時用作輸入(對於當前時間步)和訓練期間的目標(對於前一時間步)。 如果沒有y(t-1)到h(t)的連線,只有h(t-1)到h(t)的連線,則RNN只能表示在給定x值的情況下,y值彼此條件獨立的分佈。加上y(t-1)到h(t)的連線後,RNN可以對給定x的序列後相同長度的y序列的任意分佈建模。 向量到序列RNN至少有兩種接受輸入的方法:(1)輸入被提供為RNN的初始狀態(2)輸入連線到每個時間步中的隱藏單元。這兩種方法也可以結合。