콘볼루션의 정의
두 개 신호를 곱하는 것을 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/
'머신러닝과 딥러닝' 카테고리의 다른 글
콘볼루션 뉴럴 네트워크(Convolution Neural Networks) (0) | 2020.01.07 |
---|---|
이미지에서의 콘볼루션 (0) | 2020.01.06 |
퍼셉트론(Perceptron)은 왜 동작을 하는가? (0) | 2020.01.06 |
퍼셉트론(Perceptron) (3) (0) | 2020.01.06 |
퍼셉트론(Perceptron) (2) (0) | 2020.01.04 |