ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 벡터 함수 | 패스트캠퍼스 챌린지 12일차
    딥러닝 2022. 2. 4. 23:44

    이전에는 변수가 여러개인 다변수함수에서, 입력 변수를 벡터라고 보고 이에 대해 편미분을 계산하는 과정 까지를 진행했다. 이 개념을 확장시키면, 동일한 변수인데 결과값은 여러개가 나오는 함수의 벡터를 생각해 볼 수 있을 것이다. 가령, 노트 필기 첫 번쨰 장의 원 위의 점의 위치의 경우 동일한 입력 t를 받아 x(t)와 y(t)라는 두 개의 결과값을 내보내게 된다. 이러한 함수들의 표기를 조금만 달리 하면 f_1(x), f_2(y) 정도로 생각해 볼 수 있고, 결과적으로 이러한 함수의 벡터 \vec{f}를 생각해 볼 수 있다.

    중요한 점은 '입력이 주어졌을 떄 하나의 결과값을 내보낸다'라는 함수의 특징은 변함이 없다는 것이다. 함수는 개념상 결과값이 하나로 정해져야 한다. 즉, 벡터 함수는 함수들의 벡터이지, 그 자체로 하나의 함수라고 볼 수는 없다. 결과가 여러개가 나오는 이유는 같은 입력이 여러 함수를 거치기 떄문이다. 따라서, 결과값은 벡터 함수를 구성하는 함수의 갯수만큼이 된다.

    두 개념을 합쳐 다변수함수의 벡터인 벡터함수 또한 생각해 볼 수 있다. 이 때 중요한 점은 동일한 입력 벡터가 들어간다는 점이다. 즉, 입력 벡터의 값 일부가 벡터 함수의 함수 일부에 들어가는 경우는 해당하지 않는다. 입력 벡터 요소 전체가 벡터 함수의 함수 전체에 들어가는 경우를 생각해 볼 수 있다. 

    이러한 개념을 도입하는 이유는 dense layer의 affine function이 다변수함수의 벡터 함수라 생각할 수 있기 때문이다. 이전에 affine function을 다변수함수로 보았는데, 이를 확장시켜 인공 뉴런이 여러개 모인 layer를 하나의 벡터 함수로 보는 것이다. 

    이러한 벡터 함수를 상정하면 몇번이고 나왔던 Jacobian Matrix를 이해할 수 있다. Jacobian Matrix는 변수가 스칼라 또는 벡터일 때, 그리고 함수가 스칼라 또는 벡터일 때의 총 4개의 경우의 수를 가지고 해당 경우의 편미분을 정의하는 것이다. 이 때, 벡터는 스칼라를 포괄하므로 모든 경우를  ∂\vec{f} / ∂\vec{x}라 볼 수 있다. 이렇게 행렬로 일반화를 시키게 되면 덧셈과 같은 연산을 한번에 진행할 수 있다는 장점이 있다.

    다변수함수의 편미분은 m개의 변수 각각에 대한 편미분을 1 x m 벡터로 펼친 것과 같다. 벡터함수의 편미분은 n개의 함수 각각에 대한 편미분을 n x 1의 벡터로 펼친 것과 같으며, 이 때 함수들이 m개의 요소를 가진 벡터를 입력으로 받는다면 결과적으로는 n x m 행렬로 구성된다. 즉, 차원이 높아지면 그 만큼 스칼라의 편미분을 확장시키면 된다.

    이러한 점을 활용하면 minibatch가 없고 인공 뉴런이 여러개인 경우를 affine function만 때서 생각해 볼 수 있다. 이 때, 주의할 점은 weight와 bias는 입력 변수가 아닌 파라미터다. 즉, n개의 인공 뉴런들은 모두 동일한 \vec{x}라는 입력변수를 받지만, 각각의 뉴런의 함수 f_i는 \vec{w_i}, b_i라는 다른 파라미터를 가지게 된다. 이 경우 ∂\vec{z} /  ∂W 연산을 제외한 모든 연산을 진행할 수 있다. (함수든 입력값이든 벡터를 넘어서 행렬인 경우에 대한 편미분은 아직 정의하지 않았다).

    마찬가지로 N개의 mini batch를 가진, 뉴런이 하나인 레이어를 생각해 볼 수 있다. 이 때, 뉴런이 하나이기 때문에 동일한 weight와 bias를 가지게 되지만, 입력은 \vec{x^1}, \vec{x^2}, ..., \vec{x^N}으로 다르다. 이러한 경우는 사실 결과값의 벡터 \vec{z} = X * \vec{w} + b로 표현이 되는데, 위에서  ∂\vec{z} /  ∂W연산을 할 수 없었듯  ∂\vec{z} /  ∂X 연산은 아직 할 수 없다. 하지만 \vec{x^i}에 대한 연산은 가능함로 이를 정의할 수 있다.

    다만, N개의 minibatch를 가진 n개의 뉴런을 가진 레이어는 출력값의 행렬 Z = X * W + \vec{b}라고 연산이 되는데, 이 경우 벡터함수가 아닌 (이 용어를 쓰는지는 모르겠지만) 행렬 함수이므로 어떤 경우에 대해서도 아직 편미분을 연산할 수는 없다.

    이러한 점을 활용하면 Softmax layer를 벡터 함수로 보아 편미분을 진행할 수 있다. 이 때,  ∂J/∂\vec{p} * ∂\vec{p}/∂\vec{l}의 크기가 ∂J/∂\vec{l}과 같다는 점에서 chain rule의 일반화에 대한 실마리를 볼 수 있다.


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

    댓글

Designed by Tistory.