5 분 소요

image



Neural Networks Basics

Logistic Regression as a Neural Network

Derivatives with a Computation Graph

이전에 계산 그래프를 사용하여 함수 J를 계산하는 예를 살펴보았습니다. 이제 해당 계산 그래프의 정리된 버전을 사용하여 도함수 계산을 하는 방법을 살펴보겠습니다.

image 계산 그래프를 보겠습니다. $v$에 대한 $J$의 도함수를 계산하려고 한다고 가정해보겠습니다. 값이 어떻게 나올까요? 여기 $v$의 값을 갖고 살짝 변경한다고 하면 $J$의 값은 어떻게 변할까요?

$J$는 $J=3v$로 정의됩니다. 그리고 $v=11$입니다. 따라서 $v$를 $11.001$로 조금 올리면 $J$는 $3v$이므로 $33$에서 $33.003$으로 올라갑니다. 여기서 $v$는 $0.001$만큼 늘어났습니다. 그리고 그 결과 $J$가 3배 증가합니다. 따라서 $v$에 대한 $J$의 도함수는 $3$입니다. 왜냐하면 $J$의 증가는 $v$의 3배이기 때문입니다.

그리고 사실 이것은 $f(a) = 3a$인 이전 예제와 매우 유사합니다. 그런 다음 약간 단순화된 약간 엉성한 표기법으로 $\cfrac{df(a)}{da}$를 도출했는데 $\cfrac{df}{da} = 3$으로 쓸 수 있습니다.

그러므로 이렇게 $J = 3v$로 나타나는데요. 이경우, $\cfrac{dJ}{dv} = 3$이 됩니다. 여기서 $J$는 $f$의 역할을 하고 $v$는 $a$의 역할을 합니다.

그러므로 역방향 전파의 용어는 최종 출력 변수의 도함수를 계산하려는 경우 일반적으로 $v$에 대해 가장 신경 쓰는 변수이기도 합니다만 역방향 전파의 첫 번째 단계를 완료했습니다. 이 그래프에서는 이것을 한 단계 후퇴라고 부릅니다.

다른 예제를 하나 더 보겠습니다. $\cfrac{dJ}{da}$는 무엇일까요? 다시 말해, $a$의 값을 올리면 이것이 $J$의 값에 어떤 영향을 미칠까요?

이제 $a = 5$인 예제를 살펴보겠습니다. $5.001$로 올려보겠습니다. 순 영향력은 $v$ 즉, $a + u$이므로 이전에는 $11$ 이었습니다. 이것은 $11.001$로 증가할 것입니다. 그리고 $J$가 이제 $33.003$까지 올라간 것을 이미 위에서 보았습니다. $a$가 $0.001$ 증가하면 $J$는 $0.003$ 증가한다는 것을 말입니다.

그리고 증가한다는 것은 이 값을 $5$를 가져와서 새 값을 연결해야 한다는 것입니다. 그런 다음 $a$의 변화는 계산 그래프의 오른쪽으로 전파되어 $J$의 값이 $33.003$이 됩니다. 그래서 $J$의 증가량은 $a$의 증가량의 3배입니다. 그러면 여기 도함수는 $3$이라는 것입니다. 이것을 분해하는 한 가지 방법은 $a$가 변하면 $v$도 변할 것이라고 말하는 것입니다. 그리고 $v$를 변경하면 $J$가 변경됩니다. 따라서 값을 올리면 $J$ 값이 순변화 됩니다.

$a$의 값을 아주 조금 올렸을 때 첫째, $a$를 변경함으로써 결국 $v$를 증가시킵니다. 그러면 $v$는 얼마나 증가할까요? $\cfrac{dv}{da}$에 의해 결정되는 양 만큼 증가할 것입니다. 그리고 $v$의 변화량이 $J$를 증가시킬 것입니다. 그래서 미적분학에서는 이것을 연쇄법칙이라고 합니다.

$\cfrac{dJ}{da} = 3 = \cfrac{dJ}{dv}\cfrac{dv}{da}$

$a$가 $v$에 영향을 주면 $J$에 영향을 주고 $a$의 값을 약간 변경하면서 $J$가 변하는 양은 $a$를 변화시킬때 변하는 $v$의 양 곱하기 $v$값이 변할때 변하는 $J$의 양입니다. 다시 말씀드리면, 미적분에서는 이것을 연쇄법칙이라 합니다.

이번 계산을 통해 배운 것은 값을 $0.001$로 증가시키면 $v$도 똑같은 양 만큼 변한다는 것입니다. 그러므로 $\frac{dv}{da} = 1$이 됩니다. 따라서 $\frac{dJ}{dv}\frac{dv}{da}$는 $3$ x $1$은 실제로 $\frac{dJ}{da} = 3$이라는 정확한 값을 제공합니다.

따라서 이 작은 그림은 $\frac{dJ}{dv}$ 즉 이변수에 대한 도함수를 계산하여 $\frac{dJ}{da}$를 계산하는 데 도움이 되는 방법을 보여줍니다. 그리고 그것은 이 역계산의 또 다른 단계입니다.


새로운 표기법 협약을 하나 더 소개하고 싶습니다. 즉, 역방향 전파를 구현하기 위해 코드를 작성할 때 일반적으로 최종 출력 변수가 존재하게 됩니다. 따라서 최종 출력 변수가 존재하게 됩니다. 따라서 최종 출력 변수는 정말 신경쓰거나 최적화할 수 있습니다. 이런 경우 최종 출력 변수는 $J$입니다. 계산 그래프에서 마지막 노드에 해당하는 부분입니다.

따라서 많은 연산이 최종 출력 변수의 도함수를 계산하기 위해 시도될 것입니다. 따라서 이 최종 출력 변수의 $d$는 다른 변수에 대한 것입니다. 그런 다음 그것을 $dvar$라고 부릅니다. 따라서 대부분의 계산은 $a,b,c$ 또는 $u,v$와 같은 다양한 중간 변수를 사용하여 최종 출력 변수 $J$의 도함수를 계산합니다.

이것을 소프트웨어로 구현할 때 이런 변수를 뭐라고 부를까요? 한 가지 할 수 있는 방법은 파이썬에서 dFinalOutputVar/dvar와 같은 매우 긴 변수 이름을 부여하는 겁니다. 하지만 이것은 너무 긴 변수 이름입니다. 이걸 dJdvar라고 부르셔도 될 것 같습니다. 하지만 항상 최종 출력 변수와 관련하여 dJ에 대한 미분을 취하기 때문에 새로운 표기법을 도입하겠습니다.

여기서 코딩에서는 작성한 코드로 이것을 계산할 때 변수 이름 dvar를 사용하여 그 양을 나타냅니다. 따라서 작성하는 코드의 dvar는 $J$와 같이 관심 있는 최종 출력 변수의 도함수를 나타냅니다. 가끔씩은 코딩에서 여러 중간 수량에 대한 마지막 $l$을 나타낼 것입니다.

따라서 여기 코드에서 $dv$를 사용하여 이 값을 나타냅니다. 그래서 $dv$는 $3$과 같을 것입니다. 그리고 여러분의 코드는 이것을 $da$로 표현하는데 이것은 우리도 $3$과 같다는 것을 알아냈습니다. 우리는 이 계산 그래프를 통해 부분적으로 역방향 전파를 실시했습니다.

다음으로 이 예제의 나머지 부분을 살펴보겠습니다.

image

이제 다시 그래프를 살펴보겠습니다. 지금까지 한 일을 요약하자면 $J = 3v$ 에서 뒤로 가서 $dv = 3$을 알아내는 것입니다. 그리고 다시 말하지만, $dv$의 정의는 코드가 실제로 $\cfrac{dJ}{dv}$인 변수 이름일 뿐입니다. 우리는 $da = 3$이라는 것을 알아냈습니다. 역시나 $da$는 코드의 변수 이름이며 실제로 $\cfrac{dJ}{da}$ 값입니다.

그리고 우리는 어떻게 이렇게 두 모서리를 거꾸로 갈 수 있는지 조심해야 합니다. 이제 도함수를 계속 계산해 보겠습니다.

이제 $u$의 값을 보겠습니다. $\cfrac{dJ}{du}$는 무엇일까요? 이전에 비슷한 계산을 통해 $u = 6$부터 시작합니다. $u$를 $6.001$로 올리면 이전에 $11$이었던 $v$가 $11.001$로 올라갑니다. 그럼 $J$는 $33$에서 $33.003$이 됩니다. 그러면 $J$의 증가분은 3배입니다.

$u$에 대한 분석은 우리가 이미 실행한 $a$에 대한 분석과 매우 흡사합니다. 이것은 $\cfrac{dJ}{dv} \cdot \cfrac{dv}{du}$로 계산되는데요. $\cfrac{dJ}{dv}$은 이전에 계산한것과 같이 $3$입니다. 그리고 $\cfrac{dv}{du}$은 $1$과 같습니다. 그러면 역방향 전파에서 또 한단계 진행했는데요. $du$도 $3$과 같다고 계산하게 됩니다. 그리고 $du$는 당연히 $\cfrac{dJ}{du}$와 같습니다.

마지막 예제로 들어가겠습니다. 그렇다면 $\cfrac{dJ}{db}$는 무엇일까요? 여기서, $b$의 값을 바꿀 수 있다고 상상해 봅시다. 그리고 $J$의 값을 최소화하거나 최대화하기 위해 $b$를 조금 조정하고 싶습니다. 따라서 $b$의 값을 약간 변경할 때 이 함수 $J$의 도함수 또는 기울기는 얼마 입니까?

미적분의 연쇄 법칙을 사용하면 이것은 두 가지의 곱으로 쓸 수 있다는 것이 밝혀졌습니다. $\cfrac{dJ}{du} \cdot \cfrac{du}{db}$로 말이죠.

$b = 3$을 $3.001$로 바꾸면 $J$에 영향을 미치는 방식은 먼저 $u$에 영향을 미칠 것입니다. 그러면 $u$는 얼마나 영향을 받을까요? $u = b \cdot c$로 정의됩니다. 그래서 이것은 $b = 3.001$일 때 $u$는 $6.002$가 될 것입니다.

왜냐하면 여기 예제에서 $c = 2$이기 때문입니다. 그러면 $\cfrac{du}{db} = 2$라는 것을 알려줍니다. $b$를 $0.001$만큼 올리면 $u$가 2배 증가하기 때문입니다. 따라서 $\cfrac{du}{db}$는 2와 같습니다. 이제 우리는 $b$가 올라간 것보다 $u$가 두 배나 높아졌다는 것을 압니다.

그러면 $\cfrac{dJ}{du}$는 무엇일까요? 이것이 3과 같다는 것을 이미 알아냈습니다. 그래서 이 둘을 곱하면 $\cfrac{dJ}{db} = 6$이 됩니다. 그렇다면 다음으로 $u$가 $0.002$만큼 증가하면 $J$에는 어떤 영향을 미치나요?

$\cfrac{dJ}{du} = 3$이라는 사실은 $u$가 $0.002$만큼 증가할 때 $J$가 3배 증가한다는 것을 알려줍니다. 그래서 $J$는 $0.006$까지 올라가야합니다. 이것은 $\cfrac{dJ}{du}$가 $3$이라는 사실에 근거 합니다. 그리고 수학을 자세히 살펴보면 $b$가 $3.001$이 되면 $u$가 $6.002$가 되고 $v$가 $11.002$가 됨을 알 수 있습니다.

그래서 그것은 $a + u$ 인 $5+ u$입니다. 그리고 J, 즉 $3$ x $v$는 결국 $33.006$이 됩니다. 그리고 그것이 $\cfrac{dJ}{db} = 6$을 얻는 방법입니다.

이 값을 입력하기 위해 뒤로 이동하면 $db = 6$이 됩니다. 그리고 $db$는 실제로 $\cfrac{dJ}{db}$의 파이썬 코드 변수 이름입니다.

마지막 예시는 자세히 설명하지 않겠습니다. 하지만 $\cfrac{dJ}{dc}$도 계산하면 $\cfrac{dJ}{du} \cdot \cfrac{du}{dc}$가 되는데요. 그러면 이것은 9가 됩니다. $\cfrac{dJ}{du} \cdot \cfrac{du}{dc}$ = $3$ x $3$ 이기 때문에.

이 예제에서 핵심 내용은 도함수를 계산하고 이러한 모든 도함수를 계산할 때 가장 효율적인 방법은 빨간색 화살표 방향을 따라 오른쪽에서 왼쪽으로 계산하는 것입니다. 특히, 우리는 먼저 $v$에 대한 도함수를 계산했습니다. 그러면 $a$에 대한 도함수와 $u$에 대한 도함수를 계산하는데 유용합니다. 그리고 $u$에 대한 도함수는 차례로 $b$에 대한 도함수와 $c$에 대한 도함수를 계산하는 데 유용합니다.

이것이 바로 계산 그래프이며 $J$와 같이 최적화할 수 있는 비용 함수를 계산하기 위해 앞으로 또는 왼쪽에서 오른쪽으로 계산하는 방법입니다. 미적분이나 연쇄법칙에 익숙하지 않아도 걱정하지 않아도 됩니다. 다음에는 로지스틱 회귀의 맥락에서 내용을 다시 살펴보겠습니다. 그리고 로지스틱 회귀 모델의 도함수를 계산하는 데 필요한 계산을 구현하기 위해 무엇을 해야 하는지 정확히 살펴보겠습니다.

댓글남기기