昨天講完Convolution,接著今天要介紹的就是Max Pooling。
Max Pooling就是做Subsampling,根據Filter 1和Filter 2我們分別會得到一個4x4的Matrix,接下來把它4個、4個分為一組,每一組裡面可以把它的平均值或是最大值保留下來,這樣就可以達到圖片縮小的目的。
當我們做完一次Convolution和一次Max pooling,我們就可以把原本6x6的圖片,變成一個2x2的圖片,而它每一個pixel的深度,也就是它用幾個value來表示,是取決於Filter的數量。
而剛剛做的事情可以重複很多次,得到越來越小的圖片。
做完Convolution和Max pooling之後,再來就是Flatten跟Fully connected的部分。
接下來就很簡單,Flatten就是把Feature map拉直,然後丟進一個Fully connected feedforward network。
Deep Dream是如果你給機器一張圖片,它會在這個圖片裡面加上它看到的東西。你只要把圖片丟進CNN裡面,然後把它某一個hidden layer拿出來並把正值調大負值調小,接著把這個當作是新的圖片的目標,就可以讓CNN誇大化它看到的東西。
Deep Style是你輸入一張圖片,然後讓機器去修改這張圖,讓它有另外一張圖的風格。
它的做法大致是,把原來的圖片丟給CNN,然後得到CNN的Filter的輸出(代表一張圖片有什麼樣的Content),接著把另外一張圖片也丟進CNN,也得到Filter的輸出,而我們是需要Filter跟Filter之間輸出的相關性(代表一張圖片的Style),最後用同一個CNN去找一張圖片,其中它的content像左邊的圖片,style像右邊的圖片,也就是用Gradient descent,找一張圖片,Maximize這兩個criteria的結果。
CNN除了影像處理也可以被應用在很多不同的地方,像是下圍棋。而下圍棋不見得要用CNN,用一般的Neural Network也可以,你只要訓練一個Network,輸入是棋盤,輸出是棋盤上的位置,也就是說下一步根據這個棋盤的盤勢,你應該要落子的位置。
雖然Fully connected feedforward network就可以做到這件事,但用CNN可以表現得更好,只要把19x19的vector看成是19x19的Matrix,也就是19x19的圖片,然後最後輸出下一步要落子的位置。