computer vision AI ( feat. CNN 기초 이론의 의미 )
안녕하세요. WH입니다.
조금 빠르게 너무 간략하게 이론들을 건너뛴 감이 없지않아 있지만
여러분의 목표는 기초가 아닐꺼라고 생각하기에 정말 기본만 다루고 넘어갈게요
필요하다면, 더욱 다뤄보겠습니다.
이번 글은 CNN에 대한 기초 지식이 있다는 전제하에 쓰여졌습니다.
기초 이론에 대한 내용은 요청이 있다면 다루겠습니다.
시작하기에 앞서 보고 오면 좋을 글을 아래 넣어놓겠습니다.
2022.04.21 - [AI] - computer vision AI( feat. linear classifier 선형 분류기 )
잠깐 리마인드 하면서 시작할까요?
W는 템플릿, 필터 등등으로 불리고 그 템플릿은 이미지를 판단하는 기준이 된다고 했습니다.
그렇다면 템플릿에는
어떤 특징을 구별할 수 있는 특징을 포함하게 됩니다.
그런데 지금까지는 우리는 fc layer에 input으로 raw image를 넣었습니다.
그 raw image를 기반으로 w를 업데이트하며 특징맵을 만들었죠.
여기서 하나의 화두를 던지겠습니다.
그런데 만약 input 자체가 이미지를 분류할 수 있는 특징을 포함하고 있다면 결과는 어떨까요?
이미 input 자체가 특징을 완벽하게 표현할 수 있다면, fc layer는 필요할까요?
많은 글들이 CNN에 대해 기본적인 이론을 다루지만
그 목적에 대해 다루지는 않습니다. 그래서 제가 다뤄보려구요
기초적인 stride, convolution 방법, padding등을 다루지는 않겠습니다.
다만 의미, 그리고 '왜'에 초점을 맞추겠습니다.
왜가 아닌 수학적인 부분은 이미 널리고 널렸거든요.
Convolution 의 의미 ( CNN : convolutional neural network )
그래서 이게 뭐냐? 어렵지 않습니다. convolution layer가 포함된 신경망을 CNN이라고 합니다. 간단하죠? 그럼 convolution layer가 뭔데요? 수학적으로는 특정 filter 크기만큼 합성곱을 하는 층입니다. 그런데 왜 하는 건데요?
특징을 뽑아내기 위해 합니다. 정말 중요합니다. input으로 특징을 뽑아내기 위해 합성곱을 하는 거에요. 그게 왜 특징을 나타내는 건데요? 필터는 특징을 포함하고 이미지와 합성곱을 하게 되면 그 특징의 영향력에 따라 영향이 적다면 희미해지고 영향이 크다면 숫자가 커지기 때문이지요. 우리는 필터의 개숫를 정해주고 필터 마다 해당 이미지에 대한 영향력을 나타내는 정도가 나타나게 되지요. 그런데 수학적으로 생각해보면 convolution( 합성곱 )은 선형성을 띈단 말이죠? 그럼 당연히 비선형성을 더해주기 위해서는 activation function을 사용해 줘야 하구요.
두서가 없었나요? 그래서 알고 가야되는게 뭐냐? 한 문장으로 정리해 드리면, 합성곱 층은 특징을 뽑아내기 위해 만든다. 물론 병목 현상 때문에 사용되기도 하고, 연산량을 줄이기 위해 사용되기도 합니다만, 본질적인 합성곱의 목적은 특징 맵을 만드는 겁니다. 그래서 이미지를 분류하기 위한 템플릿을 제공함으로써 기준을 잡아주는 것이지요.
padding의 의미
padding은 특징 맵을 감싸는 것을 말합니다. 근데 왜 감싸죠? 왜 하는건데요? 공간적인 정보를 잃지 않기 위해 합니다. 필터는 중앙부로 갈수록 중요한 정보를 포함합니다. 3*3 필터는 가장 가운데 하나의 셀이 가장 중요한 정보를 포함하며 해당 정보가 겹치지 않기 하기 위해 stride 1을 사용하며, 5*5 필터의 경우 가장자리를 제외한 3*3 부분이 중요한 정보를 포함함으로 stride 2를 사용하죠. 제가 설명한 2 문장은 매우 중요한 사실을 포함하고 있습니다. 합성곱을 하게 될 때, 주변부의 정보는 잃어버릴 수 있음을 암시하죠. 그런데 이미지는 가장자리라도 매우 중요한 정보를 담고 있을 수 있죠. 합성곱을 통해 특징맵의 크기가 줄어들어 버린다면, 합성곱 층을 통과할수록 공간( 차원 )을 잃어버리게 되고, 결국 이는 정보의 손실로 이어지게 되죠. 이를 방지하기 위해 특징맵을 감싸 공간을 유지시키고자 하는 것이 padding입니다. 정보의 손실을 최소화 하는 거죠. 일예로 주변을 0으로 감싸면 zero padding이라고 한답니다.
stride의 의미
필터를 얼마만큼 움직이는 지를 결정하는 것이 stride 인데요. stride는 무슨 의미를 가지고 있을까요? 우선은 down sampling이라는 의미를 가지고 있습니다. convolution은 많은 연산을 포함합니다. 즉 모든 차원을 유지하면 공간에 대한 정확한 정보는 얻을 수 있겠지만, 연산량이 기하급수적으로 늘기 때문에 시간이 오래걸리게 되죠. 그렇다면 정보는 조금 잃더라도, 연산량을 줄여 활용도를 높이고 싶을 수 있지 않을까요? 이럴 때 우리는 stride를 통해 down sampling을 하게 된답니다. 두 번 째 의미는 잡아낸 특징을 중복으로 잡아 분류의 혼란을 피하기 위한 용도입니다. 이 말이 무슨 말이냐면, 위에서 설명했듯이, 필터는 가장자리를 제외한 부분이 중요한 정보를 포함한다고 했습니다. 즉 5*5 필터에서는 가장 자리를 제외한 3*3 부분이 정보를 포함하는 데, stride를 1로 하게 되면 필터마다 중요하다고 생각하는 정보가 겹치게 되죠. 그러면 필터마다 중요하게 생각하는 부분을 겹치지 않고 잡아내야하는데 중복하여 잡아내기 때문에, 영향력에 대한 판단이 흐려지게 되는거죠. 이런 것을 방지하는 것이 stride의 역할이라고 생각하면 되겠습니다.
Pooling의 의미
pooling은 down sampling을 위해 사용합니다. 즉 정보의 손실을 감안하고 연산량을 줄여 효율을 높이겠다는 전략이지요. 그렇다면 정보를 어떻게 요약해서 가져올꺼냐, 제일 큰 특징만 잡아내는 max pooling, 필터가 미치는 평균 영향을 잡아내는 average pooling 등이 있습니다. 물론 우리는 특징의 중요도를 생각에서 보통은 max pooling을 많이 사용한답니다. 그런데, 하나 짚고 넘어가겠습니다. 위에서 즉, stride를 통해 down sampling을 할 수 있다고 했습니다. 그렇다면 pooling을 통한 down sampling과 stride를 통한 down sampling은 어떤 차이가 있을까요? stride는 기본적으로 convolution 시에 정하는 parameter 지요? 그렇다는 말은 pooling의 경우는 특정 영향정도만을 고려한다면, stride를 통한 down sampling은 필터의 영향 자체를 고려하겠다는 말이 된답니다. 이해가 되셨을까요??
이번 글을 통해 CNN에 대한 통찰을 얻으셨길 바라며 마무리 하도록하겠습니다.
오늘도 즐거운 하루 보내세요. 이상 WH였습니다.