60강에서 두 번, 그전에도 몇 번 같은 모양의 식이 나왔습니다.
59강 심화 4에서 푸리에 급수의 부분합이 이 꼴이었고, 60강 심화 5에서 미분방정식의 해가 이 꼴로 나왔습니다. 55강 심화 4의 코시 곱도 이산판으로 같은 구조였습니다.
우연이 아닙니다. 이 연산을 합성곱이라 하며, 겉보기와 달리 대단히 자연스러운 것입니다. 한 함수를 뒤집어 이동시키며 다른 함수와 겹치는 정도를 재는 일인데, 신호를 필터에 통과시키는 것, 두 확률변수를 더하는 것, 이미지에 흐림 효과를 주는 것이 모두 이 하나의 연산입니다.
그런데 정의만 보면 계산이 만만치 않습니다. 마다 적분을 하나씩 해야 하므로 비용이 큽니다. 여기서 이 강의의 중심 결과가 나옵니다.
푸리에 변환하면 합성곱이 그냥 곱셈이 됩니다.
이 한 줄이 신호처리 전체를 떠받칩니다. 어려운 연산이 쉬운 연산으로 바뀌고, 60강 심화 6의 FFT와 합치면 계산량이 에서 으로 줄어듭니다.
이 강의로 S3 미적분학 I이 끝납니다.
문제. 신호 를 매끄럽게 만들려고 각 점에서 주변 값의 가중평균을 취합니다.
(1) 가중치를 라 할 때 에서의 가중평균을 적분으로 쓰세요.
(2) 그 식이 어떤 연산인지 이름을 붙이고 정의로 삼으세요.
(3) 기하학적으로 무슨 일이 일어나는지 설명하세요.
생각의 실마리. 근처의 값에 가중치를 주어 더하는 것이므로, 가중치가 로부터의 거리에 따라 정해집니다. 에서의 값 에 붙는 가중치는 입니다. (3)에서는 를 의 함수로 볼 때 어떤 모양인지 봅니다.
풀이. (1) 에서의 값 에 가중치 를 곱해 모두 더합니다.
(2) 이 연산을 합성곱이라 하고 로 씁니다.
(3) 를 의 함수로 보면 두 가지 조작이 들어 있습니다.
| 조작 | 식에서 | 뜻 |
|---|---|---|
| 뒤집기 | 를 좌우로 뒤집습니다 | |
| 이동 | 뒤집은 것을 만큼 옮깁니다 |
뒤집어서 옮긴 를 에 겹쳐 놓고 곱해서 적분합니다. 겹치는 정도를 재는 셈이며, 를 움직이면 가 미끄러지며 훑고 지나갑니다.
이 문제에서 배우는 것: 합성곱의 정의와 의미.
합성곱. 두 함수의 합성곱을
로 정의합니다.
왜 뒤집는지가 처음에는 이상해 보입니다. 뒤집지 않은 도 의미 있는 연산이며 상관이라 부릅니다. 두 연산의 차이는 심화 1에서 다룹니다.
뒤집는 쪽을 택하는 이유는 그것이 좋은 대수적 성질을 가지기 때문입니다. 문제 4에서 보듯 합성곱은 교환법칙과 결합법칙을 만족하는데 상관은 그렇지 않습니다. 그리고 합성곱 정리가 성립하는 것도 이쪽입니다.
같은 구조가 이 커리큘럼에서 이미 여러 번 나왔습니다.
| 강의 | 나타난 형태 |
|---|---|
| 55강 심화 4 | 코시 곱 c_{k}=\sum_{j}a_{j}b_ |
| 59강 심화 4 | 부분합과 디리클레 핵 |
| 60강 심화 5 | 미분방정식의 해 |
첫째 줄이 이산판입니다. 첨자의 합이 일정한 항들을 모으는 것이 연속에서는 가 되는 구조와 같습니다. 심화 4에서 그 대응을 정확히 밝힙니다.
물리적 해석도 여럿입니다.
| 분야 | |||
|---|---|---|---|
| 신호처리 | 입력 신호 | 필터 | 출력 신호 |
| 확률 | 의 밀도 | 의 밀도 | 의 밀도 |
| 영상 | 원본 이미지 | 흐림 커널 | 흐려진 이미지 |
| 물리 | 입력 | 계의 응답 | 출력 |
바로 확인 1.
확인 1-1. 합성곱의 정의식을 쓰세요.
답. 입니다.
확인 1-2. 를 의 함수로 볼 때 어떤 두 조작이 들어 있습니까?
답. 좌우 뒤집기와 만큼의 이동입니다.
확인 1-3. 신호처리에서 가 무엇을 뜻하는지 쓰세요.
답. 입력 신호 를 필터 에 통과시킨 출력입니다.
문제. 와 의 변환을 , 라 합니다.
(1) 를 정의에 따라 계산하세요.
(2) 결과를 정리로 서술하세요.
(3) 역방향, 즉 는 어떻게 됩니까?
생각의 실마리. (1)에서 이중적분이 나오는데 적분 순서를 바꾸고 치환하는 것이 요령입니다. 를 로 쪼개면 두 인수가 각각 와 쪽으로 붙습니다. (3)은 대칭성에서 짐작할 수 있습니다.
풀이. (1) 정의에 넣습니다.
적분 순서를 바꿉니다(절대수렴하면 정당합니다).
안쪽 적분에서 로 치환합니다. 이고 이므로
이것이 60강 문제 3의 이동 성질입니다. 다시 넣으면
(2) 정리로 씁니다.
(3) 대칭적인 결과가 나옵니다. 곱의 변환이 변환의 합성곱인데 상수 인수가 붙습니다.
이 문제에서 배우는 것: 합성곱 정리.
합성곱 정리.
두 세계에서 곱셈과 합성곱이 서로 뒤바뀝니다.
| 시간 영역 | 진동수 영역 |
|---|---|
| 합성곱 | 곱셈 |
| 곱셈 | 합성곱 |
이 정리의 실용적 가치가 큽니다. 합성곱을 정의대로 계산하려면 마다 적분을 해야 하는데, 변환하고 곱하고 역변환하면 훨씬 빠릅니다.
| 단계 | 연산 |
|---|---|
| 1 | 와 를 각각 변환합니다 |
| 2 | 진동수마다 곱합니다 |
| 3 | 역변환합니다 |
이산에서 계산량을 세어 보면 차이가 분명합니다. 표본이 개일 때 정의대로는 이지만, FFT를 쓰면 변환 두 번과 역변환 한 번이 각각 이고 곱셈이 이므로 **전체가 **입니다. 심화 6에서 다룹니다.
증명에서 쓴 도구도 확인해 두십시오. 60강의 이동 성질 하나가 증명의 전부입니다. 를 만큼 옮기면 변환에 가 곱해지는데, 그 인수가 마침 의 변환에 필요한 것과 정확히 같습니다.
바로 확인 2.
확인 2-1. 합성곱 정리를 쓰세요.
답. 입니다.
확인 2-2. 증명에서 쓰는 60강의 성질은 무엇입니까?
답. 이동 성질 입니다.
확인 2-3. 합성곱을 빠르게 계산하는 세 단계를 쓰세요.
답. 각각 변환하고, 진동수마다 곱하고, 역변환합니다.
문제. 다음 합성곱을 구하세요.
(1) 반폭이 인 상자함수 두 개의 합성곱
(2) 두 개의 합성곱
(3) (2)를 합성곱 정리로 다시 확인하세요.
생각의 실마리. (1)은 정의대로 하는 편이 빠릅니다. 두 상자가 겹치는 길이를 의 함수로 구하면 됩니다. (2)는 정의대로 하면 지수의 이차식을 완전제곱해야 하는데, (3)의 방법이 훨씬 짧습니다.
풀이. (1) 피적분함수는 이고 일 때만 이고 나머지는 입니다. 두 조건을 합치면
입니다. 두 구간이 겹치는 길이가 답입니다.
| 의 범위 | 겹치는 길이 |
|---|---|
상자 두 개를 합성곱하면 삼각형이 됩니다. 폭이 에서 로 늘고 모서리가 부드러워졌습니다.
(2) 결과만 먼저 적으면
입니다. 가우스 두 개의 합성곱이 다시 가우스이며 폭이 배로 늘었습니다.
(3) 합성곱 정리로 확인합니다. 60강에서 였으므로
입니다. 역변환합니다. 60강의 스케일 성질을 쓰면 은 꼴에 대응하는데, 정리하면
입니다. 적분 하나로 끝났습니다. 정의대로 했다면 완전제곱을 만들어야 했습니다.
이 문제에서 배우는 것: 합성곱은 퍼뜨립니다.
두 결과의 공통점을 봅니다.
| 입력 | 출력 | 폭 | 매끄러움 |
|---|---|---|---|
| 상자 + 상자 | 삼각형 | 도약 꺾임 | |
| 가우스 + 가우스 | 가우스 | 그대로 |
합성곱은 폭을 넓히고 모양을 매끄럽게 만듭니다. 가중평균을 취하는 연산이므로 당연합니다.
폭이 어떻게 더해지는지가 특히 중요합니다. 가우스에서 일 때 결과가 인데, 이는
입니다. 분산이 더해집니다. 129강에서 독립인 두 확률변수의 합의 분산이 각 분산의 합이라고 배우는데, 그 사실이 여기서 합성곱의 성질로 나타납니다.
가우스가 합성곱에 대해 닫혀 있다는 점도 기억해 둘 값이 있습니다. 가우스끼리 더하면 다시 가우스입니다. 60강에서 가우스가 푸리에 변환의 고유함수였던 것과 이어지며, 143강의 중심극한정리에서 가우스가 왜 극한으로 나타나는지의 실마리가 됩니다.
바로 확인 3.
확인 3-1. 반폭이 인 상자 두 개의 합성곱을 에서 구하세요.
답. 입니다.
확인 3-2. 표준편차 과 인 두 가우스의 합성곱의 폭을 쓰세요.
답. 입니다. 분산이 더해집니다.
확인 3-3. 합성곱이 함수의 모양에 미치는 영향을 한 문장으로 쓰세요.
답. 폭을 넓히고 모양을 매끄럽게 만듭니다.
문제. 다음이 성립하는지 판정하세요.
(1)
(2)
(3) 항등원이 있습니까?
(4)
생각의 실마리. (1)과 (2)는 직접 확인해도 되지만 합성곱 정리를 쓰면 한 줄입니다. 변환하면 곱셈이 되고 곱셈은 교환·결합법칙을 만족하기 때문입니다. (3)에서는 변환이 항상 인 대상을 찾습니다. (4)는 60강의 미분 성질을 씁니다.
풀이. (1) 성립합니다. 변환하면 이고 인데 복소수의 곱은 교환법칙을 만족합니다. 변환이 단사이므로 원래 함수도 같습니다.
정의로도 확인됩니다. 로 치환하면
입니다.
(2) 성립합니다. 변환하면 이기 때문입니다.
(3) 변환이 항등적으로 인 대상이 항등원이어야 합니다. 60강 심화 2의 델타가 그렇습니다.
이므로 이고 따라서 입니다. 정의로도 확인됩니다.
델타가 합성곱의 항등원입니다. 다만 델타는 함수가 아니라 분포이므로 엄밀히는 함수들의 모임에 항등원이 없고 확장해야 있습니다.
(4) 성립합니다. 변환하면 왼쪽이 이고 오른쪽이 인데 같습니다.
미분을 어느 쪽에 붙여도 됩니다.
이 문제에서 배우는 것: 합성곱의 대수 구조.
정리합니다.
| 성질 | 성립 여부 | 근거 |
|---|---|---|
| 교환법칙 | 성립합니다 | |
| 결합법칙 | 성립합니다 | |
| 분배법칙 | 성립합니다 | 변환의 선형성 |
| 항등원 | 가 그 역할입니다 | |
| 미분 | 어느 쪽에 붙여도 같습니다 | 가 자유롭게 옮겨집니다 |
| 역원 | 일반적으로 없습니다 | 가 이 되는 곳이 있습니다 |
합성곱이 곱셈처럼 행동합니다. 실제로 변환을 통해 보면 진짜 곱셈이므로 당연합니다.
마지막 줄이 실무적으로 중요합니다. 흐려진 이미지에서 원본을 복원하려면 합성곱을 되돌려야 하는데, 필터의 변환이 어떤 진동수에서 이면 그 성분의 정보가 완전히 사라져 복원할 수 없습니다. 실제로는 잡음까지 겹쳐 이 역문제가 매우 불안정하며, 여러 정칙화 기법이 그 때문에 필요합니다.
미분 성질도 유용합니다. 매끄러운 와 합성곱하면 거친 의 도함수를 안정적으로 계산할 수 있습니다. 이므로 를 미분하는 대신 를 미분하면 되기 때문이며, 수치미분의 표준 기법입니다.
바로 확인 4.
확인 4-1. 의 근거를 합성곱 정리로 쓰세요.
답. 변환하면 이고 복소수의 곱이 교환법칙을 만족하기 때문입니다.
확인 4-2. 합성곱의 항등원은 무엇이며 그 변환은 얼마입니까?
답. 델타이며 변환이 항등적으로 입니다.
확인 4-3. 을 두 가지로 쓰세요.
답. 이고 이기도 합니다.
문제. 다음 세 상황이 모두 합성곱임을 확인하세요.
(1) 독립인 두 확률변수의 합
(2) 신호를 필터에 통과시키기
(3) 이미지의 국소 연산
생각의 실마리. 겉보기에 전혀 다른 세 가지인데, **"모든 가능한 쪼갬에 대해 더한다"**는 공통 구조를 찾으면 같은 식이 나옵니다.
풀이. (1) 와 가 독립이고 밀도가 , 일 때 의 밀도를 구합니다. 가 되려면 이고 여야 하는데, 는 무엇이든 될 수 있으므로 모든 경우를 더합니다.
확률변수의 합이 밀도의 합성곱입니다.
(2) 선형이고 시간에 무관한 계에서 입력 에 대한 출력을 구합니다. 입력을 짧은 펄스들의 합으로 쪼개면, 각 펄스에 대한 응답을 모두 더한 것이 전체 출력입니다. 계의 임펄스 응답을 라 하면
입니다. ** 시점의 입력이 시점에 남기는 영향이 **이기 때문입니다.
(3) 이미지의 각 화소를 주변 화소의 가중합으로 바꾸는 연산입니다. 가중치 배열을 커널이라 하며, 이차원 합성곱
입니다. 흐리기, 날카롭게 하기, 경계 검출이 모두 커널만 바꾼 같은 연산입니다.
이 문제에서 배우는 것: 하나의 구조, 여러 얼굴.
세 상황의 대응을 표로 정리합니다.
| 확률 | 의 밀도 | 의 밀도 | 의 밀도 |
| 신호 | 입력 | 임펄스 응답 | 출력 |
| 영상 | 원본 | 커널 | 처리된 이미지 |
공통 구조는 "가 되는 모든 쪼갬에 대해 더한다"입니다. 확률에서는 이고, 신호에서는 시점의 입력이 만큼 지난 뒤의 영향이며, 영상에서는 주변 화소의 기여입니다.
이 통일된 관점이 이 커리큘럼에서 계속 쓰입니다.
| 강의 | 쓰이는 곳 |
|---|---|
| 129강 | 확률변수 합의 분포 |
| 143강 | 중심극한정리 |
| 248강 | 합성곱 신경망 |
| 384강 | 확산 모형 |
| 410강 | 오디오 필터링 |
248강의 합성곱 신경망이 이 이름을 가진 이유도 분명합니다. 작은 커널을 이미지 위로 미끄러뜨리며 곱하고 더하는 연산이 정확히 이산 합성곱입니다. 학습되는 것은 커널의 값이고, 계층을 쌓는 것은 합성곱을 반복하는 것입니다.
한 가지 주의할 점이 있습니다. 딥러닝 라이브러리의 "합성곱"은 사실 상관인 경우가 많습니다. 커널을 뒤집지 않기 때문인데, 커널을 학습으로 정하므로 뒤집힌 것을 배우면 그만이라 실용적 차이가 없습니다. 심화 1에서 두 연산의 관계를 정확히 다룹니다.
바로 확인 5.
확인 5-1. 독립인 두 확률변수의 합의 밀도를 쓰세요.
답. 각 밀도의 합성곱입니다.
확인 5-2. 신호처리에서 가 무엇을 뜻하는지 쓰세요.
답. 계의 임펄스 응답이며, 짧은 펄스 하나에 대한 출력입니다.
확인 5-3. 세 상황의 공통 구조를 한 문장으로 쓰세요.
답. 결과가 가 되는 모든 쪼갬에 대해 기여를 더하는 것입니다.
| 정의·정리 | 식 |
|---|---|
| 합성곱 | |
| 합성곱 정리 | |
| 곱의 변환 | |
| 이산 합성곱 | (a*b)_{k}=\displaystyle\sum_{j}a_{j}b_ |
| 성질 | 내용 |
|---|---|
| 교환 | |
| 결합 | |
| 분배 | |
| 항등원 | |
| 미분 | |
| 역원 | 일반적으로 없습니다 |
| 대표 합성곱 | 결과 |
|---|---|
| 상자 상자 | 삼각형 |
| 가우스 가우스 | 가우스, 분산이 더해집니다 |
| 나타나는 곳 | 의 뜻 |
|---|---|
| 확률 | 두 확률변수의 합의 밀도 |
| 신호 | 필터를 통과한 출력 |
| 영상 | 커널을 적용한 이미지 |
| 신경망 | 합성곱층의 연산 |
| 자주 하는 실수 | 바로잡기 |
|---|---|
| 뒤집기를 빠뜨립니다 | 이지 가 아닙니다 |
| 합성곱과 상관을 혼동합니다 | 뒤집느냐 아니냐가 다릅니다 |
| 역원이 항상 있다고 여깁니다 | 가 인 곳에서 정보가 사라집니다 |
| 정의대로만 계산합니다 | 변환하면 곱셈입니다 |
문제 6. 합성곱의 정의식을 쓰세요.
답. 입니다.
문제 7. 합성곱 정리를 쓰세요.
답. 입니다.
문제 8. 반폭 인 상자 두 개의 합성곱을 에서 구하세요.
답. 입니다.
문제 9. 표준편차 과 인 두 가우스의 합성곱의 표준편차를 구하세요.
답. 입니다.
문제 10. 를 구하세요.
답. 입니다. 델타가 항등원입니다.
문제 11. 을 쓰세요.
답. 이며 과도 같습니다.
문제 12. 를 쓰세요.
답. 입니다.
문제 13. 이산 합성곱 을 계산하세요.
답. 입니다.
문제 14. 문제 13이 어떤 다항식 곱과 같은지 쓰세요.
답. 입니다.
문제 15. 독립인 두 확률변수의 합의 밀도를 쓰세요.
답. 두 밀도의 합성곱입니다.
문제 16. 합성곱에 역원이 일반적으로 없는 이유를 쓰세요.
답. 가 이 되는 진동수에서 정보가 사라져 되돌릴 수 없기 때문입니다.
문제 17. 합성곱을 FFT로 계산할 때의 계산량을 쓰세요.
답. 입니다. 정의대로는 입니다.
문제 18. 합성곱이 함수를 매끄럽게 만드는 이유를 쓰세요.
답. 각 점에서 주변 값의 가중평균을 취하므로 급격한 변화가 완화되기 때문입니다.
심화 1. 합성곱과 상관의 차이를 밝히고, 어느 쪽이 왜 좋은 성질을 가지는지 설명하세요.
풀이. 두 연산을 나란히 씁니다.
차이는 뒤집기입니다. 합성곱은 를 뒤집어 옮기고, 상관은 뒤집지 않고 옮깁니다.
관계식도 간단합니다. 로 두면
이므로 한쪽을 뒤집으면 다른 쪽이 됩니다. 가 짝함수이면 둘이 같습니다.
성질을 비교합니다.
| 성질 | 합성곱 | 상관 |
|---|---|---|
| 교환법칙 | 성립합니다 | 성립하지 않습니다 |
| 결합법칙 | 성립합니다 | 성립하지 않습니다 |
| 변환 |
합성곱이 대수적으로 훨씬 좋습니다. 교환과 결합이 성립하므로 곱셈처럼 자유롭게 다룰 수 있고, 그래서 이론에서 표준으로 씁니다.
상관은 다른 목적에 맞습니다. 두 신호가 얼마나 닮았는지 재는 데 자연스럽습니다. 뒤집지 않으므로 와 를 같은 방향으로 놓고 겹쳐 보는 셈입니다. 패턴 매칭이나 시간 지연 추정에 쓰입니다.
문제 5에서 지적한 대로 딥러닝 라이브러리는 대개 상관을 계산하면서 합성곱이라 부릅니다. 커널이 학습되는 대상이므로 뒤집힌 커널을 배우면 결과가 같기 때문이며, 구현이 조금 단순해지는 이점을 택한 것입니다. 다만 이론과 대조할 때는 이 차이를 기억해야 합니다.
심화 2. 독립인 확률변수의 합이 왜 합성곱인지 자세히 유도하고, 그것이 중심극한정리와 어떻게 이어지는지 스케치하세요.
풀이. 와 가 독립이고 밀도가 , 입니다. 의 누적분포를 봅니다.
독립이라 결합밀도가 입니다. 안쪽 적분을 에 대해 먼저 하면 이므로
로 미분합니다. 49강의 라이프니츠 규칙을 안쪽에 적용하면
입니다.
중심극한정리와의 연결을 스케치합니다. 같은 분포를 따르는 독립인 의 합은 밀도의 겹 합성곱입니다.
합성곱을 번 하는 것은 계산하기 어렵습니다. 그런데 푸리에 변환하면 곱셈이 됩니다.
겹 합성곱이 제곱이 되었습니다. 이제 다룰 수 있습니다.
를 근처에서 전개합니다(56강). 평균이 이고 분산이 이면
입니다. 적절히 규격화한 뒤 제곱하면
인데, 55강 확인 5-2에서 본 의 형태입니다. 그리고 오른쪽은 가우스의 변환입니다(60강 문제 2).
역변환하면 극한 분포가 가우스입니다. 이것이 중심극한정리의 뼈대이며 143강에서 정식으로 다룹니다.
왜 하필 가우스인지가 이 유도에서 보입니다. 지수함수가 곱셈에서 덧셈으로 넘어가는 유일한 함수이고, 이차항까지의 전개가 지수로 모이기 때문입니다. 그리고 문제 3에서 본 대로 가우스는 합성곱에 대해 닫혀 있으므로 극한이 될 자격을 갖췄습니다.
심화 3. 합성곱이 함수를 매끄럽게 만든다는 사실을 정량적으로 설명하세요.
풀이. 세 가지 관점에서 봅니다.
첫째, 미분 성질입니다. 문제 4에서 이었습니다. 그러므로 가 이면 가 아무리 거칠어도 가 입니다.
매끄러움이 좋은 쪽에서 결과로 옮겨 갑니다. 48강 심화 2에서 적분이 함수를 매끄럽게 만든다고 했는데, 합성곱이 그 일반형입니다.
둘째, 진동수 관점입니다. 합성곱 정리에서 입니다. 가 매끄러우면 가 빨리 줄어들고(60강 문제 2), 곱하면 의 높은 진동수 성분이 눌립니다.
| 의 모양 | 효과 |
|---|---|
| 저역통과(높은 에서 작음) | 흐려집니다 |
| 고역통과 | 경계가 강조됩니다 |
| 대역통과 | 특정 진동수만 남습니다 |
필터링이 곧 진동수 성분에 가중치를 주는 일입니다.
셋째, 실제 확인입니다. 검산에서 구형파를 폭 인 좁은 가우스와 합성곱하면 도약점 근처에서 값이 , , 로 부드럽게 이어집니다. 원래는 에서 로 순간에 뛰던 것이 완만한 경사가 되었습니다.
이 성질이 실무에서 널리 쓰입니다.
| 목적 | 방법 |
|---|---|
| 잡음 제거 | 매끄러운 커널과 합성곱합니다 |
| 수치미분 안정화 | 을 계산합니다 |
| 이미지 흐리기 | 가우스 커널을 씁니다 |
| 확률밀도 추정 | 커널 밀도 추정 |
마지막 줄이 흥미롭습니다. 표본 몇 개에서 밀도를 추정할 때 각 표본에 좁은 가우스를 놓고 더하는데, 그것이 경험분포와 커널의 합성곱입니다. 표본은 델타들의 합이므로 합성곱하면 각 자리에 커널이 놓입니다.
심화 4. 이산 합성곱이 다항식 곱과 같음을 보이고, 55강 심화 4의 코시 곱과의 관계를 밝히세요.
풀이. 수열 와 의 이산 합성곱을
로 정의합니다. 연속판에서 적분이 합으로 바뀐 것입니다.
이제 두 다항식을 곱합니다.
의 계수가 인 모든 짝의 곱의 합인데, 이므로
입니다. 다항식의 곱셈이 계수의 합성곱입니다.
55강 심화 4의 코시 곱이 정확히 같은 식이었습니다. 그때는 멱급수의 곱을 다뤘고 여기서는 유한 다항식인데 구조가 같습니다.
세 가지가 하나로 묶입니다.
| 대상 | 곱셈 | 계수·값의 연산 |
|---|---|---|
| 다항식 | 다항식 곱 | 이산 합성곱 |
| 멱급수 | 코시 곱(55강) | 이산 합성곱 |
| 함수 | 변환의 곱 | 연속 합성곱 |
**"한쪽에서의 곱셈이 다른 쪽에서의 합성곱"**이라는 대응이 세 곳에서 같습니다. 다항식에서 의 지수가 진동수의 자리를 대신하는 셈입니다.
검산에서 인데 이는 입니다. 두 번째 예 도 을 전개한 것과 같습니다.
이 관점이 조합론에서 생성함수를 쓰는 근거입니다. 수열의 합성곱을 다항식의 곱으로 바꾸면 대수적으로 다룰 수 있고, 32강의 점화식이 그 방법으로 풀립니다.
심화 5. 델타가 합성곱의 항등원임을 자세히 다루고, 델타를 함수열의 극한으로 근사하는 방법을 제시하세요.
풀이. 문제 4에서 를 확인했습니다. 델타는 함수가 아니므로 이 등식의 뜻을 정확히 해야 합니다.
근사하는 함수열을 만듭니다. 폭이 이고 전체 적분이 인 함수를 잡습니다. 예를 들어
입니다. 에서 뾰족해지며 델타를 흉내 냅니다.
가 연속이면
입니다. 이유는 이렇습니다. 이 근처에만 무게를 두고 전체 무게가 이므로, 적분이 근처의 값들의 가중평균이 됩니다. 가 연속이면 그 평균이 로 갑니다.
이런 함수열을 근사 항등원이라 합니다. 조건은 두 가지입니다.
| 조건 | 뜻 |
|---|---|
| 무게가 보존됩니다 | |
| 에서 원점에 집중 | 국소화됩니다 |
60강 심화 2의 도 이 성질을 가집니다. 다만 그것은 부호를 바꾸며 진동해 수렴이 더 까다롭습니다.
변환 쪽에서 보면 더 분명합니다. 인데 에서 모든 에 대해 로 갑니다. 모든 진동수를 그대로 통과시키는 필터가 되므로 아무것도 바꾸지 않습니다.
| 시간 영역 | 진동수 영역 | |
|---|---|---|
| 큼 | 넓게 퍼짐 | 높은 를 자릅니다 |
| 작음 | 뾰족함 | 거의 모든 를 통과시킵니다 |
| 델타 | 항등적으로 |
60강의 불확정성 원리가 여기서도 작동합니다. 시간에서 뾰족할수록 진동수에서 넓게 퍼지고, 극한에서 모든 진동수를 담습니다.
심화 6. FFT로 합성곱을 빠르게 계산하는 방법과 그때의 주의점을 설명하세요.
풀이. 이산 합성곱을 정의대로 계산하면 각 마다 번의 곱셈이 필요하고 가 개쯤이므로 ****입니다.
합성곱 정리를 쓰면 다음 순서가 됩니다.
| 단계 | 연산 | 계산량 |
|---|---|---|
| 1 | 와 를 FFT | |
| 2 | 성분마다 곱셈 | |
| 3 | 역 FFT |
**전체가 **입니다. 에서 가 이 되어 오만 배 빨라집니다.
주의점이 하나 있습니다. 이산 푸리에 변환은 신호를 주기적이라고 가정하므로, 곱셈으로 얻은 것은 순환 합성곱입니다. 배열의 끝을 넘어간 부분이 앞으로 돌아옵니다.
원하는 것이 보통의 합성곱이면 제로 패딩이 필요합니다. 길이 과 인 두 배열의 합성곱은 길이가 이므로, 두 배열을 그 길이 이상(대개 의 거듭제곱)으로 을 채워 늘린 뒤 계산합니다.
| 잘못된 방법 | 결과 |
|---|---|
| 패딩 없이 FFT 곱 | 끝이 앞으로 감겨 들어옵니다 |
| 이상으로 패딩 | 올바른 합성곱 |
이 기법이 실제로 쓰이는 곳이 많습니다. 큰 수의 곱셈도 그중 하나입니다. 심화 4에서 본 대로 다항식 곱이 합성곱이고, 자릿수를 계수로 보면 큰 수의 곱셈이 다항식 곱입니다. FFT를 쓰면 자리 수의 곱셈을 에 할 수 있으며, 초등학교에서 배우는 방법의 보다 훨씬 빠릅니다.
언제 FFT가 이득인지도 따져야 합니다. 의 상수가 보다 크므로 이 작으면 정의대로가 빠릅니다. 실제 라이브러리는 크기에 따라 두 방법을 자동으로 고릅니다. 커널이 작은 이미지 처리에서는 대개 직접 계산이 유리합니다.
이 강의에서는 numpy만 씁니다. 합성곱은 검산이 명확합니다. 정의대로 계산한 값과 이론값을 비교하고, 합성곱 정리는 양변을 각각 계산해 대조합니다.
import numpy as np
L, N = 30.0, 300000
t = np.linspace(-L, L, N + 1)[:-1] + L/N
dt = 2*L/N
def conv(f, g, x):
"""(f*g)(x) = int f(t) g(x-t) dt 를 수치로 계산합니다."""
return float(np.sum(f(t)*g(x - t))*dt)
def FT(f, k):
return complex(np.sum(f(t)*np.exp(-1j*k*t))*dt)
box = lambda u: (np.abs(u) < 1.0).astype(float)
g = lambda u: np.exp(-u**2/2)
# --- 문제 3: 상자 * 상자 = 삼각 ----------------------------------------
for x in [0.0, 0.5, 1.5, 2.5]:
print(x, "%.8f" % conv(box, box, x), "%.8f" % max(2 - abs(x), 0.0))
# 0.0 2.00000000 2.00000000
# 0.5 1.50000000 1.50000000
# 1.5 0.50000000 0.50000000
# 2.5 0.00000000 0.00000000
# --- 문제 3: 가우스 * 가우스 = 가우스 -----------------------------------
for x in [0.0, 1.0, 2.0]:
print(x, "%.8f" % conv(g, g, x), "%.8f" % (np.sqrt(np.pi)*np.exp(-x**2/4)))
# 0.0 1.77245385 1.77245385
# 1.0 1.38038845 1.38038845
# 2.0 0.65204933 0.65204933
# --- 문제 2: 합성곱 정리 F[f*g] = F G ----------------------------------
ts = t[::300]; ds = ts[1] - ts[0]
cv = np.array([conv(box, g, xx) for xx in ts])
for k in [0.0, 0.8, 1.7]:
lhs = complex(np.sum(cv*np.exp(-1j*k*ts))*ds)
rhs = FT(box, k)*FT(g, k)
print(k, "%.6f%+.6fj" % (lhs.real, lhs.imag), "%.6f%+.6fj" % (rhs.real, rhs.imag))
# 0.0 5.013257+0.000000j 5.013257+0.000000j
# 0.8 3.264303-0.000000j 3.264303-0.000000j
# 1.7 0.689414-0.000000j 0.689414-0.000000j
# --- 문제 4: 교환법칙 ---------------------------------------------------
for x in [0.7, -1.4]:
print(x, "%.10f" % conv(box, g, x), "%.10f" % conv(g, box, x))
# 0.7 1.4371651942 1.4371651942
# -1.4 0.8431814296 0.8431814296
# --- 심화 4: 이산 합성곱은 다항식 곱입니다 ------------------------------
print([int(v) for v in np.convolve(np.array([1, 2, 3]), np.array([1, 1]))])
print([int(v) for v in np.convolve(np.array([1, 0, -2]), np.array([3, 1, 4]))])
# [1, 3, 5, 3]
# [3, 1, -2, -2, -8]
# --- 심화 2: 균등분포 두 개의 합은 삼각분포 -----------------------------
u = lambda z: ((z >= 0) & (z <= 1)).astype(float)
for x in [0.3, 1.0, 1.7, 2.3]:
th = max(0.0, 1 - abs(x - 1)) if 0 <= x <= 2 else 0.0
print(x, "%.8f" % conv(u, u, x), "%.8f" % th)
# 0.3 0.30000000 0.30000000
# 1.0 1.00000000 1.00000000
# 1.7 0.30000000 0.30000000
# 2.3 0.00000000 0.00000000
# --- 심화 3: 합성곱은 도약을 매끄럽게 만듭니다 --------------------------
sq = lambda z: np.sign(np.sin(z))
narrow = lambda z: np.exp(-z**2/(2*0.2**2))/(0.2*np.sqrt(2*np.pi))
for x in [-0.05, 0.0, 0.05]:
print(x, "%.6f" % conv(sq, narrow, x))
# -0.05 -0.197413
# 0.0 -0.000000
# 0.05 0.197413
실행하면 주석과 같은 값이 나옵니다. 다섯 곳을 짚어 둡니다.
첫째, 상자 두 개의 합성곱이 와 소수 여덟 자리까지 일치합니다. 에서 정확히 인 것도 맞습니다. 폭이 에서 로 늘고 모양이 삼각형이 되었습니다.
둘째, 가우스 두 개의 합성곱이 와 정확히 맞습니다. 에서 인데 이는 입니다. 폭이 에서 로 늘어 분산이 더해졌습니다.
셋째, 합성곱 정리가 세 진동수에서 모두 성립합니다. 왼쪽은 합성곱을 먼저 계산해 변환한 것이고 오른쪽은 각각 변환해 곱한 것인데, 완전히 다른 경로인데도 같은 값입니다.
넷째, 교환법칙이 소수 열 자리까지 성립합니다. 와 가 같습니다. 그 아래 이산 합성곱이 다항식 곱과 일치하는 것도 확인됩니다.
다섯째, 균등분포 두 개의 합이 삼각분포가 됩니다. 에서 최대 이고 양쪽으로 선형 감소합니다. 주사위 두 개의 합이 에서 가장 많은 것과 같은 현상의 연속판입니다. 그리고 마지막 블록에서 구형파가 좁은 가우스와 합성곱되어 도약이 로 부드럽게 이어집니다.
코드로 할 수 없는 일도 분명히 해 둡니다. 델타는 함수가 아니므로 직접 표현할 수 없습니다. 심화 5의 근사 항등원처럼 폭이 좁은 함수로 흉내 낼 뿐이며, 폭을 너무 좁히면 격자보다 작아져 수치적으로 무너집니다. 그리고 무한 적분을 유한 구간에서 자르므로 꼬리가 긴 함수에서는 60강과 같은 오차가 남습니다.
정답.
| 기호 | 읽는 법 | 뜻 |
|---|---|---|
| 합성곱 | 입니다 | |
| 상관 | 뒤집지 않고 겹치는 정도입니다 | |
| 델타 | 합성곱의 항등원입니다 | |
| 임펄스 응답 | impulse response | 짧은 펄스 하나에 대한 계의 출력입니다 |
| 커널 | kernel | 합성곱에 쓰는 가중치 함수입니다 |
| 순환 합성곱 | circular convolution | 이산 변환이 주기성을 가정해 생깁니다 |
| 제로 패딩 | zero padding | 순환을 막으려 을 채웁니다 |
| 근사 항등원 | approximate identity | 델타로 수렴하는 함수열입니다 |
이 강의로 33강부터 61강까지의 미적분학 I이 끝납니다. 되돌아보면 하나의 이야기였습니다.
| 단원 | 한 일 |
|---|---|
| 01 극한과 연속 | "한없이 가까워짐"을 정확히 적었습니다 |
| 02 미분 | 변화율을 정의하고 계산력을 갖췄습니다 |
| 03 미분의 활용 | 한 점의 정보로 구간 전체를 말했습니다 |
| 04 적분 | 쪼갠 것을 다시 더하고 미분과 잇었습니다 |
| 05 급수와 근사 | 함수를 계수의 수열로 바꿨습니다 |
| 06 복소지수와 푸리에 | 함수를 진동으로 분해했습니다 |
42강의 평균값 정리가 이 과목 전체에서 가장 멀리 뻗은 정리입니다. 03단원 여섯 강의를 떠받쳤고, 49강의 미적분의 기본정리 증명에 쓰였으며, 57강의 테일러 정리에서 롤의 정리를 번 반복하는 형태로 다시 나타났습니다.
밀린 빚도 모두 갚았습니다.
| 미룬 곳 | 갚은 곳 |
|---|---|
| 39강 순환논법 걱정 | 48강 심화 6, 50강 심화 1 (적분으로 로그 재구성) |
| 45강 심화 4 순환논법 | 56강 심화 5 (급수로 극한) |
| 47강 심화 1 이차 수렴 | 57강 심화 4 |
| 49강 심화 3 적분 불가능 | 56강 심화 4 |
| 51강 심화 4 복소 적분 | 58강 심화 4 |
| 54강 \sum 1/n^ | 59강 문제 3, 문제 5 |
61강 뒤에는 관문 2가 있습니다. 33강부터 61강까지를 섞어 다시 묻고, 통과하면 62강부터 선형대수학이 시작됩니다. 그 과목에서 이 단원의 직교성과 내적이 정식 언어를 얻고, 105강의 다변수 적분에서 60강 심화 1의 가우스 적분이 극좌표로 완결됩니다.