참고자료:
https://en.wikipedia.org/wiki/Matrix_calculus#Layout_conventions
https://datascienceschool.net/... (분모중심 표기법)
https://darkpgmr.tistory.com/141 (분자중심 표기법)
두 변수를 미분할 때 벡터나 행렬이 있으면 계산결과가 벡터나 행렬이 될 수 있다. 이 때 계산 결과의 표기법에 두 가지 방법이 있다.
분자 중심 표기법
분자 중심 표기법은 분자를 그대로 둔 채 분모를 전치한 모양으로 미분 결과를 적는 방식이다.
y,x is scalary=⎣⎢⎢⎢⎢⎡y1y2⋮yn⎦⎥⎥⎥⎥⎤xT=[x1x2⋯xm]∂x∂y=⎣⎢⎢⎢⎢⎡∂x∂y1∂x∂y2⋮∂x∂yn⎦⎥⎥⎥⎥⎤∂x∂y=[∂x1∂y∂x2∂y⋯∂xm∂y]∂x∂y=⎣⎢⎢⎢⎢⎢⎡∂x1∂y1∂x1∂y2⋮∂x1∂yn∂x2∂y1∂x2∂y2⋮∂x2∂yn⋯⋯⋱∂xm∂y1∂xm∂y2∂xm∂yn⎦⎥⎥⎥⎥⎥⎤
행렬에 대해서도 똑같이 적용된다.
- 행렬 Y의 크기가 n×m일 때 ∂x∂Y의 크기는 n×m이다.
- 행렬 X의 크기가 p×q일 때 ∂X∂y의 크기는 q×p이다.
행렬-벡터, 벡터-행렬, 행렬-행렬 미분의 표기법은 정립되지 않았다.
분모 중심 표기법
분모 중심 표기법은 아까와 반대로 분모를 그대로 둔 채 분자를 전치한 모양으로 미분 결과를 적는 방식이다.
y,x is scalaryT=[y1y2⋯yn]x=⎣⎢⎢⎢⎢⎡x1x2⋮xm⎦⎥⎥⎥⎥⎤∂x∂y=[∂x∂y1∂x∂y2⋯∂x∂yn]∂x∂y=⎣⎢⎢⎢⎢⎢⎡∂x1∂y∂x2∂y⋮∂xm∂y⎦⎥⎥⎥⎥⎥⎤∂x∂y=⎣⎢⎢⎢⎢⎢⎡∂x1∂y1∂x2∂y1⋮∂xm∂y1∂x1∂y2∂x2∂y2⋮∂xm∂y2⋯⋯⋱∂x1∂yn∂x2∂yn∂xm∂yn⎦⎥⎥⎥⎥⎥⎤
행렬에 대해서도 똑같이 적용된다.
- 행렬 Y의 크기가 n×m일 때 ∂x∂Y의 크기는 m×n이다.
- 행렬 X의 크기가 p×q일 때 ∂X∂y의 크기는 p×q이다.
단, 분모 중심 표기법에서는 ∂x∂Y가 매우 매우 드물게 나타난다. (아예 안 쓴다고 봐도 무방하다.) 그 이유는 행렬을 스칼라로 미분하면 전치가 되는 것처럼 보이기 때문이다. 그래서 아래와 같이 주로 사용한다.
- ∂x∂Y와 ∂X∂y를 분자 중심 표기법으로 통일해서 표시
- ∂x∂Y는 분자 중심 표기법, ∂X∂y는 분모 중심 표기법으로 표시
행렬-벡터, 벡터-행렬, 행렬-행렬 미분의 표기법은 분자 중심 표기법에서와 같이 정립되지 않았다.
어느 표기법이 더 좋은가?
교과서나 논문 등 다양한 분야에서 볼 때 일관된 하나의 방법만을 사용하지는 않는다. 분모 중심 표기법 끝부분에서 살펴본 바와 같이 두 표기법을 섞어 쓰는 경우도 있다. 같은 저자가 쓰거나 같은 글 안에서도 혼용해서 쓰이기도 하기 때문에 문맥을 살펴봐야 한다. (예를 들어, 스칼라를 벡터로 미분하는 그래디언트를 구할 땐 분모 중심 표기법을 써서 열벡터로 표기해놓고는 벡터를 벡터로 미분할 땐 분자 중심 표기법을 사용하는 경우가 있다.)
개인적인 생각으로는 분자 중심 표기법으로 통일해서 쓰는게 좋아보인다. 왜냐하면 각 변수마다 어떤 변수에게 얼마나 영향을 받는지를 정리해서 볼 때가 많았던 것 같다. (예를 들어, 딥러닝 모델의 loss값이 각 파라미터 θ1,θ2,...에 받는 영향을 알고싶은 경우) 그래서 피미분 변수가 중심이 되는게 편할 것 같다.