먼저 지난 강의의 내용을 복습하자면 다음과 같습니다.
먼저 문제와 정답 사이의 점수를 scores function을 이용하여 얻어내고, SVM과 같은 손실함수로 위의 점수들의 현황이 얼마나 좋은 상황인지 아닌지를 판별했습니다.
그다음 L이라는 변수를 loss에 대한 combination과 정규화된 값을 이용하여 지정해 줬습니다.
그러면 이제 우리가 찾고자 하는 것은 가장 낮은 손실에 대한 W값입니다. 그러기 위해서는 W에 대한 L의 기울기를 구해야 합니다.
그래서 저번 lecture3에서 gradient descent와 optimization을 보면서 우리가 원하는 최적의 W값을 얻는 법을 배웠습니다.
이번에는 저번에 배운 analytic gradient를 임의의 complex function에 적용하는 것을 computational graphs라는 것을 이용하여 나타낸다고 합니다.
이전에 배운 선형 분류기로 예를 들자면 다음과 같습니다.
computational graph는 간단하게 node를 이용하여 전체적인 연산 과정을 그림으로 보여주는 것입니다.
그리고 이러한 과정으로 역전파법(backpropagation) 또한 경사의 개념을 이용하여 구현할 수 있습니다.
Backpropagation(역전파법)
본격적인 역전파법에 들어가기 앞서서 먼저 간단한 예시를 듭니다.
위와 같은 꼴을 한 계산식이 있다고 할 때, 우리는 computational graph를 다음과 같이 만들 수 있습니다.
괄호를 기준으로 덧셈의 계산이 먼저 일어나고 덧셈을 한 결과가 z값과 곱해져 최종적인 f값이 나오는 것입니다.
더욱 원활한 계산을 위해서 x와 y를 더한 값을 q라고 지정하겠습니다.
그렇다면 우리는 q와 f에 대한 기울기를 구할 수 있습니다. 먼저 q에 대한 x와 y의 기울기는 모두 1이 됩니다. 이유는 덧셈 법칙이 적용되기 때문에 미분 시 결과는 항상 1이기 때문입니다.
그러나 f의 경우에는 조금 곱셈법칙이 적용되기 때문에 다른 값을 가집니다. f에 대한 q의 기울기는 z가 되고, z의 기울기는 q가 됩니다. 정리하면 다음과 같습니다.
아직까지 구하기 않은 값들이 있습니다. 바로 f에 대한 x와 y의 기울기입니다. f에 대해서 x와 y의 기울기를 구할 수 있냐고 물어본다면 불가능합니다. 왜냐하면 f = qz라서 x와 y는 존재하지 않기 때문입니다. 그래서 우리는 chain rule을 사용하여 계산을 가능하게 할 수 있습니다.
q는 f에 대해서 미분이 가능하고, x와 y는 q에 대해서 미분이 가능합니다. 그래서 chain rule을 사용하면 다음과 같이 표현할 수 있습니다.
x도 위와 같이 계산하면 됩니다. 이렇게 backpropagation에 필요한 모든 계산식은 준비가 되었습니다.
위 식에 대한 역전파 과정을 설명하자면 먼저 f에 대한 f의 기울기가 먼저 나옵니다. 당연히 1이겠죠.
그다음은 f에 대한 q와 z인데 이는 순서대로 -4와 3이 됩니다. 마지막으로 f에 대한 x, y이고 이는 chain rule 식을 기반으로 한다고 하면 모두 -4가 됩니다. 정리하면 다음과 같습니다.
<순전파>
x = -2, y = 5, z = -4, q = -3, f = -12
<역전파>
∂f / ∂f = 1, ∂f / ∂z = 3, ∂f / ∂q = -4, ∂f / ∂x = -4, ∂f / ∂y = -4
위의 예시를 살펴보면서 우리가 computational graph를 사용하면서 역전파법을 사용할 수 있다는 사실을 알게 되었습니다.
여기서 일반화할 수 있는 사실은 backpropagation은 gradient를 얻기 위해 computational graph 내부에서 얻는 모든 변수에 의해 chain rule을 재귀적으로 사용하게 됩니다.
여기서 local gradient와 global gradient라는 중요한 개념이 나옵니다.
위의 예시에 붙여 설명하자면 local gradient는 우리가 순전파(forward pass)를 하면서 얻을 수 있는 기울기입니다. 대표적으로는 q에 대한 x의 기울기 1 등이 있습니다.
그다음 global gradient는 역전파 시에 얻을 수 있는 기울기입니다. 우리가 local gradient를 구하는 이유가 바로 global gradient와의 계산을 통해 기울기를 구하기 위함이라는 것을 알 수 있습니다.
위의 모든 내용을 정리하자면 우리는 x, y, z와 같이 입력을 받는, 혹은 알고 있는 값부터 시작해서 forward pass를 통해 local gradient를 구할 수 있습니다. 그리고 출력에 도달한 다음, backpropagation을 통해 global gradient를 구한 후 나머지 노드들의 gradient를 구하기 위해서는 global gradient와 local gradient를 곱하는 chain rule을 사용한다는 것입니다.
그다음에 우리가 backpropagation에서 computational graph를 사용하는 이유를 보여주기 위해서 다른 예를 보여줍니다.
이 예시에서도 backpropagation을 수행해 보겠습니다. 아까도 봤다시피 global gradient는 무조건 1로 시작합니다.
그러면 이를 바탕으로 첫 번째 gradient를 계산해 주면 먼저 1/x의 미분값인 -1/x^2에다가 local gradient인 1.37을 대입하고 여기에 global gradient인 1을 곱한 값인 -0.53이 gradient가 됩니다.
이러한 방식으로 계산된 gradient를 모든 노드에 대해 계산하면 다음과 같습니다.
여기서 초록색 글씨가 local gradient이고 빨간색 글씨가 upstream gradient라고 하는데 upstream gradient는 global gradient와 비슷하게 해석하시면 될 것 같습니다.
sigmoid gate
자꾸 보면 아시겠지만 위 예시의 f(w, x)의 식을 보면 시그모이드 함수와 비슷하다는 것을 알 수 있습니다.
위 사진에서는 원래의 시그모이드 함수식을 미분합니다. 이렇게 미분하는 이유는 sigmoid gate를 만들기 위함인데 밑에 사진을 보시면 시그모이드 함수식을 미분하면서 도출된 식을 사용하여 기울기값을 얻어냈을 때 기존과 같은 값이 나옴을 알 수 있습니다.
파란색 박스가 쳐진 부분에서 위 식을 사용하면 복잡한 미분 계산 필요 없이 바로 원하는 값이 나온다는 것을 알 수 있습니다.
Vectorized Operations
이제는 만약 이들이 벡터라면 어떨지 생각을 합니다.
변수 x, y, z에 숫자 대신 벡터를 가지고 있다고 가정해 보겠습니다.
gradient는 Jacobian 행렬이 됩니다. 예를 들어,의 각 원소에 대해 에 대한 미분을 포함하는 행렬이 됩니다.
4096차원의 input vector가 있습니다. 이 노드는 요소별로 최댓값을 취해줍니다. output 또한 4096차원의 vector입니다.
이 경우의 Jacobian 행렬 사이즈는 어떻게 될까요?
-> Jacobian 행렬의 각 행은 입력에 대한 출력의 편미분이 됩니다.
행렬 사이즈는 [4096*4096]이 됩니다. 만약 여기서 100개의 미니 배치를 갖고 있다면 [409600*409600] Size를 갖게 됩니다.
이것은 너무 거대해서 작업에 별로 실용적이지 않답니다.
실제로 행렬을 계산할 필요가 없다는데요. 그렇다면 Jacobian 행렬이 왜 만들어진 것일까요?
각 요소별로 최댓값을 갖는 지점에서 어떤 일이 일어나는지를 생각해 본다면 그것은 각각의 편미분 한 값과 이어질 것입니다.
입력의 어떤 차원이 출력의 어떤 차원에 영향을 주는지, 그래서 Jacobian 행렬은 대각선 형태의 구조를 볼 수 있습니다.
입력의 각 요소는 오직 출력의 해당 요소에만 영향을 주기 때문에 Jacobian 행렬은 대각 행렬이 될 것입니다.
실제로 공식화할 필요는 없고, 계산한 gradient 값만 채워 넣으면 된다고 합니다.
Jacobian 행렬은 빅터 미적분학에서 다변수 벡터 함수의 도함수 행렬입니다. 아코비 행렬식은 야코비 행렬의 행렬식을 뜻합니다.
'AI > Computer Vision' 카테고리의 다른 글
[Computer Vision] cs231n lecture2 - Image Classification (0) | 2023.04.05 |
---|---|
[Computer Vision] cs231n lecture3 - Loss Functions and Optimization (0) | 2023.03.24 |
댓글