1. 程式人生 > >深度學習:CS231n官方筆記

深度學習:CS231n官方筆記

作者:杜客

連結:https://zhuanlan.zhihu.com/p/21930884
來源:知乎
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

CS231n簡介

課程描述:請允許我們引用課程主頁上的官方描述如下。

計算機視覺在社會中已經逐漸普及,並廣泛運用於搜尋檢索、影象理解、手機應用、地圖導航、醫療製藥、無人機和無人駕駛汽車等領域。而這些應用的核心技術就是影象分類、影象定位和影象探測等視覺識別任務。近期神經網路(也就是“深度學習”)方法上的進展極大地提升了這些代表當前發展水平的視覺識別系統的效能。

本課程將深入講解深度學習框架的細節問題,聚焦面向視覺識別任務(尤其是影象分類任務)的端到端學習模型。在10周的課程中,學生們將會學習如何實現、訓練和除錯他們自己的神經網路,並建立起對計算機視覺領域的前沿研究方向的細節理解。最終的作業將包括訓練一個有幾百萬引數的卷積神經網路,並將其應用到最大的影象分類資料庫(ImageNet)上。我們將會聚焦於教授如何確定影象識別問題,學習演算法(比如反向傳播演算法),對網路的訓練和精細調整(fine-tuning)中的工程實踐技巧,指導學生動手完成課程作業和最終的課程專案。本課程的大部分背景知識和素材都來源於
ImageNet Challenge
競賽。

課程內容:官方課程安排及資源獲取請點選這裡,課程視訊請在Youtube上檢視Andrej Karpathy建立的播放列表,也可私信我們獲取雲盤視訊資源。通過檢視官方課程表,我們可以看到:CS231n課程資源主要由授課視訊與PPT授課知識詳解筆記課程作業三部分組成。其中:

  • 授課視訊15課。每節課時約1小時左右,每節課一份PPT。
  • 授課知識詳解筆記共9份。光看課程視訊是不夠的,深入理解課程筆記才能比較紮實地學習到知識。
  • 課程作業3次。其中每次作業中又包含多個小作業,完成作業能確保對於課程關鍵知識的深入理解和實現。
  • 課程專案1個。這個更多是面向斯坦福的學生,組隊實現課程專案。
  • 拓展閱讀若干。課程推薦的拓展閱讀大多是領域內的經典著作節選或論文,推薦想要深入學習的同學閱讀。

課程評價:我們覺得贊!很多人都覺得贊!當然也有人覺得不好。具體如何,大家搜搜CS231n在網路,在知乎上的評價不就好了嘛!個人認為:入門深度學習的一門良心課適合絕大多數想要學習深度學習知識的人。

課程不足:課程後期從RCNN開始就沒有課程筆記。


課程學習方法

三句話總結:

  • 看授課視訊形成概念,發現個人感興趣方向。
  • 讀課程筆記理解細節,夯實工程實現的基礎。
  • 碼課程作業實現演算法,積累實驗技巧與經驗。

引用一下學習金字塔的圖,意思大家都懂的:

我們的工作

  • 完成了CS231n全部9篇課程知識詳解筆記的翻譯

我們將使用Python程式語言來完成本課程的所有作業。Python是一門偉大的通用程式語言,在一些常用庫(numpy, scipy, matplotlib)的幫助下,它又會變成一個強大的科學計算環境。我們期望你們中大多數人對於Python語言和Numpy庫比較熟悉,而對於沒有Python經驗的同學,這篇教程可以幫助你們快速瞭解Python程式設計環境和如何使用Python作為科學計算工具。


該筆記是一篇介紹性教程,面向非計算機視覺領域的同學。教程將向同學們介紹影象分類問題和資料驅動方法,內容列表:
  • 影象分類、資料驅動方法和流程
  • Nearest Neighbor分類器
    • k-Nearest Neighbor 譯者注:上篇翻譯截止處
  • 驗證集、交叉驗證集和超引數調參
  • Nearest Neighbor的優劣
  • 小結
  • 小結:應用kNN實踐
  • 拓展閱讀

翻譯:線性分類筆記(上)(中)(下)

我們將要實現一種更強大的方法來解決影象分類問題,該方法可以自然地延伸到神經網路和卷積神經網路上。這種方法主要有兩部分組成:一個是評分函式(score function),它是原始影象資料到類別分值的對映。另一個是損失函式(loss function),它是用來量化預測分類標籤的得分與真實標籤之間一致性的。該方法可轉化為一個最優化問題,在最優化過程中,將通過更新評分函式的引數來最小化損失函式值。內容列表:
  • 線性分類器簡介
  • 線性評分函式
  • 闡明線性分類器 譯者注:上篇翻譯截止處
  • 損失函式
    • 多類SVM
    • Softmax分類器
    • SVM和Softmax的比較
  • 基於Web的可互動線性分類器原型
  • 小結

翻譯:最優化筆記(上)(下)

該筆記介紹了影象分類任務的第三個關鍵部分:最優化。內容列表如下:
  • 簡介
  • 損失函式視覺化
  • 最優化
    • 策略#1:隨機搜尋
    • 策略#2:隨機區域性搜尋
    • 策略#3:跟隨梯度 譯者注:上篇截止處
  • 梯度計算
    • 使用有限差值進行數值計算
    • 微分計算梯度
  • 梯度下降
  • 小結


該筆記本將幫助讀者對反向傳播形成直觀而專業的理解。反向傳播是利用鏈式法則遞迴計算表示式的梯度的方法。理解反向傳播過程及其精妙之處,對於理解、實現、設計和除錯神經網路非常關鍵。內容裡列表如下:
  • 簡介
  • 簡單表示式和理解梯度
  • 複合表示式,鏈式法則,反向傳播
  • 直觀理解反向傳播
  • 模組:Sigmoid例子
  • 反向傳播實踐:分段計算
  • 回傳流中的模式
  • 使用者向量化操作的梯度
  • 小結

翻譯:神經網路筆記1(上)(下)

該筆記介紹了神經網路的建模與結構,內容列表如下:
  • 不用大腦做類比的快速簡介
  • 單個神經元建模
    • 生物動機和連線
    • 作為線性分類器的單個神經元
    • 常用的啟用函式
  • 神經網路結構
    • 層組織
    • 前向傳播計算例子
    • 表達能力
    • 設定層的數量和尺寸
  • 小節
  • 參考文獻

該筆記介紹了資料的預處理,正則化和損失函式,內容列表如下:
  • 設定資料和模型
    • 資料預處理
    • 權重初始化
    • 批量歸一化(Batch Normalization)
    • 正則化(L2/L1/Maxnorm/Dropout)
  • 損失函式
  • 小結

翻譯:神經網路筆記3(上)(下)

該筆記講解了神經網路的動態部分,即神經網路學習引數和搜尋最優超引數的過程。內容列表如下:

梯度檢查合理性(Sanity)檢查檢查學習過程
  • 損失函式
  • 訓練集與驗證集準確率
  • 權重:更新比例
  • 每層的啟用資料與梯度分佈
  • 視覺化 譯者注:上篇翻譯截止處
引數更新
  • 一階(隨機梯度下降)方法,動量方法,Nesterov動量方法
  • 學習率退火
  • 二階方法
  • 逐引數適應學習率方法(Adagrad,RMSProp)
超引數調優評價
  • 模型整合
總結拓展引用


內容列表:

  • 結構概述
  • 用來構建卷積神經網路的各種層
    • 卷積層
    • 匯聚層
    • 歸一化層
    • 全連線層
    • 將全連線層轉化成卷積層
  • 卷積神經網路的結構
    • 層的排列規律
    • 層的尺寸設定規律
    • 案例學習(LeNet / AlexNet / ZFNet / GoogLeNet / VGGNet)
    • 計算上的考量
  • 拓展資源

  • 完成了3個課程作業頁面的翻譯
作業內容:實現k-NN,SVM分類器,Softmax分類器和兩層神經網路,實踐一個簡單的影象分類流程。

作業內容:練習編寫反向傳播程式碼,訓練神經網路和卷積神經網路。

作業內容:實現迴圈網路,並將其應用於在微軟的COCO資料庫上進行影象標註。實現DeepDream等有趣應用。

  • 幫助知友@智靖遠發起了在Youtube上合力翻譯課程字幕的倡議

原文:知友智靖遠關於CS231n課程字幕翻譯的倡議。當時,@智靖遠已經貢獻了他對第一課字幕的翻譯,目前這個翻譯專案仍在進行中,歡迎各位知友積極參與。具體操作方式在倡議原文中有,請大家點選檢視。

有很多知友私信我們,詢問為何不做字幕。現在統一答覆:請大家積極參加@智靖遠的字幕翻譯專案。他先進行的字幕貢獻與翻譯,我們不能奪人之美後續,我們也會向該翻譯專案進行貢獻

翻譯團隊

CS231n課程筆記的翻譯,始於@杜客在一次回答問題“應該選擇TensorFlow還是Theano?”中的機緣巧合,在取得了授權後申請了知乎專欄智慧單元 - 知乎專欄獨自翻譯。隨著翻譯的進行,更多的知友參與進來。他們是@ShiqingFan,@猴子@堃堃@李藝穎

大家因為認同這件事而聚集在一起,犧牲了很多個人的時間來進行翻譯,校對和潤色。而翻譯的質量,我們不願意自我表揚,還是請各位知友自行閱讀評價吧。現在筆記翻譯告一段落,下面是團隊成員的簡短感言

@ShiqingFan :一個偶然的機會讓自己加入到這個翻譯小隊伍裡來。CS231n給予了我知識的源泉和思考的靈感,前期的翻譯工作也督促自己快速了學習了這門課程。雖然科研方向是大資料與平行計算,不過因為同時對深度學習比較感興趣,於是乎現在的工作與兩者都緊密相連。Merci!

@猴子:在CS231n翻譯小組工作的兩個多月的時間非常難忘。我向杜客申請加入翻譯小組的時候,才剛接觸這門課不久,翻譯和校對的工作讓我對這門課的內容有了更深刻的理解。作為一個機器學習的初學者,我非常榮幸能和翻譯小組一起工作並做一點貢獻。希望以後能繼續和翻譯小組一起工作和學習。

@堃堃 :感謝組內各位成員的辛勤付出,很幸運能夠參與這份十分有意義的工作,希望自己的微小工作能夠幫助到大家,謝謝!

@李藝穎 :當你真正沉下心來要做一件事情的時候才是學習和提高最好的狀態;當你有熱情做事時,並不會覺得是在犧牲時間,因為那是有意義並能帶給你成就感和充實感的;不需要太過刻意地在乎大牛的巨大光芒,你只需像傻瓜一樣堅持下去就好了,也許回頭一看,你已前進了很多。就像老杜說的,我們就是每一步慢慢走,怎麼就“零星”地把這件事給搞完了呢?

@杜客 :做了一點微小的工作,哈哈。

未來工作

目前通過大家的反饋,之後會有新的創作方向,會更多與大家互動,敬請期待吧!

感謝

感謝所有給我們的翻譯提出過批評指正的知友,每篇文章末尾處的譯者反饋部分我們都列出了大家的具體指正與貢獻;

感謝所有給我們的翻譯點讚的知友,你們的贊是我們的精神糧食;

感謝給文章讚賞小錢錢的知友,謝謝老闆們:)

最後

懇請大家點贊和分享到其他社交網路上,讓更多想要入門與系統學習深度學習的小夥伴能夠看到這篇總集。同時,也歡迎大家在來專欄分享你的知識,發現志同道合的朋友!

這個世界需要更多的英雄!