96강에서 직선을 따라 걸었습니다.
γ ( t ) = a + t u ⟹ d d t f ( γ ( t ) ) ∣ t = 0 = ∇ f ⋅ u \gamma(t)=\mathbf{a}+t\mathbf{u}\quad\Longrightarrow\quad \frac{d}{dt}f(\gamma(t))\Big|_{t=0}=\nabla f\cdot\mathbf{u}
γ ( t ) = a + t u ⟹ d t d f ( γ ( t ) ) ∣ ∣ ∣ ∣ t = 0 = ∇ f ⋅ u
직선이 아니면 어떻게 될까요. 그리고 변수들이 서로 얽혀서, 하나를 흔들면 여럿이 함께 움직이면 어떻게 될까요.
이 질문이 실무에서 중요한 이유가 있습니다. 신경망의 손실은 이렇게 생겼습니다.
L ⟵ 출력 ⟵ 층 k ⟵ ⋯ ⟵ 층 1 ⟵ 가중치 L\ \longleftarrow\ \text{출력}\ \longleftarrow\ \text{층 }k\ \longleftarrow\ \cdots\ \longleftarrow\ \text{층 }1\ \longleftarrow\ \text{가중치}
L ⟵ 출력 ⟵ 층 k ⟵ ⋯ ⟵ 층 1 ⟵ 가중치
가중치 하나를 흔들면 그 뒤의 모든 것이 연쇄적으로 움직입니다. 손실이 얼마나 변하는지 알려면 그 연쇄를 따라가야 합니다.
40강에서 한 변수의 연쇄법칙을 배웠습니다.
d d x g ( f ( x ) ) = g ′ ( f ( x ) ) f ′ ( x ) \frac{d}{dx}g(f(x))=g'(f(x))\,f'(x)
d x d g ( f ( x ) ) = g ′ ( f ( x ) ) f ′ ( x )
다변수에서는 곱이 아니라 합이 됩니다. 흔들린 변수가 여러 경로로 결과에 도달하기 때문이며, 각 경로의 기여를 모두 더해야 합니다.
이 강의는 그 규칙을 세우고, 역전파가 이 규칙의 반복 적용일 뿐 임을 보입니다.
곡선을 따른 미분을 연쇄법칙으로 계산할 수 있습니다.
중간변수가 여럿인 경우의 연쇄법칙을 쓸 수 있습니다.
계산 그래프에서 경로를 세어 미분을 조립할 수 있습니다.
편미분과 전미분을 구별해 판정할 수 있습니다.
순방향과 역방향 계산의 비용 차이를 설명할 수 있습니다.
문제. f ( x , y ) = x 2 y f(x,y)=x^{2}yf ( x , y ) = x 2 y 와 곡선 γ ( t ) = ( cos t , sin t ) \gamma(t)=(\cos t,\sin t)γ ( t ) = ( cos t , sin t ) 를 봅니다.
(1) ∇ f \nabla f∇ f 와 γ ′ ( t ) \gamma'(t)γ ′ ( t ) 를 구하세요.
(2) ∇ f ( γ ( t ) ) ⋅ γ ′ ( t ) \nabla f(\gamma(t))\cdot\gamma'(t)∇ f ( γ ( t ) ) ⋅ γ ′ ( t ) 를 계산하세요.
(3) f ( γ ( t ) ) f(\gamma(t))f ( γ ( t ) ) 를 먼저 정리한 뒤 직접 미분해 비교하세요.
생각의 실마리. 곡선 위의 점은 시각 t tt 마다 하나씩 정해지므로 f ( γ ( t ) ) f(\gamma(t))f ( γ ( t ) ) 는 한 변수 함수 입니다. 미분할 수 있고, 그 값을 두 가지 방법으로 구해 맞춰 봅니다.
풀이. (1) ∇ f = ( 2 x y , x 2 ) \nabla f=(2xy,x^{2})∇ f = ( 2 x y , x 2 ) 이고 γ ′ ( t ) = ( − sin t , cos t ) \gamma'(t)=(-\sin t,\cos t)γ ′ ( t ) = ( − sin t , cos t ) 입니다.
(2) γ ( t ) = ( cos t , sin t ) \gamma(t)=(\cos t,\sin t)γ ( t ) = ( cos t , sin t ) 를 대입하면
∇ f ⋅ γ ′ = 2 cos t sin t ⋅ ( − sin t ) + 2 t ⋅ cos t = − 2 cos t 2 t + 3 t \nabla f\cdot\gamma'=2\cos t\sin t\cdot(-\sin t)+\cos^{2}t\cdot\cos t=-2\cos t\sin^{2}t+\cos^{3}t
∇ f ⋅ γ ′ = 2 cos t sin t ⋅ ( − sin t ) + cos 2 t ⋅ cos t = − 2 cos t sin 2 t + cos 3 t
(3) f ( γ ( t ) ) = 2 t sin t f(\gamma(t))=\cos^{2}t\sin tf ( γ ( t ) ) = cos 2 t sin t 이므로 곱의 미분으로
d d t ( 2 t sin t ) = − 2 cos t sin t ⋅ sin t + 2 t cos t \frac{d}{dt}\bigl(\cos^{2}t\sin t\bigr)=-2\cos t\sin t\cdot\sin t+\cos^{2}t\cos t
d t d ( cos 2 t sin t ) = − 2 cos t sin t ⋅ sin t + cos 2 t cos t
같습니다. 검산에서
t tt
연쇄법칙
직접미분
0.523599 0.5235990 . 5 2 3 5 9 9
+ 0.21650635 +0.21650635+ 0 . 2 1 6 5 0 6 3 5
+ 0.21650635 +0.21650635+ 0 . 2 1 6 5 0 6 3 5
0.785398 0.7853980 . 7 8 5 3 9 8
− 0.35355339 -0.35355339− 0 . 3 5 3 5 5 3 3 9
− 0.35355339 -0.35355339− 0 . 3 5 3 5 5 3 3 9
1.047198 1.0471981 . 0 4 7 1 9 8
− 0.62500000 -0.62500000− 0 . 6 2 5 0 0 0 0 0
− 0.62500000 -0.62500000− 0 . 6 2 5 0 0 0 0 0
이 문제에서 배우는 것: 경로를 따른 연쇄법칙.
정리. γ : R → R n \gamma:\mathbb{R}\to\mathbb{R}^{n}γ : R → R n 이 미분가능하고 f ff 가 γ ( t ) \gamma(t)γ ( t ) 에서 전미분가능하면
d d t f ( γ ( t ) ) = ∇ f ( γ ( t ) ) ⋅ γ ′ ( t ) \frac{d}{dt}f(\gamma(t))=\nabla f(\gamma(t))\cdot\gamma'(t)
d t d f ( γ ( t ) ) = ∇ f ( γ ( t ) ) ⋅ γ ′ ( t )
입니다.
96강의 공식이 특별한 경우로 들어갑니다. γ ( t ) = a + t u \gamma(t)=\mathbf{a}+t\mathbf{u}γ ( t ) = a + t u 이면 γ ′ ( t ) = u \gamma'(t)=\mathbf{u}γ ′ ( t ) = u 이므로 방향도함수가 됩니다.
경로
γ ′ \gamma'γ ′
결과
직선
u \mathbf{u}u (일정)
D u f D_{\mathbf{u}}fD u f
곡선
시각마다 다릅니다
순간 방향으로 잰 값
**곡선의 미분은 "지금 이 순간 어느 방향으로 얼마나 빠르게 가는가"**입니다. 따라서 이 정리는 다음과 같이 읽힙니다.
높이의 변화율 = 지형의 기울기 ⋅ 나의 속도 \text{높이의 변화율}=\text{지형의 기울기}\cdot\text{나의 속도}
높이의 변화율 = 지형의 기울기 ⋅ 나의 속도
산을 걷는 사람의 고도 변화율이 기울기와 걸음의 내적이라는 말이며, 방향이 어긋나면 그만큼 덜 오릅니다.
등고선 위를 걸으면 0 00 입니다. γ \gammaγ 가 등고선 위의 곡선이면 f ( γ ( t ) ) f(\gamma(t))f ( γ ( t ) ) 가 상수이므로 좌변이 0 00 이고, 따라서 ∇ f ⊥ γ ′ \nabla f\perp\gamma'∇ f ⊥ γ ′ 입니다. 95강 문제 4를 다시 증명한 셈 이며, 이번에는 곡선 매개화를 써서 더 직접적입니다.
바로 확인 1.
확인 1-1. 경로를 따른 연쇄법칙을 쓰세요.
답. d d t f ( γ ( t ) ) = ∇ f ⋅ γ ′ ( t ) \frac{d}{dt}f(\gamma(t))=\nabla f\cdot\gamma'(t)d t d f ( γ ( t ) ) = ∇ f ⋅ γ ′ ( t ) 입니다.
확인 1-2. 이 식에서 96강의 공식을 어떻게 얻습니까?
답. γ \gammaγ 를 직선으로 잡아 γ ′ = u \gamma'=\mathbf{u}γ ′ = u 로 두면 됩니다.
확인 1-3. 등고선 위의 곡선에서 이 값은 얼마입니까?
답. 0 00 입니다.
문제. z = x 2 + y 2 z=x^{2}+y^{2}z = x 2 + y 2 이고 x = s t x=stx = s t , y = s / t y=s/ty = s / t 입니다.
(1) ∂ z / ∂ s \partial z/\partial s∂ z / ∂ s 를 연쇄법칙으로 구하세요.
(2) ∂ z / ∂ t \partial z/\partial t∂ z / ∂ t 를 구하세요.
(3) s = 2 s=2s = 2 , t = 3 t=3t = 3 에서 값을 구하고 확인하세요.
생각의 실마리. s ss 를 흔들면 x xx 도 움직이고 y yy 도 움직입니다. 두 경로가 모두 z zz 에 도달 하므로 각각의 기여를 더해야 합니다.
풀이. (1) s ss 가 z zz 에 도달하는 경로가 둘입니다.
∂ z ∂ s = ∂ z ∂ x ∂ x ∂ s + ∂ z ∂ y ∂ y ∂ s = 2 x ⋅ t + 2 y ⋅ 1 t \frac{\partial z}{\partial s}=\frac{\partial z}{\partial x}\frac{\partial x}{\partial s}+\frac{\partial z}{\partial y}\frac{\partial y}{\partial s}=2x\cdot t+2y\cdot\frac1t
∂ s ∂ z = ∂ x ∂ z ∂ s ∂ x + ∂ y ∂ z ∂ s ∂ y = 2 x ⋅ t + 2 y ⋅ t 1
(2) 같은 방식으로
∂ z ∂ t = 2 x ⋅ s + 2 y ⋅ ( − s t 2 ) \frac{\partial z}{\partial t}=2x\cdot s+2y\cdot\left(-\frac{s}{t^{2}}\right)
∂ t ∂ z = 2 x ⋅ s + 2 y ⋅ ( − t 2 s )
(3) s = 2 s=2s = 2 , t = 3 t=3t = 3 이면 x = 6 x=6x = 6 , y = 2 / 3 y=2/3y = 2 / 3 입니다. 검산에서
미분
연쇄법칙
수치
∂ z / ∂ s \partial z/\partial s∂ z / ∂ s
+ 36.444444 +36.444444+ 3 6 . 4 4 4 4 4 4
+ 36.444444 +36.444444+ 3 6 . 4 4 4 4 4 4
∂ z / ∂ t \partial z/\partial t∂ z / ∂ t
+ 23.703704 +23.703704+ 2 3 . 7 0 3 7 0 4
+ 23.703704 +23.703704+ 2 3 . 7 0 3 7 0 4
이 문제에서 배우는 것: 다변수 연쇄법칙.
다변수 연쇄법칙. z = f ( x 1 , … , x n ) z=f(x_{1},\dots,x_{n})z = f ( x 1 , … , x n ) 이고 각 x i = x i ( t 1 , … , t m ) x_{i}=x_{i}(t_{1},\dots,t_{m})x i = x i ( t 1 , … , t m ) 이며 모두 미분가능하면
∂ z ∂ t j = ∑ i = 1 n ∂ z ∂ x i ∂ x i ∂ t j \frac{\partial z}{\partial t_{j}}=\sum_{i=1}^{n}\frac{\partial z}{\partial x_{i}}\frac{\partial x_{i}}{\partial t_{j}}
∂ t j ∂ z = i = 1 ∑ n ∂ x i ∂ z ∂ t j ∂ x i
입니다.
한 변수와의 차이가 합에 있습니다.
상황
형태
한 변수
\dfrac{dz}{dt}=\dfrac{dz}{dx}\dfrac{dx}
다변수
\dfrac{\partial z}{\partial t}=\sum_{i}\dfrac{\partial z}{\partial x_{i}}\dfrac{\partial x_{i}}
곱은 경로를 따라가는 일이고 합은 경로들을 모으는 일 입니다. 이 두 동작이 연쇄법칙의 전부이며, 문제 3에서 그림으로 정리합니다.
기억법이 하나 있습니다. 형태만 보면 ∂ x i \partial x_{i}∂ x i 가 약분되어 ∂ z / ∂ t \partial z/\partial t∂ z / ∂ t 가 될 것 같습니다.
∂ z ∂ x ∂ x ∂ t 에서 ∂ x 가 약분되는 것처럼 보입니다 \frac{\partial z}{\partial x}\frac{\partial x}{\partial t}\ \text{에서}\ \partial x\ \text{가 약분되는 것처럼 보입니다}
∂ x ∂ z ∂ t ∂ x 에서 ∂ x 가 약분되는 것처럼 보입니다
편리하지만 정당한 논증은 아닙니다. 94강 심화 3에서 ∂ x ∂ y ∂ y ∂ z ∂ z ∂ x = − 1 \frac{\partial x}{\partial y}\frac{\partial y}{\partial z}\frac{\partial z}{\partial x}=-1∂ y ∂ x ∂ z ∂ y ∂ x ∂ z = − 1 이었던 것을 떠올리면, 편미분을 분수로 다루는 일이 언제나 통하지는 않습니다. 기억을 돕는 장치로만 쓰고 근거로 쓰지 않습니다.
바로 확인 2.
확인 2-1. 다변수 연쇄법칙의 일반형을 쓰세요.
답. ∂ z / ∂ t j = ∑ i ( ∂ z / ∂ x i ) ( ∂ x i / ∂ t j ) \partial z/\partial t_{j}=\sum_{i}(\partial z/\partial x_{i})(\partial x_{i}/\partial t_{j})∂ z / ∂ t j = ∑ i ( ∂ z / ∂ x i ) ( ∂ x i / ∂ t j ) 입니다.
확인 2-2. 왜 합이 나옵니까?
답. 흔든 변수가 여러 경로로 결과에 도달하기 때문입니다.
확인 2-3. 곱과 합은 각각 무엇에 대응합니까?
답. 곱은 한 경로를 따라가는 일이고 합은 경로들을 모으는 일입니다.
문제. 다음 계산을 봅니다.
u = w x + b , y = tanh u , L = ( y − 목표 ) 2 u=wx+b,\qquad y=\tanh u,\qquad L=(y-\text{목표})^{2}
u = w x + b , y = tanh u , L = ( y − 목표 ) 2
w = 0.5 w=0.5w = 0 . 5 , x = 2 x=2x = 2 , b = 0.1 b=0.1b = 0 . 1 , 목표 = 0.3 =0.3= 0 . 3 입니다.
(1) u uu , y yy , L LL 을 차례로 구하세요.
(2) ∂ L / ∂ y \partial L/\partial y∂ L / ∂ y , ∂ y / ∂ u \partial y/\partial u∂ y / ∂ u , ∂ u / ∂ w \partial u/\partial w∂ u / ∂ w 를 구하세요.
(3) ∂ L / ∂ w \partial L/\partial w∂ L / ∂ w 를 구하세요.
생각의 실마리. w ww 에서 L LL 까지 가는 길이 하나뿐 입니다. 경로가 하나면 합할 것이 없으니 곱만 남습니다.
풀이. (1) 검산에서
u = 1.1000 , y = 0.8004990218 , L = 0.2504992708 u=1.1000,\qquad y=0.8004990218,\qquad L=0.2504992708
u = 1 . 1 0 0 0 , y = 0 . 8 0 0 4 9 9 0 2 1 8 , L = 0 . 2 5 0 4 9 9 2 7 0 8
(2) 각 마디의 국소 미분입니다.
미분
식
값
∂ L / ∂ y \partial L/\partial y∂ L / ∂ y
2 ( y − 목표 ) 2(y-\text{목표})2 ( y − 목표 )
1.0009980435 1.00099804351 . 0 0 0 9 9 8 0 4 3 5
∂ y / ∂ u \partial y/\partial u∂ y / ∂ u
1-y^
0.3592013162 0.35920131620 . 3 5 9 2 0 1 3 1 6 2
∂ u / ∂ w \partial u/\partial w∂ u / ∂ w
x xx
2.0 2.02 . 0
(3) 곱하면
∂ L ∂ w = 1.0009980435 × 0.3592013162 × 2.0 = 0.7191196294 \frac{\partial L}{\partial w}=1.0009980435\times0.3592013162\times2.0=0.7191196294
∂ w ∂ L = 1 . 0 0 0 9 9 8 0 4 3 5 × 0 . 3 5 9 2 0 1 3 1 6 2 × 2 . 0 = 0 . 7 1 9 1 1 9 6 2 9 4
검산의 수치 미분이 0.7191196293 0.71911962930 . 7 1 9 1 1 9 6 2 9 3 으로 마지막 자리만 다릅니다. 중심차분의 절단오차이며 94강 심화 5에서 본 크기입니다.
이 문제에서 배우는 것: 계산 그래프와 경로 규칙.
계산을 마디와 화살표로 그립니다.
w ⟶ u ⟶ y ⟶ L w\ \longrightarrow\ u\ \longrightarrow\ y\ \longrightarrow\ L
w ⟶ u ⟶ y ⟶ L
각 화살표에 국소 미분을 적어 두면 규칙이 단순합니다.
경로 규칙. 두 마디 사이의 미분은 모든 경로에 대해, 그 경로의 화살표들의 곱을 더한 것 입니다.
동작
언제
곱합니다
한 경로를 따라 이어질 때
더합니다
여러 경로가 같은 마디에 모일 때
문제 2를 이 규칙으로 다시 봅니다. s ss 에서 z zz 로 가는 경로가 s → x → z s\to x\to zs → x → z 와 s → y → z s\to y\to zs → y → z 둘이므로
∂ z ∂ s = ∂ x ∂ s ∂ z ∂ x ⏟ 경로 1 + ∂ y ∂ s ∂ z ∂ y ⏟ 경로 2 \frac{\partial z}{\partial s}=\underbrace{\frac{\partial x}{\partial s}\frac{\partial z}{\partial x}}_{\text{경로 1}}+\underbrace{\frac{\partial y}{\partial s}\frac{\partial z}{\partial y}}_{\text{경로 2}}
∂ s ∂ z = 경로 1 ∂ s ∂ x ∂ x ∂ z + 경로 2 ∂ s ∂ y ∂ y ∂ z
이 그림이 232강의 계산 그래프이고 233강의 역전파입니다. 이 문제의 tanh \tanhtanh 마디는 실제 신경망의 뉴런 하나이며, ∂ y / ∂ u = 1 − y 2 \partial y/\partial u=1-y^{2}∂ y / ∂ u = 1 − y 2 은 그 활성화 함수의 국소 미분입니다.
여기서 미리 볼 것이 하나 있습니다. ∣ ∂ y / ∂ u ∣ = ∣ 1 − y 2 ∣ ≤ 1 \lvert\partial y/\partial u\rvert=\lvert1-y^{2}\rvert\le1∣ ∂ y / ∂ u ∣ = ∣ 1 − y 2 ∣ ≤ 1 이고, y yy 가 ± 1 \pm1± 1 에 가까우면 이 값이 0 00 에 가까워집니다. 층을 여러 개 지나면 이런 인자가 계속 곱해집니다.
∂ L ∂ w 1 = ∂ L ∂ y k ∏ i = 1 k ( 국소 미분 ) \frac{\partial L}{\partial w_{1}}=\frac{\partial L}{\partial y_{k}}\prod_{i=1}^{k}(\text{국소 미분})
∂ w 1 ∂ L = ∂ y k ∂ L i = 1 ∏ k ( 국소 미분 )
작은 수를 여러 번 곱하면 지수적으로 작아집니다. 이것이 기울기 소실이며, 249강에서 정면으로 다룹니다. 문제의 뿌리가 연쇄법칙의 곱 구조에 있다는 점을 지금 확인해 둡니다.
바로 확인 3.
확인 3-1. 경로 규칙을 한 문장으로 쓰세요.
답. 각 경로의 화살표를 곱하고 경로들끼리 더합니다.
확인 3-2. tanh \tanhtanh 의 국소 미분을 쓰세요.
답. 1 − y 2 1-y^{2}1 − y 2 입니다.
확인 3-3. 기울기 소실이 연쇄법칙의 어떤 구조에서 옵니까?
답. 국소 미분들이 곱해지는 구조에서 옵니다.
문제. f ( x , y ) = x 2 + y 2 f(x,y)=x^{2}+y^{2}f ( x , y ) = x 2 + y 2 을 봅니다. 이번에는 y yy 가 독립변수가 아니라 y = x 2 y=x^{2}y = x 2 입니다.
(1) y yy 를 고정한 편미분 ∂ f / ∂ x \partial f/\partial x∂ f / ∂ x 를 구하세요.
(2) 경로 y = x 2 y=x^{2}y = x 2 를 따른 전미분 d f / d x df/dxd f / d x 를 구하세요.
(3) x = 1 , 2 , 3 x=1,2,3x = 1 , 2 , 3 에서 두 값을 비교하고, 어느 쪽이 실제 변화율인지 판정하세요.
생각의 실마리. 같은 기호 "x xx 로 미분"인데 y yy 를 붙들어 두느냐 따라 움직이게 두느냐 가 다릅니다. 94강에서 ∂ \partial∂ 과 d dd 를 구별한 이유가 여기서 값으로 나타납니다.
풀이. (1) y yy 를 상수로 보면
∂ f ∂ x = 2 x \frac{\partial f}{\partial x}=2x
∂ x ∂ f = 2 x
(2) y = x 2 y=x^{2}y = x 2 이 x xx 에 따라 움직이므로 연쇄법칙을 씁니다.
d f d x = ∂ f ∂ x + ∂ f ∂ y d y d x = 2 x + 2 y ⋅ 2 x = 2 x + 4 x 3 \frac{df}{dx}=\frac{\partial f}{\partial x}+\frac{\partial f}{\partial y}\frac{dy}{dx}=2x+2y\cdot2x=2x+4x^{3}
d x d f = ∂ x ∂ f + ∂ y ∂ f d x d y = 2 x + 2 y ⋅ 2 x = 2 x + 4 x 3
(3) 검산에서
x xx
부분 ∂ f / ∂ x \partial f/\partial x∂ f / ∂ x
전체 d f / d x df/dxd f / d x
수치
1 11
2 22
6 66
6.000000 6.0000006 . 0 0 0 0 0 0
2 22
4 44
36 363 6
36.000000 36.0000003 6 . 0 0 0 0 0 0
3 33
6 66
114 1141 1 4
114.000000 114.0000001 1 4 . 0 0 0 0 0 0
실제 변화율은 전미분입니다. x = 3 x=3x = 3 에서 19 191 9 배 차이가 납니다.
직접 확인해도 같습니다. y = x 2 y=x^{2}y = x 2 을 대입하면 f = x 2 + x 4 f=x^{2}+x^{4}f = x 2 + x 4 이고 미분하면 2 x + 4 x 3 2x+4x^{3}2 x + 4 x 3 입니다.
이 문제에서 배우는 것: 무엇이 따라 움직이는지를 먼저 정합니다.
판정 절차. 미분하기 전에 (가) 어떤 변수가 독립인지, (나) 나머지가 그것에 어떻게 의존하는지를 적습니다. 의존하는 변수가 있으면 편미분만으로는 부족하고 연쇄항을 더해야 합니다.
혼동을 막는 표기가 있습니다.
표기
뜻
∂ f / ∂ x \partial f/\partial x∂ f / ∂ x
y yy 를 고정합니다
d f / d x df/dxd f / d x
y yy 가 x xx 를 따라 움직입니다
(\partial f/\partial x)_
고정한 것을 명시합니다
셋째 줄이 94강 심화 4에서 본 열역학 표기 입니다. 무엇을 고정했는지가 실험 조건이라 반드시 밝힙니다.
이 구별이 기계학습에서 실제 오류를 만듭니다. 손실 L ( θ ) L(\theta)L ( θ ) 를 미분할 때, θ \thetaθ 에 의존하는 중간값을 상수로 취급하면 틀린 기울기가 나옵니다. 대표적인 예가 다음 둘입니다.
상황
무엇을 놓치는가
정규화 통계량
배치 평균과 분산이 θ \thetaθ 에 의존합니다
목표값 분리
의도적으로 연쇄를 끊습니다
둘째 줄은 실수가 아니라 설계 입니다. 강화학습의 목표망은 일부러 기울기를 끊어 학습을 안정시키며, 283강에서 그 이유를 다룹니다. 의도적으로 끊는 것과 실수로 빠뜨리는 것을 구별하려면 이 강의의 판정 절차가 필요합니다.
바로 확인 4.
확인 4-1. ∂ f / ∂ x \partial f/\partial x∂ f / ∂ x 와 d f / d x df/dxd f / d x 의 차이를 쓰세요.
답. 앞은 다른 변수를 고정하고 뒤는 따라 움직이게 둡니다.
확인 4-2. y = x 2 y=x^{2}y = x 2 일 때 d f / d x df/dxd f / d x 의 식을 쓰세요.
답. f x + f y ⋅ 2 x f_{x}+f_{y}\cdot2xf x + f y ⋅ 2 x 입니다.
확인 4-3. 미분하기 전에 먼저 정할 것은 무엇입니까?
답. 어떤 변수가 독립이고 나머지가 어떻게 의존하는지입니다.
문제. 세 단계 합성의 미분이 야코비 행렬의 곱이라 합니다.
J = J 3 J 2 J 1 , J 3 ∈ R 1 × 100 , J 2 ∈ R 100 × 500 , J 1 ∈ R 500 × 1000 J=J_{3}J_{2}J_{1},\qquad J_{3}\in\mathbb{R}^{1\times100},\ J_{2}\in\mathbb{R}^{100\times500},\ J_{1}\in\mathbb{R}^{500\times1000}
J = J 3 J 2 J 1 , J 3 ∈ R 1 × 1 0 0 , J 2 ∈ R 1 0 0 × 5 0 0 , J 1 ∈ R 5 0 0 × 1 0 0 0
(1) 왼쪽부터 곱할 때의 곱셈 횟수를 구하세요.
(2) 오른쪽부터 곱할 때의 횟수를 구하세요.
(3) 어느 쪽이 유리한지 판정하세요.
생각의 실마리. 행렬 곱은 결합법칙이 성립하므로 결과는 같습니다. 그런데 66강에서 본 것처럼 곱셈 횟수는 순서에 따라 달라집니다.
풀이. (1) ( J 3 J 2 ) (J_{3}J_{2})( J 3 J 2 ) 를 먼저 하면 1 × 100 1\times1001 × 1 0 0 과 100 × 500 100\times5001 0 0 × 5 0 0 의 곱이라 1 ⋅ 100 ⋅ 500 1\cdot100\cdot5001 ⋅ 1 0 0 ⋅ 5 0 0 번입니다. 결과가 1 × 500 1\times5001 × 5 0 0 이고 여기에 J 1 J_{1}J 1 을 곱하면 1 ⋅ 500 ⋅ 1000 1\cdot500\cdot10001 ⋅ 5 0 0 ⋅ 1 0 0 0 번입니다.
100 × 500 + 500 × 1000 = 550000 100\times500+500\times1000=550000
1 0 0 × 5 0 0 + 5 0 0 × 1 0 0 0 = 5 5 0 0 0 0
(2) ( J 2 J 1 ) (J_{2}J_{1})( J 2 J 1 ) 을 먼저 하면 100 ⋅ 500 ⋅ 1000 100\cdot500\cdot10001 0 0 ⋅ 5 0 0 ⋅ 1 0 0 0 번이고 결과가 100 × 1000 100\times10001 0 0 × 1 0 0 0 입니다. 여기에 J 3 J_{3}J 3 을 곱하면 1 ⋅ 100 ⋅ 1000 1\cdot100\cdot10001 ⋅ 1 0 0 ⋅ 1 0 0 0 번입니다.
100 × 500 × 1000 + 100 × 1000 = 50100000 100\times500\times1000+100\times1000=50100000
1 0 0 × 5 0 0 × 1 0 0 0 + 1 0 0 × 1 0 0 0 = 5 0 1 0 0 0 0 0
(3) 검산에서
방식
곱셈 횟수
왼쪽부터
550000 5500005 5 0 0 0 0
오른쪽부터
50100000 501000005 0 1 0 0 0 0 0
비율
91.1 91.19 1 . 1 배
왼쪽부터가 압도적으로 유리합니다.
이 문제에서 배우는 것: 역방향 미분.
두 방식에 이름이 있습니다.
이름
곱하는 순서
유리한 경우
순방향 미분
입력 쪽부터
입력이 적고 출력이 많을 때
역방향 미분
출력 쪽부터
입력이 많고 출력이 적을 때
왼쪽부터 곱하는 것이 역방향입니다. J 3 J_{3}J 3 이 출력 쪽 야코비이기 때문입니다.
왜 이렇게 차이가 나는지는 행렬의 모양에 있습니다. 왼쪽부터 곱하면 언제나 행이 하나인 벡터 를 들고 다닙니다. 오른쪽부터 곱하면 중간에 100 × 1000 100\times10001 0 0 × 1 0 0 0 짜리 큰 행렬이 만들어집니다.
( 1 × 100 ) ( 100 × 500 ) ⏟ 벡터가 유지됩니다 vs ( 100 × 500 ) ( 500 × 1000 ) ⏟ 큰 행렬이 생깁니다 \underbrace{(1\times100)(100\times500)}_{\text{벡터가 유지됩니다}}\quad\text{vs}\quad\underbrace{(100\times500)(500\times1000)}_{\text{큰 행렬이 생깁니다}}
벡터가 유지됩니다 ( 1 × 1 0 0 ) ( 1 0 0 × 5 0 0 ) vs 큰 행렬이 생깁니다 ( 1 0 0 × 5 0 0 ) ( 5 0 0 × 1 0 0 0 )
출력이 하나인 것이 결정적 입니다. 손실함수는 스칼라 하나를 내놓으므로 언제나 이 상황이며, 그래서 딥러닝은 예외 없이 역방향을 씁니다.
L : R ( 파라미터 수 ) → R L:\mathbb{R}^{(\text{파라미터 수})}\to\mathbb{R}
L : R ( 파라미터 수 ) → R
파라미터가 수십억 개여도 출력이 하나라 역방향 한 번 이면 모든 편미분이 나옵니다. 순방향이면 파라미터마다 한 번씩 훑어야 합니다.
방식
기울기 전체를 얻는 비용
수치미분
함수 평가 n nn 번
순방향 자동미분
함수 평가 n nn 번 규모
역방향 자동미분
함수 평가 몇 번 규모
94강 심화 5에서 "수치미분을 쓰지 않는다"고 한 이유가 여기 있습니다. 정확도 문제만이 아니라 비용이 파라미터 수에 비례합니다. 역방향은 그렇지 않습니다.
대신 대가가 있습니다. 역방향은 순전파의 중간값들을 저장해 두어야 국소 미분을 계산할 수 있습니다. 문제 3에서 ∂ y / ∂ u = 1 − y 2 \partial y/\partial u=1-y^{2}∂ y / ∂ u = 1 − y 2 을 쓰려면 y yy 를 기억해야 합니다. 메모리를 써서 계산을 줄이는 거래 이며, 233강에서 이 균형을 다룹니다.
바로 확인 5.
확인 5-1. 역방향 미분은 어느 쪽부터 곱합니까?
답. 출력 쪽부터입니다.
확인 5-2. 출력이 하나일 때 어느 방식이 유리합니까?
답. 역방향입니다.
확인 5-3. 역방향이 치르는 대가는 무엇입니까?
답. 순전파의 중간값을 저장해야 하는 메모리 비용입니다.
형태
식
경로 하나
d d t f ( γ ( t ) ) = ∇ f ⋅ γ ′ \dfrac{d}{dt}f(\gamma(t))=\nabla f\cdot\gamma'd t d f ( γ ( t ) ) = ∇ f ⋅ γ ′
중간변수 여럿
\dfrac{\partial z}{\partial t}=\sum_{i}\dfrac{\partial z}{\partial x_{i}}\dfrac{\partial x_{i}}
경로 규칙
경로마다 곱하고 경로끼리 더합니다
행렬 형태
J = J k ⋯ J 1 J=J_{k}\cdots J_{1}J = J k ⋯ J 1 (98강)
구별
뜻
∂ f / ∂ x \partial f/\partial x∂ f / ∂ x
나머지를 고정합니다
d f / d x df/dxd f / d x
나머지가 따라 움직입니다
순방향
입력 쪽부터 곱합니다
역방향
출력 쪽부터 곱합니다
자주 하는 실수
바로잡기
연쇄항을 빠뜨립니다
의존하는 변수를 먼저 적습니다
∂ \partial∂ 을 분수로 약분합니다
기억법일 뿐입니다
곱만 하고 합을 잊습니다
경로가 여럿이면 더합니다
출력이 하나인데 순방향을 씁니다
역방향이 훨씬 쌉니다
문제 6. z = x 2 + y z=x^{2}+yz = x 2 + y , x = t x=tx = t , y = t 3 y=t^{3}y = t 3 일 때 d z / d t dz/dtd z / d t 를 구하세요.
답. 2 x ⋅ 1 + 1 ⋅ 3 t 2 = 2 t + 3 t 2 2x\cdot1+1\cdot3t^{2}=2t+3t^{2}2 x ⋅ 1 + 1 ⋅ 3 t 2 = 2 t + 3 t 2 입니다.
문제 7. z = x y z=xyz = x y , x = cos t x=\cos tx = cos t , y = sin t y=\sin ty = sin t 일 때 d z / d t dz/dtd z / d t 를 구하세요.
답. y ( − sin t ) + x cos t = 2 t − 2 t = cos 2 t y(-\sin t)+x\cos t=\cos^{2}t-\sin^{2}t=\cos2ty ( − sin t ) + x cos t = cos 2 t − sin 2 t = cos 2 t 입니다.
문제 8. z = e x y z=e^{xy}z = e x y , x = s + t x=s+tx = s + t , y = s − t y=s-ty = s − t 일 때 ∂ z / ∂ s \partial z/\partial s∂ z / ∂ s 를 구하세요.
답. y e x y ⋅ 1 + x e x y ⋅ 1 = ( x + y ) e x y = 2 s e s 2 − t 2 ye^{xy}\cdot1+xe^{xy}\cdot1=(x+y)e^{xy}=2s\,e^{s^{2}-t^{2}}y e x y ⋅ 1 + x e x y ⋅ 1 = ( x + y ) e x y = 2 s e s 2 − t 2 입니다.
문제 9. 문제 8에서 ∂ z / ∂ t \partial z/\partial t∂ z / ∂ t 를 구하세요.
답. y e x y − x e x y = ( y − x ) e x y = − 2 t e s 2 − t 2 ye^{xy}-xe^{xy}=(y-x)e^{xy}=-2t\,e^{s^{2}-t^{2}}y e x y − x e x y = ( y − x ) e x y = − 2 t e s 2 − t 2 입니다.
문제 10. w = f ( x , y , z ) w=f(x,y,z)w = f ( x , y , z ) 이고 셋 모두 t tt 의 함수이면 d w / d t dw/dtd w / d t 를 쓰세요.
답. f x x ′ + f y y ′ + f z z ′ f_{x}x'+f_{y}y'+f_{z}z'f x x ′ + f y y ′ + f z z ′ 입니다.
문제 11. z = f ( x , y ) z=f(x,y)z = f ( x , y ) , y = g ( x ) y=g(x)y = g ( x ) 일 때 d z / d x dz/dxd z / d x 를 쓰세요.
답. f x + f y g ′ ( x ) f_{x}+f_{y}g'(x)f x + f y g ′ ( x ) 입니다.
문제 12. f = x 2 + y 2 f=x^{2}+y^{2}f = x 2 + y 2 , y = 3 x y=3xy = 3 x 일 때 x = 1 x=1x = 1 에서 d f / d x df/dxd f / d x 를 구하세요.
답. 2 x + 2 y ⋅ 3 = 2 + 18 = 20 2x+2y\cdot3=2+18=202 x + 2 y ⋅ 3 = 2 + 1 8 = 2 0 입니다.
문제 13. σ ( u ) = 1 / ( 1 + e − u ) \sigma(u)=1/(1+e^{-u})σ ( u ) = 1 / ( 1 + e − u ) 의 국소 미분을 σ \sigmaσ 로 표현하세요.
답. σ ( 1 − σ ) \sigma(1-\sigma)σ ( 1 − σ ) 입니다.
문제 14. L = ( y − c ) 2 L=(y-c)^{2}L = ( y − c ) 2 , y = σ ( u ) y=\sigma(u)y = σ ( u ) 일 때 ∂ L / ∂ u \partial L/\partial u∂ L / ∂ u 를 쓰세요.
답. 2 ( y − c ) σ ( 1 − σ ) 2(y-c)\sigma(1-\sigma)2 ( y − c ) σ ( 1 − σ ) 입니다.
문제 15. 경로가 셋이면 미분은 어떻게 조립합니까?
답. 세 경로 각각의 곱을 구해 모두 더합니다.
문제 16. 입력 1 11 개, 출력 1000 10001 0 0 0 개인 함수의 기울기는 어느 방식이 유리합니까?
답. 순방향입니다. 입력이 적기 때문입니다.
문제 17. 파라미터 1 0 9 10^{9}1 0 9 개, 손실 하나인 신경망은 어느 방식입니까?
답. 역방향입니다.
문제 18. 역방향 계산에 저장이 필요한 이유를 쓰세요.
답. 각 마디의 국소 미분을 계산하려면 순전파의 중간값이 필요하기 때문입니다.
심화 1. 다변수 연쇄법칙을 증명하세요.
z = f ( x ) z=f(\mathbf{x})z = f ( x ) 이고 x = x ( t ) \mathbf{x}=\mathbf{x}(t)x = x ( t ) 라 합니다. f ff 는 a = x ( t 0 ) \mathbf{a}=\mathbf{x}(t_{0})a = x ( t 0 ) 에서 전미분가능하고 x \mathbf{x}x 는 t 0 t_{0}t 0 에서 미분가능하다고 둡니다.
증명. Δ x = x ( t 0 + Δ t ) − x ( t 0 ) \Delta\mathbf{x}=\mathbf{x}(t_{0}+\Delta t)-\mathbf{x}(t_{0})Δ x = x ( t 0 + Δ t ) − x ( t 0 ) 이라 두면 x \mathbf{x}x 의 미분가능성에서
Δ x = x ′ ( t 0 ) Δ t + o ( ∣ Δ t ∣ ) \Delta\mathbf{x}=\mathbf{x}'(t_{0})\Delta t+o(\lvert\Delta t\rvert)
Δ x = x ′ ( t 0 ) Δ t + o ( ∣ Δ t ∣ )
입니다. f ff 의 전미분가능성에서
f ( a + Δ x ) − f ( a ) = ∇ f ( a ) ⋅ Δ x + o ( ∥ Δ x ∥ ) f(\mathbf{a}+\Delta\mathbf{x})-f(\mathbf{a})=\nabla f(\mathbf{a})\cdot\Delta\mathbf{x}+o(\lVert\Delta\mathbf{x}\rVert)
f ( a + Δ x ) − f ( a ) = ∇ f ( a ) ⋅ Δ x + o ( ∥ Δ x ∥ )
첫 식을 둘째 식에 넣으면
Δ z = ∇ f ( a ) ⋅ ( x ′ ( t 0 ) Δ t + o ( ∣ Δ t ∣ ) ) + o ( ∥ Δ x ∥ ) \Delta z=\nabla f(\mathbf{a})\cdot\bigl(\mathbf{x}'(t_{0})\Delta t+o(\lvert\Delta t\rvert)\bigr)+o(\lVert\Delta\mathbf{x}\rVert)
Δ z = ∇ f ( a ) ⋅ ( x ′ ( t 0 ) Δ t + o ( ∣ Δ t ∣ ) ) + o ( ∥ Δ x ∥ )
양변을 Δ t \Delta tΔ t 로 나눕니다. 첫 항은 ∇ f ⋅ x ′ ( t 0 ) \nabla f\cdot\mathbf{x}'(t_{0})∇ f ⋅ x ′ ( t 0 ) 을 주고, 둘째 항은 ∇ f \nabla f∇ f 가 유계라 0 00 으로 갑니다. 셋째 항은 ∥ Δ x ∥ ≤ C ∣ Δ t ∣ \lVert\Delta\mathbf{x}\rVert\le C\lvert\Delta t\rvert∥ Δ x ∥ ≤ C ∣ Δ t ∣ 이므로
o ( ∥ Δ x ∥ ) Δ t = o ( ∥ Δ x ∥ ) ∥ Δ x ∥ ⋅ ∥ Δ x ∥ ∣ Δ t ∣ ⋅ ( ± 1 ) ⟶ 0 \frac{o(\lVert\Delta\mathbf{x}\rVert)}{\Delta t}=\frac{o(\lVert\Delta\mathbf{x}\rVert)}{\lVert\Delta\mathbf{x}\rVert}\cdot\frac{\lVert\Delta\mathbf{x}\rVert}{\lvert\Delta t\rvert}\cdot(\pm1)\ \longrightarrow\ 0
Δ t o ( ∥ Δ x ∥ ) = ∥ Δ x ∥ o ( ∥ Δ x ∥ ) ⋅ ∣ Δ t ∣ ∥ Δ x ∥ ⋅ ( ± 1 ) ⟶ 0
입니다. 따라서
d z d t = ∇ f ( a ) ⋅ x ′ ( t 0 ) ■ \frac{dz}{dt}=\nabla f(\mathbf{a})\cdot\mathbf{x}'(t_{0})\qquad\blacksquare
d t d z = ∇ f ( a ) ⋅ x ′ ( t 0 ) ■
증명이 전미분가능성을 정확히 필요로 합니다. 편미분만 있으면 둘째 식이 성립하지 않아 첫 줄부터 진행되지 않습니다. 96강 문제 5의 함수를 여기에 넣으면 연쇄법칙도 깨집니다.
셋째 항의 처리가 증명의 핵심 입니다. Δ x \Delta\mathbf{x}Δ x 가 0 00 으로 가는 속도가 Δ t \Delta tΔ t 에 비례한다는 사실을 썼는데, 이것이 x \mathbf{x}x 의 미분가능성에서 나옵니다. 두 미분가능성이 각각 한 번씩 쓰입니다.
심화 2. 연쇄법칙을 행렬로 쓰세요.
95강 심화 5에서 미분이 선형사상이라 했습니다. 그 관점에서 연쇄법칙은 한 줄입니다.
D ( g ∘ f ) ( a ) = D g ( f ( a ) ) ∘ D f ( a ) D(g\circ f)(\mathbf{a})=Dg(f(\mathbf{a}))\circ Df(\mathbf{a})
D ( g ∘ f ) ( a ) = D g ( f ( a ) ) ∘ D f ( a )
합성함수의 선형근사는 선형근사의 합성 이라는 뜻이며, 이것이 전부입니다. 확인해 보면
g ( f ( a + h ) ) ≈ g ( f ( a ) + D f ( a ) h ) ≈ g ( f ( a ) ) + D g ( f ( a ) ) D f ( a ) h g(f(\mathbf{a}+\mathbf{h}))\approx g\bigl(f(\mathbf{a})+Df(\mathbf{a})\mathbf{h}\bigr)\approx g(f(\mathbf{a}))+Dg(f(\mathbf{a}))\,Df(\mathbf{a})\,\mathbf{h}
g ( f ( a + h ) ) ≈ g ( f ( a ) + D f ( a ) h ) ≈ g ( f ( a ) ) + D g ( f ( a ) ) D f ( a ) h
이고 마지막 줄의 계수가 곧 D ( g ∘ f ) D(g\circ f)D ( g ∘ f ) 입니다.
표현행렬로 옮기면 행렬 곱 입니다. 77강에서 합성의 표현행렬이 표현행렬의 곱이라 했으므로
J g ∘ f = J g J f J_{g\circ f}=J_{g}\,J_{f}
J g ∘ f = J g J f
성분으로 풀어 쓰면 문제 2의 공식이 됩니다.
( J g ∘ f ) i j = ∑ k ( J g ) i k ( J f ) k j ⟺ ∂ z i ∂ t j = ∑ k ∂ z i ∂ x k ∂ x k ∂ t j (J_{g\circ f})_{ij}=\sum_{k}(J_{g})_{ik}(J_{f})_{kj}\quad\Longleftrightarrow\quad \frac{\partial z_{i}}{\partial t_{j}}=\sum_{k}\frac{\partial z_{i}}{\partial x_{k}}\frac{\partial x_{k}}{\partial t_{j}}
( J g ∘ f ) i j = k ∑ ( J g ) i k ( J f ) k j ⟺ ∂ t j ∂ z i = k ∑ ∂ x k ∂ z i ∂ t j ∂ x k
**행렬 곱의 정의 자체가 "경로마다 곱하고 경로끼리 더한다"**입니다. 66강에서 행렬 곱을 정의할 때 왜 그런 모양이었는지가 여기서 답을 얻습니다.
관점
연쇄법칙
성분
경로의 곱을 더합니다
행렬
J_{g}J_
선형사상
합성입니다
계산 그래프
화살표를 따라 곱합니다
네 가지가 같은 것 이며, 98강에서 야코비 행렬을 정식으로 정의해 이 그림을 완성합니다.
문제 5에서 곱셈 순서를 골랐던 것도 이 관점에서 자연스럽습니다. 행렬 곱의 결합법칙이 순방향과 역방향의 자유를 줍니다. 결과는 같고 비용만 다릅니다.
심화 3. 음함수 미분을 연쇄법칙으로 다시 유도하세요.
94강 심화 3에서 결과만 썼던 식을 이제 정식으로 유도합니다.
F ( x , y , z ) = 0 F(x,y,z)=0F ( x , y , z ) = 0 이고 이 관계가 z zz 를 x , y x,yx , y 의 함수로 정한다고 합니다. x xx 로 편미분합니다. 좌변에서 x xx 가 F FF 에 도달하는 경로가 둘입니다.
x ⟶ F (직접) , x ⟶ z ⟶ F x\ \longrightarrow\ F\ \text{(직접)},\qquad x\ \longrightarrow\ z\ \longrightarrow\ F
x ⟶ F ( 직접 ) , x ⟶ z ⟶ F
경로 규칙에 의해
∂ F ∂ x + ∂ F ∂ z ∂ z ∂ x = 0 \frac{\partial F}{\partial x}+\frac{\partial F}{\partial z}\frac{\partial z}{\partial x}=0
∂ x ∂ F + ∂ z ∂ F ∂ x ∂ z = 0
우변은 상수 0 00 을 미분한 것이라 0 00 입니다. 따라서 F z ≠ 0 F_{z}\ne0F z = 0 이면
∂ z ∂ x = − F x F z \frac{\partial z}{\partial x}=-\frac{F_{x}}{F_{z}}
∂ x ∂ z = − F z F x
음수 부호가 어디서 왔는지가 이제 분명합니다. F FF 가 상수로 유지되려면 x xx 가 만든 변화를 z zz 가 상쇄해야 하고, 그 상쇄가 음수 부호입니다.
등위집합 위에 머무르려면 변화들이 서로를 지워야 합니다 \text{등위집합 위에 머무르려면 변화들이 서로를 지워야 합니다}
등위집합 위에 머무르려면 변화들이 서로를 지워야 합니다
이 관점에서 94강 심화 3의 − 1 -1− 1 관계식도 자연스럽습니다.
∂ x ∂ y ∂ y ∂ z ∂ z ∂ x = ( − 1 ) 3 ⋅ F y F x F z F y F x F z = − 1 \frac{\partial x}{\partial y}\frac{\partial y}{\partial z}\frac{\partial z}{\partial x}=(-1)^{3}\cdot\frac{F_{y}}{F_{x}}\frac{F_{z}}{F_{y}}\frac{F_{x}}{F_{z}}=-1
∂ y ∂ x ∂ z ∂ y ∂ x ∂ z = ( − 1 ) 3 ⋅ F x F y F y F z F z F x = − 1
세 번의 상쇄가 음수 부호를 셋 만들어 냅니다.
같은 논법이 라그랑주 승수법과 이어집니다. 113강에서 제약 g = 0 g=0g = 0 위를 움직이는데, 그 위에 머무르려면 변위가 ∇ g \nabla g∇ g 에 수직이어야 합니다. 이 조건이 여기서 나온 상쇄와 같은 것입니다.
심화 4. 오일러의 동차함수 정리를 연쇄법칙으로 증명하세요.
동차함수. 모든 t > 0 t>0t > 0 에 대해 f ( t x ) = t k f ( x ) f(t\mathbf{x})=t^{k}f(\mathbf{x})f ( t x ) = t k f ( x ) 이면 f ff 를 k kk 차 동차함수라 합니다.
예를 들어 f = x 3 + x y 2 f=x^{3}+xy^{2}f = x 3 + x y 2 은 f ( t x , t y ) = t 3 x 3 + t 3 x y 2 = t 3 f f(tx,ty)=t^{3}x^{3}+t^{3}xy^{2}=t^{3}ff ( t x , t y ) = t 3 x 3 + t 3 x y 2 = t 3 f 이므로 3 33 차 동차입니다.
오일러 정리. f ff 가 미분가능한 k kk 차 동차함수이면
x ⋅ ∇ f ( x ) = k f ( x ) \mathbf{x}\cdot\nabla f(\mathbf{x})=k\,f(\mathbf{x})
x ⋅ ∇ f ( x ) = k f ( x )
입니다.
증명. 정의식의 양변을 t tt 로 미분합니다. 좌변은 연쇄법칙으로
d d t f ( t x ) = ∇ f ( t x ) ⋅ x \frac{d}{dt}f(t\mathbf{x})=\nabla f(t\mathbf{x})\cdot\mathbf{x}
d t d f ( t x ) = ∇ f ( t x ) ⋅ x
우변은
d d t ( t k f ( x ) ) = k t k − 1 f ( x ) \frac{d}{dt}\bigl(t^{k}f(\mathbf{x})\bigr)=k\,t^{k-1}f(\mathbf{x})
d t d ( t k f ( x ) ) = k t k − 1 f ( x )
두 식이 모든 t > 0 t>0t > 0 에서 같으므로 t = 1 t=1t = 1 을 넣으면
∇ f ( x ) ⋅ x = k f ( x ) ■ \nabla f(\mathbf{x})\cdot\mathbf{x}=k\,f(\mathbf{x})\qquad\blacksquare
∇ f ( x ) ⋅ x = k f ( x ) ■
검산에서 f = x 3 + x y 2 f=x^{3}+xy^{2}f = x 3 + x y 2 에 대해
점
xf_{x}+yf_
3 f 3f3 f
( 2 , 1 ) (2,1)( 2 , 1 )
30.0 30.03 0 . 0
30.0 30.03 0 . 0
( 1 , 3 ) (1,3)( 1 , 3 )
30.0 30.03 0 . 0
30.0 30.03 0 . 0
두 점에서 값이 같은 것은 우연 입니다. f ( 2 , 1 ) = 8 + 2 = 10 f(2,1)=8+2=10f ( 2 , 1 ) = 8 + 2 = 1 0 이고 f ( 1 , 3 ) = 1 + 9 = 10 f(1,3)=1+9=10f ( 1 , 3 ) = 1 + 9 = 1 0 이라 함숫값이 같았습니다.
이 정리가 쓰이는 자리를 적어 둡니다.
분야
쓰임
경제학
규모수익과 생산함수의 분배
열역학
시량변수의 성질
기계학습
ReLU 망의 1 11 차 동차성
셋째 줄이 최근의 응용입니다. 편향이 없는 ReLU 신경망은 가중치에 대해 양의 동차성을 가지므로, 가중치를 상수배해도 출력이 그에 비례합니다. 이 성질이 정규화와 학습률의 상호작용을 설명하며, 211강과 관련됩니다.
심화 5. 순방향과 역방향의 비용을 일반적으로 비교하세요.
문제 5를 일반화합니다. f : R n → R m f:\mathbb{R}^{n}\to\mathbb{R}^{m}f : R n → R m 이 k kk 단계 합성이라 하고 각 단계의 폭을 d 0 = n d_{0}=nd 0 = n , d 1 , … , d k = m d_{1},\dots,d_{k}=md 1 , … , d k = m 이라 합니다.
J = J k J k − 1 ⋯ J 1 , J i ∈ R d i × d i − 1 J=J_{k}J_{k-1}\cdots J_{1},\qquad J_{i}\in\mathbb{R}^{d_{i}\times d_{i-1}}
J = J k J k − 1 ⋯ J 1 , J i ∈ R d i × d i − 1
역방향(왼쪽부터). 매 단계 m × d i m\times d_{i}m × d i 행렬을 들고 다니므로
비용 = m ∑ i = 1 k d i − 1 \text{비용}=m\sum_{i=1}^{k}d_{i-1}
비용 = m i = 1 ∑ k d i − 1
순방향(오른쪽부터). 매 단계 d i × n d_{i}\times nd i × n 행렬을 들고 다니므로
비용 = n ∑ i = 1 k d i \text{비용}=n\sum_{i=1}^{k}d_{i}
비용 = n i = 1 ∑ k d i
**비율이 대략 m / n m/nm / n **입니다. 결론이 단순합니다.
상황
유리한 방식
예
m ≪ n m\ll nm ≪ n
역방향
손실함수의 기울기
m ≫ n m\gg nm ≫ n
순방향
한 파라미터에 대한 모든 출력의 민감도
m ≈ n m\approx nm ≈ n
비슷합니다
야코비 전체가 필요할 때
딥러닝은 언제나 첫째 줄 입니다. m = 1 m=1m = 1 이고 n nn 이 수십억이므로 역방향이 n nn 배 유리합니다.
둘째 줄도 실제로 쓰입니다. 물리 시뮬레이션에서 입력 파라미터 몇 개에 대한 수많은 출력의 민감도를 볼 때가 그렇습니다.
중간 형태도 있습니다. 야코비 전체가 필요하면 어느 쪽도 확실히 유리하지 않고, 최적 곱셈 순서를 찾는 문제 자체가 어려워집니다. 66강 심화에서 본 행렬 연쇄 곱 최적화가 그것이며, 일반적인 계산 그래프에서는 최적 순서를 찾는 문제가 NP-난해입니다.
실무의 절충이 하나 더 있습니다. 역방향은 중간값을 모두 저장해야 하는데, 큰 모델에서는 메모리가 부족합니다. 그래서 일부만 저장하고 필요할 때 다시 계산하는 방법을 씁니다.
저장 ⟷ 재계산 \text{저장}\ \longleftrightarrow\ \text{재계산}
저장 ⟷ 재계산
k kk 단계를 k \sqrt kk 개 구간으로 나누어 구간 경계만 저장하면 메모리가 O ( k ) O(\sqrt k)O ( k ) 가 되고 계산은 두 배가 됩니다. 233강에서 다룹니다.
심화 6. 98강으로 어떻게 이어지는지 정리하세요.
이 강의에서 출력이 하나인 f ff 를 다뤘습니다. 출력이 여럿이면 무엇이 달라질까요.
f : R n → R m , f ( x ) = ( f 1 ( x ) , … , f m ( x ) ) \mathbf{f}:\mathbb{R}^{n}\to\mathbb{R}^{m},\qquad \mathbf{f}(\mathbf{x})=\bigl(f_{1}(\mathbf{x}),\dots,f_{m}(\mathbf{x})\bigr)
f : R n → R m , f ( x ) = ( f 1 ( x ) , … , f m ( x ) )
각 성분이 기울기 벡터를 하나씩 가지므로, 그것들을 행으로 쌓으면 행렬이 됩니다.
J = ( ∇ f 1 ⊤ ∇ f m ⊤ ) ∈ R m × n J=\begin{pmatrix}\nabla f_{1}^{\top}\\\vdots\\\nabla f_{m}^{\top}\end{pmatrix}\in\mathbb{R}^{m\times n}
J = ⎝ ⎜ ⎜ ⎛ ∇ f 1 ⊤ ⋮ ∇ f m ⊤ ⎠ ⎟ ⎟ ⎞ ∈ R m × n
98강이 이 행렬에 이름과 성질을 줍니다. 이 강의에서 이미 쓴 것을 정식화하는 셈이며, 심화 2에서 미리 본 J g ∘ f = J g J f J_{g\circ f}=J_{g}J_{f}J g ∘ f = J g J f 가 그때 정리로 세워집니다.
야코비 행렬에서 새로 나오는 것이 둘 있습니다.
첫째는 행렬식입니다. m = n m=nm = n 이면 det J \det Jdet J 가 정의되고, 이것이 부피가 얼마나 늘어나는지 를 말합니다. 79강에서 행렬식이 부피 배율이라 했는데, 국소적으로 같은 해석이 성립합니다. 105강의 변수변환 공식이 이 사실 위에 세워집니다.
∬ D f d A = ∬ D ′ f ( g ( u ) ) ∣ det J g ∣ d A ′ \iint_{D}f\,dA=\iint_{D'}f(\mathbf{g}(\mathbf{u}))\,\lvert\det J_{\mathbf{g}}\rvert\,dA'
∬ D f d A = ∬ D ′ f ( g ( u ) ) ∣ det J g ∣ d A ′
둘째는 역함수 정리입니다. det J ≠ 0 \det J\ne0det J = 0 이면 국소적으로 가역이며, 69강의 가역성 판정이 그대로 옵니다.
정리하면 01단원의 마지막 강의가 하는 일은 이렇습니다.
강의
미분의 정체
95
벡터 ∇ f \nabla f∇ f
96
그 벡터와의 내적
97
내적의 연쇄
98
행렬 J JJ 와 행렬 곱의 연쇄
네 강의가 하나의 이야기 입니다. 미분은 선형사상이고, 그 표현이 차원에 따라 벡터에서 행렬로 자랍니다.
import numpy as np
# --- 문제 1: 곡선을 따라가는 미분 ---------------------------------------
f = lambda x, y: x**2*y
gr = lambda x, y: np.array([2*x*y, x**2])
gam = lambda t: np.array([np.cos(t), np.sin(t)])
dga = lambda t: np.array([-np.sin(t), np.cos(t)])
print(" t 연쇄법칙 직접미분")
for t in [np.pi/6, np.pi/4, np.pi/3]:
chain = gr(*gam(t)) @ dga(t)
e = 1e-7
direct = (f(*gam(t+e)) - f(*gam(t-e)))/(2*e)
print(" %.6f %+12.8f %+12.8f" % (t, chain, direct))
# t 연쇄법칙 직접미분
# 0.523599 +0.21650635 +0.21650635
# 0.785398 -0.35355339 -0.35355339
# 1.047198 -0.62500000 -0.62500000
# --- 문제 2: 중간변수가 여럿인 경우 -------------------------------------
s, t = 2.0, 3.0
x, y = s*t, s/t
zs = 2*x*t + 2*y*(1/t)
zt = 2*x*s + 2*y*(-s/t**2)
z = lambda s, t: (s*t)**2 + (s/t)**2
e = 1e-6
print(" dz/ds 연쇄 %+.6f 수치 %+.6f" % (zs, (z(s+e,t)-z(s-e,t))/(2*e)))
print(" dz/dt 연쇄 %+.6f 수치 %+.6f" % (zt, (z(s,t+e)-z(s,t-e))/(2*e)))
# dz/ds 연쇄 +36.444444 수치 +36.444444
# dz/dt 연쇄 +23.703704 수치 +23.703704
# --- 문제 3: 계산 그래프를 따라 -----------------------------------------
w, xin, b, tgt = 0.5, 2.0, 0.1, 0.3
u = w*xin + b; yv = np.tanh(u); L = (yv - tgt)**2
print(" u = %.4f, y = %.10f, L = %.10f" % (u, yv, L))
dLdy = 2*(yv - tgt); dydu = 1 - yv**2; dudw = xin
print(" dL/dy = %.10f" % dLdy)
print(" dy/du = %.10f" % dydu)
print(" du/dw = %.1f" % dudw)
print(" dL/dw = %.10f" % (dLdy*dydu*dudw))
Lw = lambda w: (np.tanh(w*xin + b) - tgt)**2
print(" 수치 확인 %.10f" % ((Lw(w+e) - Lw(w-e))/(2*e)))
# u = 1.1000, y = 0.8004990218, L = 0.2504992708
# dL/dy = 1.0009980435
# dy/du = 0.3592013162
# du/dw = 2.0
# dL/dw = 0.7191196294
# 수치 확인 0.7191196293
# 마지막 자리가 다른 것은 중심차분의 절단오차입니다.
# --- 문제 4: 편미분과 전미분은 다르다 -----------------------------------
F = lambda x, y: x**2 + y**2
print(" f = x^2+y^2 위에서 y = x^2 인 경로를 따라갑니다")
for xv in [1.0, 2.0, 3.0]:
par = 2*xv # y 를 고정한 편미분
tot = 2*xv + 2*(xv**2)*(2*xv) # 경로를 따른 전미분
g = lambda x: F(x, x**2)
print(" x=%.0f 부분 df/dx=%5.0f 전체 df/dx=%6.0f 수치 %10.6f" % (xv, par, tot, (g(xv+e)-g(xv-e))/(2*e)))
# f = x^2+y^2 위에서 y = x^2 인 경로를 따라갑니다
# x=1 부분 df/dx= 2 전체 df/dx= 6 수치 6.000000
# x=2 부분 df/dx= 4 전체 df/dx= 36 수치 36.000000
# x=3 부분 df/dx= 6 전체 df/dx= 114 수치 114.000000
# x=3 에서 19 배 차이가 납니다. 연쇄항을 빠뜨리면 이만큼 틀립니다.
# --- 문제 5: 순방향과 역방향의 비용 -------------------------------------
d1, d2, d3 = 1000, 500, 100
rev = d3*d2 + d2*d1
fwd = d3*d2*d1 + d3*d1
print(" 야코비 곱 J3(1x%d) J2(%dx%d) J1(%dx%d)" % (d3, d3, d2, d2, d1))
print(" 역방향(왼쪽부터) 곱셈 %d 회" % rev)
print(" 순방향(오른쪽부터) 곱셈 %d 회" % fwd)
print(" 비율 %.1f 배" % (fwd/rev))
# 야코비 곱 J3(1x100) J2(100x500) J1(500x1000)
# 역방향(왼쪽부터) 곱셈 550000 회
# 순방향(오른쪽부터) 곱셈 50100000 회
# 비율 91.1 배
# --- 심화 4: 오일러의 동차함수 정리 -------------------------------------
h = lambda x, y: x**3 + x*y**2
hx = lambda x, y: 3*x**2 + y**2
hy = lambda x, y: 2*x*y
for p in [(2.0,1.0), (1.0,3.0)]:
lhs = p[0]*hx(*p) + p[1]*hy(*p)
print(" (%.0f,%.0f) x fx + y fy = %.1f, 3f = %.1f" % (p[0], p[1], lhs, 3*h(*p)))
# (2,1) x fx + y fy = 30.0, 3f = 30.0
# (1,3) x fx + y fy = 30.0, 3f = 30.0
문제 4의 결과가 이 강의에서 가장 실용적입니다. x = 3 x=3x = 3 에서 편미분은 6 66 이고 실제 변화율은 114 1141 1 4 입니다.
무엇이 따라 움직이는지 먼저 적으십시오 \text{무엇이 따라 움직이는지 먼저 적으십시오}
무엇이 따라 움직이는지 먼저 적으십시오
98강에서 이 연쇄를 행렬로 적습니다.
경로를 따른 연쇄법칙을 쓰세요.
96강의 공식을 여기서 어떻게 얻습니까?
중간변수가 여럿일 때의 일반형을 쓰세요.
왜 합이 나오는지 쓰세요.
경로 규칙을 한 문장으로 쓰세요.
∂ f / ∂ x \partial f/\partial x∂ f / ∂ x 와 d f / d x df/dxd f / d x 의 차이를 쓰세요.
미분 전에 먼저 확인할 것을 쓰세요.
순방향과 역방향의 차이를 쓰세요.
출력이 하나면 어느 방식이 유리하고 비율은 대략 얼마입니까?
역방향이 치르는 대가를 쓰세요.
정답.
d d t f ( γ ( t ) ) = ∇ f ⋅ γ ′ ( t ) \frac{d}{dt}f(\gamma(t))=\nabla f\cdot\gamma'(t)d t d f ( γ ( t ) ) = ∇ f ⋅ γ ′ ( t ) 입니다.
γ \gammaγ 를 직선으로 잡아 γ ′ = u \gamma'=\mathbf{u}γ ′ = u 로 둡니다.
∂ z / ∂ t j = ∑ i ( ∂ z / ∂ x i ) ( ∂ x i / ∂ t j ) \partial z/\partial t_{j}=\sum_{i}(\partial z/\partial x_{i})(\partial x_{i}/\partial t_{j})∂ z / ∂ t j = ∑ i ( ∂ z / ∂ x i ) ( ∂ x i / ∂ t j ) 입니다.
흔든 변수가 여러 경로로 결과에 도달하기 때문입니다.
경로마다 화살표를 곱하고 경로들끼리 더합니다.
앞은 나머지를 고정하고 뒤는 따라 움직이게 둡니다.
어떤 변수가 독립이고 나머지가 어떻게 의존하는지입니다.
야코비 곱을 입력 쪽부터 하느냐 출력 쪽부터 하느냐입니다.
역방향이며 비율은 대략 입력 수를 출력 수로 나눈 값입니다.
순전파의 중간값을 저장하는 메모리 비용입니다.
기호
읽는 법
뜻
γ ( t ) \gamma(t)γ ( t )
경로
곡선의 매개화입니다
γ ′ ( t ) \gamma'(t)γ ′ ( t )
속도벡터
순간 방향과 빠르기입니다
∂ z ∂ t j \dfrac{\partial z}{\partial t_{j}}∂ t j ∂ z
연쇄 편미분
경로들의 합입니다
J JJ
야코비 행렬
98강에서 정의합니다
순방향 미분
forward mode
입력 쪽부터 곱합니다
역방향 미분
reverse mode
출력 쪽부터 곱합니다
계산 그래프
computation graph
마디와 화살표의 그림입니다
동차함수
homogeneous
f ( t x ) = t k f ( x ) f(t\mathbf{x})=t^{k}f(\mathbf{x})f ( t x ) = t k f ( x ) 입니다
오일러 정리
Euler
x ⋅ ∇ f = k f \mathbf{x}\cdot\nabla f=kfx ⋅ ∇ f = k f 입니다
다음 98강에서는 야코비 행렬 을 다룹니다. 출력이 여럿인 함수의 미분을 행렬로 세우고, 이 강의의 연쇄법칙이 행렬 곱 임을 정리로 확인합니다. 그 행렬의 행렬식이 부피 배율 이라는 사실이 105강 변수변환의 근거가 되며, 79강에서 본 행렬식의 기하적 의미가 국소적으로 되살아납니다.