본문 바로가기

Backup/cs231n

cs231n 7강 CNN






기본적으로 입력을 이미지 처럼 32*32*3의 형태의 볼륨을 받음

좀더 잘 살펴보면 5*5*3의 필터을 이미지 위에서 convolution을 시킨다 해서 convolutional layer라 합니다.


저기 밑에 써져있는게 정의라 볼수있는데  필터을 공간적으로 이미지위에 sllide하면서 dot product연산을 해나가는 의미   


여기서 주의깊게 봐야할점은 비록 w, h는 32*32 5*5로 작은부분만 커버하지만 depth는 같다

그래서 이 필터가 저 볼륜을 쭉 훑다.

   



계산해보면 저 필터로는 한번씩 훑을때마다 연산을 하고 이것을 75번하고 하나의 dot product을 하게됨.

그리고 나서 이 하나의 포인트로 리턴을 함


이렇게 쫙 훝으면 28*28의 activation map이 나오게 됩니다.

그래서 기억할건 one filter는 one activation map을 생성합니다.





그러면 이제 두번째 필터을 가정해 보면 다시한번 전체적으로 convolution해서 dot product을 통해서

또 다른 activation map을 가지고 있습니다,

그러면 one filter one activation map이니까 6개의 필터로는 6개의 activation map을 생성하게 됩니다.

이런식으로 생각해야되는데 처음에 32 32 3의 이미지로 입력을 줬는데 이를 28 28 6의 데이터로 다시 표현(re representation)한거라 보면 되고

이 결과물이 다음의 convolutional layer로 전달이 된거라 보면 됩니다.



그 과정을 보면 6개의 5 5 3 필터을 돌렸을때 28 28 6 필터을 얻게 되는거고      



단계을 한번 더 거쳐서 10개의 5 5 6,

이때 6은 앞의 depth와 같아야 됨,

필터의 수가 6개니까 6개의 맵이 생성, 10개의 필터가 또 생겼으니까 10개의 맵이 생김

이렇게 24 24 10까지 이런식으로 계속 진행되는게 CNN형태라 할수있곘습니다.

우리가 궁극적으로 업데이트해나가야되는 필터는 이 필터가 되겠고

처음에는 랜덤으로 셋팅하고 시작하게 됩니다.



그래서 좀 시각화 해서 보면 이런식이 됩니다.

앞에서의 CNN을 통해서 feature hirachy을 얻게됨 

보시면 처음의 필터들은 블랍, 앳쥐 컬러 같은것들이 보이게됨.

그 다음단계 진행되가면서 중간에 보면 이 앞단의 하나하나요소들을 통합한 형태가 보입니다.

뒷족에 깊은 레이어의 필터을 시각화하면 상위레벨의 이미지을 볼수있게 됩니다.



이런식으로도 우리가 생각해볼수있는데 이게 5 5 필터가 총 32개가 있는건데

각각 필터가 생성한 맵인데 이게 그 activation map입니다.

그래서 저 오랜지색을 하얀부분이 잡아낸거임.

그래서 convolution 하다라는건 두개의 signal(filter, image) convolution 작용을 한다는거임




그래서 일반적으로 저렇게 conv relu conv relu 층으로 구성되는데 10개의 필터에서 10개의 activation 맵을 생성한거고

각각의 row을 activation map이라고 생각하면 됨


그래서 다시 보면 32 32 3 맵에서 5 5 필터을 conv하면 28 28 1 맵을 얻는다 했어요 

이게 어떻게 해서 28이 되었을까요? 


좀 쭈려서 7 7 이미지가 있다할떄 3 3 필터가 있다고 하겠습니다.

그럼 왼쪽으로 총 5번 아래쪽으로 5번 움직일수있습니다.

그런데 이때는  stride가 하나일때 이런거입니다.


근데 stride을 2로 주면 어떻게 될까요.

그럼 3by3의 아웃풋을 얻게 됩니다.


그러면 스트라이가 3이 되면 이미지에 핏하지 않습니다.

원칙적으로 적용하지 않습니다.

그래서 stride크기을 이거을 공식화하면 아래와 같습니다.

stride 3일떄는 정수로 떨어지지 않으면 일반적으로 사용하지 않습니다.

그래고 현실적으론 우리는 padding을 이용합니다.

7 7 이미지가 있을떄 0으로 padding처리을 해주는 겁니다.

양쪽에 1씩 늘어나게되는거니까 3 3 필터을 통해 7 7 맵을 얻을수있음     


사이즈을 보존함으로서 사이즈을 신경쓰지 않게 해주기 때문에 패딩이 매우 유용합니다.

그럼 사이즈을 유지시켜주기 위해서는 필터의 사이즈에 따라 패드 사이즈도 파란색처럼 다르게 됩니다. 


이렇게 패딩을 이용해서 사이즈을 보존하는것이 왜 중요할까요

앞에서 필터 conv통해 계속 사이즈가 주는데

이러면 마지막엔 사이즈가 계속 shrink됩니다.

이러면 6단계만 되더라고 conv하게되면 맵의 없어져버리게됩니다.

그래서 차원을 유지해주기 위해서 padding은 매우 유용하다라고 할수있겠습니다.

그래서 conv layer에서는 패딩을 통해 사이즈을 보존해주되

사이즈을 줄여나가는것도 의미가 있는데 나중에 

pooling layer에서 이것을 함


여기서 우리는 4개의 하이퍼 파라매터가 필요합니다.

K F S P


width와 height는 다음과 같은 공식으로 구할수있고 

depth는 filter의 계수와 같다.


보통 filter의 계수는 2의 자승

성능적인 측면때문에..


1*1필터 1스트라이드 도 의미가 있음

depth에 대한 의미가 있음


뉴런의 관점에서 살펴보자

저 뉴런은 local connectivity을 가진다 할수있다.


다른 쪽도 각각 local connectivity가 연결되어있음

각각의 뉴런들이 동일한 파라미터을 공유함

동일한 파라미터을 가지는 닷연산의 결과물임


우리는 필터의 수가 5개면 depth가 5임

이떄 각 각의 뉴런들은 인풋 이미지의 동일한 이미지을 바라보고있음

각각의 다른 엑티베이션맵을 만들고있어서 이들간의 weight는 공유하지 않는데

동일한 depth내으 weight는 서로 다르다.

그렇지만 같은곳을 처다본다.


풀링레이어는 이 activation 맵을 더 작게 관리할수있게 하는건데 독립적으로 작용됨.

conv에서는 사이즈을 유지하고

사이즈는 줄이는 관리는 conv에서 함

conv에는 parameter padding이 없음

pooling에는 여러가지 방법이 있는데

제일 많이 쓰이는게 max pooling

2*2로 크기별로 나누고 가장 큰 값을 가져옴

max pooling해도 정보을 잃는게 아니냐?

라고 해석할수있는데 오히려 약간의 정보을 손실함으로서 invariance능력을 얻게됨.


정리해보면 마찬가지로 w h d을 가져오고

두가지 highperparameter만 필요함 - F S



마지막은 Fully connected layer

마지막을 column vector화 시켜서 일반적인 NN방법으로 마지막단에 classifier시키는게 FC이다









'Backup > cs231n' 카테고리의 다른 글

cs231n 6강 Training NN part 2  (0) 2017.12.05
cs231n 5강 Training NN part 1  (0) 2017.12.05
cs231n 4강 Backpropagation and NN part 1  (0) 2017.10.20
cs231n 3강 Loss fn, optimization  (1) 2017.10.18
cs231n 2강 Image classification pipeline  (0) 2017.10.16