logo
Loading...

【QA】為何用CNN來做影像處理? - 【教材專區】學習AI有困難? 讓Cupoy助教來幫你! - Cupoy

Part 1 在最開始先提到簡單的深度學習架構-DNN,接著就會介紹耳熟能詳的CNN,讓大家先了解DNN後再去看CNN,就會發現為甚麼CNN為大多數常用的深度學習方法。 DNN的樣子 圖片來源:...

Part 1 在最開始先提到簡單的深度學習架構-DNN,接著就會介紹耳熟能詳的CNN,讓大家先了解DNN後再去看CNN,就會發現為甚麼CNN為大多數常用的深度學習方法。 DNN的樣子 圖片來源:https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/dnn_orig.png 上圖是一個簡單的DNN架構,分為input layer(輸入層)、hidden layer(隱藏層)和output layer(輸出層),輸入層和輸出層是固定的,隱藏層這東西是包在輸入層以及輸出層中間的,也可以說是隱藏在中間的那幾層就稱為隱藏層。 DNN從字面上來看就是深層神經網路,但要有多少數量的隱藏層才算深沒有明確定義,可以是5層、20層或是說要50層才算,理論上來說整個架構越深可以讓模型學到更多東西,但實際上越深不代表越好,要依實際應用而定。 回到上面的圖,input layer中的每一點都會連接到hidden layer 1的每一個點,像這樣子的話有另一個專有名詞叫做「全連接層, Fully Connected Layer」。這一段記住一個重點,就是**每一點都會連接到下一層的每一點**。這裡所說到的「點」都是指「神經元」,也就是說輸入層有8個神經元,所有的hidden layer和output layer也依此類推。 --- Part 2 剛剛看到input layer的每一個神經元會連接到下一層中的每一個神經元,連接起來是口頭說法,實際上電腦做的事情是將兩個神經元相乘,以下圖舉例,一個簡單的深層網路,特別將輸入層中的一個神經元連接情況用不同顏色標註,紅色線條做的事情就是(2*2),紫色線條為(2*5)而綠色線條則是(2*1),這是一個最簡單的說明,想像一下假如每一層的神經元都幾百幾千個,電腦一次要計算這麼多的數字,想必是要計算的東西越多會讓整體時間越長。 目前了解了每一點都會連接到下一層的每一點以及電腦做的事情是將兩個神經元相乘這兩個重點,就會發現為了讓層數更深,勢必會有更多的神經元,這樣會讓電腦做的事情增加,建構好一個架構後可以計算一下參數量,參數量簡單來講就是指整個網路的複雜度,參數量越多複雜度越大,計算時間也越長。這樣就進一步想到真的有需要在隱藏層用全連接層嗎,以及CNN為甚麼可以達到更好的效果並且參數量比DNN來的更少。 有需要在隱藏層用全連接層嗎: 1. 參數量多 : 全連接層的參數量藉由剛剛的說明了解到,在深層網路裡的參數量只會隨著深度而增加,雖然是為了達到更好的效果,但更大的問題在於計算時間和複雜度很高,這裡可以先想像全連接層能夠讓時間花越多,並且帶來比其它方法還要好的效果。 2. 真正的需求 : 當今來看會用到深度學習的應用有目標檢測、影像辨識等等,舉例來說今天我們要訓練一個能夠分類不同種類的狗狗時,以人來說,人類是靠毛的顏色、狗的外觀(例:鼻子嘴巴眼睛樣貌)或是體型來分辨是哪種狗狗,機器也一樣,只要讓機器學習到每一種狗狗毛的顏色、外觀體型等等的就能讓機器認出不同的品種。 以下圖說明,一張圖為20 * 30個pixel,假設只有一層隱藏層,這樣參數量就有(20*30)*100=60000,另外這600個點就代表圖中的任一點,隱藏層的100個神經元將這輸入的600個點都訓練,這樣對機器來說是多餘的。 圖片來源:https://www.google.com/url?sa=i&url=https://digiphoto.techbang.com/posts/10182-why-do-you-take-black-and-white-photos&psig=AOvVaw35rDiTLhrcPquyGCf7cdxo&ust=1644911180183000&source=images&cd=vfe&ved=0CAsQjRxqFwoTCKCVxufZ_vUCFQAAAAAdAAAAABAD --- Part 3 CNN最重要的精神就是卷積這個東西,為甚麼常常聽到CNN對圖像有很好的分類效果,對應到前面說到的,機器真正要學到的東西就只是一張圖片中關鍵的地方,DNN中隱藏層中每個神經元都會連接輸入的每一點,等於每個神經元都會訓練到完整的圖,是多餘的,另外就是參數量過多的問題。 在CNN裡隱藏層不使用全連接層,而是指在輸出層前才使用,為了避免DNN的問題,使用卷積能夠解決在DNN中參數量過多和不必要的訓練問題,可以把CNN的一個filter想像成DNN中一個神經元,但這裡不同的是filter可以根據設定的大小去抓取一張圖中特定範圍的像素,而filter會對整張圖用「滑動窗口」方式做計算。用下圖進一步說明為甚麼filter可以避免在DNN中有不必要訓練的問題。 圖中有兩個filter,大小為3*3,fulter中每個權重值如圖,並且兩個filter值不同,接著用這兩個filter對同一張圖做卷積,可以發現filter1權重值為1的地方是斜的,代表filter1和其經過的區塊相乘後,只有為1的點會有值,filter2同理,將重點放在filter2,當filter2經過中間樹幹的地方時,跟filter相乘會發現只有樹幹的地方會有值,其他部分相乘後都為0,代表filter是負責樹幹的特徵,而filter1就可能是負責樹葉,因為兩個filter的權重值不同,就算兩個filter都對整張圖處理,但出來的結果會相同。每個filter負責不同部分,避免DNN的不必要訓練問題。