모각코

[모각코 3주차] Convolution Neural Network

y_unique 2024. 3. 21. 00:57
728x90

모각코 좋다 

마라탕 먹고 공부하려니 졸령

그치만 해야지!

CNN 복습할게유


지난 강의에서 문제점을 제기하며 마무리가 되었다. 

지금까지 공간적 구조가 있던 이미지를 flatten하여 하나의 열벡터로 만들어 처리를 했다. 

하지만 이 과정에서 spatial structure가 사라지게 되는 문제점이 있었다. 

 

이번 포스팅에선! 공간적 구조를 처리할 수 있는 Convolutional Networks가 핵심이랍니다.

 

Convoulutional Network는

기존에 우리가 알던 위의 2개 fully-connected layers와 activation function에 

아래 3개, convolution layers, pooling layers, normalization을 포함하고 있는 Network라고 할 수 있다. 

 

먼저, 

1. Fully-Connected Layers -> Convolution Layers 

모든 공간적 구조를 파괴했던 풀리커넥티드 레이어에서 컨볼루션 레이어로 이동(?)하는 방법에 대해 알아보자! 

이제 입력을 2차원 공간 구조를 존중하는, 8개의 이상의 input으로 학습한다는 점을 유의!

기존 fully connected layers는 32 x 32 x 3의 이미지를 3072 x 1의 형테로 strech 한 후 연산을 진행하였지만, 

 

Convolution Layer는 flatten 하지 않고, input image 그대로 연산에 적용한다. -> 공간적 구조 보존! 

더하여 위에 보이는 filter는 weight라고 생각하면 된다. 

이 filter는 input image를 slide하며 해당되는 영역과 내적을 통해 어떤 스칼라 값을 도출한다. 

이는 해당 영역이 filter와 얼마나 일치하는지(?)를 나타내는 값이라고 보면된다. 

그렇게 input image의 모든 영역을 slide하여 스칼라값이 모여 하나의 activation map를 만들어 낸다. 

여기서 input의 channel수(깊이)와 filter의 깊이는 동일해야한다!

또 다른 필터를 사용하여 하나의 3차원 layer를 만들어 낼 수 있다. 

동일한 방식으로 연산을 진행하지만 값이 다를 수 있음을 생각해 녹색으로 나타낸 것이다. 

 

총 6개의 filter를 사용하여 크기가 1 x 28 x 28인 6개의 activation map이 만들어진 것을 알 수 있다. 

이 activation map은 입력의 각 위치가 각 필터에 얼마나 반응하는지 보여주는 것이다. 

이 과정에서 이미지의 전체적인 spatial structure는 사라질 수 있지만, local spatial structure는 보존될 수 있다. 

이러한 fitler는 6x3x5x5인 4차원 텐서로 생각할 수 있다.

 

또한 여기서 6개의 bias항을 볼 수 있다. 

항상 convolution filter당 하나의 bias를 갖는데, 현재 6개의 filter이므로 6개의 요소로 구성된 bias vector가 도출되었다. 

 

Convolution Layer를 바라보는 두가지 관점이 있다.

 

첫번째는 activation map이 input으로 받은 데이터가 filter와 얼마나 일치하는 지를 나타내는 것. 

따라서 activation map을 통해 output의 공간적 구조를 알 수 있다는 관점이다. 

두번째는 output을 하나의 grid로 여기는 것이다. 그리드의 각 지점은 feature vector로 이루어져 있으며 

이를 통해 input의 structure나 appearance에 대해 알 수 있다는 관점이다.

또한 위 그림과 같이 batch 관점에서 conv를 바라볼 수 있다. 

 

이를 일반화하면 다음과 같은 수식(?)으로 표현할 수 있다. 

 

위 그림은 convolution layer를 쌓는 과정을 보여준다.

그림을 해석해보자면, 첫번째 layer에서 filter의 개수만큼 bias가 존재하며 filter의 개수가 다음 layer의 channel 개수가 된다. 

(슬라이드에서 b1 : 5인 부분은 오타!, 6이 맞다) 

이러한 특징을 통하여 stack! 컨볼루젼을 쌓게 되는데.. 

슬라이드 오른쪽 상단 질문을 보면 2개의 convolution layer를 쌓으면 어떻게 되는지 물어보고 있다. 

이는 weigth와 input x를 쌓는 linear 형태의 연산이 되어 하나로 합쳐질 수가 있다. (Layer를 여러개 한 효과가 없어지고 w1w2를 하나로 볼 수 있음) 따라서 우리는 none-linearity를 부여해서 하나로 합쳐질 수 없게.. layer를 쌓는 효과를 부여하기 위해서 위에서는 ReLU를 연산에 적용하고 있다. 

 

linear classifier에서는 

class의 templete형태로, 주어진 input과 얼마나 비슷한 지를 score로 계산할 수 있었다. 이러한 templete이 학습을 하여 위 슬라이드 오른쪽 그림과 같이 나왔었다.  -> 하나의 class당 하나의 templete만 학습할 수 있었다.

 

CNN에서는 

위와 같이 image templete을 학습할 수 있다. 

 


CNN 기초를 첨부터

다시 하는 기분이라 굿 

탄탄하게 다지는 것 같은 느낌이 들었당

중간에.. 더 좋은 영상으로 공부하느라 

블로깅이 야무지지 못하지만 

good..!