ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 딥러닝에서의 Extended Jacobian의 활용 (2) | 패스트캠퍼스 챌린지 18일차
    딥러닝 2022. 2. 10. 22:10

    해당 내용은 일반적 수학 원리가 아닌 강의자가 개인적으로 일반화한 내용임.

    지난 강의에서 Extended Jacobian을 실질적으로 손실함수와 소프트맥스에 적용해 보았다면, 이번 시간에는 이를 한 층 내려와 affine function에 적용한다. Activation function을 건너 뛴 이유는 unary element-wise operation이기 때문에 따로 extended Jacobian을 필요로 하지 않기 때문이다. 따라서, 이 강의 내용 까지의 내용을 조합하면 affine function에서 손실함수까지의 내용을 모두 역전파 하는 수식을 얻게 된다. 이는 곧 Tensorflow나 PyTorch 등의 도움 없이 numpy 정도만 있으면 Multilayer Perceptron 정도를 효율적으로 구현할 수 있다는 것이다.

    강의에서도 말하듯 이러한 수학적 과정은 복잡하고, 번거롭다. 더군다나 실제로는 파라미터 업데이터를 Adam과 같은 optimizer를 통해 거치기 떄문에, 단순히 기존 값에 학습률을 곱한 미분계수를 빼 주는 것 만으로는 실제 학습을 진행하기는 어렵다. 다만, 딥러닝의 내막에는 이와 같이 수학적으로 정리가 가능한 원리들이 있다는 것을 이해하고 넘어가는 것이 중요한 듯 싶다. 

    Affine function은 행렬 곱과 벡터 합으로 이루어진다 ( Z = XW + \vec{b}). 물론 실제로는 행렬보다 고차원의 텐서가 들어가겠지만, extended Jacobian의 기본 개념에 따라 특정 case를 일반화하는 경우로 계산하면 될 듯 하다. 행렬곱의 Jacobian의 핵심은 곱하는 행렬과 곱해지는 행렬의 어떤 항이 어떤 항에 영향을 주느냐에 주목하는 것이다. 이전 계산에서도 계속 반복되었듯, 어떤 변수에 대한 편미분은 그 변수가 영향을 주는 항만을 대상으로 한다. 즉, 그 변수가 영향을 주지 않는 항은 상수로 취급하여 미분하면 0이 되어버린다. 이러한 원리로 계산하면 Z, W의 Jacobian을 구할 수 있다. \vec{b}의 경우도 마찬가지 원리로 유도하면 되는데, 그 결과는 numpy에서 axis=0으로 행렬 sum을 한 결과와 같다.


    이로써 딥러닝의 기초가 되는 수학 내용을 모두 정리하였다. 중간중간, 그리고 마지막에 numpy 코드로 해당 내용을 구현하는 강의가 있고, 그 부분도 열심히 들었지만, 코드 자체가 공유되는 것을 방지하기 위해 따로 언급하지는 않았다.

    개인적인 소감으로는 이런 수학이 왜 필요한가 싶었는데, 최근 필요가 있어 Werbos의 1990년 논문 Backpropagation through Time을 다시 읽으면서 수학적 내용을 듣기를 잘 했다는 생각이 들었다. 해당 내용은 자연어처리에 많이 쓰이는 recurrent neural network(RNN; 순환신경망)의 시작이라 할 수 있는 논문인데, 이전에는 읽으면서 수학적인 부분을 전혀 이해하지 못해 무시하고 넘어갔지만, 이번에는 수학적인 내용도 어느정도 이해할 수 있었고, 스스로 RNN 구조를 그려 오차역전파 과정을 직접 구해 낼 수도 있었다. 역시 아는 것이 힘이다.


    본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다. https://bit.ly/37BpXi

    댓글

Designed by Tistory.