참고1
참고2
참고3
계기(Motivation)
합성곱(convolution)에 대해 작성하게 된 계기는 딥러닝 강의를 보다가 합성곱 챕터에서 '두 함수에서 한 함수를 뒤집어서 서로 곱한다고'라고만 되어있어서 이게 무슨말인가 싶어서 좀 더 찾아보고 정리하게 되었다.
1. 합성곱에 대해 쉽게 이해하기
어떤 위치에서 공을 떨어뜨리는 경우를 생각해 보자. 공을 떨어뜨렸을 때 a라는 위치로 공이 굴러가고 다시 a위치에서 공을 떨어뜨려 최종적으로 c라는 위치로 가는 경우를 생각해 보자.
그러면 c에 도달할 확률이 어떻게 될까?
단계별로 하나씩 쪼개서 생각해 보면,
1) 공을 떨굴 때, 시작 위치에서 떨어진 지점을 a라고 하자. 확률 분포를 f라고 본다면, a지점에 도달할 확률은 f(a)라고 볼 수 있을 것이다.
2) 처음 떨구고 난 뒤에 a지점에서 공을 다시 주워서 똑같이 공을 떨어뜨려서 떨어진 지점을 b라고 하자. b 지점에 떨어질 확률 분포를 g라고 하면, b지점에 떨어질 확률은 g(b)가 된다.
그림으로 표시하면 다음과 같다.
그림의 그래프를 설명하자면 f(a)의 경우 공을 떨어뜨렸을 때 떨어지는 방향 바로 아래에 도달할 확률이 가장 높고 굴러가면서 a지점으로 갈 수록 그 확률이 점점 떨어질 것이다. g(b)의 경우도 마찬가지. 만일 전체 거리 c가 고정되어 있다고 가정한다면 a + b = c이므로 a가 정해지면 b = c - a로 b의 거리도 정해진다. 따라서 a와 b에 도달할 확률이 정해지면 최종거리 c에 도달할 확률은 간단히 f(a)⋅f(b)로 정해진다.
그런데,
만일 c가 3이라고 했을 때 a와 b가 모두 0보다 같거나 큰 정수라고 한다면 만들 수 있는 조합은 (0, 3), (1, 2), (2, 1), (3, 0) 이렇게 4개가 있을 수가 있고 각각의 경우의 확율을 모두 더해야 최종 지점 3에 도달할 확률을 구할 수 있을 것이다.
이 중 (1, 2), (0, 3)의 확률의 경우를 그림으로 표시하면 다음과 같다.
따라서 이 모든 확률을 고려하여 거리 c에 도달할 확률을 다시 쓰면, f(0)⋅f(3)+f(1)⋅f(2)+f(2)⋅f(1)+f(3)⋅f(0) 이렇게 쓸 수 있고 이게 바로 합성곱(convolution)이라고 볼 수 있다.
수식으로 표시하면 다음과 같다.
(f∗g)(c)=Σa+b=cf(a)⋅g(b)
여기서 변수를 하나라도 줄이고자 한다면, b = c - a이므로 위 식은
(f∗g)(c)=Σaf(a)⋅g(c−a)
가 된다.
2. 합성곱(Convolution)을 신경망으로 표현하기
위에서 설명한 합성곱(Convolution)을 신경망(Neural network)로 표현해 보자.
처음에 공을 떨어뜨려 a위치에 도달할 확률을 f(a)라고 한다면 위치 a는 다양하게 있을 수가 있기에 f(a) 역시 다양하게 있을 수가 있다.
다음 이 중 특정한 위치 a에서 다시 공을 떨어뜨려 b위치에 도달할 확률 g(b)도 다양하게 있을 수가 있기에 특정한 위치 a에서 c 위치에 도달할 확률 f(a)⋅f(c−a) 또한 다양하게 있을 수 있다. 이를 신경망으로 표시하면 다음과 같다.
이제 특정 a가 아닌 모든 a에 대해서 일반화시켜서 합성곱을 신경망으로 표현하면 다음과 같다.
3. 좀 더 일반적으로 표시
지금까지 설명했던 합성곱을 시간의 함수로 접근해서 좀 더 일반적인 관점에서 정리해 보겠다.
거리는 속도와 시간으로 표현할 수 있다.(s=vt) 만일 속도가 일정하다고 한다면 거리는 시간의 함수로만 나타낼 수 있다. 앞에서 전체 거리 c를 고정시키면 c를 만족시키는 a와 b(c-a)는 다양하게 있을 수 있다. c를 t, a를 τ로 표시하면(t는 고정값, τ는 합성곱에서 변하는 값) 합성곱은
(f∗b)(t)=Στf(τ)⋅g(t−τ)
로 나타낼 수 있다.
이를 이산형 데이터(discrete data)뿐만 아니라 연속 데이터(continuous data)로 확장해서 정리하면 위의 식은,
(f∗b)(t)=∫0tf(τ)g(t−τ)dτ
필자의 기준으로 정리하자면, t는 큰 구간, τ는 큰 구간내 변하는 작은 구간으로 간주하면 좀 더 이해하기가 수월할 것이라고 생각된다.
4. 합성곱 계산
합성곱(Convolution)의 정의
(f∗g)(t)=f(t)∗g(t)=∫−∞+∞f(τ)⋅g(t−τ)dτ
만일 합성곱이 0~t사이에서만 값을 가진다면,(이외의 구간은 모두 0)
(f∗g)(t)=f(t)∗g(t)=∫0tf(τ)⋅g(t−τ)dτ
로도 나타낼 수 있다.
합성곱의 계산은 복잡하기에 예를 들어서 설명하기로 한다. 다음의 함수가 있다.
w(t)={10≤t≤b0x<0orx>b
h(t)={e−att≥00t<0
두 함수의 합성곱은,
(w∗h)(t)=∫−∞+∞w(τ)h(t−τ)dτ
정의한 공식대로 합성곱을 구하기 위해 먼저 h(t−τ)를 그림으로 표시하면,
(b)는 h(−τ)이고 (c), (d), (e)는 t의 구간에 따른 h(t−τ)를 보여준다.
합성곱은 그림 (c), (d), (e)에서와 같이 t<0,0≤t<b,t≥b 구간으로 나누어서 처리한다.
1) t < 0
t < 0 구간에서는 w(t)=0 이므로 합성곱은 항상 0이다. 따라서,
(w∗h)(t)=∫−∞+∞w(τ)h(t−τ)dτ=∫−∞tw(τ)h(t−τ)dτ=∫−∞t0⋅h(t−τ)dτ=0
2) 0≤t<b
(w∗h)(t)======∫−∞+∞w(τ)h(t−τ)dτ∫0tw(τ)h(t−τ)dτ∫0t1⋅h(t−τ)dτ∫0te−a(t−τ)dτa1[e−a(t−τ)]0ta1[1−e−at]
3) t≥b
(w∗h)(t)=========∫−∞+∞w(τ)h(t−τ)dτ∫0bw(τ)h(t−τ)dτ∫0b1⋅h(t−τ)dτ∫0be−a(t−τ)dτa1[e−a(t−τ)]0ba1[e−a(t−b)−e−at]a1[e−a(t−b)−e−a(t−b)e−ab]a1[e−a(t−b)(1−e−ab)]a1−e−abe−a(t−b)
1), 2), 3)을 정리하면,
(w∗h)(t)=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧0t<0a1[1−e−at]0≤t<ba1−e−abe−a(t−b)t≥b
합성곱을 그래프 상에서 표시하면,
5. 다양한 합성곱의 계산 예
다음은 wikipedia에서 발췌(拔萃)한 몇가지 합성곱이 계산될 때의 값의 변화를 그래프로 표시한 것이다.
6. 이미지(Image) 데이터의 합성곱(Convolution)
일반적으로 이미지 데이터는 2D 기반으로 표시가 되기 때문에 다음의 예와 같이 합성곱이 이루어진다.
그림에서 I는 원본 이미지 데이터이고 K는 커널(또는 필터), I∗K는 I와 K의 합성곱(convolution)이다.
I의 붉은색 사각형의 각 원소와 K의 각 원소를 element-wise로 곱하여 모두 더하면 4가 되는데 이를 녹색 사각형의 위치에 표시하였다.
이제 그림의 이미지 데이터의 합성곱을 앞에서 설명한 함수의 일반적인 합성곱 형식에 대입하여 생각을 해보면,
kernel이 0~8 X 0~8 범위에서 왼쪽위부터 오른쪽아래까지 한칸씩 순차적으로 탐색하면서 합성곱을 구하면 (0~2, 0~2)에서 1개, (0~2, 1~3)에서 1개,...,(4~6, 4~6)에서 1개, 합하면 모두 5X5개의 합성곱이 나올것이다.
즉
(f∗g)(t)=∑−∞+∞f(τ)⋅g(t−τ)dτ
에서 t는 이미지의 가로, 세로 방향의 크기이고 τ는 t 범위내에서 일정한 구간의 집합이라고 보면 되고 이 조건에서 합성곱을 모두 구하는 것이다.