Learning & Reasoning/Math Revisit

시그마, 다변수 미적분, 확률, Matrix Calculus

이현봉 2016. 12. 15. 18:12

전공책을 보면 다변수 식(Multi variables expression)에 시그마  씌어지고 [참고], 또 여기에 미분/편미분이 적용되고, 확률/random process operator가 있고, Matrix Calculus 형태로 된 것을 종종 접한다.  

일반 상식인 우리나라 학생들 수학 실력이 좋다는 말이 실감나 않을 때가 있다. 배웠다고 하는데 시켜보면 모르고, 계산하면서도 그게 무슨 뜻인지 모른다. 대입 수능 수학 시험를 보니 비슷한 문제가 있고, 어느 정도 풀 수 있었기에 대학에 올 수 있었을 터인데 왜 이런지?      

  , 미분등이 섞여있는 식에서 어떤 것이 변수고, 어디까지 변수로 보아야 하고, 그들에 수학 operation을 어떻게 적용해야 하는어려워한다.  

 

아래 함수 f(x)의 미분을 구하려면;  (여기 참고) 

f(x)가 복잡한 것 같지만 실은 단순하다.  고등학교에서 배운 것으로 다 할 수 있다.  

f(x)로 썼듯이 변수는 x 하나다.  f(x)를 x에 대해 미분하면, 

  

위에서 미분대상인  ] 내의 식을 보자.  x exponential 함수에, 그리고 sigma 'i'차 power 함수식에 있다. 'i'는 sigma 내에서 '0'에서 'm-1'까지 변하지만 x와 상관없으니 x 관점에서 그냥 상수로 간주해도 된다. 그렇지만 'i'와 'i' 적용되는 식을  밖으로 빼어내면 물론 안된다.  Exponent 함수를 h내의 함수를 g로 나타내면, 

[  ] 내의 식은 따라서,

h와 g는 x의 함수.   이 식을 x에 대해 미분함은,

즉, 미분 대상 함수가   안에 있어 ∑ 적용 대상일 경우 미분을 우선   안의 함수에 적용하고 그 결과들에   를 적용하면 됨.  미분의 이 특성을 가르켜 "미분은 linear (선형) operation" 이라고 [참고].  D를 미분 operator 이라면,

따라서,

따라서,

 

Matrix Calculus (행렬 미분)

동영상 : 소개와 표기 : 동영상_1동영상_2                       

행렬 미분은 다변수 미분을 행렬로 나타내는 표기법.  하나의 다변수 스칼라(multi-variable scalar) 함수에 대해 편미분한 결과를 벡터로 모으기도 하고 (벡터의 원소로) 또는 여러개의 다변수 함수들로 된 함수벡터를 편미분한 결과를 행렬로 모으기도 한다.  이처럼 다변수 미분의 결과를 묶어 하나의 벡터나 행렬로 나타내면 단변수 함수에 대해  미분할 때와 비슷한 패턴을 볼 수 있다.  이런 패턴에 익숙해지면 수학식 조작에 유리할 때가 많기에 다변수 미분을 다룰 때 행렬 미분 형태의 표기가 많이 쓰인다.

scalar : x, y, z

vector : x, y, z.   특별한 얘기가 없으면 벡터는 열벡터(column vector)를 말함.  n개의 원소(element)로 된 벡터를 nx1 행렬로 표현.  행벡터(row vector)는 따라서 벡터의 transpose로 표현 (xT

행렬 (Matrix) : X, Y, Z.   

 

다변수 함수(들)에 대해 편미분을 적용했을 때 그 결과가 행렬로 예쁘게 모이는 경우는 다음 여섯가지 경우 (y는 다변수 함수로 x로 미분될 수 있다고 가정) :

위 (위키에서 가져온)표에서 Y 이고 (다변수 함수들로 구성된 행렬) 이를 x (여러 독립변수로 된 벡터 x) 로 미분하면 그 결과가 3차원이 (즉, rank(order) 3인 텐서) 되기에 더이상 2차원 행렬 (rank(order) 2 텐서)로 표시가 안됨.

※ Scalar-by-vector : Scalar 함수 y에 벡터 x를 미분 적용하는 gradient와 같은 경우는 위 표에서 (2, 1) 경우.

행렬 미분 관련해 위키나 다른 곳에 잘 정리해 놓은 글들이 많다.  그런데 사람마다 또는 같은 장소에서도 서로 다른 행렬미분 표기법이 쓰여 혼동될 때가 있다.  위키가 잘 설명하고 있기에 그 차이를 정리해보자.  

■ Layout Conventions (위키 내용을 기반으로) 

위키에서 말하듯이 행렬 미분을 나타낼 때 크게 두가지 표기법 중 하나를 따른다.  이 이슈가 생기는 이유는 함수벡터 y(벡터의 원소들이 함수)를 벡터x로 미분할 때 그 결과가 행렬로 표현되어야 하는 데 이를 어떤 표기법에 따를까의 문제이다 (위 표의 (2, 2) 경우).  y가 벡터(열벡터)이고 x 역시 열벡터인데, y를 우선 기준으로 하고, 즉 y 들이 하나의 열로 우선 배열되고 그리고 각각에 x를 적용해 그 결과를 행으로 모을 것인가 (즉, Numerator layout), 아니면 그 반대로  x 를 기준으로 하나 (Denominator layout)...  (위키가 잘 설명)  실제로 이 표기 때문에 가끔씩 어려움을 겪곤 한다.  물론 일관적으로 쓰면 되지만 사람들마다 익숙한 형태가 다르다.  f 를 (열)벡터로 표기하려면 denominator layout을 써야 한다.  그렇지만 또 

 Numerator layout 이 더 편리할 때도 있다.  

Numerator Layouts :

 

Denominator Layouts :

※ Numerator 와 Denominator layout 표기법을 섞어 쓰는 경우도 있는데 이 때는 흔히 Vector-by-scalar, Vector-by-vector, Matrix-by-scalar 에서는 Numerator layout을, Scalar-by-vector, Scalar-by-matrix에서는 Denominator를 쓰는 경우가 많이 보인다.  즉, 벡터/행렬을 미분할 때는 Numerator-layout을 쓰고, scalar를 벡터나 행렬로 미분할 때는 Denominator-layout을 보통 쓴다. 

정리

 

위 동영상_1 에서 

를 보일 때는 scalar-by-vector 미분에 denominator layout을 사용했다.  비슷하게, 

f 에 denominator layout를 쓰면 

(열)벡터로 표현된다.  이처럼 보통은 scalar를 벡터로 미분할 때 denominator layout를 써 결과가 벡터로 표기되는 것을 선호하는 것 같다.       

한편, 

와 같이 vector-by-vector 미분 할 때는 numerator layout를 사용했다.  다만 denominator의 표기를 transpose xT 로 나타내어 벡터 x 에 대해 미분하면 각각의 결과들을 행으로 모아 나열할 것임을 좀 더 명확히 나타내었다 (즉, .derivative is taken with respect to the transpose of x).  이렇게 표기하는 경우를 종종 보지만 그래도 헷갈린다.

- 정리하면, Numerator layout을 쓸 때;

 

- Denominator layout을 쓰면;

위 동영상_2 에서 

를 구할 때는 Numerator-layout을 사용했고, 그런가 하면 A 가 constant symmetric 행렬일 때 xTAx (scalar) 벡터 x 로 미분하는 scalar-by-vector 미분에서는 denominator-layout을 활용했음을 본다.  이처럼 한 사람이 같은 장소에서도 표기를 섞어 쓴다.  알 수는 있지만 헷갈리기는 하다. 

 

Matrix Calculus 법칙들

- 위키 : 한 곳에 다 정리

The Matrix Calculus You Need For Deep Learning, by T.Parr and J.Howard 

-  Matrix Differentiation, by R. Barnes

- The Matrix Cookbook, by K. Petersen and M. Pedersen  : 온갖 행렬 관련 법칙들이 있다