본문 바로가기

DeepLearning Specialization(Andrew Ng)/Convolutional Neural Networks

[Week1 ] 1. Convolutional Neural Networks

728x90
Convolutional Neural Networks
1. Computer Vision
2. Edge Detection Example
3. More Edge detection
4. Padding
5. Strided convolutions
6. Convolutions over volume
7. One layer of a Convolutional Network
8. Simple Convolutional Network Example
9. Pooling layers
10. CNN example
11. Why convolution?

1. Computer Vision

 

vision분야에서 딥러닝이 많이 이용되는데, 차원이 느므 많다.... 따라서 그만큼 많은 데이터가 필요한데, 이게 쉽지 않다. 어떻게 할까?

 

medium.com/@seoilgun/cnn%EC%9D%98-stationarity%EC%99%80-locality-610166700979

 

CNN과 이미지가 찰떡궁합인 이유

딥러닝이 뜨고 지금까지 가장 활약한 모델 중 하나는 CNN이다. 대부분의 사람들이 아무런 의심없이 이미지 데이터를 다룰때는 CNN을 사용한다. 그렇다면 도데체 왜 CNN은 이미지 데이터를 잘 처리

medium.com

2. Edge Detection Example

 

 convolution 연산은 위와 같다. filter를 matrix 위에 씌우고 element-wise 한 후, 각 원소들을 모두 더한 것.

 

이게 어떻게 모서리를 인식하냐?

 vertical을 인식하고 싶다고 했을 때 사용되는 filter는 위와 같다. 이제 이를 적용하면, 오른쪽 산출값과 같이 밝은 부분과 어두운 부분으로 경계선이 나누어진다. 지금은 굉장히 작은 이미지 이지만, 큰 이미지에 적용하면 수직선을 잘 구별할 수 있을 것.

 


 

3. More Edge Detection

 위와 같은 filter 원소의 특성상 왼쪽이 밝고 오른쪽이 어두운 경우, 첫번째와 같이 경계가 밝은 선으로 구분이 된다. 반면, 왼쪽이 어둡고 오른쪽이 밝다면 두번째와 같이 더 어두운 선으로 구분이 됨. 그냥 계산적인 특성.

 

cf) 기존 FC 방식은 데이터의 형상을 무시하는 문제점이 있었는데, CNN은 공간적인 특성을 그대로 반영해준다. 물체를 인식하는 시신경에서 아이디어를 얻은 것. 연산이 저런 식으로 필터를 특정 부분에만 씌우고 옮겨가는 것 또한 그 때문이다. 이 방식을 통해 마치 사람이 물체를 인식하는 것과 비슷하게 컴퓨터가 인식할 수 있게 한다. 

 

참 좋은 글.

excelsior-cjh.tistory.com/180

 

06. 합성곱 신경망 - Convolutional Neural Networks

이번 포스팅은 핸즈온 머신러닝 교재, cs231n 강의를 가지고 공부한 것을 정리한 포스팅입니다. CNN에 대해 좀 더 간략하게 알고 싶으신 분들은 아래의 링크를 참고하면 됩니다. 간략한 설명 : 합성

excelsior-cjh.tistory.com

 

 같은 원리가 수평선에도 적용이 됨. 위쪽이 밝고 밑쪽이 어두우면 positive(밝은 pixel), 반대면 negative(어두운 pixel)로 구분이 된다. 참고로 중간에 10이랑 -10이 껴있어서 그라데이션처럼 되는데, 큰 이미지에서는 거의 그라데이션 효과를 볼 수 없다. 바로 전환되는 것처럼 보임. 

 

 그렇다면 filter의 원소는 무슨 값으로 해야할까?

weight를 대신 넣고 역전파를 통해 학습할 수 있다. Neural Network에서 하던 것처럼.

 


 

4. Padding

 

1) 문제의식

앞선 방법으로 edge detection을 하면 무엇이 문제인가?

- 먼저, edge detection을 거듭할 수록 output size가 작아진다. 많은 layer를 가지는 NN을 통과한다고 했을 때, 마지막 output은 매우 작은 이미지가 될 것.

- 두번째로, convolution 의 특성상 가장자리의 pixel 은 output을 산출하는데 있어 다른 pixel에 비해 적게 활용됨. 즉 가장자리 쪽의 pixel들의 정보가 적게 활용되는 것.

 

2) Padding이란

 위와 같은 문제점을 해결하기 위해 기존 input image에 0으로 이루어진 테두리를 두르는 것을 padding이라 한다. 이를 통해 가장자리의 pixel도 여러번 연산에 참여하게 되고, output image도 input image와 size가 같게 만들어 줄 수 있다. 

 

3) Padding의 종류

 그렇다면 얼마나 두껍게 padding을 해주어야할까?

padding의 두께를 p라고 하면 output image의 사이즈는 위와 같다(f는 filter size). 

padding 의 두께에 따라 convolution은 Valid convolution과 Same convolution 로 나뉘는데 별거 없다.

전자는 p=0 인 것이고, 후자는 input과 output image가 같은 사이즈가 되도록 p = f-1 / 2로 설정하는 것.

 

cf) f는 주로 홀수로 지정한다. 두가지 이유가 있다.

 첫번째는 same convolution을 한다고 했을 때 p가 딱 나누어 떨어지지않아 왼쪽과 오른쪽이 비대칭적으로 padding된다는 점.

 두번째는 홀수로 지정하면 filter의 center point(가운데 pixel)이 생기는데, filter의 위치를 언급할 때 center point를 이용할 수 있다. 이게 뭐 나중에 도움이 된다나.... 여튼 관습적으로 이렇게 쓴다고 함.  

 


5. Strided Convolutions

 

1) Stride

 

 

- 합성곱 연산시에 filter가 이동하는 폭을 stride라 한다. 앞선 예시들은 모두 stride가 1이었음. stride=2 부터는 filter가 input image에 온전히 들어가지 못하는 상황이 생기는데, 이 때는 연산을 하지 않는다. 

 

-output 의 차원은 위와 같은데, filter가 온전히 들어가지 못하는 경우 연산을 하지 않으므로 내림을 한다. 

 

2) Cross-correlations vs. Convolution

 

 교차상관이랑 합성곱 연산이 매우 비슷한데, 사실 차이는 필터를 x축 y축으로 뒤집느냐 아니냐의 차이이다. 전자는 뒤집지 않는 것이고, 후자는 뒤집는다. 지금까지 해오던거는 사실 교차상관이라고 할 수도 있는데, 딥러닝에서 굳이 이를 나누고 뒤집어서 연산하는 것은 의미가 없다. 어차피 필터를 W로 두고 학습시킬 것이기 때문. 

 

excelsior-cjh.tistory.com/180

 

06. 합성곱 신경망 - Convolutional Neural Networks

이번 포스팅은 핸즈온 머신러닝 교재, cs231n 강의를 가지고 공부한 것을 정리한 포스팅입니다. CNN에 대해 좀 더 간략하게 알고 싶으신 분들은 아래의 링크를 참고하면 됩니다. 간략한 설명 : 합성

excelsior-cjh.tistory.com

이 사이트에 CNN에 대한 전반적인 내용이 있으며, 특히 교차상관에 대한 부분을 참고하면 좋을 듯하다. 수식도 보면 합성곱과 교차상관은 x와 y를 뒤집은 차이 밖에 없음. 

 


6. Convolutions Over Volume

2차원 뿐만아니라 고차원에서는?

- 3차원에서의 합성곱 또한 그 전과 다르지 않다. 단지 저걸 도형이라 생각하자. 똑같이 stride만큼 옮겨가며 element-wise 하고 더해준 값이 산출된다. 

 

 

- 주의할 점은 input 의 channel 이 filter의 depth(channel)과 같아야 한다. 

- 그리고 필터의 개수만큼 산출되는 이미지가 쌓이므로 필터의 개수 = 산출이미지의 channel 이다. 

- 산출이미지의 channel은 필터의 개수이므로 우리가 input image에서 포착하고자 하는 피쳐의 개수라는 의미를 지닌다. 예를 들어, 수직선, 수평선, 45도선 3개의 edge를 detection하고자 한다면 3개의 필터가 필요할 것이고 그만큼이 산

출 이미지의 channel이 될 것이다. 

 


7. One Layer of a Convolutional Network

1) one layer

- 이전까지 배웠던 NN과 똑같다. 단지 a가 이미지, W가 filter로 되었을 뿐. 

- W와 a 가 곱해지는 방식이 합성곱. activation의 적용도 동일. 

 

2) Notation

- Notation은 위와 같다. nc[l]이 num. of filters 인점을 기억하자. 

- nh는 높이, nw는 넓이, nc는 채널을 의미.

- bias는 어차피 broadcasting 될거라 그냥 실수라고 해도 되는데, 텐서로는 저런식으로 적는다 함.

- A[l] 의 표기방식은 사람마다 다를 수 있으나 교수님은 위와 같이 표기.

- CNN의 특성상 이미지의 크기와 무관하게 필터는 차원과 개수는 고정이므로 같은 개수의 특성을 분석하더라도(수직, 수평, 대각선 등등) parameter의 수를 일정하게 제한할 수 있음. 

 


8. Simple Convolutional Network Example

 

- CNN의 흐름은 위와 같다. 

- 주목할 점은 CNN의 trend 상 layer를 지나갈 수록 height와 weight는 작아지고 channel은 커지게 설계한다.

- 그리고 마지막은 tensor를 쭉 나열해서 logistic 혹은 softmax로 y_hat 값을 산출한다. 아마 이걸 이용해서 back propagation하면서 W를 업데이트 하겠지??

 

- Type of layer in CNN : Conv layer, pooling, fully connected layer가 있다. 첫번째는 우리가 했던거고 나머지는 뒤에 설명할 것. 즉, layer에는 3종류가 있는데 산출방식이 다르다. 합성곱층은 앞서 살펴본 바와 같이 계산이 되며 pooling과 fully connected layer는 조금 다르다. 

 


9. Pooling layers

1) Max Pooling

 

 

- 앞서 합성곱층과 같이 filter와 stride를 정해서 계산을 한다. 

- 하지만 2가지 차이가 있다. 

 1. 먼저, 산출방식이 다르다. max pooling은 씌어진 필터범위에서 가장 큰 값을 산출한다. max pooling의 산출방식을 보면 알 수 있듯이 합성곱처럼 필터의 요소(w)를 정할 필요가 없다. 필터의 크기와 stride만 정해주면 됨.

 

 2. 그리고 채널이 여러개 있을 경우, 합성곱에서는 필터의 채널도 늘려서 필터 블록을 input 에 씌어 계산했는데 max pooling은 그럴 필요가 없다. 필터는 항상 2차원이며 채널별로 계산을 실행한다. 당연히 output도 input 채널의 수 만큼 채널이 생긴다. 즉, 채널별로 독립적으로 계산되는 것.

 

2) Average Pooling

 

max pooling과 같은 방식이나 필터 안에 있는 pixel들의 값의 평균이 산출된다.

 

3) Hyperparameter

 

 hyperparameter는 위와 같다. 주목할 점은 max pooling의 경우 padding을 거의 안쓴다는 것. 그리고 pooling의 특성상 no learnable parameter!

 


10. CNN example

 

- CNN의 흐름은 위와 같다. conv - pool - conv - pool - fc -fc -softmax(logistic)

- 교수님의 표기방식은 parameter W와 b의 유무를 기준으로 layer의 유무를 판단한다. pooling은 parameter가 없으므로 conv와 pool을 묶어서 하나의 layer로 보는 것.

- 마지막에는 Fully Connected layer를 만들어 일반 신경망에서 하듯이 W와 b를 설정하여 통과시킨다. 

 

 

- 위와 같이 대부부의 paramter는 fc에 포진해있다. pool은 parameter가 없고 conv는 적음. 

- hyperparameter를 설정하는데 있어 여러 가이드라인이 있지만, 일반적으로 층이 깊어질 수록 nh와nw 는 작아지고 nc는 커진다. 그리고 activation size 또한 점차 작아진다. 

- hyperparameter는 다른 사람이 해놓은거를 참고하면 좋다. 

 

 


11. Why convolution?

 

 

- 그냥 pixel값들을 쭉 나열하여 신경망에 넣는다면(Fully Connected 방식) 피쳐가 겁나게 많아 parameter가 너어무 많을 것. 

 

- 그에 반해 Convolution을 이용하면 parameter의 수가 적다. 그 이유는 다음과 같다.

 먼저, parameter sharing 이다. 이 말인즉슨 input image의 오른쪽 위든 가운데든 왼쪽 아래든 같은 필터가 적용되므로 parameter가 공유된다는 의미이다. FC(fully connected)방식이라면 픽셀 별로 달랐겠지만...

 다음으로 Sparsity of connection이다. FC 방식의 경우 모든 input unit이 다음 output unit에 연결되어 있지만, Convolution방식의 경우 오직 필터 범위의 픽셀만 다음 산출값에 영향을 끼친다(하나의 픽셀을 하나의 unit이라고 생각하면 됨).

 

질문과 비판은 언제나 환영입니다. 많이 꾸짖어 주십쇼.

728x90