전공책을 보면 다변수 식(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 (행렬 미분)
행렬 미분은 다변수 미분을 행렬로 나타내는 표기법. 하나의 다변수 스칼라(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 : 온갖 행렬 관련 법칙들이 있다
'Learning & Reasoning > Math Revisit' 카테고리의 다른 글
Implicit Differentiation (0) | 2016.12.15 |
---|---|
Multi variable 미적분 - Differentials and Gradients (0) | 2016.04.22 |
Multi variable 미적분 - 편미분 (0) | 2016.04.19 |
Multi variable 미적분 토막 연습 - 극한 (0) | 2016.04.14 |
극한으로 가면 (0) | 2016.04.14 |