95강부터 97강까지 출력이 하나인 함수를 다뤘습니다.
f:Rn→R
출력이 여럿이면 무엇이 달라질까요. 실제로는 이쪽이 더 흔합니다. 좌표변환은 평면을 평면으로 보내고, 신경망의 한 층은 벡터를 벡터로 보냅니다.
F:Rn→Rm
답은 단순합니다. 성분마다 기울기 벡터가 하나씩 생기므로, 그것들을 행으로 쌓으면 행렬입니다.
J=⎝⎜⎜⎛∇f1⊤⋮∇fm⊤⎠⎟⎟⎞∈Rm×n
이 행렬을 야코비 행렬이라 하며, 이 강의는 세 가지를 보입니다. 첫째로 미분이 곧 이 행렬이고, 둘째로 연쇄법칙이 행렬 곱이며, 셋째로 m=n일 때 행렬식이 부피 배율입니다.
셋째가 특히 값어치가 큽니다. 79강에서 행렬식이 부피 배율이라 했는데, 그 사실이 곡선 좌표계에서도 국소적으로 성립합니다. 이것이 105강 변수변환 공식의 전부입니다.
01단원의 결론: 미분은 선형사상이고 그 표현은 행렬입니다
- 야코비 행렬을 세우고 모양을 말할 수 있습니다.
- 연쇄법칙을 행렬 곱으로 계산할 수 있습니다.
- 야코비 행렬식을 부피 배율로 해석할 수 있습니다.
- 극좌표 변환의 야코비 행렬식을 구할 수 있습니다.
- 기울기와 헤세가 야코비의 특별한 경우임을 압니다.
문제. F(x,y)=(x2−y2, 2xy)를 봅니다.
(1) 각 성분의 편미분을 모두 구하세요.
(2) 그것들을 행렬로 배열하세요.
(3) (3,1)에서 값을 구하고 수치로 확인하세요.
생각의 실마리. 성분이 둘이고 변수가 둘이니 편미분이 넷입니다. 어떻게 배열할지만 정하면 됩니다.
풀이. (1) f1=x2−y2이고 f2=2xy이므로
∂x∂f1=2x,∂y∂f1=−2y,∂x∂f2=2y,∂y∂f2=2x
(2) 행은 출력, 열은 입력으로 배열합니다.
J=(2x2y−2y2x)
(3) 검산에서 F(3,1)=(8,6)이고
J(3,1)=(62−26)
이며 수치 야코비가 같은 값을 냅니다.
이 문제에서 배우는 것: 야코비 행렬.
야코비 행렬. F:Rn→Rm의 야코비 행렬은
JF(a)=(∂xj∂fi(a))i=1..m, j=1..n∈Rm×n
입니다. i번째 행이 ∇fi⊤입니다.
행이 출력, 열이 입력이라는 규약을 잊으면 전치된 행렬을 쓰게 됩니다. 외우는 방법은 선형근사식을 떠올리는 것입니다.
F(a+h)=F(a)+Jh+o(∥h∥)
Jh가 성립하려면 J의 열 수가 h의 차원과 같아야 하고, 결과가 Rm이어야 하니 행이 m개입니다.
95강의 전미분가능성이 그대로 확장됩니다.
전미분가능. F가 a에서 전미분가능하다 함은 행렬 A가 있어
h→0lim∥h∥∥F(a+h)−F(a)−Ah∥=0
인 것이며, 이때 A=JF(a)입니다.
분자의 절댓값이 노름으로 바뀐 것만 다릅니다. 성분별로 보면 각 성분이 95강의 뜻에서 전미분가능한 것과 같습니다.
이 함수의 정체를 밝혀 두면 흥미롭습니다. 복소수로 보면 z=x+iy에 대해
z2=(x2−y2)+i(2xy)
이라 F는 제곱 사상입니다. 야코비 행렬 (2x2y−2y2x)은 (ab−ba) 꼴이며, 76강에서 본 회전과 확대의 합성입니다. 복소미분가능한 함수의 야코비가 언제나 이 모양이고, 그래서 각을 보존합니다.
바로 확인 1.
확인 1-1. 야코비 행렬의 크기를 쓰세요.
답. 출력 수 × 입력 수, 즉 m×n입니다.
확인 1-2. i번째 행은 무엇입니까?
답. i번째 출력 성분의 기울기 벡터입니다.
확인 1-3. 선형근사식을 쓰세요.
답. F(a+h)≈F(a)+Jh입니다.
문제. 앞의 F에 이어 G(u,v)=(u+v, uv)를 합성합니다.
(1) JG를 구하세요.
(2) (3,1)에서 JGJF를 계산하세요.
(3) 합성 G∘F의 야코비를 직접 구해 비교하세요.
생각의 실마리. 97강 심화 2에서 예고한 식을 확인합니다. 중간값을 어디서 평가하는지가 유일하게 조심할 점입니다.
풀이. (1) G의 성분이 u+v와 uv이므로
JG(u,v)=(1v1u)
(2) 중간값은 F(3,1)=(8,6)이므로 JG를 (8,6)에서 평가합니다.
JG(8,6)JF(3,1)=(1618)(62−26)=(852436)
(3) 검산에서 합성의 수치 야코비가 같은 행렬이며 최대 오차가 7.268×10−9입니다.
이 문제에서 배우는 것: 연쇄법칙은 행렬 곱입니다.
연쇄법칙. F가 a에서, G가 F(a)에서 전미분가능하면
JG∘F(a)=JG(F(a))JF(a)
입니다.
증명은 선형근사를 두 번 쓰는 것입니다.
G(F(a+h))≈G(F(a)+JFh)≈G(F(a))+JGJFh
66강에서 정의한 행렬 곱이 여기서 값어치를 냅니다. 그때 "행렬 곱은 변환의 합성"이라 했는데, 미분이 선형변환이므로 미분의 합성이 곧 행렬 곱입니다.
크기가 맞는지 확인하는 습관이 중요합니다.
JG(m×k)JF(k×n)=JG∘F(m×n)
중간 차원 k가 사라집니다. 이것이 97강 문제 2의 "합"에 해당하며, 행렬 곱의 정의에서 안쪽 지표를 더하는 일이 바로 경로를 모으는 일입니다.
(JGJF)ij=k∑∂uk∂gi∂xj∂uk
여러 층을 쌓으면 곱이 길어집니다.
J=JLJL−1⋯J1
97강 문제 5에서 이 곱을 어느 쪽부터 계산할지가 비용을 91배 갈랐습니다. 역전파는 이 곱을 왼쪽부터 계산하는 알고리즘이며, 233강에서 구현합니다.
바로 확인 2.
확인 2-1. 연쇄법칙의 행렬 형태를 쓰세요.
답. JG∘F=JGJF입니다.
확인 2-2. JG는 어느 점에서 평가합니까?
답. F(a)에서 평가합니다.
확인 2-3. 행렬 곱의 안쪽 지표 합은 무엇에 해당합니까?
답. 경로들을 모으는 일입니다.
문제. 같은 F를 봅니다.
(1) detJF(3,1)을 구하세요.
(2) 일반적인 (x,y)에서 detJ를 구하세요.
(3) (3,1) 근처의 작은 정사각형이 얼마나 커지는지 확인하세요.
생각의 실마리. 79강에서 행렬식이 부피 배율이라 했습니다. 야코비 행렬은 국소적인 선형근사이므로, 아주 작은 도형에 대해 같은 해석이 성립할 것입니다.
풀이. (1) det(62−26)=36+4=40입니다.
(2) det(2x2y−2y2x)=4x2+4y2이고 (3,1)에서 36+4=40입니다.
(3) 검산에서 한 변이 10−3인 정사각형을 보냅니다.
| 항목 |
값 |
| 원래 넓이 |
1.000000\times10^ |
| 상의 넓이 |
4.001600\times10^ |
| 넓이 비 |
40.0160 |
| detJ |
40.0 |
40에 매우 가깝습니다. 정확히 40이 아닌 것은 정사각형이 유한한 크기라 이차 이상의 효과가 남기 때문이며, 변을 줄이면 40으로 수렴합니다.
이 문제에서 배우는 것: 야코비 행렬식은 국소 부피 배율입니다.
해석. F:Rn→Rn이 a에서 전미분가능하면, a 근처의 작은 영역 S에 대해
부피(F(S))≈∣detJF(a)∣⋅부피(S)
입니다.
79강의 결과를 국소적으로 옮긴 것이며, 근거는 선형근사입니다. 작은 영역에서 F가 아핀사상 h↦F(a)+Jh에 가깝고, 평행이동은 부피를 바꾸지 않으므로 J만 남습니다.
부호도 뜻이 있습니다.
| detJ |
뜻 |
| 양수 |
방향을 보존합니다 |
| 음수 |
방향을 뒤집습니다 |
| 0 |
차원이 무너집니다 |
셋째 줄이 중요합니다. detJ=0이면 야코비가 특이행렬이라 작은 영역이 납작해집니다. 이 함수에서는 4x2+4y2=0, 즉 원점에서만 그렇습니다.
이 결과가 105강의 변수변환 공식이 됩니다. 미리 적으면
∬Df(x,y)dxdy=∬D′f(g(u,v))∣detJg∣dudv
작은 조각의 넓이가 ∣detJ∣배 되니 적분에서 그만큼 곱해 주는 것입니다. 한 변수의 치환적분에서 dx=g′(u)du였던 것의 다변수판이며, 절댓값이 붙는 것은 다변수에서 적분 구간의 방향을 따로 다루지 않기 때문입니다.
바로 확인 3.
확인 3-1. 야코비 행렬식의 기하적 뜻을 쓰세요.
답. 국소적인 부피 배율입니다.
확인 3-2. detJ<0이면 무엇을 뜻합니까?
답. 방향이 뒤집힙니다.
확인 3-3. detJ=0인 점에서 무슨 일이 생깁니까?
답. 차원이 무너져 납작해집니다.
문제. P(r,θ)=(rcosθ, rsinθ)를 봅니다.
(1) JP를 구하세요.
(2) detJP를 구하세요.
(3) r=0에서 무슨 일이 생기는지 말하세요.
생각의 실마리. 이 변환은 104강과 105강에서 계속 씁니다. 결과가 놀랍도록 단순하니 외워 둘 만합니다.
풀이. (1) 편미분 넷을 배열하면
JP=(cosθsinθ−rsinθrcosθ)
(2) 행렬식을 계산하면
detJP=rcos2θ+rsin2θ=r
검산에서
| r |
θ |
detJ |
| 2.0 |
0.5236 |
2.000000 |
| 3.0 |
1.0472 |
3.000000 |
정확히 r입니다.
(3) r=0이면 detJ=0이라 특이합니다. 원점에서는 θ가 무엇이든 같은 점으로 가므로 변환이 일대일이 아닙니다.
이 문제에서 배우는 것: dA=rdrdθ.
∬fdxdy=∬f(rcosθ,rsinθ)rdrdθ
이 r이 어디서 오는지가 이제 분명합니다. 그냥 외우는 인자가 아니라 야코비 행렬식입니다.
기하적으로도 납득됩니다. 극좌표의 작은 조각은 dr과 rdθ를 변으로 하는 거의 직사각형이라 넓이가 rdrdθ입니다.
| 좌표계 |
넓이 요소 |
| 직교 |
dxdy |
| 극 |
rdrdθ |
| 원기둥 |
rdrdθdz |
| 구 |
ρ2sinϕdρdϕdθ |
바깥으로 갈수록 r이 커지는 것이 핵심입니다. 같은 각도 폭이라도 반지름이 크면 호가 길어 조각이 넓습니다.
이 야코비의 열이 무엇인지도 볼 만합니다.
c1=(cosθ,sinθ),c2=r(−sinθ,cosθ)
첫 열은 반지름 방향의 단위벡터이고 둘째 열은 그에 수직인 방향의 길이 r인 벡터입니다. 두 열이 직교하므로 행렬식이 두 길이의 곱, 즉 1×r=r입니다. 80강에서 직교하는 벡터들이 만드는 평행사변형의 넓이가 변의 곱이라 한 그대로입니다.
바로 확인 4.
확인 4-1. 극좌표 변환의 야코비 행렬식을 쓰세요.
답. r입니다.
확인 4-2. 극좌표의 넓이 요소를 쓰세요.
답. rdrdθ입니다.
확인 4-3. r=0에서 무엇이 문제입니까?
답. 행렬식이 0이고 변환이 일대일이 아닙니다.
문제. 다음을 야코비 행렬의 언어로 다시 쓰세요.
(1) f(x,y)=x2y의 기울기 벡터
(2) 곡선 γ(t)=(cost,sint)의 속도벡터
(3) 헤세 행렬
생각의 실마리. 야코비 행렬은 m×n입니다. m이나 n을 1로 두면 지금까지 본 것들이 나옵니다.
풀이. (1) m=1인 경우입니다. 검산에서 (3,1)에서
Jf=(69) (1×2),∇f=(69) (2×1)
기울기 벡터는 야코비 행렬의 전치입니다.
(2) n=1인 경우입니다. Jγ는 2×1 행렬이고 그 성분이 (−sint,cost)⊤이라 속도벡터입니다.
(3) 헤세 행렬은 ∇f:Rn→Rn의 야코비입니다.
Hf=J∇f
이 문제에서 배우는 것: 야코비가 미분들을 통합합니다.
| 함수 |
m |
n |
야코비의 정체 |
| f:\mathbb{R}\to\mathbb |
1 |
1 |
도함수 f′ |
| \gamma:\mathbb{R}\to\mathbb{R}^ |
m |
1 |
속도벡터 |
| f:\mathbb{R}^{n}\to\mathbb |
1 |
n |
기울기의 전치 |
| \nabla f:\mathbb{R}^{n}\to\mathbb{R}^ |
n |
n |
헤세 행렬 |
| \mathbf{F}:\mathbb{R}^{n}\to\mathbb{R}^ |
m |
n |
야코비 행렬 |
다섯 줄이 하나의 정의입니다. 미분은 선형사상이고, 야코비 행렬은 그 표현행렬입니다.
셋째 줄의 전치가 혼동을 부릅니다. 야코비 규약에서 Rn→R의 미분은 1×n 행벡터인데, 기울기 벡터는 관습적으로 열벡터로 씁니다.
Jf=∇f⊤
이 구별은 74강의 행공간과 열공간의 구별과 같은 뿌리입니다. 미분은 원래 쌍대공간의 원소이고, 내적을 써서 열벡터로 옮긴 것이 기울기 벡터입니다. 231강에서 행렬미분 규칙을 세울 때 이 규약 차이가 부호와 전치 실수를 만드는 주범이니 지금 정리해 둡니다.
넷째 줄이 02단원으로 가는 다리입니다. 헤세가 ∇f의 야코비이므로, 94강의 클레로 정리가 곧 이 야코비가 대칭이라는 말입니다. 99강에서 그 성질을 정면으로 다룹니다.
바로 확인 5.
확인 5-1. 기울기 벡터와 야코비의 관계를 쓰세요.
답. 야코비가 1×n이고 기울기는 그 전치입니다.
확인 5-2. 헤세 행렬을 야코비로 표현하세요.
답. Hf=J∇f입니다.
확인 5-3. 곡선의 야코비는 무엇입니까?
답. m×1 행렬이며 속도벡터입니다.
| 개념 |
내용 |
| JF |
m×n, 행은 출력 열은 입력 |
| 선형근사 |
\mathbf{F}(\mathbf{a}+\mathbf{h})\approx\mathbf{F}(\mathbf{a})+J\mathbf |
| 연쇄법칙 |
JG∘F=JGJF |
| 행렬식 |
국소 부피 배율 |
| 역함수 정리 |
detJ=0이면 국소 가역 |
| 특수한 경우 |
야코비 |
| \mathbb{R}\to\mathbb |
f′ |
| \mathbb{R}\to\mathbb{R}^ |
속도벡터 |
| \mathbb{R}^{n}\to\mathbb |
\nabla f^ |
| ∇f의 야코비 |
헤세 H |
| 좌표변환 |
∣detJ∣ |
| 극 |
r |
| 원기둥 |
r |
| 구 |
ρ2sinϕ |
| 선형 \mathbf{x}\mapsto A\mathbf |
∣detA∣ |
| 자주 하는 실수 |
바로잡기 |
| 행과 열을 뒤집습니다 |
행이 출력입니다 |
| JG를 시작점에서 잽니다 |
중간값에서 재야 합니다 |
| 행렬식에 절댓값을 잊습니다 |
부피는 양수입니다 |
| ∇f와 Jf를 같다고 씁니다 |
서로 전치입니다 |
문제 6. F(x,y)=(x+y, x−y)의 야코비를 구하세요.
답. (111−1)이며 상수행렬입니다.
문제 7. 문제 6의 행렬식을 구하고 뜻을 쓰세요.
답. −2입니다. 넓이가 두 배 되고 방향이 뒤집힙니다.
문제 8. F(x,y)=(excosy, exsiny)의 야코비 행렬식을 구하세요.
답. e2xcos2y+e2xsin2y=e2x입니다.
문제 9. F(r,θ,z)=(rcosθ,rsinθ,z)의 행렬식을 구하세요.
답. r입니다. 원기둥 좌표입니다.
문제 10. f(x,y,z)=x2+y2+z2의 야코비 크기를 쓰세요.
답. 1×3입니다.
문제 11. γ(t)=(t,t2,t3)의 야코비를 구하세요.
답. (1,2t,3t2)⊤이며 3×1입니다.
문제 12. F:R5→R3과 G:R3→R2의 합성 야코비 크기를 쓰세요.
답. 2×5입니다.
문제 13. 선형사상 x↦Ax의 야코비를 쓰세요.
답. A 자신이며 모든 점에서 같습니다.
문제 14. 상수함수의 야코비를 쓰세요.
답. 영행렬입니다.
문제 15. detJ=0인 점을 무엇이라 합니까?
답. 특이점이며 그곳에서 국소 가역성이 보장되지 않습니다.
문제 16. F(x,y)=(x2,y2)의 특이점을 구하세요.
답. detJ=4xy=0이므로 두 좌표축 전체입니다.
문제 17. 야코비가 직교행렬이면 부피는 어떻게 됩니까?
답. ∣detQ∣=1이므로 보존됩니다.
문제 18. 헤세 행렬이 대칭인 이유를 야코비의 언어로 쓰세요.
답. ∇f의 야코비이고 클레로 정리가 성분의 대칭을 주기 때문입니다.
심화 1. 연쇄법칙의 행렬 형태를 증명하세요.
F가 a에서, G가 b=F(a)에서 전미분가능하다 하고 A=JF(a), B=JG(b)라 둡니다.
증명. 전미분가능성에서 나머지를
F(a+h)=b+Ah+r(h),G(b+k)=G(b)+Bk+s(k)
로 두면 ∥r(h)∥/∥h∥→0이고 ∥s(k)∥/∥k∥→0입니다. 이제 k=Ah+r(h)로 두고 합성합니다.
G(F(a+h))=G(b)+B(Ah+r(h))+s(k)=G(b)+BAh+나머지Br(h)+s(k)
나머지가 o(∥h∥)임을 보이면 끝입니다. 첫 항은 90강의 일관성 부등식으로
∥h∥∥Br(h)∥≤∥B∥∥h∥∥r(h)∥ ⟶ 0
둘째 항은 ∥k∥≤∥A∥∥h∥+∥r(h)∥≤C∥h∥이므로
∥h∥∥s(k)∥=∥k∥∥s(k)∥⋅∥h∥∥k∥ ⟶ 0⋅C=0
입니다. 따라서 JG∘F=BA입니다. ■
90강의 행렬 노름이 증명 도구로 쓰였습니다. ∥Br∥≤∥B∥∥r∥이라는 일관성이 없으면 첫 항을 통제할 수 없습니다. 07단원에서 만든 도구가 여기서 쓰인다는 점이 S4와 S5의 연결을 보여 줍니다.
k=0인 경우는 s(0)=0이라 따로 문제되지 않습니다.
심화 2. 행렬식이 곱셈적임을 연쇄법칙으로 해석하세요.
78강에서 det(AB)=detAdetB를 증명했습니다. 연쇄법칙과 합치면 자연스러운 뜻이 나옵니다.
detJG∘F=det(JGJF)=detJG⋅detJF
부피 배율이 곱해집니다. 두 번 변환하면 배율이 곱해지는 것이 당연하며, 행렬식의 곱셈성이 이 당연함의 대수적 표현입니다.
이 관계가 실제로 쓰이는 자리가 여럿입니다.
첫째, 역함수의 야코비입니다. F−1∘F=id이고 항등사상의 야코비가 I이므로
JF−1(F(a))=JF(a)−1
검산에서 확인합니다. J(3,1)−1=(0.15−0.050.050.15)이고 detJ⋅detJ−1=1.0입니다. 역변환의 부피 배율은 원래 배율의 역수입니다.
둘째, 흐름 기반 생성모형입니다. 273강의 정규화 흐름은 가역 변환 F로 단순한 분포를 복잡한 분포로 보내는데, 확률밀도의 변환 법칙이
pY(y)=pX(x)∣detJF(x)∣−1
입니다. 부피가 늘어난 만큼 밀도가 묽어집니다. 139강의 확률변수 변환에서 이 공식을 세우며, 여러 층을 쌓으면 곱셈성 덕분에 log∣detJ∣가 더해집니다.
log∣detJ전체∣=i∑log∣detJi∣
층마다 따로 계산해 더하면 되므로 다룰 수 있습니다. 흐름 모형의 설계가 "행렬식을 싸게 계산할 수 있는 층"을 찾는 일인 이유가 여기 있습니다.
심화 3. 역함수 정리를 진술하고 조건의 뜻을 설명하세요.
역함수 정리. F:Rn→Rn이 C1이고 detJF(a)=0이면, a의 어떤 근방에서 F는 가역이고 역함수도 C1이며
JF−1(F(a))=JF(a)−1
입니다.
조건이 왜 이것인지가 이 강의의 관점에서 분명합니다. 미분은 선형근사이고, 선형사상이 가역인 조건이 69강에서 det=0이었습니다. 국소적으로 선형사상을 닮았으니 같은 조건이 국소 가역성을 줍니다.
선형근사가 가역이면 함수도 국소적으로 가역입니다
주의할 점이 둘 있습니다.
첫째, 국소적일 뿐입니다. 이 강의의 F(z)=z2은 원점을 뺀 모든 점에서 detJ=0이지만 전역적으로는 일대일이 아닙니다. z와 −z가 같은 곳으로 갑니다.
F(3,1)=F(−3,−1)=(8,6)
모든 점에서 국소 가역인데 전역 가역이 아닙니다. 각 점 주변의 작은 원판에서는 일대일이지만 멀리 떨어진 두 점이 겹칩니다.
둘째, 역이 성립하지 않습니다. detJ=0이어도 가역일 수 있습니다. 한 변수의 f(x)=x3이 예이며, f′(0)=0인데 전역 가역입니다. 정리는 충분조건입니다.
| 조건 |
결론 |
| detJ(a)=0 |
국소 가역입니다 |
| 모든 점에서 detJ=0 |
전역 가역은 아닙니다 |
| detJ(a)=0 |
알 수 없습니다 |
검산에서 원점의 detJ=0.0을 확인했으며, 실제로 z2은 원점 근처에서 각을 두 배로 벌려 일대일이 아닙니다.
93강 심화 1의 음함수 정리와 같은 가족입니다. 둘 다 "선형근사가 좋으면 원래 함수도 그렇다"는 형태이고, 실은 서로에게서 유도됩니다.
심화 4. 신경망의 한 층을 야코비로 쓰고 그 구조를 논하세요.
완전연결 층 하나를 봅니다.
z=Wx+b,y=σ(z)
σ는 성분마다 따로 적용되는 활성화 함수입니다. 각 부분의 야코비를 구합니다.
Jz→x=W,Jy→z=diag(σ′(z1),…,σ′(zd))
활성화의 야코비가 대각행렬인 것이 결정적입니다. 성분끼리 섞이지 않기 때문이며, 이 덕분에 곱셈이 O(d)면 됩니다. 연쇄법칙으로 층 전체의 야코비는
J층=diag(σ′)W
L개 층을 쌓으면
J=diag(σL′)WL⋯diag(σ1′)W1
이 곱의 성질이 학습의 성패를 가릅니다. 90강의 준곱셈성으로
∥J∥≤i∏∥diag(σi′)∥∥Wi∥
각 인자가 1보다 작으면 지수적으로 줄고 크면 지수적으로 커집니다. 97강 문제 3에서 본 기울기 소실과 폭발이며, 대책들이 모두 이 곱을 1 근처로 유지하려는 시도입니다.
| 대책 |
하는 일 |
강의 |
| 초기화 |
∥Wi∥를 1 근처로 맞춥니다 |
248 |
| ReLU |
σ′∈{0,1}이라 감쇠가 없습니다 |
240 |
| 잔차 연결 |
J=I+⋯로 만듭니다 |
250 |
| 정규화 |
층마다 척도를 되돌립니다 |
251 |
셋째 줄이 특히 우아합니다. 잔차 연결 y=x+F(x)의 야코비는 I+JF이므로, JF가 작아도 항등행렬이 남아 기울기가 통과합니다.
i∏(I+Ji)≈I+i∑Ji
곱이 합으로 바뀌어 지수적 감쇠가 사라집니다. 250강에서 정식으로 다룹니다.
심화 5. 야코비 행렬을 통째로 만들지 않고 쓰는 방법을 설명하세요.
야코비 행렬이 m×n이라 크기가 문제입니다. 층의 폭이 104이면 성분이 108개이고, 층마다 이런 행렬을 저장할 수는 없습니다.
해법은 행렬을 만들지 않고 곱만 계산하는 것입니다. 필요한 것은 언제나 행렬 자체가 아니라 벡터와의 곱입니다.
| 연산 |
뜻 |
어느 모드 |
| J\mathbf |
야코비-벡터 곱 |
순방향 |
| u⊤J |
벡터-야코비 곱 |
역방향 |
역전파가 계산하는 것은 둘째 줄입니다. 손실의 야코비가 1×n이므로 u가 스칼라 하나에서 시작해 층을 거슬러 올라갑니다.
u⊤JLJL−1⋯J1
97강 문제 5에서 왼쪽부터 곱하는 것이 유리하다고 한 것이 이 형태입니다. 각 단계에서 벡터 하나만 들고 다니면 되고, Ji를 명시적으로 만들 필요가 없습니다.
층의 구조가 이를 가능하게 합니다.
| 층 |
J |
u⊤J의 계산 |
| 선형 W\mathbf |
W |
u⊤W, 행렬-벡터 곱 |
| 성분별 σ |
대각 |
성분별 곱, O(d) |
| 합성곱 |
희소 순환 |
전치 합성곱 |
| 어텐션 |
구조적 |
같은 구조로 역전파 |
어느 경우에도 m×n 행렬을 만들지 않습니다. 이것이 자동미분 구현의 핵심 설계이며, 층마다 "순전파"와 "벡터-야코비 곱" 두 함수만 정의하면 됩니다.
헤세 행렬에도 같은 기법을 씁니다. 112강의 뉴턴법은 H−1∇f가 필요한데, H를 만드는 대신 Hv만 계산해 켤레기울기법으로 풉니다.
Hv=∇(∇f⋅v)
미분을 두 번 하되 중간에 벡터를 내적해 스칼라로 만드는 것이며, 행렬을 만들지 않고 곱을 얻습니다. 99강에서 헤세를 정의한 뒤 112강에서 이 기법을 씁니다.
심화 6. 01단원을 정리하고 02단원을 예고하세요.
01단원은 한 변수 미분을 여러 변수로 옮기는 일을 했습니다.
| 강의 |
한 일 |
| 93 |
지형을 등고선으로 봤습니다 |
| 94 |
축 방향으로 미분했습니다 |
| 95 |
선형근사를 요구했습니다 |
| 96 |
임의 방향으로 쟀습니다 |
| 97 |
연쇄를 따라갔습니다 |
| 98 |
행렬로 정리했습니다 |
중심에 놓인 것은 95강입니다. 94강에서 편미분만으로는 부족함을 반례로 보였고, 95강이 전미분가능성을 요구해 그 빈틈을 막았습니다. 96강, 97강, 98강은 모두 그 정의에서 세 줄 안에 따라 나왔습니다.
정의를 잘 고르면 정리가 쉬워집니다
반례들이 이 단원의 뼈대였습니다.
| 반례 |
무엇을 깨는가 |
강의 |
| xy/(x2+y2) |
편미분 존재가 연속을 줌 |
94 |
| x2y/(x4+y2) |
방향도함수 전부가 연속을 줌 |
94, 96 |
| xy(x2−y2)/(x2+y2) |
f_{xy}=f_ |
94 |
| r2sin(1/r) |
전미분가능이 C1을 줌 |
95 |
넷째 줄만 방향이 반대입니다. 앞의 셋은 조건이 약해서 결론이 안 나오는 예이고, 마지막은 결론이 나는데 조건이 필요 없다는 예입니다.
02단원은 한 차수를 올립니다. 이유가 분명합니다. 임계점 ∇f=0에서 선형근사가 아무 말도 하지 않기 때문입니다.
f(a+h)≈f(a)+=0∇f⋅h
최소인지 최대인지 안장인지 구별할 수 없습니다. 93강 문제 5에서 x2+y2과 x2−y2이 원점에서 모두 ∇f=0이었는데 성격이 달랐습니다. 그 차이는 이차항에 있습니다.
f(a+h)≈f(a)+∇f⋅h+21h⊤Hh
이차형식이 나타나고, 87강에서 만든 도구가 전부 쓰입니다.
| 강의 |
하는 일 |
쓰는 S4 도구 |
| 99 |
헤세 행렬을 세웁니다 |
86 대칭행렬 |
| 100 |
테일러 근사를 세웁니다 |
54 한 변수 테일러 |
| 101 |
임계점을 분류합니다 |
87 양정치성 |
| 102 |
곡률을 잽니다 |
88 특이값 |
101강이 목표이고 나머지가 도구입니다. 그리고 그 분류가 04단원 최적화의 전제가 됩니다. 최소를 찾는 알고리즘을 만들려면 무엇이 최소인지 먼저 알아야 하기 때문입니다.
import numpy as np
# --- 문제 1: 야코비 행렬 세우기 -----------------------------------------
F = lambda x, y: np.array([x**2 - y**2, 2*x*y])
J = lambda x, y: np.array([[2*x, -2*y], [2*y, 2*x]])
p = (3.0, 1.0)
print(" F(3,1) =", F(*p))
print(" J(3,1) =\n", J(*p))
e = 1e-6
num = np.array([(F(p[0]+e, p[1]) - F(p[0]-e, p[1]))/(2*e),
(F(p[0], p[1]+e) - F(p[0], p[1]-e))/(2*e)]).T
print(" 수치 야코비 =\n", np.round(num, 6))
# F(3,1) = [8. 6.]
# J(3,1) =
# [[ 6. -2.]
# [ 2. 6.]]
# 수치 야코비 =
# [[ 6. -2.]
# [ 2. 6.]]
# --- 문제 2: 연쇄법칙은 행렬 곱 -----------------------------------------
G = lambda u, v: np.array([u + v, u*v])
JG = lambda u, v: np.array([[1.0, 1.0], [v, u]])
u, v = F(*p)
print(" 중간값 (u,v) = (%.1f, %.1f)" % (u, v))
chain = JG(u, v) @ J(*p)
print(" JG @ JF =\n", chain)
H = lambda x, y: G(*F(x, y))
numH = np.array([(H(p[0]+e, p[1]) - H(p[0]-e, p[1]))/(2*e),
(H(p[0], p[1]+e) - H(p[0], p[1]-e))/(2*e)]).T
print(" 합성의 수치 야코비 =\n", np.round(numH, 4))
print(" 최대 오차 %.3e" % np.abs(chain - numH).max())
# 중간값 (u,v) = (8.0, 6.0)
# JG @ JF =
# [[ 8. 4.]
# [52. 36.]]
# 합성의 수치 야코비 =
# [[ 8. 4.]
# [52. 36.]]
# 최대 오차 7.268e-09
# --- 문제 3: 행렬식은 부피 배율 -----------------------------------------
print(" det J(3,1) = %.1f" % np.linalg.det(J(*p)))
print(" 이론 (2x)^2+(2y)^2 = %.1f" % ((2*3.0)**2 + (2*1.0)**2))
side = 1e-3
sq = np.array([[0,0],[side,0],[side,side],[0,side]], float) + np.array(p)
img = np.array([F(*q) for q in sq])
def area(pts):
x, y = pts[:,0], pts[:,1]
return 0.5*abs(np.dot(x, np.roll(y,-1)) - np.dot(y, np.roll(x,-1)))
print(" 원래 정사각형 넓이 %.6e" % area(sq))
print(" 상이 이루는 사변형 넓이 %.6e" % area(img))
print(" 넓이 비 %.4f (det J = %.1f)" % (area(img)/area(sq), np.linalg.det(J(*p))))
# det J(3,1) = 40.0
# 이론 (2x)^2+(2y)^2 = 40.0
# 원래 정사각형 넓이 1.000000e-06
# 상이 이루는 사변형 넓이 4.001600e-05
# 넓이 비 40.0160 (det J = 40.0)
# 변을 더 줄이면 40 으로 수렴합니다. 남는 0.04% 가 이차 이상의 효과입니다.
# --- 문제 4: 극좌표 변환 -------------------------------------------------
P = lambda r, th: np.array([r*np.cos(th), r*np.sin(th)])
JP = lambda r, th: np.array([[np.cos(th), -r*np.sin(th)], [np.sin(th), r*np.cos(th)]])
for r, th in [(2.0, np.pi/6), (3.0, np.pi/3)]:
print(" r=%.1f th=%.4f det = %.6f (= r = %.1f)" % (r, th, np.linalg.det(JP(r, th)), r))
print(" r=0 에서 det = %.1f 이라 특이합니다" % np.linalg.det(JP(0.0, 0.5)))
# r=2.0 th=0.5236 det = 2.000000 (= r = 2.0)
# r=3.0 th=1.0472 det = 3.000000 (= r = 3.0)
# r=0 에서 det = 0.0 이라 특이합니다
# --- 문제 5: 기울기는 야코비의 특별한 경우 ------------------------------
f = lambda x, y: x**2*y
Jf = lambda x, y: np.array([[2*x*y, x**2]])
print(" f 의 야코비 (1x2) =", Jf(*p))
print(" grad f 는 그 전치 (2x1) =", Jf(*p).T.ravel())
print(" JG(u,v) 의 모양", JG(u, v).shape, " J(3,1) 의 모양", J(*p).shape)
# f 의 야코비 (1x2) = [[6. 9.]]
# grad f 는 그 전치 (2x1) = [6. 9.]
# JG(u,v) 의 모양 (2, 2) J(3,1) 의 모양 (2, 2)
# --- 심화 3: 역함수 정리 -------------------------------------------------
print(" F 의 야코비 역행렬 =\n", np.round(np.linalg.inv(J(*p)), 6))
Finv_J = np.linalg.inv(J(*p))
print(" det(J) * det(J^-1) = %.1f" % (np.linalg.det(J(*p))*np.linalg.det(Finv_J)))
print(" 원점에서 det J = %.1f 이라 F 는 국소 가역이 아닙니다" % np.linalg.det(J(0.0, 0.0)))
# F 의 야코비 역행렬 =
# [[ 0.15 0.05]
# [-0.05 0.15]]
# det(J) * det(J^-1) = 1.0
# 원점에서 det J = 0.0 이라 F 는 국소 가역이 아닙니다
세 결과가 이 강의의 요지입니다. 연쇄법칙이 행렬 곱이고, 행렬식이 부피 배율이며, 극좌표의 r이 그 배율입니다.
미분은 선형사상이고 야코비는 그 표현행렬입니다
이 문장으로 01단원을 닫습니다. 99강에서 한 차수를 올려 이차 근사로 갑니다.
- 야코비 행렬의 크기와 배열 규칙을 쓰세요.
- i번째 행이 무엇인지 쓰세요.
- 선형근사식을 쓰세요.
- 연쇄법칙의 행렬 형태를 쓰고 평가점을 밝히세요.
- 야코비 행렬식의 기하적 뜻을 쓰세요.
- 극좌표 변환의 행렬식과 넓이 요소를 쓰세요.
- 기울기 벡터와 야코비의 관계를 쓰세요.
- 헤세 행렬을 야코비로 표현하세요.
- 역함수 정리의 조건과 결론을 쓰세요.
- 모든 점에서 detJ=0이면 전역 가역입니까?
정답.
- m×n이며 행이 출력, 열이 입력입니다.
- i번째 출력 성분의 기울기 벡터입니다.
- F(a+h)≈F(a)+Jh입니다.
- JG∘F=JG(F(a))JF(a)이며 JG는 중간값에서 잽니다.
- 국소적인 부피 배율이며 부호는 방향 보존 여부입니다.
- detJ=r이고 dA=rdrdθ입니다.
- 야코비가 1×n이고 기울기는 그 전치입니다.
- Hf=J∇f입니다.
- C1이고 detJ=0이면 국소 가역이며 역의 야코비는 역행렬입니다.
- 아닙니다. z2이 반례이며 z와 −z가 겹칩니다.
| 기호 |
읽는 법 |
뜻 |
| JF |
야코비 행렬 |
m×n 편미분 행렬입니다 |
| detJ |
야코비 행렬식 |
국소 부피 배율입니다 |
| JGJF |
연쇄법칙 |
합성의 야코비입니다 |
| \nabla f^ |
기울기의 전치 |
1×n 야코비입니다 |
| H_{f}=J_ |
헤세 행렬 |
99강에서 다룹니다 |
| rdrdθ |
극좌표 넓이 요소 |
104강에서 씁니다 |
| u⊤J |
벡터-야코비 곱 |
역전파의 기본 연산입니다 |
| J\mathbf |
야코비-벡터 곱 |
순방향 미분의 연산입니다 |
| 역함수 정리 |
inverse function theorem |
detJ=0이면 국소 가역입니다 |
이것으로 01단원 다변수 미분이 끝납니다. 다음 99강부터 시작하는 02단원 이차 근사와 임계점에서는 선형근사로 부족한 자리, 즉 ∇f=0인 임계점을 다룹니다. 헤세 행렬을 세우고 87강의 양정치성 판정으로 최소와 최대와 안장을 가르며, 그 분류가 04단원 최적화 알고리즘의 전제가 됩니다.