吳恩達的 CS294A 是一門很好的深度學習入門課程,打算接下來的學習以這個課程的內容爲主。UFLDL Tutorial 是 CS294A 課程的 wiki 頁,包含了課程講義和做業。若是你對 監督學習、邏輯迴歸、梯度降低 等基礎概念並不熟悉,能夠先學習 以前的課程。php
關於課程做業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 沒法訪問 Github 的話能夠點擊 Coding 查看 ),代碼中的錯誤和改進歡迎你們指出。git
你們知道如今深度學習在計算機視覺領域全面開花結果,獲得了許多以前沒法想象的好結果。而就在這以前你們還要花費很大的精力來人工設計特徵。下面要學習的 稀疏自編碼器 正是向自動學習特徵邁出的第一步。( 下圖爲做業中的神經網絡,左圖爲輸入圖像,右圖爲訓練後的輸出圖像 )github
根據機器學習的通常模式,首先給出 稀疏自編碼器 的代價函數:web
比起熟悉的前兩項,代價函數新增了對於隱含層的懲罰,式中 表示隱含層的神經元個數。
表示 隱含層神經元
對於全部訓練數據的平均激活度,
( 注意這裏的
表示一個函數,值爲數據
對應的
),
爲
的目標值,目的就是以前說的讓神經元在大多數時間不激活。算法
按照 Ng 的說法,新的懲罰項有多種函數能夠選擇,而這裏用來衡量 與
差別的度量爲
又稱爲 相對熵,定義爲:網絡
它所度量的是兩個機率分佈間的距離( 我也不是太懂,有機會再作深刻的研究 )。 有了代價函數,接下來看下原先的反向傳播算法有什麼變化~機器學習
在以前 反向傳播算法 課程中已經說過它該算法的兩個重點,一個是它的目的:更快速地計算代價函數的梯度,另外一個是它的計算依賴於多元函數求導的鏈式法則。函數
因爲代價函數的增長項直接爲隱含層的函數,因此隱含層的偏差:學習
其中後一項可化爲:優化
所以 反向傳播算法 中的 計算變爲:
其他的計算都和原先的算法相同。 搞定代價函數和梯度計算,剩下的就是調用帶優化的梯度降低算法了~
最後稍微提下課程做業,它讓咱們在 10 張風景圖片中隨機取 10000 個 8x8 的局部圖,而後讓稀疏自編碼器學習其中的特徵。神經網絡的隱含層神經元個數爲 25,輸入輸出維度都爲 64。下圖爲每一個隱含層神經元對應的輸入層權重,大體可當作該神經元檢測到這種特徵時會被激活。( tip: 做業中的學習算法和梯度檢查函數在以前的課程中都寫過,所以能夠直接拿來用。 )
So~,稀疏自編碼器的內容就是這些了,謝謝你們耐心閱讀。
P.S. 封面圖爲猴子視覺皮層 V1 區的方向柱