JavaShuo
欄目
標籤
CS231n 斯坦福深度視覺識別課 學習筆記(完結)
時間 2019-12-08
標籤
cs231n
斯坦福
深度
視覺
識別
學習
筆記
完結
欄目
快樂工作
简体版
原文
原文鏈接
課程地址
算法
第1章 CS231n課程介紹
---1.1 計算機視覺概述
這門課的主要內容是
計算機視覺
.它是一門須要涉及不少其餘科目知識的學科.
視覺數據
佔據了互聯網的絕大多數,可是它們很難利用.
---1.2 計算機視覺歷史背景
爲了得到一副3D圖像,咱們須要經歷
原始圖像(端點,曲線,邊緣)
->
2.5維草圖
(場景的不連續性)->
3D圖像
幾個過程.
70年代:每一個對象由簡單的幾何圖單位組成
80年代:如何識別由簡單物體構成的視覺空間
若是
目標識別
太難了,應該先進行
圖像分割
.
可使用圖片中的
特徵
來進行圖像識別.
圖像特徵的維度通常很高,所以算法很容易
過擬合
.
ImageNet
是一個很大的目標識別數據集,相關比賽每每使用top5標準來衡量.
---1.3 課程後勤
介紹了本門課的內容:
圖像識別
,
目標檢測
,
風格遷移
,如何從零開始構建CNN,以及tensorflow等框架的使用等.
深度學習流行的主要緣由是
計算能力
的提升和
數據量
的增加.
第2章 圖像分類
---2.1 圖像分類-數據驅動方法
計算機存儲圖像
的方式是
二維或三維矩陣
.一個物體與計算機實際看到的像素值之間的差距稱爲
語義鴻溝
.
一個具備
魯棒性
的圖像識別算法應該能從不一樣
角度
,
光照條件
,
變形
,
遮擋
,
類內條件差別
等條件下識別出物體類別.
邊緣
對於視覺識別是十分重要的.可是基於邊緣的規則識別算法不是一種好方法.
數據驅動的分類方法
是指:
收集
具備標註的圖片
數據集
(CIFAR10).
使用
機器學習
來
訓練
分類器.
使用模型來
預測
新的圖片.
最近鄰(Nearest Neighbors)算法
:
不進行訓練
,只是單純地
存儲
全部的數據集,而後對於要預測的圖片,從數據集中找出與它
最類似
的圖片的標籤做爲輸出.
訓練時間很短,預測時間很長
.這與咱們理想中的圖像識別算法
相反
.
最近鄰算法很容易出現
誤分類
,所以出現了
K近鄰(K-
Nearest Neighbors
)算法
:選出K個最近點,而後進行多數投票決定輸出.
---2.2 圖像分類-K近鄰算法
距離函數
是
K近鄰算法
的關鍵.經常使用的有
L1距離
,
L2距離
等.經過不一樣的距離函數還能夠將K近鄰算法泛化到
任何類型的數據
上.
K近鄰算法中的
K值
和
距離函數
就是典型的
超參數
:須要人爲設置,而不能由算法學習獲得.選擇超參數的常見做法就是將數據集分爲
訓練集,驗證集,測試集
.使用
驗證集
來選擇超參數,並在測試集獲得結果.若是
數據集較小
,還能夠採用
交叉驗證
的方法進行選擇.
實際上K近鄰算法不多在圖像數據中應用,由於它預測時間很長,並且距離函數很難度量圖像數據.
---2.3 圖像分類-線性分類I
線性分類器
是
參數模型
中最簡單的例子.它其實是關於
輸入數據x和權重W的函數
,輸出表明瞭預測的類別.
線性分類器其實是用一個
模版
來匹配圖像,因此它對於
多模態類別
的預測能力較差.另外從
幾何角度
上看,線性分類器是用一個
線性平面
來將某一類別與其餘類別劃分開來,所以很難處理
奇偶
或
多分類問題
.
第3章 損失函數和優化
---3.1 損失函數
爲了獲得線性分類器的權重,引入了
損失函數
來定量地衡量權重的好壞.最小化損失函數的過程是一個
優化
過程.
損失函數就是一個關於
預測值和真實值
的函數.
多分類SVM
損失函數:若是真實分類的分數大於
其餘分數+邊界(margin)
,則損失=0,不然損失=
其餘分數-真實分數+邊界
.邊界的值能夠任意選擇,由於這個參數最終會消失.用公示表示爲
,
,也稱爲
hinge損失
.
初次迭代時損失函數的值應該約爲分類的數量減去1.
假若有一組W使得損失函數爲0,那麼2W的損失函數也應該爲0.這就使得有無窮多組權重,分類器將沒法抉擇.所以須要加入
超參數λR(W)
做爲
正則化項
,R(W)有L2範數,L1範數,彈性網絡,最大規範等正則化選項.正則化的目的就是
減輕模型複雜度
.
SVM只關心正確分類
是否比其餘分類高出一個邊界
.
Softmax
:
數據的softmax值是
對應的損失函數值是
,也稱爲
交叉熵損失
.
初次迭代時損失函數的值應該約爲log(C),C爲分類數.
網絡
softmax會
不斷提升正確分類的機率分佈
.
架構
---3.2 優化
優化的過程能夠想象爲在一座山中尋找山谷.
梯度降低法
是最經常使用的優化方法.
負梯度方向
是函數降低最快的方向.
首先隨機初始化權重,而後計算梯度,接着朝梯度最小的方向前進一小步.
步長
是一個超參數,最好在初始時選擇較大步長,而後逐漸縮小.
隨機梯度降低(SGD)
只選取
小批量(minibatch)
數據進行估算,能夠提高速度.
梯度可由
解析梯度
(先計算出梯度公式,再代入數值)和
數值梯度
(代入一個δ和數值計算)計算,數據維度高時前者速度較快.
圖像分類直接輸入原始像素值並很差,經常使用方式是
計算圖片的特徵表明
,而後將這些特徵向量合在一塊兒,傳入線性分類器.經常使用的特徵表示有
顏色直方圖
,
方向梯度直方圖
,
詞袋
等.這種方式與神經網絡有些類似,區別是咱們的數據劃分方式將由
神經網絡學習獲得
.
第4章 介紹神經網絡
---4.1 反向傳播
反向傳播
:
給定輸入值後,進行
前向傳播
,能夠獲得輸出值.
反向傳播其實是
鏈式法則
的遞歸調用,逐層從後往前,能夠求出輸出值對每一個輸入的導數.
反向傳播的連續節點能夠
任意組合
,只要對這個總體求導便可.
max門
的後向傳播與前向傳播相似,它只將梯度傳遞給
最大值對應的節點
.
沿着梯度方向
前進一個步長
,就更新了權重.
---4.2 神經網絡
經過不一樣的
函數疊加
,就可使單層的
線性分類器
變爲多層的
神經網絡
乃至
深度網絡
.
--- 做業2
Fully-Connectd Neural Nets
:
框架
將每一種層的類型經過
前向傳播
和
反向傳播
來實現模塊化
全鏈接層前向傳播
:將輸入x經過reshape展開後,和權重w點乘並加上誤差b.
全鏈接層後向傳播
:分別對wx+b求導,獲得dx是上層梯度dout和權重w轉置後的點乘,再經過reshape轉換爲x的shape.dw是x經過reshape展開後的轉置和上層梯度dout的點乘,db就是上層梯度在縱軸方向上的和.
relu層前向傳播
:使用np.maximum(0,x)求出x中的每一個元素和0之間的最大值.
relu層後向傳播
:對於大於0的輸出值,至關於y=x,所以求導後就是自身.對於小於0的輸出值,至關於y=0,所以求導後仍是0.因此令dx=上層梯度dout,而後用dx[x<=0]=0來實現.
全鏈接層+relu層是經常使用組合
第5章 卷積神經網絡
---5.1 歷史
卷積神經網絡就是擁有
卷積層
的神經網絡.
---5.2 卷積和池化
全鏈接層
的每個結點都與上一層的全部結點相連.
卷積層
:
能夠
保持空間結構
卷積層的權重叫作
卷積核(濾波器,感覺野)
,將卷積核在圖像上
滑動
並計算每一次滑動的
點積
.滑動的
步長
是能夠選擇的.更大的步長意味着
降採樣
.
卷積核的深度通常默認與輸入圖像相同.
實際應用中通常會在邊角用
零填充,
這樣能夠保持
全尺寸輸出
.
通常會用多個卷積核(2的次方).
滑動卷積核會形成
輸入和輸出的尺寸不一樣
.
在卷積層後通常會跟隨一個
激活層
.
每幾個卷積層之間會有一個
池化層
.
---5.3 視覺以外的卷積神經網絡
池化層
:
做用是使生成的表示
更小
且
更容易控制
.
池化層的步長通常設置爲
避免重疊
,而且通常不使用零填充,由於目的是
降採樣
.
最多見的方法是
最大池化
:取卷積核中的最大值.濾波器通常設置爲2*2.
小尺寸卷積核和棄用池化是一種趨勢.
第6章 訓練神經網絡(上)
---6.1 激活函數
sigmoid
:
能夠將數據壓縮到[0,1]範圍內.
看做神經元的飽和放電率.
神經元飽和(絕對值很大)時,因爲sigmoid函數的導數爲0,通過鏈式法則後梯度也將變爲0,會形成
梯度消失
.
因爲sigmoid函數不是以0爲中心的,所以它不會改變輸入值的正負.這意味着梯度降低法將進行得十分
緩慢
.(這也是咱們要使用均值爲0的數據的緣由)
tanh
:
數據被壓縮到[-1,1]範圍內.
以0爲中心,可是當輸入飽和時仍會出現梯度消失.
ReLU
:
將負數變爲0,正數保持不變.
不會在正的區域產生飽和現象.
計算速度快
,所以收斂也很快.
比sigmoid函數更具備神經科學的類似性.
負的區域仍會飽和,而且致使梯度消失.這被稱爲
dead ReLU
.所以使用時通常用
較小的正偏置
進行初始化.
Leaky ReLU
:
與ReLU的區別是負區域有一個微小的斜率.
輸出均值接近0.
計算速度仍較快,而且不會發生飽和.
ELU(Exponential Linear Units)
:
具備ReLU的優勢.
輸出的均值接近0.
負區域較容易飽和.
Maxout
:
能夠看作是ReLU和Leaky ReLU的
泛化
.
不會飽和也不會發生梯度消失.
ReLU
是
較爲通用
的方法,Leaky ReLU/Maxout/ELU能夠嘗試使用,但它們更偏向於實驗性.tanh也能夠嘗試.
最好不要使用sigmoid
.
數據預處理
是一個重要環節.
零中心化(Zero-centered)
:
X -= np.mean(X, axis=0)
目的的使輸入數據有正有負,從而
避免全部梯度的正負性相同
.能夠加快優化速度.
在圖像處理中較
經常使用
.能夠減去整張圖像的均值圖像(AlexNet),或者只減去單通道平均值(VGGNet).
通常在訓練集中計算出均值後,會將該均值應用到測試數據中.
歸一化(Normalization)
:
X /= np.std(X, axis=0)
使得全部特徵處於一個範圍內,貢獻相同.
在圖像處理中較
少用
,由於圖像中的數值已經有必定範圍限制.
權重初始化
:
全零初始化
會使全部的神經元將作相同的事情,稱爲
參數對稱
.
若是使用
較小
的隨機參數初始化,當網絡較深時,全部的激活值都將
趨向於0
.
若是使用
較大
的隨機參數初始化,會發生
飽和
.
Xavier
初始化是根據輸入來獲得初始化權重的一種方法.
---6.2 批量歸一化
批量歸一化(Batch Normalization)
也就是
BN
操做,目的是讓每一個隱層節點的
激活輸入分佈
縮小到
(-1,1)
.
假設有N個D維訓練樣本,咱們將對每一個維度
獨立計算經驗均值和方差
.
批量歸一化層一般是在全鏈接層或卷積層以後插入的.
計算過程:
計算小批量
均值
:
計算小批量
方差
:
歸一化
:
縮放
和
平移因子
(由學習獲得):
優勢是
縮小輸入空間
,從而
下降調參難度
.還能夠
防止梯度爆炸/消失
,從而
加速網絡收斂
.
在選取超參數時,能夠用
隨機搜索
或
網格搜索
.隨機搜索的優勢是能夠對
超參數空間覆蓋
的更好.
第7章 訓練神經網絡(下)
---7.1 更好的優化
零中心化,歸一化等
數據預處理
的好處是能夠
使分類器對參數值中的小擾動不那麼敏感
.
SGD的缺陷
:
若是目標函數的
梯度方向與最小值並不在一條線
上,那麼SGD將會呈
"之"字形波動
.
若是有目標函數存在
鞍點
(局部最小點),SGD將
卡在裏面或前進很是緩慢
.
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的
CUDA
和
CUDNN庫
來進行運算.
深度學習框架的優勢
:
輕鬆地構建一個龐大的計算圖
輕鬆地計算計算圖中的梯度
在GPU上高效地運行
tensorflow
中的計算通常分爲
兩個階段
,上半部分是
定義計算圖
,而後是
運行計算圖
:
使用
tf.placeholder()
創建輸入槽用於輸入
常量
,
tf.Variable()
用於輸入
變量
(如權重).變量能夠存在計算圖中,
避免了每次都須要從內存中讀取
.變量須要
聲明初始化
.
創建
激活函數
,
預測值
,
損失函數
的
表達式
來完善計算圖.
使用optimizer=
tf.train.GradientDescentOptimizier(learning_rate)
來構建一個
優化器
.
使用updates=o
ptimizer.minimize(loss)
來讓tensorflow
更新梯度
.(這兩步至關於使用tf.gradients()計算反向傳播中的梯度,設定learning_rate,用assign()函數來表示權重更新的表達式.注意即便咱們不須要輸出梯度,但也要在run的參數中加入梯度,不然tensorflow不會更新梯度.這裏可使用tf.group()的小技巧,將須要更新但不須要返回的值放入group中)
使用
with tf.Session() as sess:
來
創建會話
.
使用
sess.run(tf.global_variables_initializer())
來
初始化全局參數
.
向會話中
加入常量的具體數據
.
使用
sess.run()
來
運行計算圖
.
循環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(長短時間記憶網絡)
被設計用來緩解梯度消失和梯度爆炸問題.
每一個時間步中都維持兩個隱藏狀態,一個是相似RNN中的
隱藏狀態(ht)
,一個是
單元狀態(ct)
.
將上一時間步的隱藏狀態和當前的輸入堆疊在一塊兒,乘上一個權重矩陣w,獲得
四個不一樣的門向量ifog
(
input gate
表示要
接受
多少
新的輸入信息
,
forget gate
表示要
遺忘
多少
以前的單元記憶
,
output gate
表示要
展示
多少
信息給外部
,
gate gate
表示有多少信息要
寫到輸入單元
中).
ifo
門都使用
sigmoid
激活函數,含義是0丟棄所有,1接受所有.而
g
門使用
tanh
激活函數,含義是單元狀態最多自增或自減1.
更新
隱藏狀態和單元狀態.
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相同.神經網絡同時處理四件事:
備選區域是不是待識別物體
校訂包圍盒
最終物體識別的損失
最終包圍盒補償的損失
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,而後開始如下循環:
代理選擇一個動做.
環境從該狀態和動做得到獎勵.
抽樣下一個狀態.
代理收到獎勵,進入下一狀態.
基於上述循環,目標就是找到一個
最佳策略(指定了每一個狀態下要採起的行動)
,使得
獎勵之和最大
.由於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章 對抗樣本和對抗訓練
相關文章
1.
深度學習斯坦福cs231n 課程筆記
2.
CS231斯坦福深度視覺學習課程學習筆記——1~2章
3.
CS231斯坦福深度視覺學習課程學習筆記——第3章
4.
斯坦福CS231n深度學習與計算機視覺課程學習筆記(1)——Introduction
5.
斯坦福CS231n聽課筆記
6.
斯坦福cs231n課程學習(5)
7.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十三):神經網絡筆記1(下)
8.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(八):線性分類筆記(下)
9.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十五):神經網絡筆記2(下)
10.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十二):神經網絡筆記1(上)
更多相關文章...
•
我們已經學習了 SQL,下一步學習什麼呢?
-
SQL 教程
•
您已經學習了 XML Schema,下一步學習什麼呢?
-
XML Schema 教程
•
Tomcat學習筆記(史上最全tomcat學習筆記)
•
算法總結-深度優先算法
相關標籤/搜索
斯坦福大學
斯坦福
斯坦福---機器學習
深度學習筆記
深度學習
深度學習圖像識別課程
cs231n
學習筆記
斯坦福大學-機器學習
快樂工作
Spring教程
MyBatis教程
Thymeleaf 教程
學習路線
調度
初學者
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
吳恩達深度學習--神經網絡的優化(1)
2.
FL Studio鋼琴卷軸之工具菜單的Riff命令
3.
RON
4.
中小企業適合引入OA辦公系統嗎?
5.
我的開源的MVC 的Unity 架構
6.
Ubuntu18 安裝 vscode
7.
MATLAB2018a安裝教程
8.
Vue之v-model原理
9.
【深度學習】深度學習之道:如何選擇深度學習算法架構
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
深度學習斯坦福cs231n 課程筆記
2.
CS231斯坦福深度視覺學習課程學習筆記——1~2章
3.
CS231斯坦福深度視覺學習課程學習筆記——第3章
4.
斯坦福CS231n深度學習與計算機視覺課程學習筆記(1)——Introduction
5.
斯坦福CS231n聽課筆記
6.
斯坦福cs231n課程學習(5)
7.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十三):神經網絡筆記1(下)
8.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(八):線性分類筆記(下)
9.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十五):神經網絡筆記2(下)
10.
【CS231n】斯坦福大學李飛飛視覺識別課程筆記(十二):神經網絡筆記1(上)
>>更多相關文章<<