作者 | Ryan Shrott
編譯 | Sambodhi
編輯 | Vincent
AI前線出品| ID:ai-front
AI 前線導語:最近,加拿大國家銀行首席分析師 Ryan Shrott 在分享吳恩達在 Coursera 上釋出的深度學習課程的前三門課的學習心得後,日前再次分享了他完成的第四門課的學習心得。
吳恩達的機器學習課程在 Coursera 平臺上已上線 5 年左右,該門課程是國內,乃至全球許多機器學習愛好者、專家學者的入門課程。整門課程深入淺出、簡潔易懂。
8 月 9 日,吳恩達又宣佈 deeplearning.ai 在 Coursera 平臺上開設系列全新深度學習課程,包括神經網路和深度學習概述、神經網路引數調整及優化、如何搭建機器學習專案、卷積神經網路、神經網路序列模型。從課程設定上來看,涵蓋了深度學習的基礎理論和簡單實操。這也是 deeplearning.ai 三大專案的第一個專案。
截止目前(2017 年 11 月 22 日),Coursera 上可用的課程是:
- 第一門課:神經網路與深度學習(Neural Networks and Deep Learning)
- 第二門課:改善深度神經網路:調整超引數、正則化和優化(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization)
- 第三門課:結構化機器學習專案(Structuring Machine Learning Projects)
- 第四門課:卷積神經網路(Convolutional neural network)
第四門課的內容是教授如何構建卷積神經網路並用它來處理影像資料。
Ryan Shrott 目前完成了第四門課,他表示,吳恩達在解釋很多優化計算機視覺任務所需瞭解的複雜概念上有抽絲剝繭講得通俗易懂的能力。他很喜歡這門課程中的如何用風格轉換器創造藝術影像這一部分內容,比如將 Claud Monet(19 世紀法國印象派畫家)的繪畫風格和任何影像結合起來進行藝術創作,如下圖所示:
下面是 Ryan Shrott 學習之後,用 Leonid Afremov(1955-,白俄羅斯現代印象派畫家)的作品《雨中的女人》(Rain Princess )的風格創作的藝術作品,你完全可以嘗試:
在本文中,Ryan Shott 為我們解讀了第四門課的 12 堂重要的課程。AI 前線在本文的基礎上亦做了一些批註,方便讀者理解並掌握一些概念,在深度學習少走彎路。
第 1 課:為什麼計算機視覺迅速崛起?
大資料和演算法的發展促使智慧系統的測試誤差收斂到貝葉斯最優誤差,這就使得人工智慧在所有領域中表現,超越了人類的水平,包括自然感知任務。開源軟體 TensorFlow 使你能夠使用遷移學習(teansfer learning)實現能夠快速檢測任何物體的目標檢測系統。通過遷移學習,你只需 100~500 個樣本就可以讓系統執行良好。手動標記 100 個樣本也並非很大的工作量,因此你可以快速得到最簡可行產品。
- 最簡可行產品:minimum viable product,MVP。是新產品開發中的名詞,是指有部分機能,恰好可以讓設計者表達其核心設計概念的產品。設計者可以進行驗證式學習,根據使用者的回饋,進一步瞭解使用情形,並且繼續開發此產品。
第 2 課:卷積如何工作?
吳恩達解釋瞭如何實現卷積操作,並展示如何對影像進行邊緣檢測。還介紹了其他濾波器,如索貝爾(Sobel)濾波器,它將更多的權重賦予邊緣的中心畫素。吳恩達還提到:濾波器的權重不應手工設計,而應該用爬山演算法來習得,如梯度下降(gradient descent)。
- 邊緣檢測目的是標識數字影像中亮度變化明顯的點。邊緣檢測大幅度地減少了資料量,並且剔除了可以認為不相關的資訊,保留了影像重要的結構屬性。
- 梯度下降是一個一階最優化演算法,通常也稱為最速下降法。
第 3 課:為什麼要使用卷積網路?
卷積網路在影像識別任務中為何如此有效,吳恩達給出了幾個哲學原因。他介紹了兩個具體原因。第一個原因是引數共享(parameter sharing)。這是基於影像某一部分有效的特徵探測器在影像中另一部分可能也有用的想法。例如,邊緣檢測器對影像中多個部分可能有用。引數共享所需的引數數量很少,以及穩健的平移不變性( translation invariance)。平移不變性是照片中的貓進行移位、旋轉後仍然識別為貓的關鍵因素。
- 卷積神經網路以其區域性權值共享的特殊結構在語音識別和影像處理方面有著獨特的優越性,其佈局更接近於實際的生物神經網路,權值共享降低了網路的複雜性,特別是多維輸入向量的影像可以直接輸入網路這一特點避免了特徵提取和分類過程中資料重建的複雜度。
- 可以將這些引數看成是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:影像的一部分的統計特性與其他部分是一樣的。這也意味著我們在這一部分學習的特徵也能用在另一部分上,所以對於這個影像上的所有位置,我們都能使用同樣的學習特徵。
第二個原因是連線的稀疏性。這個概念是指每個輸出層只是少量輸入的函式(特別是濾波器尺寸的平方)。這就大大減少了網路中的引數數量,從而加快訓練速度。
- 稀疏連線,其實就是區域性感知,在卷積神經網路中,每個神經元無須對全域性影像進行感知,只需對區域性進行感知,然後在更高層將區域性的資訊綜合起來就得到了全域性的資訊。稀疏連線的思想是受生物學中的視覺系統結構啟發。視覺皮層的神經元就是區域性接受資訊的(即這些神經元只響應某些特定區域的刺激)。這種特徵提取的過程類似自下而上的方法,一層層接收區域性的輸入,最後不斷聚合。
第 4 課:為什麼使用填充?
填充(padding)通常用於卷積過程中,保持輸出資料的尺寸與輸入資料一致。它也用來使影像邊緣附近的幀對輸出的貢獻同影像中心附近的幀一樣多。
- 填充定義如何處理樣本影像的邊界。
- 填充的方式有兩種,“有效填充”和“相同填充”。在相同填充中,超出邊界的部分使用補充 0 的辦法,使得輸入輸出的尺寸相同。而在有效填充中,則不使用補充 0 的方法,不能超出邊界。
第 5 課:為什麼使用最大池化?
實證研究表明,最大池化(max pooling)在 CNN 中非常有效。通過對影像進行下采樣,我們減少了引數的數量,縮放或者方向變化(如平移、旋轉)時,能夠保持特徵不變。
- 池化主要的作用是引入不變性,並且減少了冗餘。還可以減輕模型過擬合的程度,提高模型泛化能力。還能獲得定長輸出。
第 6 課:經典網路結構
吳恩達展示了三種經典網路架構,包括 LeNet-5、AlexNet 和 VGG-16。他的大意是,高效的網路通常具有這樣的層:不斷擴大的通道規模和不斷下降的寬度、高度。
- LeNet-5 誕生於 1994 年,由 Yann LeCun 完成,用於識別手寫郵政編碼,是最早的卷積神經網路,推動了深度學習的發展。
- AlexNet 由 Hinton 的徒弟 Alex Krizhevsky 在 2012 年完成,是 LeNet-5 的一種更深更寬的版本,是現代深度 CNN 的奠基之作,確立了深度學習 CNN 在計算機視覺的統治地位,同時也推動深度學習在語音識別、自然語言處理、強化學習等領域的擴充。
- VGG-16 誕生於 2014 年是牛津大學計算機視覺組(Visual Geometry Group)和 Google DeepMind 公司的研究員一起研發的深度卷積神經網路。
第 7 課:殘差網路為什麼有效?
對普通網路而言,由於梯度下降和爆炸,訓練誤差並不會隨著層數增加而單調遞減。這些網路具有前饋跳過連線,使你訓練極其龐大的網路而不會出現效能下降的情況。
- 殘差網路(residual network,ResNet),由 He KaiMing 於 2015 年提出。深度網路有個問題就是,容易造成梯度在反向傳播的過程中消失,導致訓練效果很差。而殘差網路的提出,在神經網路的結構層面解決了這一問題,即使網路很深,梯度也不會消失。
第 8 課:使用遷移學習
在 GPU 上開始訓練像 inception 的大型網路可能需要花上幾個禮拜,我們應該需要下載與訓練網路的權重,並重新訓練最後的 softmax 層(或最後幾層),這將大幅縮短訓練時間。原因是靠前的層傾向於所有影像中的概念相關,例如邊緣和曲線。
- 遷移學習(transfer learning)就是把已經訓練好的模型引數遷移到新的模型來幫助新模型訓練資料集。大部分資料或者任務都存在相關性,因此通過遷移學習可以將已經學到的引數分享給新模型,從而加快並優化模型的學習,而不必從零開始。遷移學習的初衷就是節省人工標註樣本的時間。吳恩達曾在 NIPS 2016 表示:“遷移學習將會是繼監督學習之後的下一個機器學習商業成功的驅動力。”(Transfer learning will be the next driver of ML success.)
第 9 課:如何在計算機視覺競賽獲勝
吳恩達說,你應該獨立的訓練幾個網路,平均它們的輸出結果來獲得更好的效能。資料增強技術(data augmentation),如隨機裁剪影像、水平翻轉、垂直翻轉,也有助於提升效能。最後,你應該使用開源的實現和與訓練的模型來啟動專案,然後針對你的應用的引數進行微調。
- 資料增強技術常用的方式還有改變影像色差、扭曲影像特徵、改變影像尺寸、增強影像噪音(一般使用高斯噪音(gauss noise)、鹽椒噪音(salt & pepper noise))等等。
第 10 課:如何實現目標檢測
吳恩達解釋了影像中特徵點檢測(landmark detection)的概念。總的說來,這些特徵點是你訓練輸出樣本的一部分。通過一些巧妙的卷積操作,你可以得到一個輸出值,告訴你這個目標在某些區域的概率及目標的位置。他還解釋瞭如何使用交除並(intersection over union,IoU)公式評估目標檢測演算法的有效性。最後,吳恩達將所有這些內容整合在一起,講解了著名的 YOLO 演算法。
- 特徵點檢測指的是使用計算機提取影像資訊,決定每個影像的點是否屬於一個影像特徵。特徵檢測的結果是把影像上的點分為不同的子集,這些子集往往屬於孤立的點、連續的曲線或者連續的區域。
- 交除並可以理解為系統預測出來的框與原來圖片中標記的框的重合程度。計算方法即檢測結果 Detection Result 與 Ground Truth 的交集比上它們的並集,即為檢測的準確率,如下圖所示:
- YOLO 演算法是 Joseph Redmon 和 Ali Farhadi 等人於 2015 年提出的第一個基於單個神經網路的目標檢測演算法。
第 11 課:如何實現人臉識別
人臉識別(face recognition)是一次性的學習問題,因為您可能只有一個樣本影像來識別該人。解決的辦法是學習一個相似性函式,給出兩個影像之間的差異程度。所以如果影像是同一個人的話,函式將輸出一個較小的數值,如果是不同的人則輸出較大的數值。
人臉識別包括影像攝取、人臉定位、影像預處理、以及人臉識別(身份確認或者身份查詢)。系統輸入一般是一張或者一系列含有未確定身份的人臉影像,以及人臉資料庫中的若干已知身份的人臉圖象或者相應的編碼,而其輸出則是一系列相似度得分,表明待識別的人臉的身份。
目前人臉識別的演算法可以分類為:
- 基於人臉特徵點的識別演算法(feature-based recognition algorithms)。
- 基於整幅人臉影像的識別演算法(appearance-based recognition algorithms)。
- 基於模板的識別演算法(template-based recognition algorithms)。
- 利用神經網路進行識別的演算法(recognition algorithms using neural network)。
- 利用支援向量機進行識別的演算法(recognition algorithms using SVM)。
吳恩達給出的第一個解決方案,叫暹羅網路(siamese network),該方案是在同一個網路中,分別輸入兩個人的影像,然後比較它們的輸出。如果輸出相似,則表明這兩個人的影像可能來自同一個人。基於這種想法來訓練網路:如果輸入影像是同一個人的,那麼編碼距離相對較小。
- 暹羅網路是一種相似性度量方法,當類別數多,但每個類別的樣本數量少的情況下可用於類別的識別、分類等。暹羅網路的思想是從資料中去學習一個相似性度量,用這個學習出來的度量去比較和匹配新的未知類別的樣本。這個方法能被應用於那些類別數多或者整個訓練樣本無法用於之前方法訓練的分類問題。
吳恩達給出的第二個解決方案是三重損失法(triplet loss method)。這個想法是,你的影像有三個維度:Anchor(A)、Positive(P) 和 Negative(N),訓練網路之後,A 和 P 的輸出距離遠小於 A 和 N 的輸出距離。
- 三重損失法通常是在個體級別的細粒度識別上使用,傳統的分類是花鳥狗的大類別的識別,但是有些需求是要精確到個體級別,比如精確到哪個人的人臉識別。因此,三重損失法在影像檢索領域有非常廣泛的應用,比如人臉識別、行人重識別、商品檢索等。
第 12 課:如何使用神經風格遷移創作藝術作品
吳恩達講解了如何將內容和風格相結合生成一個影像。示例如下圖所示:
- 風格遷移(style transfer),主要是通過神經網路,將一幅藝術風格畫(style image)和一張普通的照片(content image)巧妙地融合,形成一張非常有意思的圖片。風格遷移是 Gatys 等人於 2015 年首次使用深度學習進行藝術畫風格學習。把風格影像 Xs 的繪畫風格融入到內容影像 Xc,得到一幅新的影像 Xn。則新的影像 Xn:即要保持內容影像 Xc 的原始影像內容(內容畫是一部汽車,融合後應仍是一部汽車,不能變成摩托車),又要保持風格影像 Xs 的特有風格(比如紋理、色調、筆觸等)。
神經風格遷移的關鍵是要理解卷積網路中每一層學習的視覺表徵。原來就是靠前的層學習簡單的特徵,如邊緣;靠後的層則學習複雜的目標,如面孔、足部和汽車等。
要構建一個神經風格遷移影像,你只需定義一個成本函式(cost function),這是一個內容和風格相似點的凸組合(convex combination)。詳細地說,這個成本函式這樣表示:
凸組合是一類特殊的線性組合,是若干個點的某種特定意義下的非負線性組合。
其中,G 是生成的影像,C 是內容影像,S 是風格影像。這個學習演算法簡單地使用梯度下降,使與生成影像 G 相關的成本函式最小化。
步驟如下:
- 隨機生成 G;
- 使用梯度下降來使 J(G) 最小化,即寫入 G:=G-dG(J(G));
- 重複步驟 2。
結論
學完這門課程之後,你將會對大量計算機視覺文獻有直覺理解。課後作業讓你動手將這些方法付諸實踐。儘管學完這門課你並不能成為計算機視覺領域的專家,但這門課卻有可能會讓你在計算機視覺領域中開啟潛在的思路或者事業。
參考資料
[1] Deep Learning Specialization
https://www.coursera.org/specializations/deep-learning
[2] Deep Learning Specialization by Andrew Ng — 21 Lessons Learned
[3] Computer Vision by Andrew Ng — 11 Lessons Learned
towardsdatascience.com/computer-vi…
引導語:更多的乾貨內容請關注微信AI前線:ID:ai-front