티스토리 뷰

"해당 포스팅은 Coursera 에서 수강한 Andew Ng 의 deep learning specialization 코스를 요약한 것입니다." 


 

 CNN 동작 원리 

수업 Assignment 의 동영상. 이거 보면 한번에 CNN 이해 됨!! 

https://wfteciveefdhloxbtbadax.coursera-apps.org/files/week1/images/conv_kiank.mp4

1. 왜 Image 에는 CNN 이 쓰이나? 

이미지의 경우 Input 이 어마어마하게 많다. 고화질의 경우 1000 x 1000 x 3 (RGB) 정도 됨. 이 이미지에 Fully connected layer 을 쓴다고 가정해보자. Weight matrix 의 경우, (input_size, depth) 니까 인풋 크기에 따라 train 해야 될 weight matrix 도 어마어마하게 커지는 거임. 이 말은 모델이 엄청 커지고 overfitting 에 더 취약해진다는 의미도 됨. 

 

그런데 CNN 를 쓰면 작은 weight matrix 를 쓸 수 있음. 

 

차례로, Input, filter, output 

CNN 에서는 weight matrix 역할을 하는 게 Filter 임. 이 필터가 Input Image 를 훑으면서 Output Image 를 return 한다. 해당 필터를 보면 왼쪽 수직선과 오른쪽 수직선의 값 차이가 큰 부위에서 큰 output 값을 갖는 다는 것을 알 수 있다. Input 에서 왼쪽과 오른쪽이 수직선을 기준으로 값 차이가 크다는 것은 그 부분이 모서리임을 보여줌. 

그래서 이 filter 는 vertial edge detector 이고, 이 filter 를 90도를 기준으로 왼쪽으로 돌리면 horizontal edge detector 가 되겠지. 

 

실제로 deep learning era 이전에 (?) 는 수동으로 코딩된 필터가 있음. Sobel filter, schors filter 등등... 

 

2. Padding

CNN 을 쓸 때는 이미지에 padding 을 입히곤 함. 이미지 모서리로 0 값을 두르는 거임. 왜 이렇게 하냐고? 

1) CNN 에서 input size (width, height) 이 계속 shrink 하는 것을 막기 위해서 
   Output Size = (Width - filter size + 1, Height - filter size + 1

2) 이미지 안쪽의 값들은 필터가 여러번 왔다갔다하며 output 에 영향을 많이 미치는데, 이미지 가장자리는 필터가 몇번 지나가지 않아 버려지는 정보가 많기 때문에 이것을 방지하기 위해서. 

 

pad 값이 1 이면, 아래 위쪽으로 하나씩 둘러지는 것이기 때문에 output 크기는 original width + 2* pad 임.

 

Valid convolutions :  (No padding) . Output_size = (w - f + 1, h - f + 1

Same convolutions : Input size = Output size 를 위해 padding 더해줌. 이 값을 갖게 하는 pad size 는 (f - 1) / 2

참고로 관행상 f 는 거의 항상 홀수임. 

 

3. Stride

Stirde 는 결국 Filter 로 이미지를 훑을 때, pixel 하나씩 다 훑을 거냐, n 개씩 뛰어넘을 거냐 하는 것임. 

중요한 것 Filter, Pad, Stride 를 모두 거친 후 output 의 사이즈는 다음과 같다. 

$$ \left \lfloor\frac{n+2p-f}{s} + 1 \right \rfloor \times \left \lfloor\frac{n+2p-f}{s}  + 1\right \rfloor $$ 

여기에서 ㄴ 처럼 생긴 floor 는 round down 을 의미한다. 즉 이 안의 숫자가 정수가 아닐 경우 2.3 은 2가 된다. 

 

4. RGB 컬러 이미지의 convolution 과 아웃풋 

왼쪽부터 차례로, Input, filter, output 

 

위의 Input 처럼 이미지가 RGB 인 경우 3개의 채널이 있는 건데, 그럼 filter 도 3개의 채널이 있어야 함. 하나의 필터를 거친 Output 은 2D 로 사이즈 구하는 방금 위에서 말한 수식과 같다. 

Filter 는 2개 이상일 수 있는데, output 은 필터 개수에 따라 Output size 의 depth (= 채널) 도 커지는 거임.  

 

이제 좀 더 자세하게 하나의 layer 가 어떻게 구성되는지 보자. 여기서 하나의 layer 라 함은, 하나의 input 에서 하나의 activation 을 return 하는 거임. 

 

왼쪽 RGB color image 가 인풋, 마지막 4 x 4 x 2 의 이미지가 아웃풋. 하나의 layer 는 Input 을 받아, 하나의 output 을 return 하는 과정임. 

왼쪽부터 Input 을 받아, 1개의 Filter 를 거친 이후, 여기에 Real number 인 bias 를 더한후 활성함수를 씌워준다. 그러면 각 filter 마다 하나의 2D output 이 나오는데, 이걸 그대로 쌓아서 (stack) 에서 하나의 output 으로 만들어내는 것이 하나의 layer! 

 

FFN 과 비교해보면 Filter 과 weight matrix 의 역할을 한다고 보면 됨. 

$$z^{[1]} = w^{[1]} a^{[0]}  $$

$$a^{[1]} = f( z^{[1]})  $$

가 그대로 적용되는 것을 볼 수 있음. 

 

5. Pooling layers 

Pooling layers 란 이미지 각 부분에서 최대값을 갖는 부분을 (밝은 pixel 값) 을 keep 하는 것. 

Conv filter 처럼 filter size, stride 그대로 적용 가능하다. 차이가 있다면 learning parameters 가 없고, padding 도 pooling layers 에는 들어가지 않는다는 것. (learning parameter 가 없다고 back propagation 에서 완전히 빠지는 건 아니다. 이 부분도 최종 Z 나 activation (A) 값에 영향을 미치니까) 

 

Output size 는 다음과 같다 : 

$$ \left \lfloor\frac{N_{h}+-f}{s} + 1 \right \rfloor \times \left \lfloor\frac{N_{w}+-f}{s}  + 1\right \rfloor \times N_{c} $$

$ N_{h} $ 는 filter 의 세로 사이즈, $N_{w}$ 는 filter 의 가로 사이즈. 

 

6. 이제 각각의 Conv layer 를 합쳐 Nueral network 로!

주로 layer 가 깊어질 수록, W, H 는 줄어들고 channel 수 (depth) 는 증가한다. 

Conv  layer + Pooling layer  => Layer 1 개 

가장 마지막 layer 는 Fully connected layers 가 있고, 최종 layer 에는 Softmax activation 이 있음 (classifier 에 따라 달라질 수 있지만) 

밑으로 내려갈수록 (layer가 깊어질 수록) 채널 수는 깊어지는 것을 볼 수 있다. 

 

7. 그래서 마지막으로 왜 convolutional 이냐고? 

Fully connected layer 에 비해서 월등히 적은 parameters 수 

1. Parameter Sharing 

이미지의 왼쪽 구석에서 잘 작동하는 filter 는 이미지의 중간에서도 잘 작동한다. "Parameter sharing 이 가능하다" = "학습해야 할 parameter 수가 적다" 

 

2. Sparcity of connection 

Output image 의 왼쪽 구석에 해당하는 부분은 Input image 에서도 마찬가지로 왼쪽 구석에서 나왔음. 즉, Input image 의 나머지 부분은 해당 output에 영향을 미치지 않음. 마찬가지로 이 덕분에 작은 parameters 를 사용할 수 있는 거임. 

 

그리고 "적은 양의 parameters 를 사용한다" = "model 의 overfitting risk 가 낮다." 

 

왜 Convolutional 이 좋은지 알겠지?! 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함