# CS231N (2017) Lec 05 課程筆記 ###### tags: `CV` 🔷 Convolutional Neural Network(ConvNet, CNN, 卷積神經網路) 📌 機器學習的小歷史 (1) 感知器, 1957 Frank Rosenblatt: Preceptron ➡️ f ( x ) = 1 if ( w * x + b > 0 ) else 0 ➡️ 尚無 BP(反向傳播) (2) 自適應多層感知器, 1960 Widrow and Hoff: Adaline/Madaline ➡️ 開始堆疊多個線性層,成為「多層感知器」網路 ➡️ 尚無 BP (3) 反向傳播, 1986 Rumelhart, Hinton & Williams 論文: 通過反向傳播錯誤來學習表徵(Learning representations by back-propagating errors), 1986 🌐 https://www.cs.utoronto.ca/~hinton/absps/naturebp.pdf ➡️ 也稱為: 反向自動微分模式(Reverse Mode of Automatic Differentiation) ➡️ 貢獻-1: 之後的「多層神經網路」開始加入「反向傳播(Backpropagation, 縮寫: BP 或 Backprop)」機制 ➡️ 貢獻-2: 論文經實驗表明,此類網路可以學習有用的資料內部表示(internal representations of data) ➡️ 應用: 該方法已廣泛用於基礎認知研究(如: 記憶、視覺辨識)和實際應用 ➡️ 相關研究: 這篇論文中並無引用反向傳播方法的早期研究,例如 Paul Werbos 1974 年的論文[5] ➡️ 論文作者 > 1. David Rumelhart > ➡️ 美國心理學家,主要研究數學心理學、 符號人工智慧(Symbolic Artificial Intelligence)、平行分散式處理(Parallel Distributed Processing) 在 認知科學 領域,探索了以下的可能性「認知語言學: 制定一個正式的語法來捕捉故事的結構」 也是 1985 年一篇被高度引用的論文《反向傳播》的第一作者 > ➡️ 相關詞 > 🔘 聯結主義(Connectionism): 認知科學領域的一種方法,期望能夠以人工神經網路(ANN)來解釋心靈現象 > 聯結主義的想法可以追溯到一個世紀以前,在20世紀中後期之前,這些想法仍僅止於猜測 > 🔘 分散式平行處理(PDP): 當今流行的聯結主義方法的舊稱(前身) > 強調了神經處理的「並行性」以及神經表徵的「分散性」 > 為研究人員提供了一個通用的數學框架 > > ➡️ 論文集 > 🌐 https://www.semanticscholar.org/author/D.-Rumelhart/2681887 > > 2. Geoffrey E. Hinton > ➡️ 加拿大電腦科學家和心理學家,加拿大多倫多大學教授;以其在神經網路方面的貢獻聞名 > ➡️ 論文集 > 🌐 https://www.semanticscholar.org/author/Geoffrey-E.-Hinton/1695689 > > 3. Ronald J. Williams > ➡️ 美國東北大學電腦科學教授,神經網絡的先驅;在循環神經網絡(RNN)和強化學習(RL)做出了基礎性貢獻 > ➡️ 論文集 > 🌐 https://www.semanticscholar.org/author/Ronald-J.-Williams/2116648700?sort=influence&page=2 (4) 深度學習, 2006 Hinton and Salakhutdinov: Reinvigorated research in Deep Learning ➡️ 擴展成較大的神經網路,即: 深度學習 // 在第一個預訓練階段,每個隱藏層使用 波茲黎曼機 初始化權重 // 其它機制: (a) 反向傳播 BP, backprop (2) 微調 fine tuning (5) 語音建模, 2010 & 2012 Acoustic Modeling using Deep Belief Networks, 2010 使用深度信念網絡的聲學建模 Context-Dependent Pre-Trained Deep Neural Networks for Large-Vocabulary Speech Recognition, 2012 上下文相關的預訓練深度神經網絡 用於大量詞彙的語音辨識 ➡️ 使用「深度信念網絡」對 語音&聲學資料 建模 (6) 大型視覺資料集分類, 2012 ImageNet classification with deep convolutional neural network ➡️ 在深度學習領域引入了「卷積層」設計,AI 領域進入「大量基於 CNN」的深度學習時代 ➡️ Geoffrey E Hinton 實驗室的學生 Alex Krizhevsky 以 AlexNet 贏得 2012 ImageNet 挑戰 🌐 Alex Krizhevsky / Google Scholar https://scholar.google.com/citations?hl=en&user=xegzhJcAAAAJ&view_op=list_works&sortby=pubdate 🌐 System and method for addressing overfitting in a neural network, 2021 🌐 Parallelizing the training of convolutional neural networks, 2020 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 🔘 補充: (4) Y LeCun, Y Bengio, G Hinton ======================= ➡️ Deep learning, 2015(Author: Yann LeCun, Yoshua Bengio, Geoffrey Hinton) ➡️ Deep learning via semi-supervised embedding, 2008 ➡️ Learning nonlinear constraints with contrastive backpropagation, 2005(非線性條件+對比式 BP) ➡️ Learning causally linked markov random fields, 2005(基於馬可夫隨機場的機器學習) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 📌 「是什麼造成卷積神經網路的出現?」卷積神經網路的小歷史 (1) Hubel & Wiesel, 1959-1968 🔘 貓的紋狀皮層中–單個神經元的感受野, 1959 (Receptive fields of single neurones in the cat's striate cortex) 🔘 感受野,貓視覺皮層的雙眼交互作用和功能結構, 1962 (Receptive fields, binocular interaction and functional architecture in the cat's visual cortex) 🔘 ..., 1968 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 🔘 實驗方法 在貓的大腦放入電極,接著給予貓不同的視覺刺激(Visual Stimulis) 例如: 不同的「邊緣、方向邊緣、形狀」,並測量神經元對刺激的反應 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 🔘 結論 ▫️ 貓腦皮層(與實際視野)的地形圖對應(topographical mapping) 「腦皮層中的臨近細胞」代表「視野的臨近區域」 > fig. 3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > 紋狀皮層(Striate cortex): 即「初級視覺皮層 V1」 > https://zh.wikipedia.org/zh-hk/%E8%A7%86%E8%A7%89%E7%9A%AE%E5%B1%82 ▫️ 階層式組織 貓在接受不同視覺刺激時,「視網膜神經節細胞」(retinal ganglion cells)最早做出反應 接著,初級視覺皮層(V1)中的「簡單細胞」會對光方向(光刺激的方向邊緣)做出反應 再接著,「複雜細胞」會對 光方向 及 移動 做出反應 最後,「超複雜細胞」會對 移動 及 終點 做出反應 > fig. 3 (2) 新認知機(Neocognitron), 1980 🔘 福島邦彥(Kunihiko Fukushima)提出,應用於「視覺模式辨識」的「多層」神經網路 ▫️ 三明治架構(S, C, S, C, S, C ...) ▫️ 簡單細胞: 「可修改的參數」(modifiable parameters) ▫️ 複雜細胞: 執行「池化」(pooling) ➡️ 神經網路架構的設計: 簡單細胞、複雜細胞,主要奠基於 Hubel & Wiesel 在 1959-1968 的研究結果 > 作者介紹 > Building a Neural Network: Dr. Kunihiko Fukushima > 🌐 https://www.youtube.com/watch?v=Zi63jGYeUOk&ab_channel=TheFranklinInstitute > > 相關論文 > ➡️ Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position > 🌐 https://link.springer.com/article/10.1007/BF00344251 > > ➡️ Neocognitron: A hierarchical neural network capable of visual pattern recognition > 🌐 https://www.sciencedirect.com/science/article/abs/pii/0893608088900147 > > 相關應用論文 > ➡️ 以決策樹法用類神經網路作印刷中文字辨認(交大資工所碩論–吳全枝), 1989 > ➡️ 決策樹應用於我國刑事警察局網站–自93年至99年網路犯罪案例之研究(警大教授研討會論文–林宜隆), 2010 > 🌐 https://cyber-paul747.blogspot.com/p/blog-page_47.html (3) 基於梯度的學習方法–應用於文件辨識(Neocognitron), 1998 🔘 貢獻-1: 在學習網路的架構中,提出了「梯度」概念 🔘 貢獻-2: 結合 1986 年提出的「反向傳播」方法,即是目前機器學習主流架構的「梯度反向傳播」方法 🔘 應用: 影像辨識 郵遞區號辨識(1989) 文件辨識(1998)、MNIST 手寫數字辨識(1998+) 🔘 困難: 無法將影像辨識技術普及化(一般化;推廣到)「複雜影像」 🔘 作者介紹 > (1) LeCun > Google Scholar / LeCun 🌐 https://scholar.google.fr/citations?hl=fr&user=kbN88gsAAAAJ&view_op=list_works&sortby=pubdate > ➡️ 深度學習, 2015 🌟🌟 > ➡️ 基於梯度的學習(gradient-based learning)應用於文件辨識, 1998 🌟 > ➡️ 應用於手寫郵遞區號(zip code)辨識的反向傳播, 1989 🌟 > ➡️ 影像、語音和時間序列的卷積網路(CNN), 1998 🌟🌟 > ➡️ MNIST 手寫數字資料庫, 1998 > ➡️ 神經網絡:交易技巧, 1998 > ➡️ 不再有煩人的學習率, 2012 > ➡️ 應用於門牌號碼分類的捲積神經網絡, 2012 > ➡️ 提升法(Boosting)和其他集成方法(Ensemble methods), 1994 > ➡️ 通過地形過濾圖學習不變特徵(Learning invariant features through topographic filter maps), 2009 > > (2) Bottou > Google Scholar / Bottou 🌐 https://scholar.google.fr/citations?hl=fr&user=kbN88gsAAAAJ&view_op=list_works&sortby=pubdate > ➡️ 基於梯度的學習應用於文件辨識, 1998 🌟 > ➡️ Wasserstein 生成對抗網絡, 2017 > ➡️ 自然語言處理(幾乎)從零開始, 2011 > ➡️ 具有隨機梯度下降(SGD)的大規模機器學習, 2010 > ➡️ 高效反向傳播, 1998 > > (3) Bengio > Mila(蒙特婁學習演算法研究所) – 創辦人;與伊恩·古德費洛、Aaron Courville兩人合著《Deep Learning 》 > 🌟 研究方向: 機器學習/深度學習 – 理論方法 及 影像、文字、音頻和 應用 > 🌟 Mila – Research Publications: 🌐 https://mila.quebec/publications/ > Google Scholar / Bengio 🌐 https://scholar.google.com.tw/citations?user=kukA0LcAAAAJ&hl=zh-TW > ➡️ 生成播放列表(Generating a playlist), 2022 > ➡️ 用神經網路學習推理:泛化、看不見的資料和布林量度, 2022 (Learning to Reason with Neural Networks: Generalization, Unseen Data and Boolean Measures) > ➡️ 指針值檢索(Pointer Value Retrieval):理解神經網絡泛化極限的新基準, 2021 > ➡️ 指基於相關性的圖像選擇(Relevance-based image selection), 2021 > ➡️ 用於多維空間位置編碼的可學習傅立葉特徵, 2021 (Learnable fourier features for multi-dimensional spatial positional encoding) > ➡️ 自動完成用戶界面佈局設計 – 使用基於變換器的樹解碼器, 2020 > ➡️ Cluster-gcn:一種訓練深度和大圖卷積網絡的高效算法, 2019 > ➡️ 第 32 屆神經信息處理系統國際會議論文集, 2019 > ➡️ 生成播放列表(Generating a playlist), 2018 > ➡️ 對具有典型相關性的神經網絡中表徵相似性的見解, 2018 > ➡️ 用於神經機器翻譯的 Tensor2tensor, 2018 > ➡️ 大規模對抗性機器學習, 2017 > ➡️ 物理世界中的對抗樣本, 2017 > ➡️ 訓練高多類別分類器(Training highly multiclass classifiers), 2014 > ➡️ 通過語義嵌入的凸組合進行零樣本學習, 2014 > ➡️ 圖像相關性模型(Image relevance model), 2013 > ➡️ 學習語義圖像相似度(Learning semantic image similarity), 2013 > ➡️ 設計:深度視覺語義嵌入模型, 2012          (Devise: A deep visual-semantic embedding model) > ➡️ 稀疏排序函數的高效學習, 2012          (Efficient learning of sparse ranking functions) > ➡️ 用於多類任務的標籤嵌入樹, 2012          (Label embedding trees for multi-class tasks) > ➡️ 大規模視覺語義抽取, 2012          (Large scale visual semantic extraction) > ➡️ 基於相關性的圖像選擇, 2011          (Relevance-Based Image Selection) > ➡️ Wsabie:擴展到大詞彙量影像註釋, 2011 > ➡️ 為什麼無監督預訓練有助於深度學習?, 2010 🌟          (Why does unsupervised pre-training help deep learning?) > ➡️ 通過排名大規模在線學習影像相似性, 2010 > ➡️ 用於大型多類別分類任務的標籤嵌入樹(Label embedding trees), 2010 > ➡️ 訓練深層結構的難度和無監督預訓練的效果, 2009 🌟 > ➡️ 判別型關鍵字的發現, 2009 > ➡️ 一種大規模影像相似度學習的在線算法, 2009 🌟          (An online algorithm for large scale image similarity learning) > ➡️ 組稀疏編碼(Group sparse coding), 2009 > ➡️ 從文字查詢中進行大規模的基於內容的音頻檢索(content-based audio retrieval), 2008 > ➡️ 一種基於核的判別方法 – 從文字查詢對影像做排名, 2008 > ➡️ 用於儲層計算的延遲學習和多時化, 2008 > 儲層計算(Reservoir Computing) > 介紹: 《連接油藏計算與統計預測和深度神經網絡》, 2022 > 🌐 https://www.nature.com/articles/s41467-021-27715-5 > > (a) 統計預測領域中,有經典的線性方法:自迴歸積分移動平均方法(ARIMA)、向量自迴歸(VAR) > 以及這些方法的擴展 – 非線性向量自迴歸(NVAR) > > (b) 機器學習領域中,複雜度譜的下端有儲層計算(RC),上端有深度神經網絡(DNN) > 以及介於兩者之間的各種其他學習算法 > 除了時間序列預測之外,機器學習算法還適用於解決系列其他任務,例如影像辨識或語音辨識 > ➡️ 機器學習對開源軟件的需求, 2007 > ➡️ 使用分層 HMM 對會議中的個人和團隊行為進行建模, 2006 🌟 > ➡️ 使用者身分驗證(User authentication)–通過人臉影像的自適應統計模型 > ➡️ 大型數據集的核匹配追蹤(kernel matching pursuit) > ➡️ 從超鏈結(hyperlinks)推斷文檔相似性, 2005 > ➡️ 基礎專家的相關性和方差如何影響生物特徵驗證任務中的融合?, 2005 > ➡️ 感知器、MLP 和 SVM 之間的鏈結, 2004 > ➡️ 提升(Boosting)HMM–應用於語音識別, 2004 > ➡️ 離線辨識無限制條件的手寫文本–使用 HMM 和統計語言模型, 2004 > HMM: 隱藏式馬可夫模型(Hidden Markov Model) > 是一種統計模型,用來描述一個含有隱含未知參數的馬可夫過程 > 可應用於: 語音辨識(Speech Recognition)、 > 手勢辨識(gesture recognition)、生物資訊學(Bioinformatics)等研究 > > HMM 介紹 > 🌐 https://pansci.asia/archives/43586 > > 線上課程: MIT - 自動語音辨識(Automatic Speech Recognition) > 🌐 https://ocw.mit.edu/courses/6-345-automatic-speech-recognition-spring-2003/pages/lecture-notes/ > > ➡️ 融合前分數歸一化在生物特徵驗證任務中的影響研究, 2004 > ➡️ 困難影像條件下正面人臉驗證的穩健特徵(Robust features), 2003 > ➡️ 用於發言者驗證的客戶端相關 gmm-svm 模型, 2003 > ➡️ 應用於人臉驗證競賽的 XM2VTS 資料集, 2003 > ➡️ The BANCA database and evaluation protocol, 2003 > 大型的、現實的多模態數據庫,旨在用於訓練和測試多模態(multi-modal)驗證系統 > 包含人臉圖片和人類語音,是付費的資料集 > http://www.ee.surrey.ac.uk/CVSSP/banca/ > ➡️ 用於基於直方圖的圖像分類的 SVM, 1999 > ➡️ 基於梯度的學習應用於文件辨識, 1998 🌟 > ➡️ Boxlets:一種用於訊號處理和神經網路的快速卷積算法, 1998 > ➡️ 使用全局 MMI 算法的聯結系統(Connectionist)語音識別, 1993 > ➡️ 集成時間對齊和神經網路以實現高性能連續語音識別, 1991 > > (4) Haffner > 現任職於 Amazon AWS > 🌟 研究方向: 語音識別, NLP(自然語言處理), 電腦網路, 機器學習 > Google Scholar / Haffner 🌐 https://scholar.google.com/citations?user=Wck7gd0AAAAJ&hl=en&oi=sra > ➡️ 用於發言者適應的快速聯結系統(Connectionist), 2022 > ➡️ 用於發言者識別的動態面部特徵的系統和方法, 2021 > ➡️ 快速定制語音識別模型的系統和方法, 2017 > ➡️ 用於 IP 網絡流量的基於規則的異常檢測的系統和方法, 2016 > ➡️ 訓練自然語言理解分類器的系統和方法, 2015 > ➡️ 用於通過機器學習組合來自多個特定領域語音識別器的語音識別輸出的系統和方法, 2014 > ➡️ 用於大型網路 flow-level 流量分類的模組化機器學習系統, 2012 > ➡️ > 網路流量控制(Network traffic control) > ➡️ > 相關論文: 以 flow 為基礎之網際網路流量量測分析(交大資管所碩論, 1998) > ➡️ 自動生成自然語言理解模型的系統和方法, 2011 > ➡️ 主動檢測和解決客戶 DSL 問題, 2010 > ➡️ 基於規則的 IP 流異常檢測, 2009 > ➡️ Rational kernels: 理論與演算法, 2004 > ➡️ 為複雜的呼叫分類優化 SVM, 2003 > ➡️ 用於基於直方圖的圖像分類的 SVM, 1999 > ➡️ 基於梯度學習的物件辨識, 1999 > ➡️ 基於梯度的學習應用於文件辨識, 1998 🌟 (4) ImageNet 分類–使用深度卷積神經網路(ImageNet Classification with CNN), 2012 🔘 貢獻-1: AlexNet 得到 2012 年ImageNet 影像分類競賽冠軍後,開始了以「CNN」為主的深度學習研究風潮 🔘 貢獻-2: 「複雜影像」(ImageNet)得以使用此論文提出的 CNN 模型架構進行「分類」 🔘 貢獻-3: 分類模型可藉由 GPU 的平行計算(Parallel Computing)能力 🔘 延伸研究: ▫️影像檢索(image retrieval) ▫️影像相似度匹配(image similarity matching) ▫️影像檢測(image detection) // Faster R-CNN, 2015 ➡️自動標註: 多個目標物件的「最小包圍邊界框」(b-box, bounding boxes) ▫️影像分割(image retrieval) // 「影像分割」相關論文 by Cl´ement Farabet, 2013-2014 ➡️不只是邊界框,而是能更進一步地自動標註: 每個像素「屬於『哪個目標物件』的輪廓內」 (label each pixel in the outline of trees, people, and so on) 🔘 延伸應用: ▫️自駕車(self-driving car) ConvNet 可以透過 GPU 實現「平行處理」(parallel processing), 並且可以執行在「嵌入式系統」(embedded system)中 > NVIDIA Tesla Line ▫️人臉辨識 ▫️影片內容分類;影片時間軸標註 ▫️人體姿態辨識 ▫️遊戲 AI (強化學習) ▫️交通 & 地理資訊 應用 – 路標辨識 ▫️交通 & 地理資訊 應用 – 衛星影像辨識 ▫️圖文 (多模態) 應用 – 看圖說故事 ▫️藝術應用 – 自動繪製 (產生) 特定風格的畫作 ▫️天文學應用 – 星系分類 ▫️醫學影像 – 解釋和輔助診斷 🔘 相關研究 ▫️「影像分割」相關論文 by Cl´ement Farabet ➡️ Toward Real-time Indoor Semantic Segmentation Using Depth Information, 2014 ➡️ Causal graph-based video segmentation, 2013 ➡️ Indoor semantic segmentation using depth information, 2013 🔘 相關研究的實作程式碼 ▫️Faster R-CNN, 2015 🌐 https://github.com/rbgirshick/py-faster-rcnn 🔘 作者介紹 ▫️Alex Krizhevsky: 多倫多大學 Hinton 的指導學生,2012-2017 任職於 Google,CIFAR-10 和 CIFAR-100 數據集的創建者 🌐 Google Scholar / Alex Krizhevsky https://scholar.google.com/citations?user=xegzhJcAAAAJ&hl=en ▫️Ilya Sutskever: OpenAI 創辦人兼首席科學家 🌐 Google Scholar / Ilya Sutskever https://scholar.google.com/citations?user=x04W_mMAAAAJ&hl=en ▫️Cl´ement Farabet: 美國紐約大學的研究科學家 「影像分割」相關論文的作者(2013-2014) 研究方向: 電腦視覺、AI、機器學習、計算機結構 🌐 Google Scholar / Cl´ement Farabet https://scholar.google.com/citations?user=u3u16tgAAAAJ&hl=en ▫️Shaoqing Ren(任少卿): 中國科學技術大學與微軟亞洲研究院聯合培養博士班,Faster RCNN 第一作者; 目前任職蔚來汽車的副總裁,研究: 自動駕駛演算法 🌐 Personal Webpage https://www.shaoqingren.com/ 🌐 Google Scholar / Shaoqing Ren https://scholar.google.com/citations?user=AUhj438AAAAJ&hl=en&oi=sra 🌐 Github https://github.com/ShaoqingRen ▫️Kaiming He(何愷明): 北京清大畢業生,Faster RCNN 第二作者; 目前任職 Facebook AI Research (FAIR) 的研究科學家 計算機視覺領域多個著名獎項的獲得者,包括 2018 年 PAMI 青年研究員獎、 2009 年 CVPR 最佳論文獎、2016 年 CVPR、2017 年 ICCV 最佳論文獎、 2017 年 ICCV 最佳學生論文獎、2017 年最佳論文榮譽獎、 ECCV 2018、CVPR 2021、ICCV 2021 Everingham獎 🌐 Personal Webpage https://kaiminghe.github.io/ 🌐 Google Scholar / Kaiming He https://scholar.google.com/citations?user=DhtAFkwAAAAJ&hl=zh-TW 🌐 Github https://github.com/KaimingHe ▫️Ross Girshick: 美國柏克萊大學畢業生,Faster RCNN 第三作者; 目前任職 Facebook AI Research (FAIR) 的研究科學家 🌐 Google Scholar / Kaiming He https://scholar.google.com/citations?user=W8VIEZgAAAAJ&hl=en 🌐 Github https://github.com/KaimingHe ▫️Jian Sun(孫劍): 美國壬色列理工學院(RPI) 未來能源系統中心 教授兼主任; 目前任職 曠視科技首席科學家、曠視研究院董事總經理 🌐 Google Scholar / Kaiming He https://scholar.google.com/citations?user=W8VIEZgAAAAJ&hl=en 🌐 Github https://github.com/KaimingHe 📌 CNN 架構 (1) Fully Connected Layer 全連接層 🔘 input ▫️ symbol: X ▫️ raw size: (32, 32, 3) ▫️ reshaped (stretched) size: (1, 3072) 🔘 filter(濾鏡;濾波器) ▫️ symbol: W ▫️ also called: "kernel"(核)or "weight"(權重) ▫️ size: (10, 3072) ▫️ 算 10 輪: 每一輪取一列資料(1 x 3072) 稱為 W_i // 10 代表「輸出神經元的數量」 🔘 activation ▫️ 即: output neurons ▫️ size: (1, 10) ▫️ 算 10 輪: 每一輪將 W_i 和整個 X 做點積(dot product)運算, 得到單一數值(對應某一個神經元) // 務必確認 W_i 和 X 的維度必須相同,皆為 1 x 3072 最終會得到 10 組數值,各自對應到 10 個輸出神經元 // 10 代表「輸出神經元的數量」 (2) Convolution Layer 卷積層 🔘 input ▫️ 原始影像 🔘 filter ▫️ 濾鏡;濾波器 🔘 convolve(卷積) 🔘 activation function(激勵函數) ▫️ ReLU, Sigmoid, etc. 🔘 activation map(s) (激勵圖) ▫️ 經過 "convolve + activation function" 運算後的特徵圖 ▫️ 「尺寸」取決於 filter 的數量 // 換言之,「一個 filter 對應到一個 activation map」🌟 // 並且「用了多少個 filters 就會相應地產生多少張 activation maps」🌟 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 卷積: 每一輪用較小的「濾鏡」(filter,濾波器)在空間上「滑過」(slide over)某部分影像 並計算「對應濾鏡大小」的點積(每一輪計算結果為一個數值) // Q: 計算 點積 是否需先對 濾鏡(如: 5x5x3) // 和 對應濾鏡大小的某部分影像(如: 5x5x3)都攤平(reshape)成 1 維? // A: 不需要 // 「點積」重點在於兩個運算元(operands)必須「維度相同」 // 只要確保「對應空間位置」的兩兩數值:逐個元素(element-wise)相乘 // 再加總所有的乘積,就能得到點積的運算結果 // (有無攤平結果都相同;攤平有點多此一舉,浪費計算成本) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 卷積層的工作原理(參考 fig. 10): 卷積層之所以具有「卷積」二字 是因為這一層的計算結果(輸出的 activation map)為 input 和 filter 兩者的卷積 卷積 = input 和 filter 點對點相乘之和 若 input 的像素強度分佈(distribution of pixel intensities)與 filter 很接近(或稱: match) 則 可預期: input 和 filter 兩者做卷積,得到的數值很高 因此,定義好 filter 後,對若干張輸入影像依序做卷積,卷積數值最高的 input 預期與 filter 間有最大相似度 補充-1: filter 就類似影像處理(template matching)的 template 補充-2: filter 試圖找出與它空間域特徵相似、空間域分佈接近的 input,進而挖掘 pattern 或 representation 補充-3: 「深度學習 中的 classifier」則是擴展上述概念 (a) 先定義幾種 classes(class: 即 categorical variable) (b) 為每個 class 蒐集大量資料 (c) 不像傳統影像處理需自行設計 filter, 而是用「數值很小的隨機亂數」初始化 filter (d) 對每個類別: 目標找出「能被激勵(activated)」且「能使卷積的數值(activation)最大」的 input // 被激勵(activated): activation function 算出的函數值 > 某個門檻值(threshold) // 一開始的 filter 無特殊意義 // 但深度學習仰賴一套「最佳化方法」: // 讓我們不需設計複雜的演算法去計算 filter // 而是透過每個 training example 對應的 predicted label 與 real label(手工標註的標籤值)之間的「殘差」 // 不斷地更新 filter(即: ML 中的 weight) // 直到完成指定的訓練回合數(即: epoch)或以特定的機制(如: early stopping)結束訓練 // // 註-1: 上述的「丟資料 >> 算殘差 >> 更新權重」基本上就是 ML 的架構 // 與 DL 最大的不同是: // ML 用自定義的、「與殘差和學習率有關」的運算式實現「更新權重」的機制 // 而 DL 仍是「與殘差和學習率有關」 // 但是額外引入了先進的「梯度下降法」和「梯度反向傳播」這兩種「最佳化目標函數」的機制 // 並定義「最大化卷積的數值」為目標函數 // 剩下的任務就是 (a) 資料標註: 準備好完整、乾淨的「每一類」資料 // (b) 訓練: 放著讓它自動求解 // (c) 測試: 假設 DL 模型為一個分類器, // 就寫程式測試看看「測試圖片」的「準確率」是否夠高 // 若夠高就可宣稱模型可用;否則回過頭,檢視資料集、模型的潛在問題 (e) 步驟 (d) 的最佳化(找能使 output / activation 最大的 input)求解過程中,已經重複地對 filter 做更新 因此: 針對同樣的模型架構 >> 載入訓練好的 filter,便可預期得到準確率夠高的「預測/估計結果」 > 30:15 > 之後跳去講 [Preview] 和 [卷積層 > 空間維度 | activation map | activation volume] > 54:38 接續講 [Pooling layer] (3) Pooling layer 池化層 🔘 方法 ➡️ 對鄰近空間位置的數值集合,輸出一個最大值(Max-pooling)或平均值(Average-pooling) // 直覺意義: // 在特定的空間位置附近,觸發或點燃(大於一個特定 threshold)了多少個神經元 🔘 目的 ➡️ 讓「表示」(representation)的尺寸更小、更易於管理 // 尺寸更小: // 池化層 主要任務就是「向下採樣;降採樣」(downsampling) // 換言之就是 輸出尺寸 比 輸出尺寸 更小 // // 要特別注意的是: // Pooling 只針對「空間大小」向下採樣,但不針對「深度」(depth)做任何處理 //(即: pooling 後,depth 保持不變) // 例: 224x224x64 --Pooling--> 112x112x64 // keep: “input depth = output depth” // // 學生提出的問題: // 「調整 Stride(步長)」也可以達到「縮小輸出尺寸」或說「降採樣」的同樣效果 // 有特別理由只用 pooling 而非調整 stride 嗎? // // // Serena Yeung 提供的解答 // 近年的論文中,有關神經網路的架構 // 也看過有人主要以 stride 達到 downsampling 的目的 // 可參考: “fractional strides”(分數步長) // 但實務上(in practice)有比 stride 更好的方法 // // 相關論文: // // R. Riad, O. Teboul, D. Grangier, and N. Zeghidour, // “Learning Strides In Convolutional Neural Networks,”(卷積神經網路的學習: 步長) // International Conference on Learning Representations, pp. 1–17, 2022, // https://doi.org/10.31219/osf.io/4yz8f. // // 「Rippel 等人 (2015) 引入了「頻譜池化」, // 它透過在傅里葉域中裁剪輸入,即: 以『分數步長』執行下採樣,同時強調較低的頻率。」 // // 「『分數步長』在設計下採樣層時,提供了更高的靈活性, // 但它們增加了已經很巨大的搜尋空間的大小。」 // // // 視覺化圖例: // // What is fractionally-strided convolution layer? - Data Science Stack Exchange // https://datascience.stackexchange.com/questions/49299/what-is-fractionally-strided-convolution-layer 🔘 獨立地在每個 activation map 上運算 🔘 輸出的 [空間維度] ➡️ 可直接套用與另一小節相同的公式: > fig. XX > 📌 空間維度(Spatial Dimension)的計算範例 🔘 通常直接 pooling,不會做零填充 // footnote: // 零填充 一般用在 卷積層 // 主要是為了避免: // 取值(如: input 和 filter 在特定「空間位置」的數值)超出邊界,而「沒有值可以取」 // 所以使用任意的數字如: "0" 去填補空隙 // // 但是在 Pooling layer // 只是要達到「downsampling: 讓輸出尺寸變小」的目的 // 因此大費周章地:「零填補 >> 下採樣」似乎沒特別必要 🔘 常見的設定 (a) filter size = 2(2x2 filter), stride = 2 (b) filter size = 3(3x3 filter), stride = 2 🔘 神經網路中,總共該選擇幾個 Pooling layers? (學生提出的問題) Serena Yeung 提供的解答: 沒有正確答案,你可以「嘗試不同方案 >> 從結果看看哪一種更好」 這只是一種設計上的選擇(design choices) 從直覺上去思考: 若「過度 pooling」 → 會使輸出尺寸太小, 即: 只用「很少的數值」去「代表」整個原始輸入影像 可能隱含著: 輸出神經元「代表性不夠」的必然結果 因此,考慮 Pooling layers 數量,有點類似找一個折衷方案(trade-off) 既要達到 downsampling 的目的,也不能過度 pooling 使輸出神經元欠缺代表性 上述是概念上的一些方向指引 另外,因為「Pooling layers 數量的選擇」取決於「目標資料和目標問題」 類似: 不同任務 有 對應於不同任務的最佳超參數 所以 Serena Yeung 這裡認為此題: 沒有正確答案 (4) 非線性層 🔘 即: 激勵函數(activation function) 🔘 之前的 Lec-OO 談過,這堂課就不再重複介紹 📌 Preview (1) Fig. 10 說明 (Conv1_1 視覺化圖表) 🔘 每個灰色格子(grid) 代表: 特定的一個神經元 🔘 每個灰色格子內的彩色圖案 代表: 使「特定神經元的 activation 最大化」的 input(原始影像 的 多個像素點集合) // 註-1: 這裡指的 activation 同義於 activation map // 註-2: 附帶一提,上述 input 必須同時滿足: 使「特定神經元 activated / triggered」才會被選中 // 註-3: 實際建立步驟: (a) 針對: 特定神經元的 activation 做反向傳播 // (b) 找出: 可以使「特定神經元被觸發」 // 並且可以使「特定神經元的 activation 有最大數值」的 input // (c) 將 input 繪製在此一特定神經元對應的格子內 // 註-4: (視覺化圖表的細節)這裡不多談,未來會詳述 // 註-5: 網友 A 提出的問題: 「若使得 filter 輸出為最大的輸入『不唯一』,那該選擇哪個輸入?」 // 註-5.1: 網友 B 提出的論點: 「邊緣的型態(推測: 假設 filter 是邊緣濾波器)那麼複雜,『唯一』怎麼檢測?」 // 註-5.2: 網友 C 提出的論點: 「確實很難找到『唯一』(推測: 全局最佳解),一般是找到你初始值附近的最大值就行」 (2) 何謂卷積: 卷積層內,每個 activation 是一種 filter (類似於 template)在 input image 上依序滑動、計算所得到的輸出 或稱: filter 和 input 兩個訊號的「卷積」(每個滑動到的位置的「點積」) (3) 模型設計: [ (Conv + ReLU) x 2 + Pool ] x 3 + FC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 補充-1: ReLU ReLU 是一種非線性函數,也是激勵函數(activation function) 補充-2: 全連接層 在模型的尾端,會用「全連接層」(FC layer)把 輸出的數值矩陣「連接到」輸出層 並使用全連接層來獲得最終的「得分函數」(score function) (4) 池化層的作用: 池化層(Pooling layer)基本上可以用來縮減(downsample) activation map 的大小 📌 空間維度(Spatial Dimension)的計算範例 (1) 題目 輸入影像的尺寸為 32 x 32 x 3, 使用尺寸為 5 x 5 x 3 的空間濾波器(spatial filter)在輸入影像的所有空間位置上卷積(滑動) 最終得到一個尺寸為 28 x 28 x 3 的激勵圖(activation map)作為輸出, 問題是: 這怎麼來的?(請詳述其計算細節) > fig. 12 (2) 歸納法: 計算輸出激勵圖尺寸的通用公式 為了方便理解概念,假設: - 輸入影像的尺寸為 7 x 7 - 空間濾波器尺寸為 3 x 3 Step 1. 手動繪製: 從「最左上角」向右移動,每次移動 1 步,直到走完所有水平方向 ---------------------------------------------------------------------------------------------------- 可得知: 需要執行 5 次 進而可得知: 會得到 5 x 5 的輸出(激勵圖) ---------------------------------------------------------------------------------------------------- // 因為: input 和 filter 皆為「方陣」 // 故: 水平需要 5 次,可推知: 垂直也需 5 次 且 輸出尺寸 = "5 x 5" Step 2. 手動繪製: 從「最左上角」向右移動,每次移動 2 步,直到走完所有水平方向 ---------------------------------------------------------------------------------------------------- 可得知: 需要執行 3 次 進而可得知: 會得到 3 x 3 的輸出(激勵圖) Step 3. 自己歸納的公式: 激勵圖的水平尺寸 = 輸入影像的水平尺寸 - 2 * 步伐數 激勵圖的垂直尺寸 = 輸入影像的垂直尺寸 - 2 * 步伐數 Standford 課程提供的公式: 🌟 激勵圖的水平尺寸 = (輸入影像的水平尺寸 - 空間濾波器的水平尺寸) / 步伐數 + 1 激勵圖的垂直尺寸 = (輸入影像的垂直尺寸 - 空間濾波器的垂直尺寸) / 步伐數 + 1 Step 4. 驗證: 當每次移動的「步伐數」改為 3 ➡️ 尺寸不合(doesn't fit)! 不適用上述的條件(輸入影像尺寸: 7x7 & 空間濾波器尺寸: 3x3) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 自己歸納的公式: (a) 7 - 2 * 1 = 5 (b) 7 - 2 * 2 = 3 (c) 7 - 2 * 3 = 1 // 無法偵測「尺寸不合」的問題 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Standford 課程提供的公式: (a) (7 - 3) / 1 + 1 = 5 (b) (7 - 3) / 2 + 1 = 3 (c) (7 - 3) / 3 + 1 = 2.66... // 非整數代表「尺寸不合」 (3) 邊緣填充(Border Padding): 零填充(Zero Pad) 🔘 一般零填充希望的結果 保持輸出尺寸不變(與輸入影像的尺寸相同) 🔘 Standford 課程提供的公式: 🌟 激勵圖的水平尺寸 = (輸入影像的水平尺寸 - 空間濾波器的水平尺寸 + 水平方向的填充像素數 * 2) / 步伐數 + 1 激勵圖的垂直尺寸 = (輸入影像的垂直尺寸 - 空間濾波器的垂直尺寸 + 垂直方向的填充像素數 * 2) / 步伐數 + 1 🔘 計算範例: 上述 (2) 的簡化版題目 (a) (7 - 3 + 2) / 1 + 1 = 7 // 在「輸入影像尺寸: 7 x 7、空間濾波器的水平尺寸: 3 x 3、 // 填充像素數: 1(= pad 1 = pad 1 pixel border in L/R/T/B)、每次移動步伐數: 1」的條件下 // 可保持輸出激勵圖尺寸: 7 x 7 (b) (7 - 3 + 8) / 2 + 1 = 7 // 在「輸入影像尺寸: 7 x 7、空間濾波器的水平尺寸: 3 x 3、 // 填充像素數: 4(= pad 4 = pad 4 pixels border in L/R/T/B)、每次移動步伐數: 2」的條件下 // 可保持輸出激勵圖尺寸: 7 x 7 (c) (7 - 3 + 14) / 3 + 1 = 7 // 在「輸入影像尺寸: 7 x 7、空間濾波器的水平尺寸: 3 x 3、 // 填充像素數: 7(= pad 7 = pad 7 pixels border in L/R/T/B)、每次移動步伐數: 3」的條件下 // 可保持輸出激勵圖尺寸: 7 x 7 (4) 計算範例: 承上述 (1) 較為複雜的題目 🔘 Q1(下方重新描述一次題目) Input volume: 32 x 32 x 3 10 5 x 5 filters with stride 1, pad 2 --------------------------------------------- Output volume size: ? 🔘 A1 (32 - 5 + 2 x 2) / 1 + 1 = 32 ➡️ each filter can form one activation map (2D) with shape 32 x 32 (輸出尺寸 與「輸入的 depth」無關) 10 filters ➡️ Output volume size: "32 x 32 x 10" (depth = # of activation maps = 10) ANS: 32 x 32 x 10 🔘 Q2 Input volume: 32 x 32 x 3 10 5 x 5 filters with stride 1, pad 2 --------------------------------------------- Number of parameters in this layer: ? 🔘 A2 5 x 5 x 3 + 1 = 76 ➡️ # of param (each filter): 76 ("3" 是因為輸入的 depth = # of channels = 3,而參數數量與「輸入的 depth」有關) ("1" 是因為要把「偏誤項 bias(W dot x + b 的 "b")」考慮進去) 76 x 10 = 760 ➡️ # of param (10 filter): 760 ANS: 760 🔘 學生提出的問題 步伐數(stride)有何用途?加大此值會有何變化? 🔘 Serena Yeung 提供的解答 「加大步伐數」可以得到 : 下採樣(downsampled)的影像,即: 尺寸更小的激勵圖(activation map) 間接影響: 使得 參數量(number of parameters)更少 延伸: 倘若碰到「過度擬合」(over-fitting)問題,且做了「參數量太多 → 過度擬合 」這樣的假設 則可嘗試把「步伐數 加大」→ 減少參數量 → 預期: 避免過度擬合 (欲避免過度擬合,先前介紹的「正規化(regularization)」也是個方法) > 50:04 📌 卷積層 > 補充-1: 什麼是 activation map? (1) activation map: 以圖例說明 在此圖例(fig. X)中 activation map 是一個「具有 28 x 28 = 784 個輸出神經元」的資料表單(data sheet) (2) 連接關係 每個輸出神經元,透過 filters,都被連接到一個 input(input volume)中的小區域 // input 中的小區域,其術語稱為「接受域」(receptive field) // 例如: 5x5 filter 意味者「每個輸出神經元(output neuron)被連接到: 輸入影像上,尺寸為 5x5 的接受域」 (3) 共用參數 filters 共用相同的參數(share the same parameters) 或稱「共用一個權重集合(share the same set of weights)」 // 權重集合 W = { W_0, W_1, ... , W_n-1 } > 52:00 📌 卷積層 > 補充-2: 擴展 activation map 為 “activation volume” (1) activation volume 和 activation map 的比較 🔘 activation map(激勵圖) ▫️ depth = 1 ➡️ number of filters: 1 ▫️ 2D grid 🔘 activation volume(激勵體) ▫️ depth > 1 ➡️ number of filters: n (n > 1) ▫️ 3D grid