본문 바로가기

심층학습/Computer Vision

합성곱 신경망 (Convolution Neural Network) - 합성곱의 이해

본 포스팅은 Ian Goodfellow 등 2인이 저술한 심층학습(Deep Learning Adaptive Computation and Machine Learning)및 오일석 저술의 기계학습 을 기반으로 작성합니다.

 

이번 포스팅은 합성곱 신경망입니다. CNN이라는 이름으로 더 익숙할 거 같은데 영상이나 이미지를 다루는 컴퓨터 비전, 추천 시스템 등을 주도하는 획기적인 알고리즘이죠. 일단 이번 포스팅에서 이해해볼 것들은 

 

1. 합성곱이 무엇인가?

2. 합성곱을 사용하는 이유는 무엇인가?

3. 그래서 CNN은 어떻게 동작하는가?

 

이 세 가지를 일단 중점적으로 파악해보죠. 

 

1. 합성곱의 의미?

일단 합성곱의 정의는 다음과 같습니다. 

합성곱 (合成-), 또는 콘벌루션 (convolution)은 하나의 함수와 또 다른 함수를 반전 이동한 값을 곱한 다음, 구간에 대해 적분하여 새로운 함수를 구하는 수학 연산자이다.

그리고 이를 수식으로 표현하면

연속확률변수인 경우의 합성곱
이산확률변수에 대한 합성곱

일단 몇 가지 포인트를 짚어보면,

1. 두 함수의 곱이긴 곱인데, 한 함수를 반전(Reversed) & 전이(Shift)한 후 곱한다!

2. 곱한 함수를 적분한다. 

 

이를 예시로 이해해봅시다.  

우리가 12월 31일 11시 59분이 되면, 제야의 종을 기다리면서 새해를 맞이합니다. 그리고 12시가 딱 되는 순간 제야의 종이 울리죠. 이 제야의 종소리를 그래프로 나타내보죠.

다음과 같겠죠. 처음에는 큰 종소리와 함께, 뎅~하는 소리가 지속적으로 울리겠죠. 이제 두 번 이 종을 쳐봅시다. 좀 더 약하게 쳐보면,

다음과 같겠죠? 그러면 우리가 소리를 들을 때는 어떻게 들릴까요? 두 종소리가 따로따로 들리는게 아니죠! 두 번째 울린 종소리가 첫 번째 울린 종소리에 더해져서 들리겠죠?

우리 귀에는 파란색 선과 같이 종소리가 들릴겁니다. 이게 컨볼루션입니다. 종을 쳤을 때의 세기(Impulse)와 종소리 함수의 컨볼루션으로 우리 귀에 들리는 겁니다. 두 함수를 곱하는데 과거 현재 미래의 값들을 기억해서 가중(weighting)하여 계산하는 겁니다. 

 

연속확률변수인 경우의 합성곱

다시 위 식을 끌고 와서 이해를 해봅시다. 여기서 g(t)는 입력신호(즉 종의 세기), f(t)는 시스템(즉 종소리)입니다. 그림으로 나타내면 이렇게 되겠죠. 우리는 이 함수를 왼쪽부터 적분해갈겁니다. (적분 상수는 t 시간이 아닌 r를 사용했습니다. 이건 시간에 대한 적분이 아닙니다. 다만 적분을 끝내면 시간에 대한 함수식이 나오는 것 뿐입니다.)그러기 위해서는 

1. g(r)를 그대로 넣으면 될까요? 안 됩니다. 왜냐하면 시간 상으로 볼 때, 세게 때린 것들이 먼저 들어가야되늬까  먼저 때린 것들이 먼저 들어가야 하므로 g(r)를 반전(reversed)시켜야 합니다. -> 그래서 g(r)가 아닌 g(t-r)가 들어갑니다. 

2. 두 번째 종소리도 넣어야 합니다. -> 모든 r에 대해서 계산해야합니다. 

3. 첫번째 종소리와 두번째 종소리를 합해야 우리 귀에 들리는 종소리를 구할 수 있습니다 -> 적분을 수행합니다. 

위 그래프를 이해해보면, 파란색이 시스템 f(t)이고, 빨간색이 입력 신호 g(t-r)입니다. 그리고  검은색 부분은 컨볼루션 값입니다. f(t)의 그래프를 보면 오른쪽으로 갈수록 점점 작아지는데, 과거의 입력값일 수록 가중치를 적게 둔다는 의미입니다. 

 

합성곱 연산의 특징은 교환법칙을 만족합니다. 사실 재미있는 포인트는 이 가환성(교환법칙)이 입력을 기준으로 g(r)을 뒤집었기 때문에 생긴 것입니다. 그런데 이 가환성은 증명을 작성할 때는 유리하지만, 신경망 구현에서는 그리 중요하지는 않습니다. 여러 신경망 라이브러리는 반전을 이용하는 대신, 상호상관(Cross-Correlation)이라는 함수를 구현합니다. 말은 어렵지만, 쉽게 말하면 '굳이 뒤집는 연산을 하지 않는다, 그래도 무방하다.' 라는 겁니다. 하지만 관례 상 사람들은 이를 합성곱 신경망이라고 합니다.