Lecture 5에서는 Vision의 꽃인 CNN을 배웠다. CNN강의는 워낙에 예전부터 배워왔었고 그때는 타의로 배워왔기 때문에 왜 중요한지 모르고 배워왔던 것 같다. 지금은 vision part의 문제해결을 목적으로 배운다는 생각으로 참여했다.
Convolution Neural Network이며 ConvNet 이라고 할 수 있다.
Linear regression처럼 weight와 bias를 갖고 있다. convolution dot production 후 activation function으로 non-linear 연산을 하는 순서를 갖고 있다.
ConvNet은 일반 네트워크에 비해 이미지의 특성을 살린 방식이며 연산 방법 덕분에 연산에 필요한 parameter의 수를 크게 줄였다고 할 수 있다.
CxHxW가 32x32x3인 이미지가 있을때
Fully Connected Layer 같은 경우는 다음과 같다.
flatten 과정으로 32x32x3이미지를 3072x1의 input으로 바꾼 후 연산을 수행한다.
이미지의 크기가 증가할 수록 weight의 개수는 많아지며 이는 overfitting으로 귀결될 수도 있다.
Convolution Layer는 기본적으로 filter을 가지고 있다.
convolution 연산은 다음과 같이 slide하는 과정을 거치며 결과로 activation map 을 얻는다.
output은 대강 28x28x3정도를 얻는다고 생각할 수 있다. (filter개수가 3개이기 때문)
Convolution 연산은 연속되면 activation map의 크기가 계속 작아진다. Spatial을 조절하기 위해 Padding을 사용하며 전 후 map의 크기를 같도록 만들 수 있다.
filter의 이동 간격이다.
7x7 input을 3x3 filter로 계산시 5x5 output이 나온다는 결과다.
4x4 input을 zeropadding 시키면 6x6이 되고 3x3 filter로 수행시 4x4 output이 되며 input과 동일한 크기를 가진다.
계산식은 다음과 같다.
다음 식의 값이 정수가 아닌 경우는 연산이 불가하다고 판단할 수 있다.
Downsampling 이라 생각할 수 있다.
parameter 수를 줄여 연산을 효율적으로 수행시킬 수 있다.
가장 보편적인 Max Pooling이다. 2x2 filter에 stride2가 가장 많이 쓰인다.
Average pooling도 있는데 Average pooling을 계산하려면 연산이 더 들어가는 반면 Max pooling은 비교적 간단하고, 이미지 분야에서 이미지의 활성화 부분을 알기 좋아 좋다고 한다.
CONV - RELU - CONV - RELU - POOL 이 하나의 CNN Block이다.
3번의 block 이후 Fully Connected Layer로 연결되며 그 output을 활용해 5개의 카테고리중 분류를 한다.
이번 과제는 솔직히 많이 어려웠다ㅎㅎ 그리고 순서를 CNN부터 했는데 FC를 먼저 구현하고 난 후 진행하는 것 처럼 보이긴 하다.
CNN forward이다.
Helper function 쪽이 핵심인거 같은데 그렇구나 정도로 이해했다.
CNN Backward다.
너무 이해하기 어렵다. backwar방식대로 거꾸로 연산되는 부분만 이해했다.
Max pooling forward 이다.
helper fnction 쪽이 핵심으로 보인다.
Max pooling Backward 다.
더이상 이해는 너무 어렵지만 순서를 최대한 이해하려고 애쓰고 있다.
실습 첫번째로 filter을 주고 CNN연산을 돌려보았다.
filter을 활용해 gray scale이나 또는 edge detection 작업을 할 수 있었다.
다행히 더 복잡한 작업을 위해 cpython 으로 작성된 빠른 CNN 코드를 제공해준다.
Three-Layer-CNN 작업도 수행했다.
재밌는게 training은 99프로인데 validation 은 0.22인 아주 overfitting 된 상황을 마주했다. 나는 처음에 내 코드가 잘못된 줄 알았다. 근데 의도된 것이었다.
위에는 작은 데이터를 활용한 학습이고 Full data 결과도 밑에 제공해준다.
그 외에도 Batch Normalization 구현도 완료했다.
CNN은 Vision의 꽃이고 이 특별한 연산과정은 아직까지도 중요하게 사용된다. CNN을 자세히 알아볼 수 있어서 좋았고 기본에 더욱 충실해야겠다.