Mathematics/Calculus

[Calculus] Jacobian matrix

언킴 2022. 3. 11. 14:37
반응형

 

 

딥러닝에서는 backpropagation을 통해 가중치를 갱신하여 cost function을 최소화 하는 방향으로 접근한다. 우리는 backpropagation을 수행할 때 미분을 통해 신호를 전달하는 것을 알고 있다. 선형 모델을 미분할 경우 다음과 같은 가중치 벡터(w)가 산출된다.

wTxx==xTwx=w 

이차 모델을 미분할 경우 행렬(A,AT)과 벡터(x)의 곱으로 산출된다.

xTAxx=(A+AT)x 

벡터를 스칼라로 미분할 경우 아래와 같은 결과가 도출된다.

yx=[y1x,y2x,ynx]

이때 y는 벡터를 의미하고 x는 스칼라를 의미한다. 만약 스칼라를 벡터로 미분하게 될 경우 행 벡터가 아닌 열 벡터가 산출되며, 이때 미분된 행 벡터를 gradient vector라 부르며 y로 표기한다. 

 

딥러닝에서는 독립 변수(independent variable) x를 통해 종속 변수(dependent variable) y를 구한다. 퍼셉트론 간 Layer의 node는 일반적으로 하나가 아닌 여러개의 node로 구성되어 있으며, 이때 각 node는 vector 형태로 구성되어 있다. 그렇기에 벡터와 벡터간 연산이 필요한데 이때 각 변수의 미분값으로 구성된 행렬이 바로 자코비안(Jacobian Matrix)라고 한다. 

J=dydx=[y1xTy2xTymxT]=[y1Ty2TymT]=[y1x1y1xnymx1ymxn]

 

그렇다면 자코비안 행렬의 이해를 돕기위해 다음과 같은 예를 생각해보자. 함수 f:RdRm 즉, d차원의 벡터를 m차원으로 사상시키는 함수 f가 있다고 가정하자. 그렇다면 이 함수를 미분하여 얻은 행렬이 바로 자코비안 행렬이다.

f: R2R3,f(x)=(2x1+x22,x12+3x2,4x1x2)T라고 하면 자코비안 행렬은 다음과 같다. 

 

J=[f1x1f1x1f1xdf2x1f2x2f2xdfmx1fmx2fmxd],   J=[22x22x234x24x1],   J|(2,1)T=[224348]

J|(2,1)Tx1=2,x2=1을 의미한다. 자코비안 행렬 내부의 값은 f를 미분한 값들로 구성되어 있다. 

 

 

 

우리가 기계학습, 딥러닝에서 사용하는 SGD, Momentum, Adam, AdamW 등은 모두 자코비안에만 의존하여 계산된다. 2차 편미분을 고려하는 헤시안 행렬(Hesian Matrix)도 존재하지만, 매 출력마다 n2개의 2차 편미분을 계산하여야 하기 때문에 딥러닝에는 적용하기 힘들다. 헤시안 행렬도 자코비안 행렬처럼 간단한 예를 통해 살펴보기만 하자. 

함수 fxj로 편미분한 결과를 xi로 다시 편미분한 2차 편도함수이며, 이러한 편도함수는 n2개가 존재한다. 이를 행렬로 배치한 것이 바로 해시안 행렬이다. 일반적으로 헤시안 행렬의 경우 HRn×n으로 정방행렬(Square matrix)를 가진다. 

2fxixj=xi(fxj)

f(x)=f(x1,x2)=(42.1x12+x143)x12+x1x2+(4+4x22)x22

H=[2fx1x12fx1x22fx1xn2fx2x12fx2x2fx2xn2fxnx12fxnx22fxnxn]

H=[10x1425.2x12+811348x228],   H|(0,1)T=[81140]

헤시안 행렬을 구하기 위해 f(x)를 위와 같이 정의하면 자코비안 행렬에서의 방식과 유사한 방식으로 결과를 도출할 수 있다.