방향도함수와 기울기 벡터

어떠한 두 인풋 x,y 에 의해 output 값이 나오는 함수 f 가 있다고 할 때, 최종 output 값은 각 input 값이 조금씩 움직일 때마다 얼마나 달라지는지 :

df = (∂f / ∂x) * dx + (∂f / ∂y) * dy

dx : x 축으로 아주 미세한 움직임

∂f / ∂x : 인풋 x 가 x 축에서 조금 움직이면 x 의 움직임에 최종 output 값이 얼마나 영향을 받는지 (오로지 x 의 움직임만을 고려)

dy : y 축으로 아주 미세한 움직임

∂f / ∂y : 인풋 y 가 y 축에서 조금 움직이면 y 의 움직임에 최종 output 값이 얼마나 영향을 받는지 (오로지 y 의 움직임만을 고려 )

Selection_001

그러면 인풋 (1,2) 가 x 축 방향으로는 -1 스텝, y 축 방향으로는 2 스텝 움직인다면 ? (벡터 v)

인풋 x,y 가 v 스텝만큼 움직임에 따라 최종 output 값은 얼마나 영향을 받는지 : (-1) * ∂f / ∂x + (2) * ∂f / ∂y

Selection_003

식으로 정리하면

Selection_007

인풋 값 x,y 를 담은 벡터를 a 라고 하면 a 가 밟는 스텝이 어느 방향으로의 아주 극소량의 움직임인지는 h(극소량) * i (or j or k) ; 단위벡터 로 표현할 수 있음

그러면 위 그림에서 처럼 방향이 v 라면, 즉 벡터 a 가 v 방향으로 스텝을 밟는다면 ? 아래와 같이 밟는 스텝의 방향을 아예 v 벡터를 써서 표현할 수 있음. 아주 극소량이기 때문에 0으로 향하는 h 를 곱해줌. (=미분계수의 정의 그대로 따라서)

즉 맨 처음에 나온, (∂f / ∂x) * dx 부분만 떼어서 보면 벡터 a 에서 v 벡터 방향에 따라 x 축으로 2, y 축으로 1 의 비율로 움직인다고 하면 (∂f / ∂x) * dx = lim (h->0) f (a + h*(2,0)) - f(a) / h

이고 dx = h*(2,0)

Selection_008

그림으로 나타내면

Selection_009

즉 이것이 방향미분계수의 정의

Selection_010

스케일링을 어떻게 하냐에 따라서 해당 v 방향으로 스텝을 2배 밟아줄 수도 있음.

Selection_011

좀 직관적으로 이해하기 어려우니까 바로 3차원 그림으로 살펴보면

Selection_012

1,1 좌표를 기준으로 슬라이싱한 것. 즉 해당 단면에서 x, y 는 벡터 v (; [1,1]) 방향으로밖에 움직이지 못함.

Selection_013

그러면 (-1,-1) 지점에서 시작하여서 벡터 v 방향으로 조금씩 움직일 때 최종 output 값 f 는 이러한 인풋의 움직임에 얼마나 영향을 받을까? 를 나타내기 위해서 해당 (-1,-1) 좌표의 슬라이싱된 단면에서의 움직임을 살펴보기

Selection_016

즉 여기서 그은 접선의 방정식의 기울기가 해당 방향으로 아주 조금 움직일 때 f 가 인풋의 변화에 얼마나 영향을 받는지를 나타냄.

그런데 v (;gradient vector) 는 x 축, y 축 으로 어느정도의 비율로 걸을지만 나타내어도 이미 방향을 나타내기에 충분. 최소한의 방향만

나타낼 수 있는 기능을 수행하기 위해서 v를 길이가 1로 줄여줌. v 의 길이가 만약 1이 아니라면 해당 방향으로 가긴 가되, 인풋값이 n 배의 불필요한 스텝을 하게 될 수도 있음. (=h를 곱해주기 때문에 그래도 아주 극소량의 움직임이겠지만)

그러면 아래에서 처럼 내적으로 바라볼 수 있게 됨

Selection_017

왜 해당 좌표의 gradient 가 가장 가파르게 오를 수 있는 방향을 나타내는 네비게이션 역할을 하는지에 대한 증명

Selection_018

결국 내적값은 한 벡터 (a) 의 다른 벡터 (b) 에 내린 정사영 벡터와 b 와의 곱셈 값.

즉 가장 가파르게 많이 이동한다는 것 = df 가 max 가 된다는 것 = 내적 값을 제일 크게 만드는 것은 v 가 gradient 와 똑같은 방향일 때 !

이건 좀 신기했는데, 이렇게 표현된 multivariate function 의 등고선이 있다고 할 때, 실제 각 좌표들의 gradient vector 을 다 벡터장으로 표현해보면

Selection_020

out 값이 바뀌는 (다른 선) 지점의 화살표들이 다 해당 라인에 수직 방향임을 알 수 있음.

Selection_021

실제로도 수직으로 쭉쭉 올라가는게 가장 빠른 길이기 때문 ! gradient 가 제대로 된 네비게이션이라는 것에 대한 하나의 예시 !

위치벡터의 미분

이러한 위치 벡터가 있다고 할 때

Selection_024

r (t) = (x(t) , y(t) )

즉 t 라는 인풋 값에 의해 두 아웃 풋 값 x(t) , y(t) 가 나오고 이 두 값을 합쳐서 벡터로 나타낸 것이 r(t)

따라서 t 가 변함에 따라서 벡터 r(t) 가 얼마나 영향을 받는지를 보고 싶으면 t 에 의해서 영향을 받는 x(t) , y(t) 모두 살펴보아야 함

Selection_027

Selection_028

Selection_029

Selection_030

좀 더 정리하면

Selection_033

Selection_035

위 두 함수 r1 과 r2 를 비교해보면 r1 에서 t=1 일 때의 좌표와 r2 에서 t=1/2 일 때 좌표가 똑같음.

즉, t 를 시간이라고 생각한다면 1초를 들였을 때 r1 에서는 (1,1) 이라는 점에 도달했는데 r2 에서는 0.5 초만에 (1,1) 점에 도달하였음.

두 함수가 그리는 모양은 똑같은데 r2 가 훨씬 빠른 원인을 미분을 해서 살펴볼 수 있음. r2 함수의 t=0.5 에서의 미분값을 살펴보면 r1 함수의 t=1 에서의 미분값의 2배임. 즉 맞는 비유는 아니겠지만 대략적으로 t 가 밟는 스텝을 0.0001 이라고 하면 r2 에서 실제 output 값의 변화량은 [0.0002, 0.0004] 가 되고, 그러면 [1,1] -> [1.0002,1.0004] 이렇게 증가함.

r1 함수에서는 output 값의 변화량은 [0.0001,0.0002] 가 되고, 그러면 [1.0001,1.0002] 이렇게 증가.

Chain rule 사용하지 않고 구하기

그리고 이제 다음 섹션부터 연쇄 법칙에 대한 설명일 꺼 같은데 초입부로 , chain rule 을 사용하지 않고 구하는 법 까지 !

Selection_037