신호처리에서 LTI 시스템과 같은 부분에 대해 공부하다 보면 Impulse Input(임펄스 입력)과 Impulse Response(임펄스 응답)에 대해 자주 접하게 된다. 더 나아가 이 개념과 함께 Convolution(컨볼루션)에 대해서도 함께 배우게 된다. 여기서 Convolution은 우리가 알고 있는 그 Convolution Neural Network(CNN)의 Convolution이다. 다만, CNN에서 사용하는 Convolution 연산은 수학적으로 엄밀한 의미의 Convolution이 아니라, 실제로는 Cross-Correlation이긴 하지만 어쨌든 단어 자체는 익숙할 것이다.
이 글에서는 임펄스 입력과 출력이 무엇인지, 시스템이 그것에 어떻게 반응하는지를 설명하고, 이와 연결된 컨볼루션 연산의 의미를 정리해보려 한다.
Impulse Input(임펄스 입력)
Impulse Input(임펄스 입력) 또는 단위 임펄스 함수(\( \delta(t) \), 디렉 델타 함수)는 모든 시간에서 0이고 단 한 순간만 1인 입력 신호이다. 이는 아주 짧은 순간(t → 0)에 시스템에 가해지는 그 전체 크기가 1로 정의되는 단위 입력을 의미한다. 망치로 어떤 물체를 한 번 내려칠 때 가해지는 충격량을 예로 들 수 있다. 모든 시스템이 이 자극에 어떻게 반응하는지를 보면, 그 시스템의 본질적인 특성을 알 수 있다. 그림으로 표현하면 다음과 같이 지속 시간이 0이고, 그 크기는 무한대인 화살표로 표현할 수 있다.
- 연속 시간의 경우: \( u(t) = \delta(t), \quad \int_{-\infty}^{\infty} \delta(t) \, dt = 1 \)
\begin{cases}
\infty, & t = 0 \\
0, & t \ne 0
\end{cases} - 이산 시간의 경우: \( \delta[n] \)
\begin{cases}
1, & n = 0 \\
0, & n \ne 0
\end{cases}
다시 Fig 1 예시로 돌아와 연속 시간의 \( \delta(t) \)에 대해 생각해보면, 폭(0)과 높이(무한대)의 곱이 1이 되어야 한다는 뜻이 된다. 이는 이론적인 함수이므로 직관으론 잘 와닿지 않지만 \( \delta(t) \)를 실수 구간에 대해 적분하면 1의 된다고 정의하여 사용하게 된다고 인지하고 있으면 된다.
Impulse Response(임펄스 응답)
Impulse Response(임펄스 응답)은 System(시스템)에 단위 임펄스 입력(\( \delta(t) \), 디렉 델타 함수)을 넣었을 때의 출력을 의미하며 해당 시스템이 어떤 입력에 대해 어떻게 반응할지를 전부 포함하고 있는 정보이다. 특히, LTI (선형 시불변) 시스템에서는 임펄스 응답이 시스템의 모든 특성을 완전히 대변한다.
- 연속 시간 시스템의 임펄스 응답: \( h(t) = \mathcal{H} \{ \delta(t) \} \)
- 이산 시간 시스템의 임펄스 응답: \( h[n] = \mathcal{H} \{ \delta[n] \} \)
LTI(Linear Time-Invariant) System과 같은 선형시불변 성질을 가진 시스템에서 이산 시간에서의 단위 임펄스 입력인 (\( \delta[n] \))를 입력하면 시스템은 시간에 따라 변하지 않고 항상 동일한 형태의 응답(response)인 (\( h[n] \))을 반환한다. 만약 (\( \delta[n-3] \))이 입력되면 (\( h[n-3] \)이 반환될 것이다. 즉, 시간축에서 임펄스 입력이 언제 들어오든 응답의 모양은 동일하고, 단지 시간적으로 이동된 형태로 나타난다.
예를 들어 망치로 특정 물체를 일정한 힘으로 내려쳤을 때 처음에는 강한 진동이 발생하지만 시간이 지날수록 진동은 줄어들 것이다. 이러한 처음 내려친 순간부터 시간에 따라 진동이 시간에 따라 줄어드는 현상(또는 감쇠)을 임펄스 응답으로 표현할 수 있다. 물론 동일한 망치, 내려치는 힘, 타격이 가해지는 물체가 모두 동일한 상태라는 가정 아래이다.
위 예시는 왜 임펄스 응답을 단순히 수학적으로 자주 사용하는 \( y \)로 표현하지 않고 굳이 Impulse Response라 칭하는지에 대한 설명이기도 하다. 입력 신호인 \( x(t) \) 또는 \( x[t] \)는 이상적인 임펄스(Ideal Impulse)로 주어져야 하기 때문이다. 위 예시에선 동일한 망치와 내려치는 힘이 이상적인 임펄스에 해당하게 된다. 이 이상적인 임펄스 입력을 이용해 모든 입력을 임펄스들의 합으로 표현할 수 있다.
여기서 실제 출력인 \( y \)는 다른 노이즈에 대한 영향을 받을 수도 있다는 가정으로 현실적인 다양한 입력 신호와 외부 요인(노이즈 등)에 영향을 받아 나타나는 결과를 나타낸다. 사실 이상적인 임펄스 입력은 실제로 발생하기는 어렵지만, 시불변성은 시스템을 분석하고 예측하기 위한 핵심 전제이다. 시불변성은 복잡한 입력에 대해 시스템의 출력을 효율적으로 계산하고 모델링을 가능하게 해주며, 이 덕분에 시스템 모델링, 제어, 신호처리 설계가 단순해진다. 실제로 필터 설계, 오디오 이펙트, 음성 인식 모델 등은 대부분 LTI 시스템 가정 하에 동작한다.
따라서 정리하자면, 이상적인 단위 임펄스 입력이 들어간 LTI 시스템의 출력은 어떤 입력 신호에 대해서도, 그 입력을 임펄스로 분해하고 각 임펄스에 대한 응답을 더하는 방식으로 계산할 수 있다. 이 연산이 바로 Convolution(컨볼루션)이다.
Convolution(컨볼루션)
입력 신호인 \( x(t) \)는 여러 시간에 분포된 임펄스들의 조합으로 생각할 수 있다. 각 임펄스에 대한 응답이 \( h(t-\tau) \)로 일정한 모양으로 이동된다면, 전체 출력은 이들의 합으로 쉽게 예측되는데 바로 이 과정이 Convolution(컨볼루션)이다.
시간의 흐름에 따라 지속적으로 시스템에 임펄스 입력이 들어오는 상황을 Impulse Train이라 하며, 다음 Fig 4의 (A)와 같이 \( t = 0,1,2,3 \)의 일정 시간마다 임펄스 입력이 있다고 가정하자. 각 입력에 대한 시스템 응답은 (B)와 같이 나타나게 되며 LTI 시스템을 이용한다면 이 각각의 영향들은 모두 중첩(Superposition)되어 (C)와 유사한 형태로 전체 시스템 응답을 도출하게 된다. 이 전체 시스템의 응답을 계산하는 방법이 Convolution이다.
- 연속 시스템에서 컨볼루션
$$ y(t) = x(t) * h(t) = \int_{-\infty}^{\infty} x(\tau) \cdot h(t - \tau) \, d\tau $$ - 이산 시스템에서 컨볼루션
$$ y[n] = x[n] * h[n] = \sum_{k=-\infty}^{\infty} x[k] \cdot h[n - k] $$
연속 시스템에서 컨볼루션이라 생각하고 계산해보면 다음과 같다.
[부록] CNN에서의 Convolution은 왜 Convolution이 아닌가?
지금까지 살펴본 Convolution은 우리가 아닌 CNN의 Convoultion과는 조금 다르다. 이제 조금 더 심화해서 Convolution을 살펴보자. 우선 이산 시스템에서의 Convolution의 수식을 다시 살펴보자.
$$ y[n] = x[n] * h[n] = \sum_{k=-\infty}^{\infty} x[k] \cdot h[n - k] $$
여기서 \( h[n-k] \)는 임펄스 응답 \( h[k] \)를 시간 반전(뒤집기) 후, \( n \)만큼 이동(Shift)한 형태이다. 다시 말해 다음과 같이 정의할 수 있다.
$$ h[n-k] = h[-(k-n)] $$
- 시간축 반전: \( h[k] \) → \( h[-k] \)
예: [1, 2, 3](\( k = 0, 1, 2 \)) [3, 2, 1] → [3, 2, 1](\( k = -2, -1, 0 \)) - 시간 이동: \( h[-k] \) → \( h[n-k] \)
예: 반전된 신호를 시간축에서 n만큼 이동
Convolution을 뒤집는다는 말은 컨볼루션 연산에서 임펄스 응답 함수(또는 입력 신호) 중 하나를 시간 반전(reverse)시키는 과정을 의미하고 이동은 말 그래도 시간이 지나는 것을 의미한다. Reverse + Shift는 컨볼루션 연산의 정의상 필수적인 절차이다. Convolution의 핵심은 컨볼루션은 시스템에 입력 신호가 “쌓여서 누적되는 방식”을 보는 것이기 때문이다.
반면 CNN에서의 연산은 Convolution처럼 뒤집지 않고 그대로 커널을 적용한다. 이는 Cross-Correlation에 해당한다.
$$ (f \star g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n + m] $$
그렇다면 왜 CNN에서도 Convolution 연산이라고 표기하고 Cross-Correlation을 사용하였을까?
우선 실제 이미지 처리나 딥러닝에서는 커널을 뒤집는 것이 직관적이지 않고 불편하며, 학습된 가중치를 뒤집는 것은 의미가 없다. 또한 구현과 연산 효율성을 위해 Cross-Correlation을 사용하지만, 관례적으로 Convolution Layer라고 부른다고 한다.
Convolution과 Corss-Correlation을 시각화하면 다음 영상과 같다.
추가적으로 2D Cross-Correlation(CNN 이미지 처리)는 다음을 이용하여 계산한다.
$$ (f \star g)[n] = \sum_{m=-\infty}^{\infty} f[m] \cdot g[n + m] $$
관심 있다면 CNN을 기반으로 한 LeNet-5 아키텍처를 사용하여 CNN을 실제 문서 인식 시스템에 적용한 얀 르쿤의 Gradient-based learning applied to document recognition(1998) 논문을 읽어봐도 좋을 것 같다.
아래는 1989년에 개발된 CNN 기반 아키텍처인 LeNet 1의 시연 영상이다.
관련 포스팅
2025.04.11 - [Data Science/SR & VC] - LTI(Linear Time-Invariant) Systems
참고 자료
https://dsaint31.tistory.com/611
https://available-space.tistory.com/119
https://m.blog.naver.com/waterforall/223044784511
https://it.wikipedia.org/wiki/Convoluzione
https://www.youtube.com/watch?v=Ma0YONjMZLI
https://www.youtube.com/watch?v=FwFduRA_L6Q