본문 바로가기

AI 수학61

2D 컨볼루션 계산하기 1D 컨볼루션과 똑같은 방법으로 '뒤집기와 이동' 방법을 사용하여 2D 컨볼루션을 계산해보자. 2020/07/25 - [CNN의 수학] - 컨볼루션 쉽게 계산하기 공식을 살펴보면, \[ y[m,n] = \sum_{k=-\infty}^\infty \sum_{l=-\infty}^\infty x[k,l] h[m-k, n-l] \] 우선 \( x[m,n] \)과 \( h[m,n] \)을 \( x[k,l] \)과 \( h[k,l] \)로 바꿔야 한다는 것을 알 수 있다. 그리고 \( h[k,l] \)을 수평축과 수직축을 기준으로 두 번 뒤집어서 \( h[-k,-l] \)로 만든 후, \( m,n \)만큼 수평과 수직으로 이동시켜서 \( h[m-k,n-l] \)을 만들고, \( k,l \)에 대해서 \( x[k,l.. 2020. 7. 29.
2D 컨볼루션 독립변수가 1개인 함수로 표현되는 신호 \( x[n] \)을 1차원 신호(one-dimensional signal)라고 한다. 여기서 \( n \)은 인덱스로서 정수 값을 갖는다. 이 인덱스는 보통 시간스텝(time step)을 나타낸다. 1차원 신호와 관련된 컨볼루션을 1D 컨볼루션이라고 하거나 그냥 컨볼루션이라고 한다. 독립변수가 2개인 함수로 표현되는 신호 \( x[m,n] \)을 2차원 신호라고 한다. 2차원 신호에서 인덱스는 주로 공간상의 위치를 나타내는 배열 또는 순서를 뜻한다. 2차원 신호는 행렬로 나타내며 \( m \)은 행, \( n \)은 열을 나타낸다. 대표적인 2차원 신호로는 이미지(image) 신호가 있다. 2차원 신호와 관련된 컨볼루션을 2D 컨볼루션이라고 한다. 지금부터 LTI.. 2020. 7. 28.
이동평균(moving average) 필터 설계해 보기 필터를 설계한다는 것은 곧 LTI 시스템의 임펄스 반응 \( h[n] \)을 결정하는 것과 같다. 주식 차트를 보면 5일 이동평균선, 10일 이동평균선이라는 것이 있다. 5일 이동 평균은 현재부터 과거 5일전까지의 주가 평균을 계산한 것이다. 10일 이동 평균선도 마찬가지로 현재부터 과거 10일전까지의 주가를 평균 낸 것이다. 그러면 주식 차트의 이동평균선과 비슷하게, 입력 신호에 대한 5 포인트(point) 이동평균 필터와 10 포인트 이동평균 필터를 설계해 보자. 입력 신호를 \( x[n] \)으로 하고, 이동 평균 출력 신호를 \( y[n] \)으로 하면 5 포인트 이동평균 필터의 임펄스 반응은 다음과 같이 설계할 수 있다. \[ \begin{align} h[n] &= \frac{1}{5} ( \d.. 2020. 7. 26.
컨볼루션 쉽게 계산하기 일반적으로 많이 쓰이는 ‘뒤집기와 이동’ 방법을 사용하여 컨볼루션을 계산해 보자. 공식을 잘 살펴보면, \[ y[n] = \sum_{k=-\infty}^\infty h[n-k] x[k] \] 우선 \( x[n] \)과 \( h[n] \)을 \(x[k] \)와 \( h[k] \)로 바꿔야 한다는 것을 알 수 있다. 그리고, \( h[k] \)를 뒤집어서 \( h[-k] \)로 만든 후, \( n \)만큼 이동시켜서 \( h[n-k] \)를 만든 후, \( k \)에 대해서 \( x[k] \)와 \( h[n-k] \)를 곱한 다음, \( k \)에 대해서 \( h[n-k]x[k] \)를 모두 더하면 \( y[n] \)을 계산할 수 있다는 것을 알 수 있다. 그리고, 모든 \( n \)에 대해서 위 과정을 반.. 2020. 7. 25.
특이값 분해(SVD)의 응용: 이미지 압축 특이값 분해는 다음과 같이 어떤 \( m \times n \) 실수 행렬(real matrix) \( A \)를 3개의 행렬의 곱으로 분해한 것이다. \[ A = U \Sigma V^T \tag{1} \] 이 식을 풀어 쓰면 다음과 같다. \[ A = \sigma _1 \mathbf{u}_1 \mathbf{v}_1^T + \sigma _2 \mathbf{u}_2 \mathbf{v}_2^T + \cdots + \sigma _r \mathbf{u}_r \mathbf{v}_r^T \tag{2} \] 여기서 \( \sigma _i \)는 특이값으로서 그 숫자는 행렬 \( A \)의 랭크(rank)와 같다. 특이값은 큰 값에서 작은 값의 순서로 정렬시킨 것이다. \[ \sigma _1 \ge \sigma _2 \.. 2020. 7. 25.
컨볼루션 공식대로 계산하기 신호처리 분야에서는 LTI 시스템을 필터(filter)라고 한다. LTI 시스템의 임펄스 반응은 시스템 그 자체라고 했으므로 필터를 설계한다는 것은 곧 LTI 시스템의 임펄스 반응 \( h[n] \)을 결정하는 것과 같다. LTI 시스템의 출력 \( y[n] \)은 시스템의 임펄스 반응 \( h[n] \)과 입력 \( x[n] \)의 컨볼루션으로 주어지므로, \[ \begin{align} y[n] &= h[n]*x[n] \\ \\ &=\sum_{k=-\infty}^\infty h[n-k] x[k] \end{align} \] 필터 또는 임펄스 반응은 어떤 입력에 대해서 원하는 출력이 나오도록 설계되어야 한다. 임펄스 반응 \( h[n] \)의 길이가 무한대이면 무한임펄스반응 (IIR, infinite im.. 2020. 7. 25.
LTI 시스템과 컨볼루션 이제 선형 시불변(LTI) 시스템을 알았으니 LTI 시스템에 임의의 입력 \( x[n] \) 을 가했을 때 출력 \( y[n] \) 이 어떻게 계산되는지 알아보자. 그 전에 먼저 특별한 입력 신호인 임펄스(impulse) 신호에 대해 알아보자. 임펄스 신호는 \( n=0 \) 일 때만 크기가 1 이고, \( n \ne 0 \) 에서는 크기가 모두 0 인 신호다. 기호로 \( \delta [n] \) 라 쓴다. 크기가 1 이므로 단위 임펄스라고 하기도 한다. 임펄스를 수식으로 표현하면 다음과 같다. \[ \delta [n]= \begin{cases} 1, & \mbox{if }n=0 \\ 0, & \mbox{if }n \ne 0 \end{cases} \] 그림으로 표현하면 다음과 같다. 임펄스 신호를 오른.. 2020. 7. 23.
특이값 분해(SVD)의 증명 어떤 \( m \times n \) 실수 행렬(real matrix) \( A \)와 그 전치 행렬 \( A^T \)의 행렬곱 \( AA^T \)와 \( A^T A \)는 대칭행렬이며 준정정 행렬(positive semi-definite matrix)이다. 먼저 대칭행렬인지 확인해 보자. 행렬곱을 전치한 다음에 원래 행렬과 같은 지 확인하면 된다. \[ (AA^T )^T=AA^T, \ \ \ (A^T A)^T=A^T A \] 그렇다면 \( AA^T \)이 준정정 행렬인지 확인해 보자. 어떤 벡터 \( \mathbf{x} \)에 대해서 다음 부등식을 만족하는지 확인하면 된다. \[ \begin{align} \mathbf{x} ^T (AA^T ) \mathbf{x} &= (A^T \mathbf{x} )^T .. 2020. 7. 23.
특이값 분해(singular value decomposition) 행렬을 다른 여러 개의 행렬의 곱으로 쪼개는 것을 분해(decomposition)라고 한다. 행렬의 분해로는 고유값 분해(eigen decomposition), 촐레스키 분해(Cholesky decomposition), LU 분해(lower-upper decomposition), 특이값 분해(singular value decomposition) 등 여러가지가 있지만 그 중에서도 가장 중요한 것이 SVD라고 불리는 특이값 분해가 아닐까 싶다. 특이값 분해는 이미지 압축, 모델의 차원 축소, 근사해 계산, 웹서치, 제어분야에서 액추에이터와 센서의 최적 위치를 선정하는 문제, 제어력 할당 문제 등 매우 폭넓게 응용되고 있기 때문이다. 고유값이 행과 열의 갯수가 같은 정방 행렬(square matrix)에서만 .. 2020. 7. 23.
정정(positive-definite) 행렬의 고유값 실수 대칭행렬(real symmetric matrix)의 고유값(eigenvalue)과 고유벡터(eigenvector)는 모두 실수값이다. 또한 서로 다른 고유값에 해당하는 고유벡터는 서로 직각이다. 증명하기는 다소 어렵지만 실수 대칭행렬의 경우에는 서로 다른 고유값 뿐만 아니라 같은 고유값에 대응하는 고유벡터가 여러 개일 경우에도 그 고유벡터들은 서로 직각이다. 정정 행렬도 실수 대칭행렬이므로 고유값과 고유벡터는 실수값을 가지며, 고유벡터들은 서로 직각이다. 이에 덧붙여서 정정 행렬의 고유값은 모두 0보다 크다. 증명해 보자. 정정 행렬 \( A \)의 고유값을 \( \lambda \), 그에 대응하는 고유벡터를 \( \mathbf{v} \)라고 하면, \[ A \mathbf{v} = \lambda \.. 2020. 7. 21.