CS231n 斯坦福深度視覺識別課 學習筆記(完結)

課程地址算法

第1章 CS231n課程介紹

---1.1 計算機視覺概述

  • 這門課的主要內容是計算機視覺.它是一門須要涉及不少其餘科目知識的學科.
  • 視覺數據佔據了互聯網的絕大多數,可是它們很難利用.

---1.2 計算機視覺歷史背景

  • 爲了得到一副3D圖像,咱們須要經歷原始圖像(端點,曲線,邊緣)->2.5維草圖(場景的不連續性)->3D圖像幾個過程.
  • 70年代:每一個對象由簡單的幾何圖單位組成
  • 80年代:如何識別由簡單物體構成的視覺空間
  • 若是目標識別太難了,應該先進行圖像分割.
  • 可使用圖片中的特徵來進行圖像識別.
  • 圖像特徵的維度通常很高,所以算法很容易過擬合.
  • ImageNet是一個很大的目標識別數據集,相關比賽每每使用top5標準來衡量.

---1.3 課程後勤

  • 介紹了本門課的內容:圖像識別,目標檢測,風格遷移,如何從零開始構建CNN,以及tensorflow等框架的使用等.
  • 深度學習流行的主要緣由是計算能力的提升和數據量的增加.

第2章 圖像分類

---2.1 圖像分類-數據驅動方法

  • 計算機存儲圖像的方式是二維或三維矩陣.一個物體與計算機實際看到的像素值之間的差距稱爲語義鴻溝.
  • 一個具備魯棒性的圖像識別算法應該能從不一樣角度,光照條件,變形,遮擋,類內條件差別等條件下識別出物體類別.
  • 邊緣對於視覺識別是十分重要的.可是基於邊緣的規則識別算法不是一種好方法.
  • 數據驅動的分類方法是指:
  1. 收集具備標註的圖片數據集(CIFAR10).
  2. 使用機器學習訓練分類器.
  3. 使用模型來預測新的圖片.
  • 最近鄰(Nearest Neighbors)算法:
  1. 不進行訓練,只是單純地存儲全部的數據集,而後對於要預測的圖片,從數據集中找出與它最類似的圖片的標籤做爲輸出.
  2. 訓練時間很短,預測時間很長.這與咱們理想中的圖像識別算法相反.
  • 最近鄰算法很容易出現誤分類,所以出現了K近鄰(K-Nearest Neighbors)算法:選出K個最近點,而後進行多數投票決定輸出.

---2.2 圖像分類-K近鄰算法

  • 距離函數K近鄰算法的關鍵.經常使用的有L1距離,L2距離等.經過不一樣的距離函數還能夠將K近鄰算法泛化到任何類型的數據上.
  • K近鄰算法中的K值距離函數就是典型的超參數:須要人爲設置,而不能由算法學習獲得.選擇超參數的常見做法就是將數據集分爲訓練集,驗證集,測試集.使用驗證集來選擇超參數,並在測試集獲得結果.若是數據集較小,還能夠採用交叉驗證的方法進行選擇.
  • 實際上K近鄰算法不多在圖像數據中應用,由於它預測時間很長,並且距離函數很難度量圖像數據.

---2.3 圖像分類-線性分類I

  • 線性分類器參數模型中最簡單的例子.它其實是關於輸入數據x和權重W的函數,輸出表明瞭預測的類別.
  • 線性分類器其實是用一個模版來匹配圖像,因此它對於多模態類別的預測能力較差.另外從幾何角度上看,線性分類器是用一個線性平面來將某一類別與其餘類別劃分開來,所以很難處理奇偶多分類問題.

第3章 損失函數和優化

---3.1 損失函數

  • 爲了獲得線性分類器的權重,引入了損失函數來定量地衡量權重的好壞.最小化損失函數的過程是一個優化過程.
  • 損失函數就是一個關於預測值和真實值的函數.
  • 多分類SVM
  1. 損失函數:若是真實分類的分數大於其餘分數+邊界(margin),則損失=0,不然損失=其餘分數-真實分數+邊界.邊界的值能夠任意選擇,由於這個參數最終會消失.用公示表示爲,,也稱爲hinge損失.
  2. 初次迭代時損失函數的值應該約爲分類的數量減去1.
  3. 假若有一組W使得損失函數爲0,那麼2W的損失函數也應該爲0.這就使得有無窮多組權重,分類器將沒法抉擇.所以須要加入超參數λR(W)做爲正則化項,R(W)有L2範數,L1範數,彈性網絡,最大規範等正則化選項.正則化的目的就是減輕模型複雜度.
  4. SVM只關心正確分類是否比其餘分類高出一個邊界.
  • Softmax:
  1. 數據的softmax值是
  2. 對應的損失函數值是,也稱爲交叉熵損失.
  3. 初次迭代時損失函數的值應該約爲log(C),C爲分類數.網絡

  4.  softmax會不斷提升正確分類的機率分佈架構

 ---3.2 優化

  • 優化的過程能夠想象爲在一座山中尋找山谷.
  • 梯度降低法是最經常使用的優化方法.
  1. 負梯度方向是函數降低最快的方向.
  2. 首先隨機初始化權重,而後計算梯度,接着朝梯度最小的方向前進一小步.
  3. 步長是一個超參數,最好在初始時選擇較大步長,而後逐漸縮小.
  4. 隨機梯度降低(SGD)只選取小批量(minibatch)數據進行估算,能夠提高速度.
  5. 梯度可由解析梯度(先計算出梯度公式,再代入數值)和數值梯度(代入一個δ和數值計算)計算,數據維度高時前者速度較快.
  • 圖像分類直接輸入原始像素值並很差,經常使用方式是計算圖片的特徵表明,而後將這些特徵向量合在一塊兒,傳入線性分類器.經常使用的特徵表示有顏色直方圖,方向梯度直方圖,詞袋等.這種方式與神經網絡有些類似,區別是咱們的數據劃分方式將由神經網絡學習獲得.

 第4章 介紹神經網絡

---4.1 反向傳播

  • 反向傳播:
  1. 給定輸入值後,進行前向傳播,能夠獲得輸出值.
  2. 反向傳播其實是鏈式法則的遞歸調用,逐層從後往前,能夠求出輸出值對每一個輸入的導數.
  3. 反向傳播的連續節點能夠任意組合,只要對這個總體求導便可.
  4. max門的後向傳播與前向傳播相似,它只將梯度傳遞給最大值對應的節點.
  5. 沿着梯度方向前進一個步長,就更新了權重.

 ---4.2 神經網絡

  •  經過不一樣的函數疊加,就可使單層的線性分類器變爲多層的神經網絡乃至深度網絡.

--- 做業2

  • Fully-Connectd Neural Nets:框架

  1. 將每一種層的類型經過前向傳播反向傳播來實現模塊化
  2. 全鏈接層前向傳播:將輸入x經過reshape展開後,和權重w點乘並加上誤差b.
  3. 全鏈接層後向傳播:分別對wx+b求導,獲得dx是上層梯度dout和權重w轉置後的點乘,再經過reshape轉換爲x的shape.dw是x經過reshape展開後的轉置和上層梯度dout的點乘,db就是上層梯度在縱軸方向上的和.
  4. relu層前向傳播:使用np.maximum(0,x)求出x中的每一個元素和0之間的最大值.
  5. relu層後向傳播:對於大於0的輸出值,至關於y=x,所以求導後就是自身.對於小於0的輸出值,至關於y=0,所以求導後仍是0.因此令dx=上層梯度dout,而後用dx[x<=0]=0來實現.
  6. 全鏈接層+relu層是經常使用組合

第5章 卷積神經網絡

---5.1 歷史

  • 卷積神經網絡就是擁有卷積層的神經網絡.

---5.2 卷積和池化

  • 全鏈接層的每個結點都與上一層的全部結點相連.
  • 卷積層:
  1. 能夠保持空間結構
  2. 卷積層的權重叫作卷積核(濾波器,感覺野),將卷積核在圖像上滑動並計算每一次滑動的點積.滑動的步長是能夠選擇的.更大的步長意味着降採樣
  3. 卷積核的深度通常默認與輸入圖像相同.
  4. 實際應用中通常會在邊角用零填充,這樣能夠保持全尺寸輸出.
  5. 通常會用多個卷積核(2的次方).
  6. 滑動卷積核會形成輸入和輸出的尺寸不一樣.
  7. 在卷積層後通常會跟隨一個激活層.
  8. 每幾個卷積層之間會有一個池化層.

---5.3 視覺以外的卷積神經網絡

  • 池化層:
  1. 做用是使生成的表示更小更容易控制.
  2. 池化層的步長通常設置爲避免重疊,而且通常不使用零填充,由於目的是降採樣.
  3. 最多見的方法是最大池化:取卷積核中的最大值.濾波器通常設置爲2*2.
  • 小尺寸卷積核和棄用池化是一種趨勢.

第6章 訓練神經網絡(上)

---6.1 激活函數

  • sigmoid:
  1. 能夠將數據壓縮到[0,1]範圍內.
  2. 看做神經元的飽和放電率.
  3. 神經元飽和(絕對值很大)時,因爲sigmoid函數的導數爲0,通過鏈式法則後梯度也將變爲0,會形成梯度消失.
  4. 因爲sigmoid函數不是以0爲中心的,所以它不會改變輸入值的正負.這意味着梯度降低法將進行得十分緩慢.(這也是咱們要使用均值爲0的數據的緣由)
  • tanh:
  1. 數據被壓縮到[-1,1]範圍內.
  2. 以0爲中心,可是當輸入飽和時仍會出現梯度消失.
  • ReLU:
  1. 將負數變爲0,正數保持不變.
  2. 不會在正的區域產生飽和現象.
  3. 計算速度快,所以收斂也很快.
  4. 比sigmoid函數更具備神經科學的類似性.
  5. 負的區域仍會飽和,而且致使梯度消失.這被稱爲dead ReLU.所以使用時通常用較小的正偏置進行初始化.
  • Leaky ReLU:
  1. 與ReLU的區別是負區域有一個微小的斜率.
  2. 輸出均值接近0.
  3. 計算速度仍較快,而且不會發生飽和.
  • ELU(Exponential Linear Units):
  1. 具備ReLU的優勢.
  2. 輸出的均值接近0.
  3. 負區域較容易飽和.
  • Maxout:
  1. 能夠看作是ReLU和Leaky ReLU的泛化.
  2. 不會飽和也不會發生梯度消失.
  • ReLU較爲通用的方法,Leaky ReLU/Maxout/ELU能夠嘗試使用,但它們更偏向於實驗性.tanh也能夠嘗試.最好不要使用sigmoid.
  • 數據預處理是一個重要環節.
  • 零中心化(Zero-centered):
  1. X -= np.mean(X, axis=0)
  2. 目的的使輸入數據有正有負,從而避免全部梯度的正負性相同.能夠加快優化速度.
  3. 在圖像處理中較經常使用.能夠減去整張圖像的均值圖像(AlexNet),或者只減去單通道平均值(VGGNet).
  4. 通常在訓練集中計算出均值後,會將該均值應用到測試數據中.
  • 歸一化(Normalization):
  1. X /= np.std(X, axis=0)
  2. 使得全部特徵處於一個範圍內,貢獻相同.
  3. 在圖像處理中較少用,由於圖像中的數值已經有必定範圍限制.
  • 權重初始化:
  1. 全零初始化會使全部的神經元將作相同的事情,稱爲參數對稱.
  2. 若是使用較小的隨機參數初始化,當網絡較深時,全部的激活值都將趨向於0.
  3. 若是使用較大的隨機參數初始化,會發生飽和.
  4. Xavier初始化是根據輸入來獲得初始化權重的一種方法.

---6.2 批量歸一化

  • 批量歸一化(Batch Normalization)也就是BN操做,目的是讓每一個隱層節點的激活輸入分佈縮小到(-1,1).
  • 假設有N個D維訓練樣本,咱們將對每一個維度獨立計算經驗均值和方差
  • 批量歸一化層一般是在全鏈接層或卷積層以後插入的.
  • 計算過程:
  1. 計算小批量均值:
  2. 計算小批量方差:
  3. 歸一化:
  4. 縮放平移因子(由學習獲得):
  • 優勢是縮小輸入空間,從而下降調參難度.還能夠防止梯度爆炸/消失,從而加速網絡收斂.
  • 在選取超參數時,能夠用隨機搜索網格搜索.隨機搜索的優勢是能夠對超參數空間覆蓋的更好.

 

 

 第7章 訓練神經網絡(下)

---7.1 更好的優化

  • 零中心化,歸一化等數據預處理的好處是能夠使分類器對參數值中的小擾動不那麼敏感.
  • SGD的缺陷:
  1. 若是目標函數的梯度方向與最小值並不在一條線上,那麼SGD將會呈"之"字形波動.
  2. 若是有目標函數存在鞍點(局部最小點),SGD將卡在裏面或前進很是緩慢.
  3. SGD有隨機性,因此噪點的存在會讓SGD運行十分緩慢.
  • 動量(Momentum)SGD:能夠解決上述問題.也就是保持一個不隨時間變化的速度,而且將梯度變化增長到這個速度上,而後在這個速度的方向上前進而不是在梯度方向前進.每一步都用摩擦係數和梯度來更新速度.速度能夠初始化爲0

  • Nesterov acceletared gradient(NAG):Momentum的改進.先在原速度方向上前進一步,計算此時的梯度後,回到原來的位置,結合這個梯度和原速度決定本次前進的方向.

  • 上述兩種方法對於極端極值點的效果可能通常,但事實是極端極值點意味着訓練可能過擬合了,平滑極值點更具魯棒性.
  • AdaGrad:在訓練時一直累積一個梯度平方項,用步長*梯度/梯度平方項來前進.它的效果是加速小梯度方向的學習速度,減少大梯度方向的學習速度.而且由於梯度單調遞增,所以步長會愈來愈小,有利於接近極值點,但同時會帶來鞍點的問題.式中的1e-7是爲了除數不爲0.

  • RMSProp:是AdaGrad的改進.仍計算梯度平方項,但讓它按必定衰減率指數降低,能夠解決AdaGrad算法學習率降低過快的問題.

  • Adam:能夠看作是Momentum和RMSProp的結合.其中第一動量速度,第二動量梯度平方項.若是將第二動量初始化爲0,那麼一開始的步長會很大,所以須要加入偏置項,並使用動量的無偏估計來代替動量.

  • 學習率是優化函數的一個重要超參數,推薦先使用較大的學習率,而後隨着訓練迭代逐漸減少.可是在剛創建模型時最好使用一個固定的學習率.
  • 以上優化算法都是一階逼近的,二階逼近的缺陷是計算量太大.能夠用擬牛頓法代替牛頓法,但它們在深度學習中的使用並很少,由於並沒有太多處理隨機的方法.
  • Adam(beta1=0.9,beta2=0.999,學習率=1e-3或5e-4)是首選優化算法,可是若是問題並無太多隨機性,且能承受計算量的狀況下(如風格遷移),能夠嘗試L-BFGS.
  • 若是訓練準確率已經很高,可使用模型集成(Ensembles)來提升測試準確率.一種簡單的集成方法是對不一樣獨立模型的結果採用投票法或平均法.也可使用一個模型在訓練中多個不一樣時期的結果來進行集成.

---7.2 正則化

  • 正則化是一種經過防止過擬合提升單一模型表現的方法.通常是在損失函數中加入正則項來實現.
  • 通常採用的正則化方法都是在訓練時加入某種隨機性,而後在測試時抵消掉它們,由此來抑制過擬合.好比batch normalization和dropout.
  • Dropout:每一次前向傳播時,隨機一部分神經元的激活函數置0(通常將置0率設爲0.5).它能夠看做是避免了特徵間的相互適應來抑制過擬合,或者是單一模型的一種集成學習.一個問題是dropout中存在隨機性,所以在測試時會採起乘以指望機率的形式來實現.由此產生的一種稱爲反轉dropout的技巧,就是指在訓練階段將權重除以機率,這樣在測試階段就不用再乘以機率.

  • 數據加強(Data Augmentation)是指在訓練過程當中以某種方式隨機地轉換圖像(翻轉,裁剪,色彩抖動)來增長隨機性.
  • DropConnect和dropout相似,區別是它將權重矩陣的一些值置0.
  • 部分最大池化(Fractional Max Pooling)是指在池化層中隨機池化部分區域.
  • 隨機深度(Stochastic Depth)是指在訓練時隨機丟棄一些層,只用部分層.而後在測試時使用所有的網絡.
  • 大多數狀況下單獨使用batch normalization就足夠了,若是仍存在過擬合的狀況,能夠嘗試dropout或其餘方法.

---7.3 遷移學習

  • 遷移學習(Transfer Learning)是另外一種抑制由於數據不夠而產生的過擬合的方法.
  • 基本思想是先在大數據集上訓練出一個神經網絡,而後將這個神經網絡的最後一層從新在小數據集上進行訓練.

  • 目前大部分的計算機視覺任務都採用在ImageNet等大數據集上進行訓練的預訓練集,而後再精調網絡從新初始化部分網絡的方式進行.

第8章 深度學習軟件

---8.1 Caffe,Torch,Theano,TensorFlow,Keras,PyTorch等

  • CPU vs GPU:NVIDIA的GPU在深度學習中占主導地位.GPU有更多的核,所以更適合並行計算任務,好比矩陣乘法卷積.通常建議使用NVIDIA的CUDACUDNN庫來進行運算.
  • 深度學習框架的優勢:
  1. 輕鬆地構建一個龐大的計算圖
  2. 輕鬆地計算計算圖中的梯度
  3. 在GPU上高效地運行

  • tensorflow中的計算通常分爲兩個階段,上半部分是定義計算圖,而後是運行計算圖:
  1. 使用tf.placeholder()創建輸入槽用於輸入常量,tf.Variable()用於輸入變量(如權重).變量能夠存在計算圖中,避免了每次都須要從內存中讀取.變量須要聲明初始化.
  2. 創建激活函數,預測值,損失函數表達式來完善計算圖.
  3. 使用optimizer=tf.train.GradientDescentOptimizier(learning_rate)來構建一個優化器.
  4. 使用updates=optimizer.minimize(loss)來讓tensorflow更新梯度.(這兩步至關於使用tf.gradients()計算反向傳播中的梯度,設定learning_rate,用assign()函數來表示權重更新的表達式.注意即便咱們不須要輸出梯度,但也要在run的參數中加入梯度,不然tensorflow不會更新梯度.這裏可使用tf.group()的小技巧,將須要更新但不須要返回的值放入group中)
  5. 使用with tf.Session() as sess:創建會話.
  6. 使用sess.run(tf.global_variables_initializer())初始化全局參數.
  7. 向會話中加入常量的具體數據.
  8. 使用sess.run()運行計算圖.
  9. 循環sess.run,便可實現學習.

  • 上例是tensorflow的一個很是簡單的實例.實際上可使用多種高級庫來進行權重初始化,激活函數的選擇等等操做.Keras就是其中一個著名的高級庫.

  • Tensorflow採用靜態計算圖,而PyTorch採用動態計算圖.前者的優點是能夠複用不少次,而且能夠在磁盤中序列化.後者的優點是能夠很方便地進行條件選擇和循環.

第9章 CNN架構

---9.1 AlexNet,VGG,GoogLeNet,ResNet等

  • AlexNet:ImageNet比賽中第一個基於深度學習的圖像識別網絡框架

  • ZFNet:改進了AlexNet的超參數
  • VGGNet:更深的網絡(16或19層),保持小的卷積核(3*3,多層小卷積核和單層大卷積核有同樣的感覺野,但加深了網絡的深度,能夠進行更多非線性操做)
  • GoogleNet:更深的網絡(22層),使用inception模塊(對進入相同層的相同輸入並行應用不一樣類別的濾波操做,使用零填充保持尺寸一致,瓶頸層加速計算,而後串行輸出它們),沒有全鏈接層.
  • ResNet:152層的殘差網絡.普通網絡可能出現網絡更深表現卻更差的狀況,由於深層網絡更難優化.ResNet的解決方案是讓每層都學習一些所需函數的底層映射,並嘗試擬合殘差映射.一樣會使用瓶頸層來加速運算.

第10章 循環神經網絡

---10.1 RNN,LSTM,GRU

  • 相比CNN的輸入有着固定的尺寸,RNN能夠實現一對多,多對一,多對多的模型,輸入和輸出均可以是可變長度.

  • 每一個RNN網絡都有一個循環核心單元,它把x做爲輸入傳入RNN的內部隱藏態(internal hidden state),它在每次讀取新的輸入時更新,而後將結果反饋至模型.
  • 多對多的RNN通常在每一個時間步都將進行輸出.注意這裏的權重矩陣是不變的,最終的梯度損失全部時間步下計算出的梯度之和以及損失之和.

 

  • 多對一的RNN會根據最終的隱層狀態作出決策.

  • 一對多的RNN則接收固定長的輸入項,而後輸出不定長的輸出項.

  • 機器翻譯之類的任務則須要一個多對一的RNN x加上一個一對多的RNN,相似編碼器與解碼器.

 ---10.2 語言模型

  • 單詞通常用獨熱編碼向量表示.針對字符級的語言模型,咱們能夠用不一樣的單詞去訓練一個RNN網絡,這樣它將會學習到一個字符以後最可能出現地其餘字符是什麼.
  • 沿時間的截斷反向傳播是指前向計算若干步子序列的損失值,而後沿着這個子序列反向傳播,並計算梯度更新參數.

---10.3 圖像標註,視覺問答,Soft attention模型

  • 圖像標註(Image Captioning)輸入一個圖像,輸出天然語言的圖像語義信息.它是由CNN和RNN組合而成的.COCO是最大的圖像標註數據集.
  • 注意力模型是指在生成與圖像對應的文字時,能夠容許模型將注意力放到圖像的不一樣部分.也就是CNN在圖像中每個特殊的地方都用一個向量表示,當模型向前傳遞時會產生一個分佈,對應圖像的不一樣位置.
  • 視覺問答(Visual Question Answering)輸入一張圖像和一段天然語言的提問(通常直接將圖像向量和問題向量鏈接起來),輸出一些天然語言的答案.它一樣是由CNN和RNN鏈接而成的.
  • 通常RNN在反向傳播時會不斷乘以相同的權重矩陣,所以容易發生梯度爆炸梯度消失.
  • 梯度截斷是防止梯度爆炸的一種方法:若是梯度的L2範式大於某個閾值,就將梯度乘上閾值除以梯度的L2範式來減少梯度.
  • 防止梯度消失的一種辦法是換一種RNN結構.
  • LSTM(長短時間記憶網絡)被設計用來緩解梯度消失和梯度爆炸問題.
  1. 每一個時間步中都維持兩個隱藏狀態,一個是相似RNN中的隱藏狀態(ht),一個是單元狀態(ct).
  2. 將上一時間步的隱藏狀態和當前的輸入堆疊在一塊兒,乘上一個權重矩陣w,獲得四個不一樣的門向量ifog(input gate表示要接受多少新的輸入信息,forget gate表示要遺忘多少以前的單元記憶,output gate表示要展示多少信息給外部,gate gate表示有多少信息要寫到輸入單元中).ifo門都使用sigmoid激活函數,含義是0丟棄所有,1接受所有.而g門使用tanh激活函數,含義是單元狀態最多自增或自減1.
  3. 更新隱藏狀態和單元狀態.
  4. LSTM反向傳播的優勢在於f門進行的是矩陣元素相乘,並且每一個f門都不一樣,所以不容易發生梯度爆炸或消失.這是一種利用加法鏈接乘法門管理梯度流的概念.

  • GRU(門控循環單元)也是一種相似LSTM的結構.

第11章 圖像識別和分割

---11.1 分割

  • 語義分割(Semantic Segmentation)是指輸入圖像,並對圖像中的每一個像素進行分類.語義分割並不區分同類目標.
  • 滑動窗口是一種方案,但複雜度過高,通常不使用.
  • 全鏈接卷積網絡補零法(使圖像尺寸不會被改變)是另外一種方案,可是須要的層數太多.
  • 通常會在前半部分使用卷積結合下采樣(池化跨卷積),而後在後半部分使用上採樣(去池化,轉置卷積,通常和池化過程對稱)來恢復圖像的清晰度.

---11.2 定位

  • 定位(Classification plus Localization)是指預測分類,並找到一個邊界包裹該物體.
  • 通常用卷積網絡處理輸入圖像,獲得一些向量,並由這些向量獲得分類機率.同時有另外一個全鏈接層從這些向量輸出四個數字,表明邊界框座標.有兩組損失函數,一組用softmax計算分類得分,另外一種計算預測座標的準確率(如L1損失,L2損失),所以須要對它們加權求和來作反向傳播.
  • 一種技巧是凍結網絡,分開訓練這兩個網絡直到收斂,而後再調試整個系統.
  • 這種網絡一樣能夠用於姿態估計(Human Pose Estimation).例如用14個關節點來定義人的姿態,網絡將輸出14個座標.

---11.3 識別

  • 對象識別(Object Detection)是指根據輸入的圖像確認分類,並標註邊界框.它與定位的區別是輸入圖像中物體的個數是不肯定的,所以須要預測的參數數量也不肯定.
  • 滑動窗口(Sliding Window)將輸入對象切分爲小塊,而後將它輸入到卷積網絡中,輸入對應分類結果(若是沒有分類目標,則屬於背景).它的缺陷是窗口的大小和位置難以抉擇.
  • R-CNN採用信號處理,圖像處理等方法來創建候選清單,而後將圖像切分爲上千個候選區域(Region Proposals),再對這些區域應用卷積網絡.候選區域可能有不一樣的尺寸,所以在傳入網絡前須要將它們切分至固定尺寸.最後使用SVM分類,同時有一個用於預測邊界的補償值,因此這是一個多任務損失.它的缺陷是仍須要傳入大量候選區域,而且這些候選區域是由固定算法獲得的,沒法學習參數.
  • Fast R-CNN經過卷積網絡獲得圖像的高分辨率特徵映射,切分圖像的像素,基於備選區域投影到卷積特徵映射,從中提取屬於備選區域的卷積塊.而後用興趣區域池化層(ROI pooling layer)來使卷積塊變爲固定尺寸,輸入全鏈接層進行分類.一樣有一個多任務損失,須要基於全局反向傳播同時學習.它能夠重複運用卷積計算,所以時間主要消耗在尋找備選區域.
  • Faster R-CNN卷積網絡去預測備選區域,其他與Fast R-CNN相同.神經網絡同時處理四件事:
  1. 備選區域是不是待識別物體
  2. 校訂包圍盒
  3. 最終物體識別的損失
  4. 最終包圍盒補償的損失
  • YOLO(You Only Look Once)SSD(Single Shot Detection)這類模型的思想是利用大型卷積網絡當成迴歸問題處理.將輸入圖像分爲網格,每一個網格都有一系列的基本邊界框.對每一個網格和每一個基本邊界框預測邊界框偏移目標對應類別的分數.
  • 物體分割(Instance Segmentation)是給定一張輸入圖像,預測出圖像中每一個物體具體像素.
  • Mask R-CNN將整張輸入圖像送入卷積網絡和訓練好的候選框生成網絡,而後將候選框投射卷積特徵圖上,而後產生兩個分支,一個預測出分類類別分數和邊界框的座標,另外一個是一個語義分割的微型網絡.

 

第12章 可視化和理解卷積神經網絡

---12.1 特徵可視化,倒置,對抗樣本

  • 第一層卷積層可視化,獲得的特徵圖像通常是不一樣顏色,不一樣角度的有向邊.可是對較深的卷積層可視化獲得的圖像則沒有明顯含義.
  • 降維(如t-SNE,PCA)能夠將高維特徵映射爲二維圖像.
  • 排除實驗平均像素遮擋圖像中的一部分,而後觀察圖像分類機率的變化值,獲得機率熱力圖.由此能夠判斷圖像中的哪些部分對分類起關鍵做用.
  • 顯著圖(Saliency Map)每一個像素作輕微擾動,而後計算像素對分類預測機率的影響,從而獲得哪些像素是影響分類的關鍵部分.
  • 梯度上升(Gradient Ascent)修正訓練的神經網絡的權重,並改變圖像的某些像素,來最大化某些中間神經元和類的分值.爲了讓生成圖像符合天然圖像,須要加入正則項(圖像的L2範數,高斯模糊處理).

---12.2 DeepDream和風格遷移

  • 提取輸入圖像,經過神經網絡運行到某一層,使得該層的梯度等於激活值,而後反向傳播到圖像.這樣就放大了神經網絡在圖像中檢測到的特徵.
  • 特徵反演(Feature Inversion)經過神經網絡運行一張圖像,記錄其中一個特徵值,而後根據它的特徵表示重構該圖像.
  • 紋理合成(Texture Synthesis)給定一些紋理的輸入圖像塊,輸出更大塊的紋理圖像.神經網絡的紋理合成方法是將紋理輸入神經網絡,輸出一個H*W的C維特徵.而後選取輸入特徵的兩個不一樣列獲得C*C的矩陣,反映了哪些特徵傾向於在空間的不一樣位置一塊兒激活.
  • 風格遷移(Neural Style Transfer)選用藝術畫做進行紋理合成,再使用特徵反演生成具備藝術風格的圖像.

第13章 生成模型

---13.1 Pixel RNN/CNN

  • 生成模型是指在給定訓練數據下從相同的數據分佈中生成新的樣本.它能夠解決密度估計問題.

  • Pixle RNN/CNN屬於全可見信念網絡.它對一個密度分佈顯式建模.使用鏈式法則來將似然分解爲一維分佈的乘積,而後只要在該定義下最大化訓練數據的似然便可訓練模型.

  • 神經網絡來表達機率分佈函數p(xi),其中xi的順序由像素擴散的順序決定,並傳入LSTM/CNN中.訓練圖片的每一個像素值能夠充當訓練標籤,因此可使用softmax函數進行訓練.

---13.2 變分自編碼器

  • 自動編碼器(Autoencoders)是一種無監督學習方法,將輸入數據經過編碼器生成一些特徵.編碼器的映射函數通常是ReLU+CNN.生成的特徵通常比輸入數據的維度小,因此這是一種生成重要特徵的降維方法.利用生成的特徵和解碼器(解卷積網絡)輸出與輸入數據維度相同的數據,並利用L2損失函數來計算原數據和生成數據之間的偏差.訓練好模型後去掉解碼器,就能夠有一個用於生成重要特徵的模型.
  • 變分自編碼器定義一個不易處理的密度函數,經過附加的隱變量z對其建模.它經過向自動編碼器中加入隨機因子從而生成新數據,自動編碼器生成的特徵就是隱變量z.首先選一個簡單的關於z的先驗分佈,而後用神經網絡計算條件機率p(x|z),並用解碼器生成圖像.直接計算數據的最大似然很難,因此使用一個額外的編碼器來給出條件機率.

---13.3 生成式對抗網絡

  • 生成式對抗網絡(Generative Adversarial Networks)採用博弈論的方法,從一個簡單分佈中採樣(如隨機噪聲),而後用神經網絡學習從簡單分佈到想要的分佈的一個變換.
  • 把訓練過程看做兩個玩家博弈的過程,生成器網絡試圖生成圖像來騙過判別器網絡,判別器網絡試圖把真假圖片區分開來.
  • 優化目標是使判別器目標函數儘量大,生成器目標函數儘量小.首先對判別器進行梯度上升,從而學習thetad來最大化.接着對生成器進行梯度降低,從而學習thetag來最小化.但這種方法的生成器目標函數效果很差,由於它的梯度和自身效果成正比,因此一開始訓練會很困難.所以採用相反的想法,轉而用梯度上升最大化生成器網絡的目標函數的相反值,訓練過程將交替進行.

第14章 深度加強學習

---14.1 策略梯度,硬注意

  • 強化學習(Reinforcement Learning)有一個代理和一個環境,環境賦予代理一個狀態,代理將採起行動,環境將回饋一個獎勵.這一過程將一直進行下去,直到環境給出終端狀態.這能夠做用於遊戲或棋類AI.
  • 馬爾可夫決策過程(Markov Decision Process)是強化學習問題的數學表達.它知足馬爾可夫性:當前狀態徹底刻畫了世界的狀態.它由S(全部可能狀態的集合),A(全部行動的集合),R(獎勵的分佈函數),P(下一個狀態的轉移機率分佈)γ(獎勵因子)定義.它的工做方式是令初始時間步t=0,環境從初始狀態分佈p(s)中採樣,並將一些初始狀態設爲0,而後開始如下循環:
  1. 代理選擇一個動做.
  2. 環境從該狀態和動做得到獎勵.
  3. 抽樣下一個狀態.
  4. 代理收到獎勵,進入下一狀態.
  • 基於上述循環,目標就是找到一個最佳策略(指定了每一個狀態下要採起的行動),使得獎勵之和最大.由於MDP中含有隨機性,因此要最大化預期獎勵之和.
  • 任何狀態下的價值函數(Value function)都是從狀態s的決策到如今的決策以後的指望累積獎勵.任何狀態行動組Q值函數(Q-value function)遵照在狀態s下采起行動a的指望累積獎勵.
  • Bellman等式意味着給定任何狀態動做組s和a,這一對的價值就是回饋r加上最終進入的任何狀態動做組s'和a'的價值.它的問題在於必須計算每個狀態動做組,這是一個巨大的狀態空間,所以不可行.

---14.2 Q-Learning,Actor-Critic算法

  • 使用深度神經網絡來估計動做值函數,這稱做深度強化學習.
  • 決策梯度是指對策略參數進行梯度評估.
  • 將深度強化學習和決策梯度結合,就獲得了Actor-Critic算法.

第15章 深度學習的方法及硬件

第16章 對抗樣本和對抗訓練

相關文章
相關標籤/搜索