콘볼루션의 정의와 예시

머신러닝과 딥러닝 · 2020. 1. 6. 18:45

콘볼루션의 정의

 

두 개 신호를 곱하는 것을 integral(적분)하거나 summation(합계)하는 것이다. 

신호들이 continuos일 경우는 적분, discrete일 경우는 총합하는 것.

 

그 중에 하나를 reversed하고 shifted를 시키면서...

 

 

cross correlation and convolution

 

하나의 신호를 뒤집으면 convolution

하나의 신호를 뒤집지 않으면 cross correlation

 

콘볼루션은,

 

두 개의 다른 신호가 들어가서 또 다른 신호가 나오는 operation이다.

그 중에 하나의 신호를 reversed 하거나 shifted 하면서 계산하는 것이다.

 

 

1D Convolution 예시

 

 

De-nosing a Piecewise Smooth Signal

신호에서 노이즈를 제거하면 스무딩의 효과가 있다.

 

예를 들어 신호가 $ x[n] $

 

현재 시간이 n에 있다고 했을 때

전체가 m개이다.

$x[n-m+1], ... , x[n-2], x[n-1], x[n]$

 

전체를 summation하고 $ \frac {1}{m} $로 나눈 n시간의 평균은 다음과 같다.

 

$ \overline {x}[n]= \frac {x[n] + x[n-1] + ... + x[n-m+1]} {m} $

 

$ \overline {x}[n+1]= \frac {x[n+1] + x[n] + ... + x[n-m+2]} {m} $

 

Moving Average(MA) filter

M개의 데이터를 윈도우 옆으로 가면서 평균을 취한다고 해서 이동평균이다.

모두 가중치가 $ frac {1}{m} $으로 같기 때문에 unweighted mean이다.

 

$ \overline {x}[n] $ 식을 어떻게 해석하는가?

$ ( x[n], x[n-1], ... x[n-m+1] ) * ( \frac {1}{m}, \frac {1}{m}, ... , \frac {1}{m} )$

 

$x$에다 전체가 $ \frac {1}{m} $인 $m-1$개인 신호와 콘볼루션을 한 것과 같다.

이것이 Moving average filter이다.

 

평균을 하는 거니까 시간 도메인에서 low-pass filter처럼 동작하는 것이다.

가장 일반적인 방법이다.

 

moving average가 콘볼루션의 하나의 예시이다.

 

좌상단과 같은 신호가 있었다고 할 때, 노이즈를 주면....(우상단) 들쭉날쭉하다.

좌하단의 $ (\frac {1}{5}, \frac {1}{5}, \frac {1}{5}, \frac {1}{5}, \frac {1}{5} )$ 신호와 

콘볼루션을 하면...5개의 윈도우 사이즈의 평균을 취한값이 우하단이다.

 

스무딩이 잘 된 것을 볼 수 있다.

단, 가운데 부분에도 스무딩이 되서 노이즈가 제거가 되지만

원래 신호의 날카로운 부분까지도 스무딩이 된다.

노이즈가 많으면 -> 노이즈를 제거하는 low-pass filter 사용

또는 smoothing, moving average를 생각할 수 있다.

 

Edge Detection

신호에서 Edge를 찾고 싶다면(왼쪽그림 빨간 선 부분)

노이즈가 항상 있을 텐데....(오른쪽 그림)

 

 

위와 같은 $ (- \frac {1}{2} , \frac {1}{2} ) $ 인 신호(mask, kernel)가 있을 때,

콘볼루션을 해보자.

 

내가 가지고 있는 신호가 $ (1,1)$ 라면, 0이 나온다.

$ (2,2) $ 도 0 이 나온다.

$ (3,3) $ 도 0 이 나온다.

 

이웃하는 신호 간에 크기가 차이가 나지 않으면 0에 가까운 숫자가 나올 것이다.

$ (1,-1) $ 이면 -1이 나온다.

$ (-10, 10) $이면 10이 나온다.

 

급격하게 값이 변하면, 콘볼루션을 한 절대값이 커질 것이다.

(음수-> 양수), (양수 -> 음수)에 따라 부호는 다를 수 있다.

 

이러한 필터로 콘볼루션을 하면 결과는 다음과 같다.

다른 커널을 쓰면 원하는 정보를 다르게 취득할 수 있다.

 

커널을 다르게 디자인하면!

모든 정보가 다 담겨있지만 우리가 원하는 것들만 추출하기 위해서

내가 원하는 목적에 맞는 커널을 사용자가 design한다.

 

 

딥러닝에서는 이 프로세스를 반대로 한다.

원하는 정보를 얻기 위한 커널이 무엇인지를 스스로 디자인해주는 것임.

 

1d signal이었는데 cnn은 2d 이미지에 해당하는 2d kernel을 

사용자가 정의하는 것이 아니고

해당하는 2d kernel을 찾아주는 것이다.

 

 

https://datascienceschool.net/view-notebook/e2d30432911f4498b873232dd7d99cce/

 

Data Science School

Data Science School is an open space!

datascienceschool.net