1. 程式人生 > >Cs231n課堂內容記錄-Lecture 4&5 最優化&反向傳播

Cs231n課堂內容記錄-Lecture 4&5 最優化&反向傳播

Lecture 4 最優化

課程內容記錄:

(上)https://zhuanlan.zhihu.com/p/21360434?refer=intelligentunit

(下)https://zhuanlan.zhihu.com/p/21387326?refer=intelligentunit

1.程式碼註釋:

numpy.random.randn()

numpy.random.randn(d0,d1,…,dn):rand函式返回一個或一組樣本,具有標準正態分佈。。dn對應每個維度,函式返回值為指定維度的array。

具體用法參見:https://blog.csdn.net/u012149181/article/details/78913167

float("inf") 正無窮。

2.關於梯度:

數值梯度是利用有限差分法代入一個具體的較小值,利用公式求得對應的梯度,這個梯度值是近似的,近似程度取決於你的較小值的大小。它的優點是程式碼容易實現。解析梯度是利用微分直接求解梯度,優點是精確求解,解析速度快,但是有時候會出錯。在debug的時候,為了檢驗公式的正確性,數值梯度往往是一個很好的工具,由於計算速度很慢,你可能需要適當減少引數的數量,這是一個非常好的除錯策略。

注:學習率是一個很重要的超引數,在訓練網路時往往是第一個需要檢查的超引數,關於模型大小和正則化強度的檢查往往在其之後進行。

注:互動網頁專案網址(很好用,就不加以說明了):

http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/

3.深度神經網路之前:

將畫素直接輸入線性分類器不是一個明智的選擇,因為這樣的模型無法分辨多模態等圖片的特徵,且總由背景等畫素佔比多的區域決定分類結果。在深度神經網路大規模運用之前,常用的方式是計算圖片各種特徵代表(feature representation),例如一些與圖片形象特徵有關的數值構成特徵向量,然後將不同的特徵向量合在一起,得到影象的特徵表述,再將這些特徵表述傳入線性分類器。這種模型可以得到圖片的轉換特徵(比如得到顏色頻數直方圖,或者邊緣方向直方圖),將某些原本線性不可分的圖片特徵變為線性可分的,從而可以有線性分類器進行分類。如今的深度學習網路主要的區別就是網路可以利用卷積層等結構自行學習特徵,不再需要人工提取輸入特徵。

 

Lecture 5 反向傳播

課程內容記錄:https://zhuanlan.zhihu.com/p/21407711?refer=intelligentunit

雅克比矩陣(Jacobian matrix

參見https://www.cnblogs.com/feifanrensheng/p/8615686.html