Convolutional Neural Network
이번 강에서는 CNN에 대하여 학습을 진행했다.
00. 학습 내용
- Convolutional Neural Network의 기초에 대하여 학습
- Convolutional Neural Network의 주요 테크닉에 대하여 학습
01. CNN 기초
- Convolutional Neural Network의 기본으로(무조건 포함되어야 하는 것은 아님) feature extraction을 해주는 convolution Layer, 인풋 데이터의 size를 조정해주는 pooling layer, convolution Layer에서 추출된 feature 정보를 바탕으로 의사결정을 내려주는 Fully connected layer로 이루어져 있다.
- convolution Layer의 convolution 연산은 AI Math 에서도 다룬것처럼 이산형, 연속형, 2D에 대하여 위와 같은 방식으로 진행된다. f() 또는 I() 로 표현되는 input과 t 또는 i,j 크기의 커널 간의 convolution 연산으로 output이 만들어진다.
- convolution Layer에는 convolution 연산의 간격을 조정하는 stride가 존재한다.
- convolution Layer에는 convolution 연산을 통한 아웃풋 이미지의 사이즈를 조정하기 위해서 Padding이 존재한다.
- convolution Layer의 파라미터의 수는 커널 사이즈 x input 채널의 수 x 커널의 개수 이다. 위 그림을 예시로 들면 3 x 3 x 128 x 64 개의 파라미터가 존재한다. (bias를 추가한다면 커널의 개수가 더해짐)
02. CNN 주요 테크닉
- convolution layer를 효과적으로 쌓기 위한 테크닉으로는 VGG에서 쓰인 repeated 3x3 blocks, GoogLeNet 에서 쓰인 1x1 convolution, ResNet에서 쓰인 skip-connection, DenseNet에서 쓰인 concatenation이 있다.
- 위에서 나온 테크닉들은 본질적으로 모델을 깊게 쌓으면서, 이와 함께 파라미터의 수를 줄이기 위한 고민의 해결책이라고 볼 수 있다.
- repeated 3x3 blocks은 말 그대로 3x3의 convolution layer를 반복적으로 쌓는 것이다. repeated 3x3 blocks은 파라미터의 수는 줄이고 동일한 Receptive field를 얻을 수 있다는 장점이 있다.
- 1x1 convolution은 말 그대로 convolution layer 중간에 1x1의 convolution layer를 쌓는 것이다. 1x1 convolution을 통해서 체널의 수를 감소시켜 모델의 파라미터 수를 줄일 수 있다.
- skip-connection은 convolution layer에 통과하기 전의 input과 통과한 후의 output을 서로 더하는 방식으로, 정보의 손실을 막고 표현하고 싶은 데이터의 윤곽을 조금더 선명하게 만들어준다고 볼 수 있다(개인적인 생각임). skip-connection 이전에는 모델을 깊게 쌓으면 쌓을 수록 모델의 성능이 좋아지지 않는 overfitting 현상이 발생했었는데 skip-connection 이후부터는 모델을 깊게 쌓아도 성능이 같이 좋아지게 되었다고 한다.(그래도 한계는 존재함)
- skip-connection이 더하는 연산이라면, concatenation은 말 그대로 onvolution layer에 통과하기 전의 input과 통과한 후의 output을 채널 단위로 concat하는 것이다. 근데 본 방식의 단점은 모델이 깊어질수록 채널의 수가 증가할 수 있다는 것인데, 여기서 1x1 convolution을 활용한다면 채널의 수를 효과적으로 조절할 수 있을 것이다.