정리에 앞서
이번에 항상 공부하고 싶었던 Machine Learning을 공부할 기회가 생겨 공부한 내용들을 최대한 간략하게 적어보려한다.
시리즈물로 작성해야지.
Convolution Neural Network이란
Convolution Neural Network은 “이미지 처리”에 특화된 Neural Network이다. 주로 3가지 단계로 구성된다.
1
2
3
1) Convolutional layer
2) Activation function
3) Pooling layer <br>
Activation Function은 이후에 따로 다룰 예정이기에 이번에는 Convolutional Layer와 Pooling Layer에 대해 정리해보자.
Convolutional layer(합성곱 층)이란
Convolutional Layer의 역할은 한 줄로 정리하면 다음과 같다.
1
이미지에서 특징(feature)을 추출하자!
특징점을 추출하는 것은 다음과 같은 조건들 때문에 진행한다.
1
2
3
1) 이미지는 3d tensor이지만 일반적인 인공신경망의 입력값으로 집어 넣을 경우 1d로 변환된다.
2) 1d로 변환되는 과정에서 이미지의 픽셀간의 공간적인 구조 정보가 유실된다.
3) 또한 같은 정보를 가진 이미지의 해상도가 커지면 커질수록 1d tensor로 변환 시 데이터의 변화가 커 인공신경망 학습과 예측 정확도를 떨어뜨린다.
특징점을 추출하는 과정은 필터(Filter) 혹은 커널(Kernel)의 개념이 등장한다. 필터나 커널은 다음과 같이 사용한다. 여기서는 커널이라는 표현을 사용하겠다. 커널은 한줄로 요약하면 다음과 같다.
1
이미지에서 특징을 뽑아내는 도구
커널은 ComputerVision에서 특정 이미지에 Edge detection을 하거나 Gaussian Blur를 적용시킬 때 사용한다. 대표적인 커널(혹은 Filter)은 Sobel Filter가 있다. 합성곱 신경망에서의 커널이 ComputerVision의 필터와 다른 점은 다음과 같다.
1
2
Computer Vision의 필터는 이미 값이 "채워져"있다.
Conv의 커널은 "학습" 을 통해 "채워야"한다.
Conv의 커널은 인공 신경망의 weight와 bias 값에 해당하는 부분이다. 즉, 학습을 통해 채워야 한다. 아래의 그림에서 볼 때 hidden layer 부분이 kernel이 된다.
합성곱층은 다음과 같이 사용한다.
1
2
1) Input 이미지에 지정된 사이즈의 커널을 곱한다.
2) 해당 값을 Output Buffer쪽에 저장한다. 위와 같은 연산 과정으로 인해 Input과 Output의 Tensor Dimension에 차이가 생긴다. 필요에 따라 패딩을 적용할 수 있으며 Stride 값에 따라 Kernel을 임의의 interval로 이동시켜 특징을 추출할 수 있다. 이에 대한 자세한 내용은 이곳을 참고하자.
Pooling layer(풀링층)이란
풀링층의 역할을 조사해보니 다음과 같은 4가지 이유가 있다고 한다. 풀링층의 역할
1
2
3
4
1) Input Size를 줄여 Tensor Size를 줄인다.
2) Overfitting을 조절하여 과적합(Overfitting)을 방지한다.
3) Feature extraction이 향상된다.
4) 일반화 성능을 향상시켜준다.
Pooling Layer(풀링층)은 주로 2가지 종류를 사용한다.
1
2
1) Average Pooling Layer
2) Max Pooling Layer
Pooling Layer는 n X n 커널을 stride 단위로 이미지에 적용시킨 뒤 커널 안에 포함된 픽셀들 중 Max 혹은 Average 값을 추출해 Output값으로 갖는다.