안녕하세요~


이번 시간에는 DNN의 단점을 바탕으로 CNN이 왜 이미지 영역에서 더 좋은 성과를 보여주는지 말씀드릴거에요~




1) Weight(가중치) parameter 감소


(가중치 parameter가 많으면 안되는 이유를 참고하시려면 여기 링크를 참고해주세요!)


먼저, DNN이 이미지를 학습하는 방식을 살펴볼까요? 처음 입력 이미지가 784개의 차원으로 구성되어 있네요. 입력 이미지와 연결된 hidden layer 수는 사용자가 설정해주는거지만 hidden layer 노드(뉴런) 개수에 따라 가중치들이 굉장히 많아지는것을 볼수있죠? (가중치개수 = 입력차원수 X hidden layer 노드 수)


    

<사진1>



반면에 CNN에서는 학습을 위한 가중치가 몇개나 필요할까요? 먼저 한 개의 3X3 convolution filter를 사용한다고 했을때 9개의 가중치(뉴런)이 필요하게 됩니다.


             

<사진2>


그리고 아래의 사진처럼 6개의feature map을 위해서는 6개의 filter가 필요하니 first convolution layer에서는 54(=6X9)개의 가중치(뉴런)이 필요하게 되네요.

     

                          <사진3>               

                   

DNN과 CNN의 첫 번째 단계에 필요한 가중치 수만 보더라도 굉장한 차이가나는것이 보이시나요? 이를 극단적으로 표현하면 아래와 같이 표현할 수 있어요.


<사진4>


가중치의 수가 현저하게 줄어들면서도 edge 정보 등 수많은 위치정보들을 그대로 유지하면서 feature를 확보하고 있네요. 


    

<사진5>










2) Weight sharing & Sparse connection


위에서 DNN에서 CNN으로 가중치가 줄어드는 이유를 설명했죠? 간단히 말하자면 convolution filter의 가중치수가 적기 때문인데요. CNN에서는 이러한 convolution filter의 특성을 두 가지 용어를 사용하여 설명하고 있답니다.


먼저 weight sharing의 정의를 살펴볼게요.


"Parameter sharing refers to using the same parameter for more than one function in a model. In a traditional neural net, each element of the weight matrix is used exactly once when computing the output of a layer"


아래그림의 왼쪽 부분은 DNN구조이고, 오른쪽 부분은 CNN 구조에요. DNN에서는 하나의 출력값(S)를 위해 각각 다른 가중치들이 사용되고 있어요 (대신에 입력값들이 모두 동일하네요). 반면에 CNN은 하나의 출력값에 같은 가중치들이 사용되고 있어요 (대신에 입력값들이 매번 바뀝니다).


쉽게 말하자면, "각각의 출력값(뉴런;S) 들이 동일한 가중치(weight)를 함께(sharing; 공유) 쓰고있다"라고 말할 수 있겠네요.

 

<사진6>


이러한 weight sharing을 통한 연산은 CNN sparse connection 구조를 형성할 수 있게 기여했는데요. 전체이미지에서 Convolution filter를 적용시켜 연산을 할때, conv filter가 적용되지 않은 부분은 모두 0이라고 할 수 있겠어요 (보통 이렇게 0이 많은 행렬구조를 sparse matrix라고 해요). 0이 의미하는 바는 아래 왼쪽그림처럼 가중치가 모든 입력이미지에 대해서 연결되어 있지 않고 sparse하게 연결되어 있다는걸 의미하는데요. 이러한 특성때문에 CNN은 sparse connection 구조를 가지고 있다고 말할 수 있게 되었어요. 다른말로 표현하자면, 입력이미지에 비해 conv filter 사이즈가 작다보니 이러한 sparse connection을 가능하게 했다고도 말할 수 있겠어요.


         


아래 왼쪽 사진을 보면 가운데 부분이 sparse connection이고, 양측 부분이 Dense(or Fully) connection이에요. 우리가 sparse connection 처럼 가중치를 적게 사용하면서도 좋은 성능을 내면 overfitting 측면이나 학습시간 측면 등에서 더욱 좋은 효과를 많이 볼 수 있겠죠? CNN은 weight sharing을 통해서 이러한 sparse connection이 가능해 졌습니다.


      

                   <사진7>                                                          <사진8>











3) Translation equivariance and Translation invariance


CNN에는 translation equivariance라는 특징이 있는데 이에 대해서 알아보도록 할게요.


Translation equivariance의 수학적 정의는 아래와 같아요.


"Specifically, a function f(x)  is equivariant to a function g if f(g(x)) = g(f(x)). In the case of convolution, if we let g be any function that that translates the input, that is, shifts it, then the convolution function is equivariant to g." 


우선, f를 convolution 연산을하는 함수라고 생각하고, g를 전체 이미지영역(x)을 translate(shift;이동)시키는 함수라고 가정한다면 아래와 같은 수식을 만들 수 있겠어요. 아래 수식이 의미하는것은 이미지에 convolution filter를 적용시킨 것을 이동시킨 결과와 전체이미지를 이동시킨것을 convolution filter 연산을 한 결과와 같다는 뜻이에요. 

convolution(translate(x)) = translate(convolution(x))


예를들어, 우리의 입력 값이 [0,3,2,0,0]이라고 하고 convolution 연산을 적용시킨 결과가 [0,1,0,0]이라고 해볼게요. 그리고 [0,1,0,0]을 오른쪽으로 translate하면 [0,0,1,0]이 나오겠네요. 이번에는 전체이미지가 shift된 [0,0,3,2,0]을 convolution 연산을 적용시켜볼게요. 결과값 [0,0,1,0]이 나오게되네요. 


위의 수식을 보면 왼쪽 convolution(translate(x))는 입력 이미지가 이동되었다는 것을 의미하는데, 이렇게 이동된 이미지의 convolution결과와  기존 이미지X에 convolution 한 결과를 이동시킨 결과 (=translate(convolution(x)) 와 같다는 것은 결과적으로 봤을때 입력 이미지의 위치가 변하면 "동일하게" 출력값도 같이 변한다라는 의미를 갖게 되요. 그래서 Equivariance하다는 뜻을 입력이 변하면 출력도 입력이 변한정도와 동일하게 바뀌는 현상을 의미한답니다.


<사진9>


Convolution연산은 equivariant해서 서로 다른 위치에 있는 특징을 입력으로 넣으면 feature map에서도 각 특징을 서로 다른 위치에 배치시킵니다. 이러한 특징은 feature map이 FC layer에 들어가기전까지 지속됩니다. 








4) Translation invariance


CNN에서는 translation equivariance와 translation invariance라는 특징이 공존해요. '한글 뜻만 봐서는 서로 모순된 개념같은데 어떻게 두 개의 특성을 동시에 갖을 수 있지?'라는 생각을 할거에요. 그럼 이제부터 차근차근 설명해보도록 할게요.


먼저 translation equviariance라는 개념을 다시 복기해보면, 입력 이미지의 위치가 바뀌면 출력값도 동일하게 위치가 변한다는 말이에요. 우측 6개의 이미지를 convolution한 결과로 얻은 6개의 feature map은 숫자8의 위치에 따라 서로 다르게 표현될거에요. 하지만, translation equivariance 특성으로 인해 입력값이 이동한것에 따라 동일하게 출력값이 변했기 때문에, 숫자8이라 부분만 출력값이라고 봤을때 출력값 pattern은 변하지 않았을거에요 (이 부분이 이해가 잘안되실 수 있는데, 제가 그림을 못그려서 설명에 한계가 있네요 ㅜㅜ).

<사진10>


결과적으로 이렇게 추출한 특징들을 FC layer를 통해 classification하게 되면 모두 8이라고 classification하게 되요. 그래서 이러한 CNN은 translation invariance(위치에 따라 출력이 불변한다)라는 특성을 지니게되요. 즉, 강아지 사진에 강아지가 어느 위치에 있건 강아지 label 확률값은 동일하게 높게 출력하기 때문에 Convolution연산의 equivariance한 특성과 파라미터 를 공유하는 덕분에 CNN자체가 translation invariant특성을 갖게 됩니다. DNN에서 처럼 조금만 이미지가 distortion or shift되도 다른 이미지라고 판단하기 때문에 엄청나게 많은 이미지를 학습시켜야 하지만, 여기에서는 translation equivariance을 통해 translation invariance한 특성을 갖게 되기 때문에 학습이미지가 DNN보다 많지 않아도 되는 장점이 생깁니다.




(여기서 부터는 개인적인 의견입니다)


그런데, 조금 이상하지 않나요? 분명히 fully- connected 구조를 가진 DNN에서 이미지가 조그만 translation(or shift)되면 다른 이미지라고 분류한다고 했는데, 결국 CNN도 마지막 단에는 DNN과 같이 fully connected 구조를 갖고 classification하는거면 translation invariance하다고 말할수 없는거 아닌가요?


이러한 이유로 몇몇 책에서는 translation invariance라는 개념이 제한적으로 통용된다라고 언급하고 있습니다. 다시말해서, '사진10'과 같은 경우에는 설명을 하기위해 극단적인 위치변화를 예시로 들었지만 사실상 CNN은 아주 작은 위치변화에 대해서만 translation invariance하다고 설명하고 있습니다. 이러한 주장의 근거로는 pooling 연산의 특성을 언급하고 있는데요. 아래 왼쪽그림에서 왼쪽 부분의 3개의 서로다른 모양의 도형이 있음에도 불구하고, max pooling은 일정 영역에서 가장 큰 특징값만을 취하기 때문에 결과값이 값게 나올 수 있어요. 


     

                  <사진11>                            <사진12>                            <사진13>                  


쉽게설명하면 자전거를 가까이서 봤을때에는 분명 두 자전거가 달라보이지만 굉장히 멀리서 보면 비슷해보이는 현상과 같은거에요.

           --->         

<사진14>


결국 translation equivariance한 특성을 갖은 convolution 연산(filter)과 translation invariance and downsampling 특성을 갖는 pooling 과정을 반복하다 맨 끝단까지가면 CNN이라는 것이 큰 변화에도 translation invariance 할 수 있다고 말하는거 같지만 글쎄요 거기까진 확신하진 못하겠네요;










5) Overfitting


위에서 pooling의 downsampling에 대해서 잠시 설명드렸지만 결국 max pooling 과정에서 특징값이 낮은 값들은 제거가 되요. 결국 이렇게 되면 가장 강력한 특징들만 살아남게 되는데 이것이 overfitting을 피하게 도와줍니다.


예를들어, 아래그림에서두 자전거는 한 눈에 봐도 서로 많이 달라보여요. 만약에 우리가 세상에 처음태어나서 왼쪽사진의 자전거만 학습했다면 우리는 오른쪽의 사진의 물체를 자전거가 아니다라고 할 가능성이 많아요. 왜냐하면 너무 왼쪽 자전거만 학습한 나머지 왼쪽자전거의 자질구레한 특징들 (ex; 바퀴의 크기, 자전거의 중간부분 구조, 손잡이 모양)이 오른쪽 물체에는 없기 때문에 오른쪽 물체는 자전거가 아니다라고 판단내리게 되는거죠.


     --X-->   


반면에 우리가 pooling을 통해 자전거가 각각의 강력한 특징만 갖고 downsampling 되었다고 해볼게요. 왼쪽 사진에서 바퀴 두 개가 보이고, 의자랑 손잡이 같은 것들이 보여요. 마찬가지로 오른쪽도 왼쪽에서 보였던 것 들이 보이네요. 즉, 멀리서 보니까 자전거의 가장 보편적인 특징이라할 수 있는 바퀴, 손잡이, 안장의 여부만보고서 오른쪽 물체가 자전거인지 아닌지만 판단하기 때문에 왼쪽 자전거가 본래 갖고 있던 자질구레한 특징에 너무 치우치지 않고 오른쪽 물체를 자전거라고 바르게 표현할 수 있게 되었어요. 이러한 현상을 통해서 우리는 'pooling 연산을 통해 학습데이터에 overfitting되는 현상을 피할 수 있게 된다'라고 말할 수 있을 것 같네요.


     --X-->   








지금까지 CNN의 특성을 통해 CNN이 왜 DNN보다 이미지영역에서 특화될 수 밖에 없는지 알아보았어요. 이렇게 CNN에한 기본구조와 개념을 알아보았는데요. 다음장에서 앞으로 배울 CNN 모델을 간단히 언급하고 CNN의 성능을 판단하는 지표에는 무엇이 있는지 알아보도록 할게요~!





[글 래퍼런스]

https://medium.com/@seoilgun/cnn%EC%9D%98-stationarity%EC%99%80-locality-610166700979



[사진 래퍼런스]

사진1

https://89douner.tistory.com/26?category=868069

사진2

https://imjuno.tistory.com/entry/Convolutional-Neural-NetworkCNN

사진3

https://d2l.ai/chapter_convolutional-neural-networks/lenet.html

사진4,6,8

https://www.deeplearningbook.org/

사진5

https://www.youtube.com/watch?v=AgkfIQ4IGaM

사진7

https://ai.stackexchange.com/questions/4338/dense-sparse-dense-cnn-training

사진9

https://medium.com/@seoilgun/cnn%EC%9D%98-stationarity%EC%99%80-locality-610166700979

사진10

https://medium.com/@jongdae.lim/%EA%B8%B0%EA%B3%84-%ED%95%99%EC%8A%B5-machine-learning-%EC%9D%80-%EC%A6%90%EA%B2%81%EB%8B%A4-part-3-928a841a3aa

사진11

https://www.quora.com/How-exactly-does-max-pooling-create-translation-invariance

사진12

https://medium.com/@hobinjeong/cnn%EC%97%90%EC%84%9C-pooling%EC%9D%B4%EB%9E%80-c4e01aa83c83

사진13

http://cs231n.github.io/convolutional-networks/

사진14

http://bike-korea.com/index.php?mid=allbike_info&category=3123&m=0




+ Recent posts