心智圖資源庫 深度學習理論知識
部分內容被折疊,總計包含1216個模組。基於斎藤康毅的兩本書《深度學習入門:基於Python的理論與實現》和《深度學習進階:自然語言處理 作者:[日] 齋藤康毅 譯者:陸宇傑》。這是我讀過最適合深度學習入門的書,在學習李牧的《動手學習深度學習》前強烈推薦!裡面的內容不需要任何基礎,都是從零開始講,高中生也能看懂。
編輯於2024-02-04 00:57:48Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
Il s'agit d'une carte mentale sur le système de trading de stocks de flux émotionnels des shares A. Le contenu principal comprend: le système de trading de flux émotionnel A-share, comment utiliser le logiciel TongDaxin pour effectuer le trading de flux émotionnel.
J'ai trié le contenu pertinent de l'imagination psychologique ordinaire. L'imagination est le processus psychologique dans lequel le cerveau humain traite et transforme les apparences stockées et forme une nouvelle image. Il s'agit d'une activité cognitive de haut niveau et complexe, et c'est aussi une forme particulière de processus de réflexion. L'imagination utilise principalement des informations graphiques comme objet de traitement, plutôt que des mots et des symboles. J'espère que cela vous sera utile ~
Il s'agit d'une carte mentale sur l'utilisation irrégulière des classiques, et son contenu principal comprend: les personnes, les anneaux, les lois, les objets et les machines. Fournit une référence utile pour résoudre le problème.
深度學習理論知識
緒論
基礎概念
深度學習問題是一個機器學習問題,指從有限樣例中,透過演算法總結出一般性的規律,並且可以應用到新的未知資料上。
和傳統的機器學習不同,深度學習採用的模型一般比較複雜
樣本的原始輸入到輸出目標之間的資料流經過多個線性或非線性的組件。每個組件都會對資訊進行加工,並進而影響後續的組件。
當我們最後得到輸出結果時,我們並不清楚其中每個組件的貢獻是多少。這個問題叫做貢獻度 分配問題。
貢獻度分配問題也常翻譯為信用分配問題或功勞分配問題。
貢獻度分配問題是一個很關鍵的問題,這關係到如何學習每個元件中的參數。
目前可以比較好解決貢獻度分配問題的模型是人工神經網路(ANN)
神經網路和深度學習並不等價。深度學習可以採用神經網路模型,也可以採用其它模型(例如深度信念網路是一種機率圖模型)。
人工智慧
AI基本概念
智能的概念
自然智慧
定義
指人類和一些動物所具有的之力和行為能力
人類的自然智能
只人類在認識客觀世界中,由思考過程和腦力活動所表現的綜合能力
智能的不同觀點與層次結構
觀點
思維理論
智能來自思維活動
知識閾值理論
智能取決於可運用的知識
演化理論
智能可由逐步進化來實現
層次結構
智能所包含的特徵能力
感知能力
記憶和思考能力
學習和自適應能力
行為能力
人工智慧的概念
解釋
用人工的方法在機器上實現智能
研究如何建構智慧機器或系統,模擬延伸擴展人工智慧
圖靈測試
AI研究的基本內容
人工智慧的學科位置
自然科學和社會科學的交叉
核心:思維與智能
基礎學科:數學、思維科學、計算機
與腦科和認知科學的交叉研究
智慧模擬的方法和技術研究
機器感知
視覺
聽覺
機器思維
機器學習
機器行為
領域分類
感知:即模擬人的感知能力,對外在刺激訊息(視覺和語音等)進行感知和加工。主要研究領域包括語音訊息處理和電腦視覺等。
學習:即模擬人的學習能力,主要研究如何從範例或與環境互動中學習。主要研究領域包括監督學習、無監督學習和強化學習等。
認知:即模擬人的認知能力,主要研究領域包括知識表示、自然語言理解、推理、規劃、決策等。
歷史
AI研究的不同學派
符號主義
符號主義(symbolism),又稱邏輯主義、心理學派或電腦學派。透過分析人類智慧的功能,然後透過電腦來實現這些功能。
基本假設
訊息可以用符號來表示
符號可以透過顯式的規則(例如邏輯運算)來操作
人類的認知過程可以看作是符號操作過程。在人工智慧的推理期和知識期,符號主義的方法比較盛行,並且取得了大量的成果。
連結主義
連結主義(connectionism),又稱仿生學派或生理學派,是認知科學領域中的一類資訊處理的方法和理論。
在認知科學領域,人類的認知過程可以看成是一種資訊處理過程。連結主義認為人類的認知過程是由大量簡單神經元所構成的神經網路中訊息的處理過程,而非符號運算。
因此,聯結主義模型的主要結構是由大量的簡單的資訊處理單元組成的互聯網絡,具有非線性、分散式、平行化、局部性計算以及適應性等特性。
行為主義
行為主義認為人工智慧源自於控制論。
除了深度學習以外,目前機器學習領域還有另一項振奮人心的技術,強化學習。
讓一個智能體(Agent)不斷的採取不同的行動(Action), 改變自己的狀態(State),和環境(Enviroment)進行交互,從而獲得不同的獎勵(Reward),我們只需要設計出合適的獎勵(Reward)規則,智能體就能在不斷的試誤中習得適當的策略。
神經網路
大腦神經網路
人工神經網絡
神經網路的發展歷史
模型提出
1943~1969 年,是神經網路發展的第一個高潮期。在此期間,科學家提出了許多神經元模型和學習規則。
在1943年,心理學家Warren McCulloch和數學家Walter Pitts最早描述了一種理想化的人工神經網絡,並建構了一種基於簡單邏輯運算的電腦體制。他們提出的神經網路模型稱為MP模型。
冰河期
1969年~1983年,為神經網路發展的第一個低 谷期。在此期間,神經網路的研究處於長年停滯及低潮狀態。
1969年,Marvin Minsky出版《感知機》一書,指出了神經網路的兩個關鍵缺陷:第一個是感知機無法處理異或迴路問題;第二個是當時的電腦無法支援處理大型神經網路所需要計算能力。
1974 年,哈佛大學的 Paul Webos 發明反向傳播演算法(Backpropagation,BP),但當時未受到應有的重視。
反向傳播演算法引起的復興
1983年~1995年。反向傳播演算法重新激發了人們對神經網路的興趣。
加州理工學院的物理學家John Hopfield提出了一種用於聯想記憶和最佳化計算的神經網絡,稱為Hopfield網絡。 Hopfield網絡在旅行商問題上獲得當時最好結果,並引起了轟動。
David Rumelhart和James McClelland對於連接主義在電腦模擬神經活動中的應用提供了全面的論述,並重新發明了反向傳播演算法。
流行度降低
1995年~2006年。支援向量機和其他更簡單的方法(例如線性分類器)在機器學習領域的流行逐漸超過了神經網路。
深度學習的崛起
2006年~現在。多層前饋神經網路可以先透過逐層預先訓練,再用反向傳播演算法進行精調的方式進 行有效學習。
機器學習
資料預處理
經過資料的預處理,如去除雜訊等。例如在文本分類中,去除停用詞等
特徵提取
從原始資料中提取一些有效的特徵。例如在影像分類中,提取邊緣、尺度不變特徵變換(Scale Invariant Feature Transform,SIFT)特徵等
特徵轉換
對特徵進行一定的加工,例如降維和升維。降維包括特徵抽取(Feature Extraction)和特徵選擇(Feature Selection)兩種途徑。常用的特徵轉換方法有主成分分析(Principal components analysis,PCA)、線性判別分析(Linear Discriminant Analysis)等
預測
機器學習的核心部分,透過一個函數進行預測
表示學習
為了提高機器學習系統的準確率,將輸入資訊轉換為有效的特徵
如果有一種演算法可以自動地學習出有效的特徵,並提高最終機器學習模型的效能,那麼這種學習就是可以稱為表示學習(Representation Learning)。
表示方法
局部表示
一種表示顏色的方式是以不同名字命名不同的顏色
維度高且無法擴展,不同顏色之間的相似度皆為0
分散式表示
RGB值來表示顏色
要學習到一個好的高層語意表示(一般為分佈式表示),通常需要從底層特徵開始,經過多步驟非線性轉換才能得到。
深度學習
步驟
貢獻度分配問題
和「淺層學習」不同,深度學習需要解決的關鍵問題是貢獻度分配問題
以下圍棋為例,每當下完一盤棋,最後的結果要嘛贏或輸。我們會思考哪幾步棋導致了最後的勝利,而又是哪幾步棋導致了最後的敗局。如何判斷每一步棋的貢獻就是貢獻度分配問題,這也是一個非常困難的問題。
某種意義上講,深度學習也可以看作是一種強化學習(Reinforcement Learning,RL),每個內部組件並不能直接得到監督信息,需要通過整個模型的最終監督信息(獎勵)得到,並且有一定的延時性。
神經網路模型可以使用誤差反向傳播演算法,從而可以比較好地解決貢獻度分配問題。
端對端學習
傳統學習方式
在一些複雜任務中,傳統機器學習方法需要將一個任務的輸入和輸出之間人為地切割成許多子模組(或多個階段),每個子模組分開學習。
例如一個自然語言理解任務,一般需要分詞、詞性標註、句法分析、語意分析、語意推理等步驟。
這種學習方式有兩個問題
一是每一個模組都需要單獨優化,其優化目標和任務總體目標並不能保證一致。
二是錯誤傳播,也就是前一步的錯誤會對後續的模型造成很大的影響。這樣就增加了機器學習方法在實際應用上的難度。
新類型學習方式
端對端學習(End-to-End Learning),也稱端對端訓練,是指在學習過程中不進行分模組或分階段進行訓練,直接優化任務的總體目標。
一般不需要明確地給予不同模組或階段的功能,中間過程不需要人為介入。
大部分採用神經網路模型的深度學習也可以看作是一種端到端的學習。
常用的深度學習框架
Theano:蒙特婁大學的Python工具包,用來有效率地定義、最佳化和執行 Theano 專案目前已停止維護。 多維數組資料對應數學表達式。 Theano 可以透明的使用 GPUs 和高效的符號 微分。
Caffe:全稱為 Convolutional Architecture for Fast Feature Embedding,是卷積網路模型的運算框架,所要實現的網路結構可以在設定檔中指定,不需要編碼。 Caffe是用C 和Python實現,主要用於電腦視覺。
TensorFlow:Google公司開發的Python工具包,可以在任意具備CPU或GPU的裝置上運作。 TensorFlow的計算過程使用資料流程圖來表示。 Tensor Flow的名字來自其計算過程中的操作物件為多維數組,即張量(tensor)。
Chainer:一個最早採用動態運算圖的神經網路框架,其核心開發團隊為來自日本的機器學習新創公司Preferred Networks。和Tensorflow、Theano、Caffe等框架所使用的靜態計算圖相比,動態計算圖可以在運行時動態地建立計算圖,因此非常適合進行一些複雜的決策或推理任務
PyTorch5:由Facebook、NVIDIA、Twitter等公司開發維護的深度學習框架,其前身為Lua語言的Torch6。 PyTorch也是基於動態計算圖的框架,在需要動態改變神經網路結構的任務中有著明顯的優勢。
本書的組織架構
感知機
感知機是具有輸入和輸出的演算法。給定一個輸入後,將輸出一個既定的值。
感知機將權重和偏移設定為參數
使用感知機可以表示與閘和或閘等邏輯電路。
異或門無法透過單層感知機來表示。
使用2層感知機可以表示異或門
單層感知機只能表示線性空間,而多層感知機可以表示非線性空間。
2層感知機(在理論上)就可以表示計算機。
神經網路
感知機和神經網絡
「樸素感知機」是指單層網絡,指使用階躍函數這個活化函數的模型。
「多層感知機」是指神經網絡,即使用sigmoid函數或ReLU函數等平滑的激活函數的多層網絡。
運算:神經網路的內積
Y = np.dot(X, W)
透過使用矩陣運算,可以有效率地實現神經網路。
Affine層
神經網路的正向傳播中進行的矩陣的乘積運算在幾何學領域被稱為“仿射變換”
仿射變換包含一次線性變換和一次平移,分別對應神經網路的加權和運算與加偏置運算。
Y = sigmoid(Y)
輸出層
啟動函數:回歸問題用恆等函數,分類問題用softmax函數
恆等函數
輸入訊號會原封不動地被輸出
softmax函數
假設輸出層共有n個神經元,計算第k個神經元的輸出yk。
特點:輸出層的輸出值總和為1
注意:溢出問題
數量
分類問題
一般設定為類別的數量
手寫數字識別
輸入層有28*28=784個神經元,輸出層有10個神經元。還有兩個隱藏層,神經元數量可以為任意值
批次處理
一次輸入多組數據
神經網路的學習
損失函數
引入概念
尋找最優參數(權重和偏壓)時,要尋找使損失函數的值盡可能小的參數,所以要計算參數的導數(確切地講是梯度)
為什麼不直接以辨識精度作為指標
參數的導數在絕大多數地方都會變成0
作為激活函數的階躍函數也有同樣的情況
類型
均方誤差
交叉熵誤差
mini-batch
抽一部分測試數據出來
梯度
由全部變數的偏導數彙總而成的向量稱為梯度
梯度指示的方向是各點的函數值減少最多的方向
超參數
人工設定
學習率n
minibatch的大小
更新次數iters_num
訓練獲得
權重w和偏置theta
神經網路
損失函數關於權重參數的梯度
epoch
循環次數/minibatch的大小
隨機梯度下降法(SGD)
對隨機選擇的資料進行梯度下降
誤差反向傳播法
數值微分雖然簡單,也容易實現,但缺點是計算上比較花時間。有一種能夠有效率地計算權重參數的梯度的方法:誤差反向傳播法
計算圖
透過使用計算圖,可以直觀地掌握計算過程
計算圖的正向傳播進行一般性的計算。透過計算圖的反向傳播,可以計算出各節點的導數
第l層的誤差項可以透過第l 1層的誤差項計算 得到,這就是誤差的反向傳播。
公式
計算
黃色的量是反向傳播時所得到的數值
綠色的量是已知量
透過將神經網路的組成元素實現為層,可以有效地計算梯度
透過比較數值微分和誤差反向傳播法所得到的結果,可以確認誤差反向傳播法的實現是否正確(梯度確認)
參考影片
https://www.bilibili.com/video/BV1LM411J7cW/?spm_id_from=333.788&vd_source=048c7bdfe54313b8b3ee1483d9d07e38
卷積神經網絡
一切都應該盡可能地簡單,但不能過於簡單。 [艾伯特愛因斯坦]
整體結構
對比
基於全連接層(Affine層)的網絡
基於CNN的網絡
連結順序
Convolution[卷積層]-ReLU-(Pooling[池化層])
靠近輸出的層使用了先前的Affine[仿射變換] - ReLU組合
最後輸出層使用了先前的Affine - Softmax組合
卷積層
卷積概念
全連接層存在的問題
資料的形狀被「忽略」了,影像通常是高、長、通道方向上的3維形狀,但在輸入時需要將3維資料拉平為1維數據
影像是3維形狀,這個形狀應該含有重要的空間資訊。
空間上鄰近的像素為相似的值
RBG的各個通道之間分別有密切的關聯性
相距較遠的像素之間沒有什麼關聯
而卷積層可以保持形狀不變
定義
卷積層的輸入輸出資料稱為特徵圖
卷積層的輸入資料稱為輸入特徵圖
輸出資料稱為輸出特徵圖
卷積運算
卷積運算相當於影像處理中的濾波器運算
卷積的主要功能是在一個影像(或某種特徵)上滑動一個卷積核(即濾波器),透過卷積操作得到一組新的特徵。
QR 圖
給定一個影像 X ∈ R(M×N),且濾波器 W ∈ R (m×n),一般m << M, n << N,其捲積為
三維
互相關
在計算卷積的過程中,往往需要進行卷積核翻轉
翻轉就是從兩個維度(從上到下、從左到右)顛倒次序,即旋轉180度。
具體實作上,以互相關操作來代替卷積,從而減少一些不必要的操作或開銷。
互相關(Cross-Correlation)是一個衡量兩個序列相關性的函數,通常是用滑動視窗的點積計算來實現。
給定一個影像X ∈ R(M×N)和卷積核W ∈ R (m×n),它們的互相關為
互相關和卷積的差異僅在於卷積核否進行翻轉。互相關也可以稱為不翻轉卷積。
在神經網路中使用卷積是為了進行特徵抽取,卷積核是否進行翻轉和其特徵抽取的能力無關。特別是當卷積核是可學習的參數時,卷積和互相關是等價的。
卷積的變種
零填充
為了保持空間大小不變,需要對輸入資料填充
步幅
應用濾波器的位置間隔稱為步幅
常用的捲積
窄捲積(Narrow Convolution):步長s = 1,兩端不補零p = 0,卷積後輸出長度為n − m 1。
寬卷積(Wide Convolution):步長s = 1,兩端補零p = m − 1,卷積後輸出長度n m − 1。
等寬卷積(Equal-Width Convolution):步長s = 1,兩端補零p = (m −1)/2,卷積後輸出長度n。
卷積的數學性質
3維資料的捲積運算
輸入資料和濾波器的通道數要設為相同的值
多個卷積運算
關於卷積運算的濾波器,也必須考慮濾波器的數量。因此,作為4維數據,濾波器的權重數據要依照(output_channel, input_channel, height, width)的順序書寫。例如,通道數為3、大小為5 × 5的濾波器有20個時,可以寫成(20, 3, 5, 5)。
批次處理
我們希望卷積運算也同樣對應批次。為此,需要將在各層間傳遞的資料保存為4維資料。具體地講,就是依照(batch_num, channel, height, width)的順序保存資料。
卷積層的性質
局部連結:在卷積層(假設是第l 層)中的每一個神經元都只與下一層(第l − 1層)中某個局部視窗內的神經元相連,構成一個局部連結網路。卷積層和下一層之間的連接數大大減少,由原來的n(l) × n(l - 1)個連接變為n(l) × m個連接。 m為濾波器大小。
權重共享:作為參數的濾波器w(l)對於第l層的所有的神經元都是相同的。
由於局部連接和權重共享,卷積層的參數只有一個m維的權重w(l) 和1維的偏壓b(l),共m 1個參數。
第l 層的神經元個數不是任意選擇的,而是滿足n(l) = n(l−1) − m 1。
池化層
也叫匯聚層,子採樣層
池化是特徵選擇,降低特徵數量,從而減少參數數量,降低特徵維度,縮小高、長方向上的空間。
常用的匯聚函數
最大匯聚(Maximum):一般是取一個區域內所有神經元的最大值。
平均匯聚(Mean):一般是取區域內所有神經元的平均值。
典型的匯聚層是將每個特徵映射劃分為2×2大小的不重疊區域,然後使用最大匯聚的方式進行下取樣。
匯聚層也可以看做是一個特殊的捲積層
早期的一些卷積網路(如LeNet-5)中,有時也會在匯聚層使用非線性活化函數
其中Y(′d) 為匯聚層的輸出,f(·)為非線性激活函數,w(d) 和b(d) 為可學習的標量權重和偏壓。
池化層的特徵
沒有要學習的參數
通道數不會發生變化
對微小的位置變化具有穩健性(健壯性)
參數學習
誤差項的計算
CNN的視覺化
第1層權重的可視化
學習前的濾波器是隨機進行初始化的,所以在黑白的濃淡上沒有規律可循,但學習後的濾波器變成了規律的圖像。我們發現,透過學習,濾波器被更新成了規律的濾波器,例如從白到黑漸變的濾波器、含有塊狀區域(稱為blob)的濾波器等。對水平方向上和垂直方向上的邊緣有響應的濾波器
由此可知,卷積層的濾波器會擷取邊緣或斑塊等原始資訊。而剛才實作的CNN會將這些原始訊息傳遞給後面的層。
基於分層結構的資訊擷取
CNN的捲積層中提取的資訊。第1層的神經元對邊緣或斑塊有反應,第3層對紋理有反應,第5層對物體部件有反應,最後的全連接層對物體的類別(狗或車)有反應
如果堆疊了多層卷積層,則隨著層次加深,提取的資訊也愈加複雜、抽象,這是深度學習中很有意思的一個地方。隨著層次加深,神經元從簡單的形狀變化到「高級」訊息。換句話說,就像我們理解東西的「意義」一樣,回應的對像也逐漸改變。
典型的捲積神經網絡
LeNet-5
LeNet在1998年被提出,是進行手寫數字辨識的網路。它有連續的捲積層和池化層,最後經由全連接層輸出結果。
不計輸入層,LeNet-5共有7層
輸入層:輸入影像大小為32 × 32 = 1024。
卷積層:使用6個5 × 5的濾波器,得到6組大小為28 × 28 = 784的特徵映射。因此,C1層的神經元數為6 × 784 = 4704,可訓練參數數為6 × 25 6 = 156,連接數為156 × 784 = 122304(包括偏壓在內,下同)。
匯聚層:取樣視窗為2×2,使用平均匯聚,並使用非線性函數。神經元個數為 6 × 14 × 14 = 1176,可訓練參數數為6 × (1 1) = 12,連接數為6 × 196 × (4 1) = 5, 880。
卷積層。 LeNet-5中以一個連接表定義輸入與輸出特徵映射之間的依賴關係,如圖所示,共使用60個5 × 5的濾波器,得到16組大小為10 × 10的特徵映射。神經元數為16 × 100 = 1, 600,可訓練參數數為(60 × 25) 16 = 1, 516,連接數為100 × 1, 516 = 151, 600。
匯聚層,採樣視窗為2 × 2,得到16個5 × 5大小的特徵映射,可訓練參數數為16 × 2 = 32,連接數為16 × 25 × (4 1) = 2000。
個卷積層,使用120 × 16 = 1, 920個5 × 5的濾波器,得到120組大小為1 × 1的特徵映射。 C5層的神經元數為120,可訓練參數數為1, 920 × 25 120 = 48120,連接數為120 × (16 × 25 1) = 48120。
全連接層,有84個神經元,可訓練參數數量為84×(120 1) =10164。連接數和可訓練參數個數相同,為10164。
輸出層:輸出層由10個歐氏徑向基底函數
連接表
卷積層的輸入和輸出特徵映射之間的全連接關係不是必須的,可以採用非共享卷積
定義一個連接表(Link Table)T 來描述輸入和輸出特徵映射之間的連接關係。
如果第p個輸出特徵映射依賴第d個輸入特徵映射,則Tp,d = 1,否則為0。
AlexNet
2012年被提出,使用了許多現代深度卷積網路的一些技術方法
使用 GPU 進行平行訓練
激活函數使用ReLU
使用Dropout,防止過擬合
使用數據增強來提高模型準確率
使用進行局部正規化的LRN(Local Response Normalization)層
Inception 網路
Inception模組:一個卷積層包含多個不同大小的捲積操作
Inception網路是由有多個inception模組和少量的匯聚層堆疊而成。
V1版本
Inception 網路最早的 v1 版本就是非常著名的 GoogLeNet [Szegedy et al.,2015],並贏得了2014年ImageNet影像分類競賽的冠軍。
殘差網路ResNet
透過為非線性的捲積層增加直連邊的方式來提高訊息的傳播效率。
非線性單元
可以為一層或多層的捲積層
讓這個非線性單元f(x, θ)去逼近一個目標函數為h(x)
一個由神經網路構成的非線性單元有足夠的能力來近似逼近原始目標函數或殘差函數,但實際上後者更容易學習
結論:讓非線性單元f(x, θ)去近似殘差函數h(x)−x,用f(x, θ) x去逼近h(x)。
殘差網路就是將很多個殘差單元串連起來所構成的一個非常深的網路。
其他卷積方式
轉置卷積
空洞卷積(膨脹卷積)
深度學習
加深網路
往更深的網路出發
這個網絡參考了下一節要介紹的VGG
基於3×3的小型濾波器的捲積層
激活函數是ReLU
全連接層的後面使用Dropout層
基於Adam的最優化
使用He初始值作為權重初始值
辨識精度為99.38%
進一步提高辨識精度
整合學習
學習率衰減
Data Augmentation(資料擴充)
透過施加旋轉、垂直或水平方向的移動、裁剪、翻轉、增加亮度等微小變化,增加影像的數量
加深層的動機
提高識別性能
從以ILSVRC為代表的大規模影像辨識的比賽結果可以看出加深層的重要性。這種比賽的結果顯示,最近前幾名的方法多是基於深度學習的,並且有逐漸加深網絡的層的趨勢。也就是說,可以看到層越深,辨識性能也越高。
減少網路的參數數量
疊加小型濾波器來加深網路的好處是可以減少參數的數量,擴大感受野(receptive field,給神經元施加變化的某個局部空間區域)。並且,透過疊加層,將 ReLU等活化函數夾在卷積層的中間,進一步提升了網路的表現力。這是因為在網路上添加了基於激活函數的「非線性」表現力,透過非線性函數的疊加,可以表現出更複雜的東西。
使學習更有效率
與沒有加深層的網路相比,透過加深層,可以減少學習數據,從而有效率地進行學習。
深度學習網路結構
ILSVRC比賽
ImageNet,它包含了各種各樣的圖像,並且每張圖像都被關聯了標籤(類別名稱)。每年都會舉辦使用這個巨大資料集的ILSVRC影像辨識比賽。
2012年舉辦的大規模影像辨識比賽ILSVRC。在那年的比賽中,基於深度學習的方法(通稱AlexNet)以壓倒性的優勢勝出,徹底顛覆了以往的影像辨識方法。在之後的比賽中,深度學習一直活躍在舞台中央。
特別是2015年的ResNet(一個超過150層的深度網路)將錯誤辨識率降低到了3.5%。據說這個結果甚至超過了一般人的辨識能力。
VGG
VGG是由卷積層和池化層所構成的基礎的CNN。不過它的特色在於將有權重的層(卷積層或全連接層)疊加至16層(或19層),具備了深度(根據層的深度,有時也稱為“VGG16”或“VGG19”) 。
GoogLeNet
網路不僅在縱向上有深度,在橫向上也有廣度,被稱為Inception結構
ResNet
具有比以前的網路更深的結構
我們已經知道加深層對於提升效能很重要。但是,在深度學習中,過度加深層的話,很多情況下學習將無法順利進行,導致最終表現不佳。 ResNet中,為了解決這類問題,導入了「快捷結構」(也稱為「捷徑」或「小路」)。導入這個快捷結構後,就可以隨著層的加深而不斷提高性能了(當然,層的加深也是有限制的)。
實踐中經常會靈活應用使用ImageNet這個巨大的數據集學習到的權重數據,這稱為遷移學習,將學習完的權重(的一部分)複製到其他神經網絡,進行再學習(fine tuning)。例如,準備一個和 VGG相同結構的網絡,把學習完的權重當作初始值,以新資料集為對象,再學習。遷移學習在手頭資料集較少時非常有效。
深度學習的高速化
需要努力解決的問題
AlexNet的forward處理各層的時間比:左邊是使用GPU的情況,右邊是使用CPU的情況。圖中的「conv」對應卷積層,「pool」對應池化層,「fc」對應全連接層,「norm」對應正規化層
卷積層的處理時間加起來佔GPU整體的95%,佔CPU整體的89%
基於GPU的高速化
GPU主要由NVIDIA和AMD兩家公司提供。雖然兩家的GPU都可以用於通用的數值計算,但與深度學習比較「親近」的是NVIDIA的GPU。實際上,大多數深度學習框架只受益於NVIDIA的GPU。這是因為深度學習的架構中使用了NVIDIA提供的CUDA這個以GPU運算為導向的綜合開發環境。
分散式學習
在多個GPU或多台機器上進行分散式運算
Google的TensorFlow、微軟的CNTK在開發過程中高度重視分散式學習
橫軸是GPU的個數 縱軸是與單一GPU相比時的高速化率
運算精度的位數縮減
關於數值精度(用幾位數據表示數值),我們已經知道深度學習不那麼需要數值精度的位數。這是神經網路的一個重要性質。這個性質是基於神經網路的健壯性而產生的。
今後半精度浮點數將作為標準使用,可望實現超過上一代 GPU約 2倍的高速化
深度學習的應用案例
物體偵測
從影像中確定物體的種類和物體的位置
在使用CNN進行物件偵測的方法中,有一個叫作R-CNN的方法
影像分割
在像素層級上對影像進行分類
FCN透過一次forward處理,對所有像素分類
FCN的字面意思是「全部由卷積層構成的網路」。相對於一般的CNN包含全連接層,FCN將全連接層替換成發揮相同功能的捲積層。
圖像標題的生成
一個基於深度學習生成圖像標題的代表性方法是被稱為NIC
NIC由深層的CNN和處理自然語言的RNN(Recurrent Neural Network)構成
深度學習的未來
影像風格變換
影像的生成
自動駕駛
強化學習
自然語言和單字的分佈式表示
Marty: “This is heavy(棘手).” Dr. Brown: “In the future, things are so heavy(重)?” —電影《回到未來》
什麼是自然語言處理
我們的語言是由文字構成的,而語言的意思是由單字構成的。換句話說,單字是意義的最小單位。
讓電腦理解單字意義的三種方法
基於同義詞詞典的方法
基於計數的方法
基於推理的方法(word2vec)
基於同義詞詞典的方法
考慮透過人工方式來定義單字意義
目前被廣泛使用的是同義詞詞典
根據各單字的意思,基於上位-下位關係的圖
WordNet
最著名的同義詞詞典
作用
獲得單字的近義詞
計算單字之間的相似度
透過NLTK模組使用
存在的問題
新詞不斷出現,難以順應時代變化
人力成本高
無法表示單字的微妙差異
基於計數的方法
語料庫
語料庫就是大量的文字數據
自然語言處理領域中使用的語料庫有時會為文字資料添加額外的資訊。例如,可以給文字資料的各個單字標記詞性。這裡,假定我們使用的語料庫沒有加上標籤。
基於 Python的語料庫的預處理
著名的語料庫
Wikipedia 和 Google News
預處理
大寫 -> 小寫
text.lower()
處理標點
text.replace('.', ' .')
re.split('(\W )', text)
\W:符合非單字字元(非字母、數字或底線)
:表示匹配前面的模式“\W”重複一次或多次
建立單字 ID 和對應表
將單字列表轉換為單字 ID 列表
corpus = [word_to_id[w] for w in words]
單字的分佈式表示
在單字領域建立緊湊合理的向量表示
分散式假設
某個單字的意思是由它周圍的單字形成
上下文是指某個居中單字的周圍詞彙
上下文的大小稱為視窗大小
視窗大小為 1,上下文包含左右各 1 個單字
共現矩陣
向量最簡單的方法是對它的周圍出現了多少次什麼單字進行計數
text = 'You say goodbye and I say hello.'
將視窗大小設為 1
向量間的相似度
餘弦相似度
相似單字的排序
取出查詢詞的單字向量
分別求查詢字的字向量和其他所有字向量的餘弦相似度
基於餘弦相似度的結果,按降序顯示它們的值
基於計數的方法的改進
點互資訊
在共現矩陣中,像 the 這種常用詞,會被認為與 car 這種名詞有強烈的相關性
PMI
,P(x) 表示 x 發生的機率,P(y) 表示 y 發生的機率,P(x, y) 表示 x和 y 同時發生的機率。
基於共現矩陣的PMI
不足
當兩個字的共現次數為 0 時,log(2)(0) = −∞
正的點互資訊
根據共現矩陣得出PPMI矩陣
降維
我們要觀察資料的分佈,並發現重要的“軸”
奇異值分解(SVD)
SVD 將任意矩陣分解為 3 個矩陣的乘積
其中 U 和 V 是列向量彼此正交的正交矩陣,S 是除了對角線元素以外其餘元素均為 0 的對角線矩陣
可以透過去除矩陣 U 中的多餘的列向量來近似原始矩陣
U, S, V = np.linalg.svd(W)
如果矩陣大小是 N*N,SVD 的計算的複雜度將達到 O(N^3)。所以往往會使用Truncated SVD等更快的方法。 Truncated SVD 透過截去奇異值較小的部分,從而實現高速化。
from sklearn.utils.extmath import randomized_svd U, S, V = randomized_svd(W, n_components=wordvec_size, n_iter=5, random_state=None)
PTB資料集
PTB 語料庫經常被用來作為評價提案方法的基準
PTB 語料庫所做的預處理
括將稀有單字替換成特殊字元
將具體的數字替換成“N”
我做的預處理
將所有句子連接起來,並將其視為一個大的時序資料。此時,在每個句子的結尾處插入一個特殊字元 <eos>
超參數賦值
window_size = 2
wordvec_size = 100
基於 PTB資料集的評價
對於查詢詞 you,可以看到 i、we 等人稱代名詞排在前面,這些都是語法上有相同用法的字。
查詢詞 year 有month、quarter 等近義詞。
查詢詞 car 有 auto、vehicle 等近義詞。
將 toyota 作為查詢詞時,出現了 nissan、honda 和 lexus 等汽車製造商名或品牌名。
總結
使用語料庫,計算上下文中的單字數量,將它們轉換 PPMI 矩陣,再基於 SVD 降維獲得好的單字向量
word2vec
“沒有判斷依據,就不要去推理。” ——亞瑟·柯南·道爾 《波希米亞醜聞》
詞嵌入
Word2Vec是一種用於產生"詞嵌入"的演算法
除了Word2Vec之外,還有其他生成詞嵌入的方法,例如 GloVe(Global Vectors for Word Representation)、FastText 等。這些方法可能使用不同的策略和演算法,但它們的目標都是在向量空間中有效地捕捉詞彙的語義資訊。
基於推理的方法和神經網絡
基於計數的方法的問題
在現實世界中,語料庫處理的單字數量非常大。比如,據說英文的詞彙量超過 100 萬個。如果詞彙量超過 100 萬個,那麼使用基於計數的方法就需要產生一個 100 萬 × 100 萬的龐大矩陣,但對如此龐大的矩陣執行 SVD 顯然是不切實際的。
基於推理的方法使用神經網絡
在 mini-batch 數據上學習。也就是使用部分數據學習,反覆更新權重。
神經網路的學習可以使用多台機器、多個 GPU 並行執行,加速整個學習過程。
基於推理的方法的概要
目標
當給出周圍的單字(上下文)時,預測中間會出現什麼單詞,就像完形填空一樣
推理方法
輸入上下文,模型輸出各個單字的出現機率
作為模型學習的產物,我們會得到單字的分佈式表示
神經網路中單字的處理方法
把單字轉換成向量
神經網路無法直接處理像 you 或 say 這樣的單詞,要用神經網路處理單詞,需要先將單字轉換為固定長度的向量
轉換方式
one-hot向量
只有一個元素是 1,其他元素都是 0
神經網路
輸入層
全連接層
初始權重是隨機的
簡單的 word2vec
CBOW模型的推理
結構
特點
有兩個輸入層
從輸入層到中間層的變換由相同的全連接層(權重為W(in))完成
從中間層到輸出層神經元的變換由另一個全連接層(權重為 W(out))完成
中間層的神經元是各個輸入層經全連接層轉換後所得到的值的「平均
輸出層的神經元是各個單字的得分,它的數值越 大,表示對應單字的出現機率越高。
CBOW模式的學習
使用 Softmax 函數將得分轉換為機率
求這些機率和監督標籤之間的交叉熵誤差
將其作為損失進行學習
word2vec的權重和分散式表示
W(in)權重就是我們要的單字的分佈式表示
學習數據的準備
上下文和目標詞
轉化為one-hot表示
CBOW模型的實現
補充說明
CBOW模型與機率
在 wt−1 和 wt 1 發生後,wt 發生的機率
CBOW 模型的損失函數L(負對數似然)
skip-gram模型
word2vec 有兩個模型
CBOW
skip-gram
skip-gram 是反轉了 CBOW 模型處理的上下文和目標字的模型。
skip-gram網絡結構圖
skip-gram模型和機率
skip-gram 模型的輸入層只有一個,輸出層的數量則與上下文的單字個數相等。首先要分別求出各個輸出層的損失然後將它們加起來作為最後的損失。
根據中間字(目標字)wt 預測上下文 wt−1 和 wt 1 的情況
skip-gram 模型的損失函數可以表示為
損失函數對比
skip-gram 模型的預測次數和上下文單字數量一樣多,所以它的損失函數需要求各個上下文單字對應的損失的總和。而CBOW模型只需要求目標字的損失。
從單字的分佈式表示的準確度來看,在大多數情況下,skip-grm 模型的結果會更好。
基於計數與基於推理
需要在詞彙表中添加新單字並更新單字的分佈式表示的場景
基於計數的方法需要從頭開始計算
基於推理的方法允許參數的增量學習
單字的分佈式表示的性質
基於計數的方法主要是編碼單字的相似性
基於推理的方法可以理解複雜的單字之間的模式
kingman woman = queen
單字的分佈式表示的準確度
基於推理的方法和基於計數的方法難分上下
word2vec的高速化
不要企圖無所不知,否則你將一無所知。 ——德謨克利特(古希臘哲學家)
改進
學習
其他
word2vec的應用
使用 word2vec 得到的單字的分佈式表示可以用來找出近似單字
遷移學習
在某個領域學到的知識可以被應用在其他領域
在解決自然語言處理任務時,一般不會使用word2vec 從零開始學習單字的分散式表示,而是先在大規模語料庫(Wikipedia、Google News 等文字資料)上學習,然後將學習好的分散式表示應用於某個單獨的任務。
在文本分類、文本聚類、詞性標註和情感分析等自然語言處理任務中,第一步的單字向量化工作就可以使用學習好的單字的分佈式表示。
在幾乎所有類型的自然語言處理任務中,單字的分佈式表示都有很好的效果!
使用單字的分佈式表示,也可以將文件(單字序列)轉換為固定長度的向量。
如果可以將自然語言轉換為向量,就可以使用許多機器學習方法
單字向量的評價方法
手動創建的單字相似度評估集來評估
cat 和 animal 的相似度是 8,cat 和 car 的相似度是 2…類似這樣,用 0 ~ 10 的分數人工地對單字之間的相似度打分。
比較人所給的分數和 word2vec 所給的餘弦相似度,檢視它們之間的相關性
結論
模型不同,精度不同(根據語料庫選擇最佳的模型)
語料庫越大,結果越好(始終需要大數據)
單字向量的維數必須適中(太大會導致精確度變差)
RNN
只記得我在一個昏暗潮濕的地方喵喵地哭泣著。 ——夏目漱石《我是貓》
機率和語言模型
單純的前饋網路無法充分學習時序資料的性質。於是,RNN(Recurrent Neural Network,循環神經網路)便應運而生。
機率視角下的word2vec
CBOW 模型原本的目的「從上下文預測目標字」是否可以用來做些什麼呢? P(wt|wt−2, wt−1) 是否可以在一些實際場景中發揮作用?
我們之前考慮的窗口都是左右對稱的,之後我們只考慮左側窗口
語言模型
使用機率來評估一個單字序列發生的可能性,即在多大程度上是自然的單字序列的機率
機率表示
其中P(A,B) = P(A|B)*P(B) = P(B|A)*P(A)
將CBOW模型用作語言模型
馬爾科夫鏈
當某個事件的機率只取決於其前面的 N 個事件時,稱為「N 階馬可夫鏈」。
將上下文限定為左側的 2 個字就是2階馬爾科夫鏈
不足
如果視窗過短會導致不能結合上下文
如果視窗過長會導致忽視上下文中單字順序
CBOW 是 Continuous Bag-Of-Words 的簡稱。 Bag-Of-Words 是「一袋子單字」的意思,這意味著袋子中單字的順序被忽視了。
RNN 有一個機制,那就是無論上下文有多長,都能記住上下文資訊。因此,使用 RNN 可以處理任意長度的時序資料。
word2vec 是以取得單字的分散式表示為目的的方法,一般不會用於語言模型。
RNN
循環的神經網絡
RNN層的結構
時刻 t 的輸入是 xt,暗示時序資料 (x0, x1, ··· , xt, ···) 會被輸入到層中。然後,以與輸入對應的形式,輸出 (h0, h1, ··· , ht, ···)
輸出有兩個分叉,這意味著同一個東西被複製了。輸出中的一個分叉將成為其自身的輸入。
展開循環
我們用「時刻」這個詞表示時序資料的索引(也就是說時刻 t 的輸入資料為 xt)。既使用「第 t 個單字」「第 t 個 RNN 層」這樣的表達,也使用「時刻 t 的單字」或「時刻 t 的 RNN 層」這樣的表述。
各個時刻的 RNN 層接收兩個值,分別是傳給該層的輸入和前一個RNN 層的輸出
RNN 有兩個權重,分別是將輸入 x轉換為輸出 h 的權重 Wx 和將前一個 RNN 層的輸出轉換為當前時刻的輸出的權重 Wh。此外,還有偏置 b。
從另一個角度看,RNN 具有狀態h,透過上述公式不斷更新狀態。所以h可以被變成隱藏狀態或隱藏狀態向量
兩種示意圖畫法是等價的
Backpropagation Through Time
基於時間的反向傳播
要基於 BPTT 求梯度,必須在記憶體中保存各個時刻的 RNN 層的中間資料。因此,隨著時序資料變長,電腦的記憶體使用量(不只是計算量)也會增加。
Truncated BPTT
為了解決上面的問題,在處理長時序資料時,通常的做法是將網路連線截成適當的長度。
將時間軸方向上過長的網絡在適當的位置進行截斷,從而創建多個小型網絡,然後對截出來的小型網絡執行誤差反向傳播法,這個方法稱為 Truncated BPTT(截斷的 BPTT)。
在 Truncated BPTT 中,網路的反向傳播的連結被截斷,正向傳播的連結依然被維持。
處理順序
首先要做的是,將第 1 個區塊的輸入資料 (x0, ... , x9) 輸入 RNN 層。
先進行正向傳播,再進行反向傳播,這樣可以得到所需的梯度。
接著,將下一個區塊的輸入資料 (x10, x11, ··· , x19) 輸入 RNN 層。這個正向傳播的計算需要前一個區塊最後的隱藏狀態 h9,這樣可以維持正向傳播的連結。
Truncated BPTT的mini-batch學習
在輸入資料的開始位置,需要在各個批次中進行「偏移」。
注意
若要依序輸入數據
若要平移各批次(各樣本)輸入資料的開始位置
RNN的實現
考慮到基於 Truncated BPTT 的學習,目標神經網路接收長度為 T 的時序資料(T 為任意值),可以將此T個狀態視為一個層
將一次處理 T 步的層稱為“Time RNN 層”
將進行 Time RNN 層中的單步處理的層稱為“RNN 層”
像 Time RNN 這樣,將整體處理時序資料的圖層以單字「Time」開頭命名,這是本書中規定的命名規範。之後,我們也會實作 Time Affine 層、Time Embedding 層等
RNN層的實現
正向傳播
反向傳播
Time RNN層的實現
正向傳播
Time RNN層將隱藏狀態h保存在成員變數中,以在區塊之間繼承隱藏狀態
透過參數stateful來記錄隱藏狀態h是否呼叫。在反向傳播中,當 stateful 為 False 時,第一個 RNN 層的隱藏狀態是零矩陣。
反向傳播
我們將流向上一時刻的隱藏狀態的梯度存放在成員變數 dh 中。這是因為在第 7 章探討 seq2seq(sequence-to-sequence,序列到序列)時會用到它
處理時序資料的層的實現
RNNLM的全貌圖
將基於 RNN 的語言模型稱為 RNNLM
結構
第 1 層是 Embedding 層,該層將單字 ID 轉換為單字的分佈式表示(單字向量)。這個單字向量被輸入到 RNN 層。
RNN 層向下一層(上方)輸出隱藏狀態,同時也向下一時刻的 RNN 層(右側)輸出隱藏狀態。
RNN 層上方輸出的隱藏狀態經過 Affine 層,傳給 Softmax 層。
範例
you say goodbye and i say hello
第 1 個單詞,單字 ID 為 0 的 you 被輸入。此時,查看 Softmax層輸出的機率分佈,可知 say 的機率最高,這表示正確預測出了 you 後面出現的單字為 say。
第 2 個單字 say。此時,Softmax 層的輸出在 goodbye處和 hello 處機率較高。因為RNN層將「you say」這過去的資訊保存為了簡短的隱藏狀態向量。 RNN 層的工作是將這個訊息傳送到上方的 Affine 層和下一刻的 RNN 層。
Time層的實現
目標神經網路結構
Time Affine
Time Affine 層並不是單純地使用 T 個Affine 層,而是使用矩陣運算實現了高效的整體處理。
Time Softmax
在 Softmax 中一併實現損失誤差 Cross Entropy Error 層計算交叉熵誤差
T 個Softmax with Loss 層各自算出損失,然後將它們加在一起取平均,將得到的值作為最終的損失。
RNNLM的學習與評價
RNNLM的實現
語言模型的評價
輸入資料為1個
困惑度(perplexity)常被用來作為評價語言模型的預測表現的指標。困惑度=1/機率
輸入資料為多個
這裡,假設資料量為 N 個。 tn 是 one-hot 向量形式的正確解標籤,tnk 表示第 n 個資料的第 k 個值,ynk 表示機率分佈(神經網路中的 Softmax 的輸出)。順便說一下,L 是神經網路的損失
機率越大越好,困惑度越小越好
困惑度表示下一個可以選擇的選項的數量。如果困惑度是1.25,表示下一個字的候選個數是1個左右。
RNNLM的學習
RNNLM的Trainer類
把上述操作封裝成了類
擴展到圖結構
遞歸神經網路
有三個隱藏層h1、h2 和h3,其中h1 由兩個輸入x1 和 x2 計算得到,h2 由另外兩個輸入層 x3 和x4 計算得到,h3 由兩個隱藏層h1 和h2 計算得到。
圖中網路
Gated RNN
卸下包袱,輕裝上陣。 ——尼采
當我們說 RNN 時,更多的是指 LSTM 層,而不是上一章的 RNN當需要明確指上一章的 RNN 時,我們會說「簡單RNN」或「Elman」。
簡單RNN的問題
在學習的過程中,RNN 層透過向過去傳遞“有意義的梯度”,學習時間方向上的依賴關係。但學習的梯度很難控制,這會導致梯度消失或梯度爆炸
原因
激活函數
tanh
從圖中可以看出,它的值小於1.0,且隨著 x 遠離 0,它的值在變小。這意味著,當反向傳播的梯度經過tanh 節點時,它的值會越來越小。因此,如果經過 tanh 函數 T 次,則梯度也會減少 T 次。
ReLU
梯度不會退化
MatMul(矩陣乘積)節點
梯度爆炸
如圖可知梯度的大小隨時間步長呈指數級增加,如果發生梯度爆炸,最終就會導致溢出,出現 NaN(Not a Number,非數值)之類的值。如此一來,神經網路的學習將無法正確運作。
梯度消失
如圖可知梯度的大小隨時間步長呈指數級減少,若發生梯度消失,梯度會迅速變小。一旦梯度變小,權重梯度不能被更新,模型就會無法學習長期的依賴關係。
變化原因
矩陣 Wh 被重複乘了 T 次。如果 Wh 是標量,則問題將很簡單:當 Wh 大於 1 時,梯度呈指數級增加;當 Wh小於 1 時,梯度呈指數級會減少。
如果 Wh 是矩陣。此時,矩陣的奇異值將成為指標。簡單而言,矩陣的奇異值表示資料的離散程度。根據這個奇異值(更準確地說是多個奇異值中的最大值)是否大於 1,可以預測梯度大小的變化。
梯度爆炸的對策
解決梯度爆炸有既定的方法,稱為梯度裁剪
這裡假設可以將神經網路用到的所有參數的梯度整合成一個變量,並以符號g 表示。然後將閾值設為 threshold。此時,如果梯度的 L2 範數g大於或等於閾值,就依上述方法修正梯度。
梯度消失和LSTM
在 RNN 的學習中,梯度消失也是一個大問題。為了解決這個問題,需要從根本上改變 RNN 層的結構,這裡本章的主題 Gated RNN 就要登場了。人們已經提出了許多 Gated RNN 框架(網路結構),其中具有代表性的有LSTM 和 GRU。
LSTM的接口
LSTM是Long Short-Term Memory(長短期記憶)的縮寫,意思是可以長(Long)時間維持短期記憶(Short-Term Memory)。
先將tanh(h(t−1)*Wh xt*Wx b) 這個計算表示為一個長方形節點 tanh(ht−1 和 xt 是行向量)
讓我們來比較一下 LSTM 與 RNN 的介面(輸入和輸出)
LSTM 與 RNN 的介面的不同之處在於,LSTM 還有路徑 c。這個 c 稱為記憶單元(或簡稱為「單元」),相當於 LSTM 專用的記憶部門。
記憶單元的特徵是,僅在 LSTM 層內部接收和傳遞資料。也就是說,從接收LSTM的輸出的一側來看,LSTM的輸出僅有隱藏狀態向量h。記憶單元 c 對外部不可見,我們甚至不用考慮它的存在。
LSTM層的結構
ct 儲存了時刻 t 時 LSTM 的記憶,可以認為其中保存了從過去到時刻 t 的所有必要資訊。然後基於這個攜帶者記憶的ct,輸出隱藏狀態 ht。
計算
目前的記憶單元 ct 是基於3個輸入 c(t−1) h(t−1) 和 xt,經過「某種計算」(後述)算出來的。
隱藏狀態 ht 要使用更新後的 ct 來計算,公式是ht = tanh(ct)
Gate
閘的開合程度也是自動從資料中學習到的,開合程度由 0.0 ~1.0 的實數表示(1.0 為全開)
輸出閘
隱藏狀態 ht 對記憶單元 ct 僅僅應用了 tanh 函數,我們考慮對 tanh(ct) 施加閘。由於這個閘管理下一個隱藏狀態 ht 的輸出,所以稱為輸出閘。
輸出閘的計算如下。其中sigmoid 函數以σ()表示
ht 可由 o 和 tanh(ct) 的乘積計算出來,計算方式是元素乘積,就是對應元素的乘積,也被成為阿達瑪乘積
遺忘門
現在,我們在記憶單元 c(t−1) 上增加一個忘記不必要記憶的門,這裡稱為遺忘門
遺忘門的計算如下
ct 由這個 f 和上一個記憶單元 ct−1 的對應元素的乘積求得
新的記憶單元
現在我們也想為這個記憶單元添加一些應當記住的新訊息,為此我們添加新的 tanh 節點
基於 tanh 節點計算出的結果被加到上一時刻的記憶單元 ct−1 上。
這個 tanh 節點的作用不是門,而是將新的資訊加入記憶單元。因此,它不用 sigmoid函數作為激活函數,而是使用 tanh 函數。
輸入門
我們給圖 6-17 的 g 加閘門,這裡將這個新加入的門稱為輸入門
輸入門判斷新增資訊 g 的各個元素的價值有多大。輸入門不會不經考慮就添加新訊息,而是會對要新增的資訊進行取捨。換句話說,輸入門會添加加權後的新資訊。
輸入閘的計算如下
LSTM的梯度的流動
記憶單元的反向傳播僅流過「 」和「×」節點。 「 」節點將上游傳來的梯度原樣流出,所以梯度沒有變化(退化)。而「×」節點的計算並不是矩陣乘積,而是對應元素的乘積(阿達瑪積),也不會導致梯度變化
LSTM的實現
對於x*Wx h*Wh b這樣的仿射變化,可以整合為透過 1 個子進行
矩陣庫計算「大矩陣」時通常會更快,而且透過將權重整合到一起管理,原始程式碼也會更簡潔。
使用LSTM的語言模型
這裡實作的語言模型和上一章幾乎是一樣的,唯一的差別是,上一章使用Time RNN 層的地方這次使用 Time LSTM 層
進一步改進RNNLM
LSTM層的多層化
加深 LSTM 層(疊加多個 LSTM層)的方法往往很有效。
多少層合適
因為層數是超參數,所以需要根據要解決的問題的複雜程度、能給的訓練資料的規模來決定。
在PTB資料集上學習語言模型的情況下, 當LSTM 的層數為 2 ~ 4 時,可以得到比較好的結果
谷歌翻譯中使用的 GNMT 模型疊加了 8 層 LSTM 的網路。
基於Dropout抑制過擬合
透過加深層,可以創建表現力較強的模型,但這樣的模型往往會發生過擬合(overfitting)。更糟的是,RNN 比常規的前饋神經網路更容易發生過擬合,因此 RNN 的過度擬合對策非常重要。
對策
增加訓練數據
降低模型的複雜度
正規化
Dropout
Dropout
Dropout 隨機選擇一部分神經元,然後忽略它們,停止向前傳遞訊號
Dropout 層插入位置
常規的 Dropout
錯誤結構
如果在時序方向上插入 Dropout,那麼當模型學習時,隨著時間的推移,資訊會漸漸丟失。
正確結構
垂直方向上插入Dropout 圖層
變分 Dropout
透過同一層的 Dropout 共用 mask,mask 被「固定」。如此一來,資訊的損失方式也被“固定”,所以可以避免常規 Dropout 發生的指數級資訊損失。
權重共享
weight tying 可以直譯為「權重綁定」。
綁定(共享)Embedding 層和 Affine 層的權重的技巧在於權重共享。透過在這兩個層之間共享權重,可以大幅減少學習的參數數量。除此之外,它還能提高精度。
更好的RNNLM的實現
前沿研究
基於RNN生成文本
不存在什麼完美的文章,就好像沒有完美的絕望。 ——村上春樹《且聽風吟》
使用語言模型生成文本
如何產生下一個新單字
選出機率最高的單字,結果唯一確定
機率高的單字容易被選到,機率低的單字難以被選到
文字生成的實現
更好的文本生成
使用更好的語言模型
seq2seq模型
Seq2Seq(Sequence to Sequence,序列到序列模型)
將時序資料轉換為其他時序資料的模型
seq2seq的原理
這個模型有兩個模組——Encoder(編碼器)和 Decoder(解碼器)。編碼器對輸入資料進行編碼,解碼器會對被編碼的資料進行解碼。
seq2seq 由兩個 LSTM 層構成,即編碼器的 LSTM 和解碼器的LSTM。
LSTM 的隱藏狀態 h 是固定長度的向量。它和上一節的模型的差異就是 LSTM 層會接收向量 h。這個唯一的、微小的改變使得普通的語言模型進化成可以駕馭翻譯的解碼器。
時序資料轉換的簡單嘗試
試著讓seq2seq做加法計算
可變長度的時序數據
填充
用無效(無意義)數據填入原始數據,從 而使資料長度對齊。
使用填充時需要在 seq2seq 上添加一些填充專用的處理
在解碼器中輸入填充時,不應計算其損失(這可以透過向 Softmax with Loss 層添加 mask 功能來解決)
在編碼器中輸入填充時,LSTM層應按原樣輸出上一刻的輸入
加法資料集
seq2seq的實現
seq2seq的改進
反轉輸入數據
在許多情況下,使用這個技巧後,學習進展得更快,最終的精確度也有所提升。
直觀的認為,反轉資料後梯度的傳播可以更平滑,傳遞更有效
偷窺
使用頭盔的編碼器稱為Peeky Decoder,使用了Peeky Decoder 的 seq2seq 稱 為 Peeky seq2seq。
編碼器將輸入語句轉換為固定長度的向量 h,這個 h 集中了解碼器所需的全部資訊。它是解碼器唯一的訊息來源。
可以將這個集中了重要訊息的編碼器的輸出 h 分配給解碼器的其他層
有兩個向量同時輸入了 LSTM 層和 Affine 層,這實際上表示兩個向量的拼接(concatenate)。
seq2seq的應用
機器翻譯:將“一種語言的文字”轉換為“另一種語言的文字”
自動摘要:將“一個長文本”轉換為“短摘要”
問答系統:將“問題”轉換為“答案”
郵件自動回覆:將“接收的郵件文字”轉換為“回覆文字”
聊天機器人
演算法學習
自動圖像描述
Attention
注意力是全部。 ——Vaswani 們的論文標題
Attention 毫無疑問是近年來深度學習領域最重要的技術之一。本章的目標是在程式碼層面理解 Attention的結構,然後將其應用於實際問題,體驗它的奇妙效果。
Attention的結構
seq2seq存在的問題
seq2seq 中使用編碼器對時序資料進行編碼,然後將編碼訊息傳遞給解碼器。此時,編碼器的輸出是固定長度的向量。
固定長度的向量意味著,無論輸入語句的長度為何(無論多長),都會轉換為長度相同的向量。
編碼器的改進
編碼器的輸出的長度應該根據輸入文字的長度相應地改變
因為編碼器是從左向右處理的,所以嚴格來說,剛才的「貓」向量中含有「吾輩」「は」「貓」這3個單字的資訊。考慮整體的平衡性,最好均衡地含有單字「貓」周圍的訊息。在這種情況下,從兩個方向處理時序資料的雙向RNN(或雙向LSTM)比較有效。
解碼器的改進
之前我們將編碼器的 LSTM 層的「最後」的隱藏狀態放入了解碼器的 LSTM 層的「最初」的隱藏狀態
上一章的解碼器只用了編碼器的 LSTM 層的最後的隱藏狀態。如果使用 hs,則只提取最後一行,然後再傳遞給解碼器。下面我們改進解碼器,以便能夠使用全部 hs。
我們是專注於某個單字(或單字集合),隨時對這個單字進行轉換的,那可以讓 seq2seq 學習「輸入和輸出中哪些單字與哪些單字有關」這樣的對應關係
舉例
吾輩[わがはい] = I
貓[ねこ] = cat
很多研究都利用「貓 =cat」這樣的單字對應的知識。這樣的表示字(或詞組)對應關係的資訊稱為對齊 (alignment)。到目前為止,對齊主要是手工完成的,而我們將要介紹的Attention 技術則成功地將對齊想法自動引入了 seq2seq 中。 這也是從「手動操作」到「機械自動化」的演變。
結構變化
如何計算
可否將「選擇」這一操作換成可微分的運算呢?與其“單選”,不如“全選”。我們另行計算表示各個單字重要度(貢獻值)的權重。
a 像機率分佈一樣,各元素是 0.0 ~ 1.0 的標量,總和是 1。然後,計算這個表示各個單字重要度的權重和單字向量 hs 的加權和,可以得到目標向量。
在處理序列資料時,網路應該更關注輸入中的重要部分,而忽略不重要的部分,它透過學習不同部分的權重,將輸入的序列中的重要部分顯式地加權,從而使得模型可以更好地關注與輸出有關的資訊。 Attention機制的關鍵在於引入一種機制來動態地計算輸入序列中各個位置的權重,從而在每個時間步上,對輸入序列的不同部分進行加權求和,得到當前時間步的輸出。解碼器在產生每個輸出時,根據輸入序列的不同部分給予不同的注意力,從而使得模型更好地關注輸入序列中的重要資訊。
權重a的學習
我們的目標是用數值表示這個 h 在多大程度上和 hs 的各個單字向量「相似」。
這裡我們使用最簡單的向量內積。
計算向量相似度的方法有好幾種。除了內積之外,還有使用小型的神經網路輸出得分的做法。
接下來,使用老一套的 Softmax 函數對 s 進行正規化
整合
帶有Attention的seq2seq的實現
Attention的評價
我們轉而透過研究「日期格式轉換」問題來確認帶有 Attention 的 seq2seq的效果
日期格式轉換問題
帶有Attention的 seq2seq的學習
Attention的可視化
關於Attention的其他話題
雙向RNN
如果考慮整體的平衡性,我們希望向量能更均衡地包含單字「貓」周圍的訊息。
雙向 LSTM 在先前的 LSTM 層上增加了一個反方向處理的 LSTM 層。
拼接各個時刻的兩個 LSTM 層的隱藏狀態,將其作為最後的隱藏狀態向量(除了拼接之外,也可以「求和」或「取平均」等)
Attention層的使用方法
Attention 層的輸出(上下文向量)被連接到了下一時刻的 LSTM 層的輸入處。透過這種結構,LSTM 層得以使用上下文向量的資訊。相對地,我們實現的模型則是 Affine 層使用了上下文向量。
seq2seq的深層化與 skip connection
加深 RNN 層
使用了3層LSTM層的帶有Attention的seq2seq
殘差連接
在殘差連接的連接處,有兩個輸出相加。
因為加法在反向傳播時「原樣」傳播梯度,所以殘差連接中的梯度可以不受任何影響地傳播到前一個層。這樣一來,即便加深了層,梯度也能正常傳播,而不會發生梯度消失(或梯度爆炸),學習可以順利進行。
Attention的應用
GNMT
機器翻譯的歷史
基於規則的翻譯
基於用例的翻譯
基於統計的翻譯
神經機器翻譯(Neural Machine Translation)
從 2016 年開始,Google翻譯就開始將神經機器翻譯用於實際的服務。機器翻譯系統稱為 GNMT
GNMT 需要大量的資料和運算資源。 GNMT使用了大量的訓練數據,(1 個模型)在將近 100 個 GPU 上學習了 6 天。另外,GNMT 也設法基於可以並行學習 8 個模型的整合學習和強化學習等技術進一步提高精確度。
Transformer
RNN 可以很好地處理可變長度的時序資料。但是,RNN 也有缺點,例如並行處理的問題。
RNN 需要基於上一個時刻的計算結果逐步進行計算,因此(基本)不可能在時間方向上並行計算 RNN。在使用了 GPU 的平行運算環境下進行深度學習時,這一點會成為很大的瓶頸,所以我們就有了避開 RNN 的動機。
Transformer 不用 RNN,而用 Attention 進行處理。我們簡單地看一下這個 Transformer。
Self-Attention
Transformer 是基於 Attention 構成的,其中使用了 Self-Attention 技巧,這一點很重要。 Self-Attention 直譯為“自己對自己的 Attention”,也就是說,這是以一個時序資料為物件的 Attention,旨在觀察一個時序資料中每個元素與其他元素的關係。
使用具有一個隱藏層、激活函數為 ReLU 的全連接的神經網路。另外,圖中的 Nx 表示灰色背景包圍的元素被堆疊了 N 次。
NTM
NTM(Neural Turing Machine,神經圖靈機)
利用外部儲存裝置,神經網路也可以獲得額外的能力。
基於 Attention,編碼器和解碼器實現了電腦中的「記憶體操作」。換句話說,這可以解釋為,編碼器將必要的資訊寫入內存,解碼器從內存中讀取 取必要的資訊。
為了模仿電腦的記憶體操作,NTM 的記憶體操作使用了兩個 Attention,
基於內容的Attention 和我們之前介紹的 Attention 一樣,用來從記憶體中找到某個向量(查詢向量)的相似向量。
而基於位置的 Attention 用於從上一個時刻關注的記憶體位址(記憶體的各個位置的權重)前後移動。這裡我們省略對其技術細節的探討,具體可以透過一維卷積運算來實現。基於記憶體位置的移動功能,可以再現「一邊前進(一個記憶體位址)一邊讀取」這種電腦特有的活動。
NTM 成功解決了長時序的記憶問題、排序問題(從大到小排列數字)等。
網路優化與正規化
任何數學技巧都不能彌補資訊的缺失 [佐斯 藍佐斯(Cornelius Lanczos)]
兩大難點
最佳化問題
很難優化,計算量大
泛化問題
擬合能力過強,容易過擬合
網路最佳化
網路優化的難點
網路結構多樣性
我們很難找到一種通用的最佳化方法。不同的最佳化方法在不同網路結構上的差異也都比較大。
低維度空間的難度
如何選擇初始化參數
逃離局部最優點
高維度空間的難度
如何選擇初始化參數
如何逃離鞍點
有些維度上是最高點,在另一些維度上是最低點
平底
深層神經網路的參數非常多,並且有一定的冗餘性,這導致每個單一參數對最終損失的影響都比較小
陷入局部最小值
最佳化演算法
梯度下降法類型
批量梯度下降
隨機梯度下降
小批量梯度下降
如果在梯度下降時,每次迭代都要計算整個訓練資料上的梯度需要比較多的計算資源。此外,大規模訓練集中的資料通常也會非常冗餘,也沒有必要在整個訓練集上計算梯度。
學習率衰減
學習率在一開始要保持大些來確保收斂速度,在收斂到最優點附近時要小些以避免來回震盪。
類型
逆時衰減
指數衰減
自然指數衰減
β 為衰減率,一般取值為0.96。
還有些自適應地調整學習率的方法,例如AdaGrad、RMSprop、AdaDelta等。
AdaGrad法
在關於學習率的有效技巧中,有一種稱為學習率衰減的方法,即隨著學習的進行,使學習率逐漸減少。
AdaGrad進一步發展了這個想法,為參數的每個元素適當地調整學習率,同時進行學習
Ada來自英文單字Adaptive,即「適當的」的意思
和前面的SGD一樣,W表示要更新的權重參數,偏導表示梯度,n表示學習率
但出現了新變數h,他保存了先前的所有梯度值的平方和,因此,學習越深入,更新的幅度就越小。
RMSProp法
如果無止境學習,更新量就會變成 0
RMSProp方法並不是將過去所有的梯度一視同仁地相加,而是逐漸地遺忘過去的梯度,在做加法運算時將新梯度的資訊更反映出來
這種操作從專業上講,稱為“指數移動平均”,呈指數函數式地減少過去的梯度的尺度
梯度方向最佳化
Momentum法
在小批量梯度下降中,如果每次選取樣本數比較小,則損失會呈現震蕩的方式下降。
透過使用最近一段時間內的平均梯度來代替當前時刻的梯度來作為參數更新的方向。
也叫動量法
SGD的缺點
f(x,y)=(1/20)*x^2 y^2
基於SGD的最優化的更新路徑:呈「之」字形朝最小值(0, 0)移動,效率低
改進方法
和前面的SGD一樣,W表示要更新的權重參數,偏導表示梯度,n表示學習率
但出現了新變數v,對應物理上的速度,可以理解為物體在梯度方向上受力。
Adam法
Momentum參考小球在碗中滾動的物理規則進行移動,AdaGrad為參數的每個元素適當地調整更新步伐。將他們合併起來就是adam的思路
(目前)並不存在能在所有問題中都表現良好的方法。這4種方法各有各的特點,都有各自擅長解決的問題和不擅長解決的問題
梯度截斷
如果梯度突然增大,用大的梯度進行更新參數,反而會導致其遠離最優點。
當梯度的模大於一定閾值時,就對梯度進行截斷
把梯度的模限定在一個區間,當梯度的模小於或大於這個區間時就進行截斷
類型
按值截斷
gt = max(min(gt, b), a).
按模截斷
參數初始化
Gaussian 分佈初始化
Gaussian初始化方法是最簡單的初始化方法,參數從一個固定平均值(例如0)和固定變異數(例如0.01)的Gaussian分佈進行隨機初始化。
當一個神經元的輸入連接數量為 n(in) 時,可以設定其輸入連接權重以N(0,sqrt(1/nin))的Gaussian分佈進行初始化。
若同時考慮輸出連接的數量nout,則可依N(0,sqrt(2/(nin nout)))的Gaussian分佈進行初始化
均勻分佈初始化
均勻分佈初始化是在一個給定的區間 [−r, r] 內採用均勻分佈來初始化參數。超參數r 的設定也可以依神經元的連接數量進行自適應的調整。
激活函數類型
logistic函數
tanh
Xavier初始值
我們嘗試使用Xavier Glorot等人的論文中建議的權重初始值
如果前一層的節點數為n,則初始值使用標準差為(1/sqrt(n))的高斯分佈
ReLU的權重初始值
當激活函數使用ReLU時,一般建議使用ReLU專用的初始值,也就是Kaiming He等人建議的初始值,也稱為「He初始值」。
當目前一層的節點數為n時,He初始值使用標準差為(2/sqrt(n))的高斯分佈
資料預處理
單位不同
每一維特徵的來源以及度量單位不同,會造成這些特徵值的分佈範圍往往差異很大。當我們計算不同樣本之間的歐氏距離時,取值範圍大的特徵會起到主導作用。
縮放歸一化
透過縮放將每個特徵的值範圍歸一到[0, 1]或[−1, 1]之間。
標準歸一化
也叫z-score歸一化
將每一個維特徵都處理為符合標準常態分配(平均值為0,標準差為1)。
資料冗餘
輸入資料經過白化處理後,特徵之間相關性較低,且所有特徵具有相同的變異數。
白化的一個主要實現方式是使用主成分分析方法來去除各個成分之間的相關性。
逐層歸一化
在使用隨機梯度下降來訓練網路時,每次參數更新都會導致網路中間每一層的輸入的分佈改變。越深的層,其輸入的分佈會改變得越明顯。
批量歸一化
也叫Batch Normalization,BN方法
為了使各層擁有適當的廣度,「強制性」地調整活化值的分佈
進行使資料分佈的平均數為0、方差為1的正規化
可以對神經網路中任意的中間層進行歸一化操作
優點
可以使學習快速進行(可以增加學習率)
不那麼依賴初始值(對於初始值不用那麼敏感)
抑制過擬合(降低Dropout等的必要性)
Batch Norm層
Affine->Batch Norm->ReLU
層歸一化
批量歸一化的限制
批量歸一化是對一個中間層的單一神經元進行歸一化操作,因此要求小批量樣本的數量不能太小,否則難以計算單一神經元的統計資料。
如果一個神經元的淨輸入的分佈在神經網路中是動態變化的,例如循環神經網絡,那麼就無法應用批量歸一化操作
層歸一化是對一個中間層的所有神經元進行歸一化。
批歸一化在卷積神經網路(CNN)中非常有效,而層歸一化則在循環神經網路(RNN)和Transformer網路中更為常見。
超參數優化
組成
網路結構
神經元之間的連結關係
層數
每層的神經元數量
激活函數的類型
最佳化參數
網路的最佳化方法
學習率
小批量的樣本數量
正規化係數
驗證資料(驗證集)
不能用測試數據評估超參數的性能
如果用測試資料確認超參數的值的“好壞”,就會導致超參數的值被調整為只擬合測試資料。
訓練資料用於參數(權重和偏移)的學習,並驗證資料用於超參數的效能評估。為了確認泛化能力,要在最後使用(比較理想的是只用一次)測試數據
最佳化方法
網格搜尋
透過嘗試所有超參數的組合來尋址合適一 組超參數配置的方法。
選擇幾個“經驗”值。例如學習率α,我們可以設定 α ∈ {0.01, 0.1, 0.5, 1.0}.
隨機搜尋
設定超參數的範圍,從設定的超參數範圍隨機取樣
透過驗證資料評估辨識精度(但是要將epoch設定得很小)
重複上述(100次等),根據它們的辨識精度的結果,縮小超參數的範圍
貝葉斯優化
動態資源分配
網路正規化
目的:抑制過擬合
權值衰減
權值衰減是一直以來常被使用的一種抑制過擬合的方法。此方法透過在學習的過程中對大的權重進行懲罰。
簡單來說就是把損失函數變成
λ是控制正規化強度的超參數
丟棄法
Dropout Method
如果網路的模型變得很複雜,只用權值衰減就難以應付了
在學習的過程中隨機刪除神經元的方法每次選擇丟棄的神經元是隨機的。最簡單的方法是設定一個固定的機率p。對每一個神經元都一個機率p來判定要不要保留。
數據增強
旋轉、翻轉、縮放、平移、加入噪音
標籤平滑
在輸出標籤中加入雜訊來避免模型過擬合
模型獨立的學習方式
整合學習
透過某種策略將多個模型整合起來,透過群體決策來提高決策準確率。整合學習首要的問題是如何整合多個模型。比較常用的整合策略有直接平均、加權平均等。
自訓練和協同訓練
都屬於半監督學習
自訓練
自訓練是先使用標註資料來訓練一個模型,並使用這個模型來預測無標註樣本的標籤,把預測置信度比較高的樣本及其預測的偽標籤加入訓練集,然後重新訓練新的模型,並不斷重複這個過程。
協同訓練
協同訓練(Co-Training)是自訓練的一種改進方法
透過兩個基於不同視角(view)的分類器來相互促進。很多數據都有相對獨立的不同視角。
由於不同視角的條件獨立性,在不同視角上訓練出來的模型就等於從不同視角來理解問題,具有一定的互補性。協同訓練就是利用這種互補性來進行自訓練的一種方法。首先在訓練集上根據不同視角分別訓練兩個模型f1和f2,然後用f1 和f2 在無標記資料集上進行預測,各選取預測置信度比較高的樣本加入訓練集,重新訓練兩個不同視角的模型,並不斷重複這個過程。
多工學習
一般的機器學習模型都是針對單一的特定任務,例如手寫體數字辨識、物件偵測等。不同任務的模型都是在各自的訓練集上單獨學習得到的。
如果有兩個任務比較相關,它們之間會存在一定的共享知識,這些知識對兩個任務都會有所幫助。這些共享的知識可以是表示(特徵)、模型參數或學習演算法等。
類型
遷移學習
如果有一個相關任務已經有了大量的訓練數據,雖然這些訓練數據的分佈和目標任務不同,但是由於訓練數據的規模比較大,我們假設可以從中學習某些可以泛化的知識,那麼這些知識對目標任務會有一定的幫助。如何將相關任務的訓練資料中的可泛化知識遷移到目標任務上,就是遷移學習(Transfer Learning)要解決的問題。
遷移學習是指兩個不同領域的知識遷移過程,利用來源領域(Source Domain)DS 中學到的知識用來幫助目標領域(Target Domain)DT 上的學習任務。源領域的訓練樣本數量一般遠大於目標領域。
分類
歸納遷移學習
在訓練資料集上學習到使得期望風險(即真實資料分佈上的錯誤率)最小的模型。
推導遷移學習
學習一個在給定測試集上錯誤率最小的模型
微調(fine-tuning)是遷移學習(transfer learning)的一種應用方式。通常指的是已經訓練好的模型基礎上,使用新的、特定於任務的資料集進行額外的訓練,以提高模型在特定任務上的表現。微調的目的是利用預訓練模型在大規模資料上學到的通用知識,來加速和優化在特定任務上的學習過程。
終身學習
問題
一但訓練結束模型就保持固定,不再進行迭代更新
要想一個模型同時在許多不同任務上都取得成功依然是一件十分困難的事情。
終身學習(Lifelong Learning),也叫持續學習(Continuous Learning),是指像人類一樣具有持續不斷的學習能力,根據歷史任務中學到的經驗和知識來幫助學習不斷出現的新任務,並且這些經驗和知識是持續累積的,不會因為 新的任務而忘記舊的知識。
在終身學習中,假設一個終身學習演算法已經在歷史任務T1, T2, · · · , Tm 上學習到一個模型,當出現一個新任務Tm 1 時,這個演算法可以根據過去在m個任上學習的知識來幫助第m 1個任務,同時累積所有的m 1個任務上的知識。
這個設定和歸納遷移學習十分類似,但歸納遷移學習的目標是優化目標任務的效能,而不關心知識的累積。而終身學習的目標是持續的學習和知識累積。另外,也和多任務學習的不同之處在於終身學習並不在所有任務上同時學習。
元學習
根據沒有免費午餐定理,沒有一種通用的學習演算法在所有任務上都有效。因此,當使用機器學習演算法實現某個任務時,我們通常需要“就事論事”,根據任務的特定來選擇合適的模型、損失函數、最佳化演算法以及超參數。
自己動態調整學習方式的能力,稱為元學習,也稱為學習的學習
和後設學習比較相關的另一個機器學習問題是小樣本學習
兩種典型的元學習方法
基於優化器的元學習
不同的最佳化演算法的差異在於更新參數的規則不同,因此一種很自然的元學習就是自動學習一種更新參數的規則,即透過另一個神經網路(例如循環神經網路)來建模梯度下降的過程
模型無關的元學習
是一個簡單的模型無關、任務無關的元學習演算法