李宏毅深度學習筆記 https://datawhalechina.github.io/leeml-notes
李宏毅深度學習視頻 https://www.bilibili.com/video/BV1JE411g7XF
step1 神經網絡
激活函數是sigmoid,紅色圈是一組神經元,每個神經元都有自己的權重和偏差。
完全連接前饋神經網絡
給定網絡結構,相當於定義了一個函數集,每個神經元可以使用不同的函數,那么整個網絡的函數集合是非常大,所以說深度學習可以擬合任意曲線。
全鏈接:layer1與layer2之間兩兩都有連接
前饋:傳遞的方向是由后往前傳
輸入層不是有神經元組成的,嚴格講不能當作一個layer
除了輸入層和輸出層,其他的叫做隱藏層,上圖有L個隱藏層
有很多個layer叫做deep,具體幾個看個人
隨着層數變多,錯誤率降低,隨之運算量增大
矩陣計算
兩個神經元的權重集合表示為\(\begin{bmatrix} 1 & -2 \\ -1 & 1 \end{bmatrix}\)
sigmoid的意義是激活函數,現在很少用sigmoid作為激活函數
\(W^1=\begin{bmatrix} w_{11}^1&w_{21}^1& \cdots&w_{N1}^1 \\ w_{21}^1&w_{22}^1& \cdots&w_{N2}^1 \\ \vdots \\ w_{1N}^1&w_{2N}^1& \cdots&w_{NN}^1 \end{bmatrix}\),\(x=\begin{bmatrix} x_1 \\x_2 \\ \vdots \\ x_N \end{bmatrix}\),\(b^1=\begin{bmatrix} b_1^1\\b_2^1\\ \vdots \\ b_N^1\end{bmatrix}\)
整個神經網絡運算就相當於一連串的矩陣運算
寫成矩陣運算的好處是可以使用GPU加速
隱藏層-特征提取
隱藏層看成是一個特征提取器,代替手動的特征工程
輸出層的輸入看成是\(x\)經過很多層復雜轉換后,抽出的一組最好的feature,能用簡單的分類器很好的分類
多分類的時候一般也是使用softmax函數
手寫數字例子
輸入16*16=256維的向量
輸出是對應是一個數字的概率
輸入是256維的向量
輸出是10維的向量
function就是一個神經網絡
隱藏層是自己設計的,多少個layer,每個layer多少個神經元
結構決定了函數集,所以網絡結構很關鍵
常用問題:
需要多少層隱藏層?每個隱藏層需要多少神經元?
只能憑着經驗和直接,普通的機器學習要做好的特征工程,但是深度學習往往不需要做特征工程,但是需要設計好的網絡結構。像語音識別,人很難知道怎么抽一組好的feature,因為不知道一組好的feature長什么樣子,不如設計一個網絡結構,或者嘗試各種網絡結構,讓機器自己找出好的feature。
可以自動學習網絡結構嗎?
是可以的
可以自己設計網絡結構嗎?
可以的,比如不要fully connected ,神經元自己亂接。一種特殊的接法就是卷積神經網絡。
step2 模型評估
在神經網絡中,如何決定一組參數的好壞?
有一張圖片和label( \(\hat{y}\) ),input圖片的pixel,通過神經網絡得到一個output( y ),然后計算交叉熵,接下來調整參數最小化交叉熵
在整個training data里,定義總體損失,在function set 里找到一組function,或者找到一組神經網絡的參數,最小化總體損失。
step3:選擇最優函數
如何找到這組最優參數?
就是使用梯度下降法
\(w_1\)是第一層隱藏層的所有參數
計算每個參數的偏微分,全部集合就是梯度,有了梯度后更新參數
反復計算梯度和更新參數