벡터 미분과 행렬 미분

수학 이야기 2014.08.21 20:01

논문을 읽거나 어떤 이론을 이해할 때, 그리고 자신이 수식을 전재할 때 종종 벡터, 행렬에 대한 미분이 필요한 경우가 종종 있습니다.


저의 경우는 주로 함수 최적화 기법(Least Squares, Weighted Lest Squares, 가우스-뉴턴법, Gradient Descent 방법, Levenberg-Marquardt 방법 등) 관련해서 벡터 미분을 종종 접하는데 그때마다 수식을 푸는데(이해하는데) 시간을 많이 소비합니다. 그래서 한번 정리를 해 두면 좋겠다 싶어서 글을 씁니다.


벡터, 행렬 미분에 대한 내용은 사실 위키피디아(http://en.wikipedia.org/wiki/Matrix_calculus)에 잘 정리가 되어 있으니 보다 자세한 내용은 위키피디아를 참조하시면 좋겠습니다.



1. 표현 및 기호


이 글에서 스칼라(scalar)는 x, y 등과 같이 이텔릭 소문자로, 벡터(vector)는 x, y와 같이 볼드체 소문자로, 행렬(matrix)은 A, B 등과 같이 대문자로 표기합니다.


☞ 스칼라(영어: scalar 스케일러)란 크기와 방향을 가지는 벡터에 대비하는 개념으로, 크기만 있고 방향을 가지지 않는 양을 말합니다. 그런데, 상수 뿐만 아니라 변수, 함수도 모두 스칼라가 될 수 있음에 주의해야 합니다. 예를 들어 스칼라 함수는 y = f(x1,...,xn)과 같이 그 결과값이 1차원의 값인 함수이며, f(x1,...,xn) = (f1(x1,...,xn), ..., fm(x1,...,xn))과 같이 그 결과값이 다차원인 함수는 벡터함수라 부릅니다. 즉, 상수, 변수, 함수 관계없이 1차원의 값을 나타내는 것은 모두 스칼라라고 이해하면 됩니다.


벡터는 열벡터로 표현할 수도 있고 행벡터로 쓸 수도 있지만 이 글에서는 열벡터 표현을 사용합니다. 즉, x = [x1, x2, ..., xn]T는 열벡터를 의미하고 xT는 행벡터를 의미합니다. 벡터가 행렬 등과 같이 수식적으로 사용될 때에는 열벡터 표현을 사용하는 것이 일반적입니다.


스칼라를 스칼라로 미분하는 경우, 벡터를 벡터로 미분하는 경우 등 다양한 경우의 미분을 위 기호에 따라 표로 나타내면 아래와 같습니다 (표 출처: 위키피디아).


 

 스칼라

 벡터

 행렬

 스칼라

 


 


 


 벡터

 


 


 

 행렬

 


 

 


행렬을 벡터로 미분하는 경우나 행렬을 행렬로 미분하는 경우는 다루지 않습니다. 하지만, 스칼라를 행렬이나 벡터로 미분하는 경우를 벡터나 행렬의 원소에 각각 적용하는 방식으로 확장해 보면 벡터-행렬, 행렬-벡터, 행렬-행렬 미분도 어렵지 않게 구할 수 있습니다.



2. 벡터, 행렬 미분 정의


다양한 경우의 벡터, 행렬 미분은 다음과 같이 정의됩니다.


스칼라 함수를 벡터로 미분(Gradient)


 --- (1)



벡터를 스칼라로 미분


 --- (2)



스칼라 함수를 행렬로 미분


 --- (3)



행렬을 스칼라로 미분


--- (4)



벡터를 벡터로 미분


 --- (5)



※ 분자중심 표현(numerator layout)과 분모중심 표현(denominator layout)

식 (1)에서 미분 결과는 행벡터인 반면에 식 (2)의 결과는 왜 열벡터인지 혼동스러울 지도 모르겠습니다. 그런데, 사실은 식 (1)의 결과를 열벡터로 쓰고 식 (2)의 결과를 행벡터로 써도 모두 맞는 표현입니다. 그 차이는 벡터를 미분할 경우나 벡터로 미분할 경우에 피미분 변수(numerator)를 중심으로 행과 열을 결정할지 아니면 미분 변수(denominator)를 중심으로 행과 열을 결정할지의 차이입니다. 위키피디아에 보면 사람에 따라서 그리고 서적에 따라서 두 가지 표현법이 혼재되어 사용된다고 나옵니다. 중요한 점은 어느 한쪽 표현법을 선택하든지 일관되게만 사용하면 될 것 같습니다. 이 글에서는 벡터 미분은 개인적으로 좀더 친숙한 분자중심 표현(numerator layout)을 따르고 있으며 분자중심 표현과 분모중심 표현은 서로 전치(transpose) 관계에 있습니다. 보다 자세한 내용은 위키피디아를 참조하시기 바랍니다.



3. 벡터, 행렬 미분의 계산


상수벡터 a와 열벡터 x에 대해 aTxx로 미분하면 그 결과값은 aT가 됩니다. 정말로 그렇게 되는지 앞서 설명한 벡터, 행렬 미분 정의에 따라 실제로 계산을 해 보겠습니다.


 --- (6)


와 같이 aTx는 하나의 스칼라 값입니다. 따라서 스칼라 aTx를 식 (1)을 이용하여 벡터 x로 미분하면


 --- (7)


와 같이 aT가 됩니다.


이와 같이 벡터, 행렬식에 대한 미분은 원래의 정의를 이용하면 모두 계산이 가능합니다. 하지만 정의에 따라 직접 미분을 계산하는 것은 시간이 많이 걸리고 또 어렵기 때문에 개인적으로 필요한 부분만 아래에 표로 정리합니다(보다 다양한 경우의 미분은 위키피디아 참조).


a, b: 상수 벡터

A: 상수 행렬

y, z: x와 함수관계를 갖는 벡터


 식

 x 로 미분 결과

 



 


 


 

 



 


 


 

 



 

 



 


 

 



 


 


 


 


 


 



벡터, 행렬 미분에서도 잘 보면 곱의 미분, 합성함수 미분 등 보통의 실함수 미분에서 적용되는 성질이 그대로 적용됩니다. 그리고 norm의 제곱은 내적과 같다는 점(∥x∥2 = x·x = xTx)과, xTAy, xTy를 계산하면 결과적으로 스칼라가 된다는 점, 그리고 스칼라의 전치(transpose)는 그 자신이기 때문에 xTAy = yTATx, xTy = yTx와 같이 얼마든지 바꿔 써도 된다는 점 등을 잘 활용하면 벡터, 행렬 수식에서 미분을 보다 용이하게 전개할 수 있습니다.



by 다크 프로그래머


저작자 표시 비영리 변경 금지
신고
  • BlogIcon 버크하우스 2014.08.21 20:04 신고 ADDR 수정/삭제 답글

    잘 보고 갑니다. 좋은 하루 되시구요. ^^

    • BlogIcon 다크pgmr 2014.08.22 19:06 신고 수정/삭제

      네 감사합니다. 버크님도 좋은 하루 되세요.

  • BlogIcon 박우나 2014.08.22 16:07 신고 ADDR 수정/삭제 답글

    다크님 작성하신 내용중에 궁금한것이 3가지 정도 되는데요
    1. norm의 inner product을 영상처리에서는 어떻게 이해해야 할까요?
    2. 제가 알기론 space가 3가지정도로구분되는것으로 알고 있습니다
    Hilbert space와 norm space 그리고 vector space 이렇게 구분이 되는 이유는 단지 차원을 나타낼수 있는 차이 때문인건가요?


    3.마지막으로 norm의 제곱은 내적과 같다는점은 수도 없이 들었지만 정작 이게 영상처리와 물리적인 의미에서 어떤 의미를 지니게 되는 걸까요?

    • BlogIcon 다크pgmr 2014.08.22 22:16 신고 수정/삭제

      안녕하세요. 영상처리 이론이나 알고리즘에는 기본적으로 수학이 사용되기 때문에 norm, 내적과 같은 기본적인 수학적 내용들이 당연히 필요하고 또 다양하게 활용될 수 있지만 그렇다고 영상처리에 특화된 어떤 특별한 의미를 가지는 것은 아닙니다. norm의 제곱과 내적이 같다는 것도 마찬가지로 단지 기본적인 수학적 성질일 뿐 그것이 영상처리에 특화되어 어떤 특별한 의미를 갖지는 않습니다. Hilbert space에 대해서는 저도 자세히 알지 못하니 위키피디아를 참조해 보시면 좋을 것 같습니다.

  • 박우나 2014.08.23 01:44 신고 ADDR 수정/삭제 답글

    답변감사합니다.
    하지만 Norm의 제곱과 내적이 같다는 사실은 이미 아시겠지만 예를들면 multi-resolution reconstuction 을 위한 기본적인 inner product의 성질 일텐데요 단순히 수학적인 성질로 예기할것이 아니고 영상처리에 있어서 특별한 의미를 갖고 있지 않을까요?

    쉽게 예기하자면 단지 기본적인 수학적 성질로써 Cosine Transform 의 예를 들자면 FFT를 이용하여 여러가지 영상처리에 특화하여 사용할수 있는것을 잘 아시리라 믿습니다. 이런 부분에서 사실 이런 부분은 너무 쉽고 잘 알수 있지만 다크님의 관점에서는 어떤것인지 궁금했습니다.
    제가 좀 무식하게 질문 드린것 같아 죄송합니다.

    • BlogIcon 다크pgmr 2014.08.26 09:57 신고 수정/삭제

      네 알겠습니다. 저는 특별히 아는 바가 없습니다만 의미를 찾을 수 있다면 좋은 것이라 생각합니다.

  • B 2014.09.17 10:37 신고 ADDR 수정/삭제 답글

    쉽게 풀어서 정리해 주시니 이해가 잘 되네요~
    관련 내용을 보는데 있어 출발점이 되었습니다. 감사합니다. ^^

  • 베스타 2014.09.19 08:35 신고 ADDR 수정/삭제 답글

    논문이나 수식들을 보다가 항상 막혔던 부분을 쉽게 설명해 주셔서 감사합니다.

  • 브로콜리 2014.09.30 15:26 신고 ADDR 수정/삭제 답글

    정말 도움 많이 되었습니다. 감사합니다.
    보던중에 궁금한게 있는데요.마지막표 Ax-b의 2norm 미분한게
    2*conj(A)*(Ax-b)로 알고 있었는데, 같은 표기 인가요?

    • BlogIcon 다크pgmr 2014.10.01 07:49 신고 수정/삭제

      안녕하세요. 복소수까지는 잘 알지 못합니다. 실수로 한정하면 말씀하신 내용도 맞습니다. 위 표에서 미분결과 부분을 transpose해도 모두 맞는 표현입니다. 글 내용중 분자중심표현(numerator layout)과 분모중심표현(denominator layout)을 참조하시기 바랍니다.

  • YQ 2015.02.12 13:06 신고 ADDR 수정/삭제 답글

    정말 깔끔하게 글정리를 잘하시는거 같아요~
    도움 많이받고 갑니다 :)

  • BlogIcon morgin 2015.03.07 17:23 신고 ADDR 수정/삭제 답글

    잘 정리되어 있는 글 덕분에 많은 도움을 받았습니다. 공부하는 데 쓰려고 표나 내용 일부를 스크랩해갔는데 괜찮겠지요? 출처는 표시해두었어요^^ 혹 문제가 있다고 생각하시면 말씀해주세요~ 좋은 글 감사히 잘 읽고 갑니다.

  • BlogIcon 정확신속 2015.09.21 03:40 신고 ADDR 수정/삭제 답글

    행렬과 벡터의 미분은 왜 저런식으로 정의되는 건가요?
    사실 행렬과 벡터의 미분의 정확한 의미가 무엇인지 잘 모르겟어요.
    함수의 경우에는 그 접선(혹은 접평면?)의 기울기가 미분이잖아요?
    행렬과 벡터의 경우에는 무슨 의미를 가지나요?

    • BlogIcon 다크pgmr 2015.09.23 07:52 신고 수정/삭제

      안녕하세요. 저도 시원한 답변은 못 드립니다만, 벡터미분은 다변수 함수에 대한 미분이고 미분은 어떤 함수를 저차 다항함수로 근사시켰을 때 그 계수라고 생각하시면 좋을 것 같습니다 (1차미분은 1차 다항함수로 근사시켰을 때 계수, 2차미분은 2차 다항함수로 근사시켰을 때 2차항의 계수)

  • mmg 2015.10.01 20:07 신고 ADDR 수정/삭제 답글

    어느정도 궁금한점에 대해 해소하게되어서 감사합니다!
    그런데 분자중심과 분모중심이라는 말이 이해가 안가서 질문드려요 ㅜㅜ
    스칼라를 벡터로 미분할경우
    x'a를 미분하면 분자중심으로는 a'가 분모중심으로는 a가 나오는데
    분자중심이라는게 분자의 모양대로 결과가 나온다는뜻이라고 대충 이해했는데,
    그런데 여기서는 분자가 스칼라니까 row벡터로 나올 이유가 없는거 아닌가요?
    분자중심 분모중심이라는 말이 이해가안가요 ㅜㅜ

    • BlogIcon 다크pgmr 2015.10.02 10:38 신고 수정/삭제

      사실 저도 햇갈립니다. 스칼라는 행벡터도 열벡터도 될 수 있지만 분모중심 표현이 열벡터니까 분자중심은 행벡터로 표현되나보다 정도로 저도 이해하고 있습니다. 그런데, 이러한 룰은 참고는 하되 실제 식에서는 주변의 컨텍스트(context)를 보고 전치 여부를 결정하면 좋을 것 같습니다.

  • BlogIcon 2015.10.04 09:38 신고 ADDR 수정/삭제 답글

    그런데 갑자기 의문점이 들어서요... 행렬의 미분은 실생활에서 어떻게 활용되는 거죠? 행렬의 미분이 의미가 있나요? 마음에 와닿지가 않아요

    • BlogIcon 다크pgmr 2015.10.06 01:00 신고 수정/삭제

      좋은 질문이신데 답변은 힘드네요. 뭐가 있을까 저도 생각해 봤는데 잘 떠오르지 않습니다. 혹시 나중에 떠오르는게 있으면 답변을 달아보겠습니다.

  • 뾰달 2015.10.14 22:59 신고 ADDR 수정/삭제 답글

    스칼라에 대한 행렬미분은 간단히 물리학에서 스칼라 값에대한 2차 Tensor 미분으로 인한 변화율을 구한다 생각하면 될거같네요.
    행렬에대한 스칼라 미분은, 행렬이 애초에 연립방정식같은 느낌이기 때문에, 다변량 벡터가 행렬에 군집되어있다고 생각하고 그 다변량 벡터가 한 시스템의 움직임에 영향을 준다할 때, 기계공학에서 유명한 Spring-Damper system풀이에 사용이 되구요.

  • BlogIcon 정확신속 2015.12.09 01:05 신고 ADDR 수정/삭제 답글

    말씀하신 저차 다항함수로 근사시킨다는건 무슨 의미이고 실제로 어떻게 하는 건가요?

  • 벡트엉 2016.09.10 10:52 신고 ADDR 수정/삭제 답글

    좋은 설명 감사드립니다.
    궁금한게 있는데요 마지막 표의 여섯번째 항에서
    y'z=yz라고 하던데...스칼라의 전치는 자기자신이라 그렇다하더라도 함수의 경우에도 저렇게 되는건가요? 뭔가 '전치'의 활용이 익숙치않아서 헷갈리네요ㅜㅜ

    • BlogIcon 다크pgmr 2016.09.10 21:18 신고 수정/삭제

      가운데 점이 있는 것은 곱하기가 아니라 내적(inner product)입니다. y'z = yz는 y'과 z의 곱은 y와 z의 내적과 같다는 식입니다...

  • 벡트엉 2016.09.11 15:55 신고 ADDR 수정/삭제 답글

    답변 감사드립니다..문과-상대진학해서 계량을 공부해보려는데 벡터때문에 골치였거든요
    기초적인것부터 봐야겠네요ㅜ 많이 배우고 갑니다!

  • 코딩하는꽃개 2016.12.23 15:25 신고 ADDR 수정/삭제 답글

    으헝 감사합니다. 신경망 공부하면서 미분시 전치가 자구 나와서 왜 그런가 했더니 벡터를 스칼라로 미분한 것을 표현한 거였군요 정말 감사합니당

  • 너무너무너무 2017.01.02 17:41 신고 ADDR 수정/삭제 답글

    오타가 있는 것 같아 보여서 여쭈어봅니다. 위의 내용에 의하면 스칼라 함수를 행렬로 미분하는 것의 결과와 행렬을 스칼라로 미분하는 것의 결과가 똑같이 m*n 행렬인데 둘 중 하나는 n*m이 되어야 할 것 같습니다.
    그리고 마지막 표의 내용은 링크해 주신 위키피디아에서 안나오는데 혹시 어디가 출처인지 여쭤봐도 될까요?

    • BlogIcon 다크pgmr 2017.01.02 18:39 신고 수정/삭제

      감사합니다. 분자표기와 분모표기의 일관선을 위해 식 (3)을 수정하였습니다. 그리고 마지막 표는 위키의 내용을 바탕으로 제가 정리한 내용입니다.

  • 지나가던통계학도 2017.04.29 16:22 신고 ADDR 수정/삭제 답글

    안녕하세요 헷갈리는 게 있어서 질문드립니다.
    스칼라를 벡터로 미분하는 유도과정에서
    열벡터 A의 전치와 벡터 X를 곱할 때, X는 열벡터인데
    나눌 때는 X가 행벡터로 되어있습니다.
    일관적이지 않은 것 같아서 질문드립니다.

    • BlogIcon 다크pgmr 2017.05.02 08:24 신고 수정/삭제

      안녕하세요. 수식 (7)을 말씀하시는 것인지요? 스칼라를 벡터로 미분하면 그 결과는 분자중심 표현에서는 행벡터가 되고 분모중심 표현에서는 열벡터가 됩니다. 어느 것이 맞다 틀리다 보다는 선택의 문제이며 제 글에서는 분자중심 표현을 사용하고 있습니다. 분자/분모중심 표현에 대해서는 관련 내용이 글 중간에 간략히 언급되어 있으니 참고하시기 바랍니다.



티스토리 툴바