3 분 소요

image



Neural Networks BasicsPermalink

Shallow Neural NetworksPermalink

Derivatives of ActivationPermalink

여러분의 신경망에 대해 역전파를 구현할 때 활성화 함수의 기울기나 도함수를 계산해야 합니다. 이제 활성화 함수의 선택과 이러한 함수의 기울기를 계산하는 방법을 살펴보겠습니다.

Sigmoid activation functionPermalink

image

여기 친숙한 시그모이드 활성화 함수입니다. 따라서 주어진 zz 값에 대해 작은 선을 그리면 아래 삼각형의 너비에 대한 높이에 해당하는 기울기 또는 도함수를 가집니다. 그래서, 만약 g(z)g(z)가 시그모이드 함수라면, 그러면 함수의 기울기는 ddzg(z)ddzg(z)이며, 그래서 우리는 미적분을 통해 zz 에서 g(x)g(x)의 기울기라는 것을 알게됩니다.

미적분학에 익숙하고 도함수를 구할 줄 알면 시그모이드 함수의 도함수를 취하면 해당 공식을 보여줄 수 있습니다. 다시 말하지만 여기서는 미적분을 단계를 진행하지 않을 것입니다.

따라서 이것은 g(z)(1g(z))g(z)(1g(z))입니다. 이 표현이 말이 되는지 확인해 봅시다. 첫째, zz가 매우 클경우, zz1010과 같다면 그 다음, g(z)g(z)는 1에 가까울 것이며, 왼쪽에 있는 공식은 ddzg(z)ddzg(z)가 1(1-1)로 결국 0과 근접한 값이 됩니다. zz의 기울기가 매우 크면 기울기가 0에 가깝기 때문에 이것은 올바르지 않습니다.

반대로, zz1010이면, 그러면 g(z)g(z)는 0에 가까울 것 입니다. 즉 0(1-0) 입니다. 이 값은 역시 0과 근접합니다.

마지막으로, zz가 0인 경우, 그 다음, g(z)g(z)는 1/2이고, 이것이 바로 시그모이드 함수입니다. 그러면 미분은 1/2(1 - 1/2)입니다. 1/4과 같으며, 그리고 그것은 실제로 zz가 0일 때 이 함수의 도함수 또는 기울기의 정확한 값으로 판명되었습니다.

마지막으로, 한 가지 표기법을 더 소개하자면 때때로 도함수의 줄임말로 사용하는 g(z)g(z)입니다. g 프라임 z로 미적분에서 맨 위에 있는 작은 대시를 ‘프라임’이라고 부릅니다. 그러나 zz의 g 프라임은 입력 변수 zz에 대한 g 함수의 도함수에 대한 미적분학의 약자입니다.

그런 다음 이 신경망에서, a=g(z)a=g(z)라고 했을 때, 도함수는 a×(1a)a×(1a)로 정리됩니다. 그래서 때로는 구현에 있어서 g(z)=a×(1a)g(z)=a×(1a)를 보실텐데오. 이것은 단지 도함수를 의미합니다. 이 공식의 장점은 aa에 대한 값을 이미 계산한 경우 이 표현식을 사용하여 g 프라임에 대한 기울기 값도 매우 빠르게 계산할 수 있다는 것입니다.

Tanh activation functionPermalink

image

이제 Tanh 활성화 함수를 살펴봅시다. 우리가 이전에 했던 것과 비슷한데요. ddzg(z)ddzg(z)zz의 특정 지점에서 g(z)g(z)의 기울기이며, 쌍곡선 탄젠트 함수의 공식을 보고 미적분학을 알고 있따면, 도함수를 취하고 이것이 이 1(tanh(z))21(tanh(z))2 공식으로 단순화된다는 것을 보여줄 수 있고 이것을 다시 g(z)g(z)이라고 부를 때 이전에 가지고 있는 속기법을 사용할 수 있습니다.

원한다면 이 공식이 타당한지 확인해 볼 수 있습니다. 예를 들어, z=10z=10이면, tanh(z)tanh(z)는 1에 매우 가까울 것입니다. 그리고 이것은 +1 에서 -1 사이의 값입니다. 그 다음에 g(z)g(z)는 함수에 따르면 결국 0과 근접한 값인데요. 그래서 zz가 매우 크다면 기울기는 0에 가깝습니다.

반대로 zz의 값이 작으면 이는 0에 가까습니다. 그리고 마지막으로 z가 0인 경우, tanh(z)tanh(z)는 0과 같고 기울기는 실제로 1과 같으며 이부분은 zz의 값이 0일 때의 기울기 점을 나타냅니다.

요약하자면, 만약 a=g(z)a=g(z)a=tanh(z)a=tanh(z)라면 도함수인 g(z)=1a2g(z)=1a2입니다. 만약 여러분이 aa의 값을 이미 계산한 경우에는 이 공식을 사용해서 빠르게 도함수의 값을 구할 수 있습니다.

ReLU and Leaky ReLUPermalink

image

마지막으로 ReLU 및 Leaky ReLU 활성화 함수에 대한 도함수를 계산하는 방법은 다음과 같습니다.

만약 g(z)=max(o,z)g(z)=max(o,z)이면, 도함수는 다음과 같습니다.

도함수 g(z)g(z)zz가 0보다 작으면 0이고, zz가 0보다 크면 1이 됩니다. zz가 정확히 0과 같다면 실제로 정의되지 않고 기술적으로 정의되지 않습니다. 그러나 이것을 소프트웨어에서 구현하는 경우 수학적으로 100% 정확하지 않을 수 있지만 하지만 zz가 정확히 0인 경우에는 괜찮을 겁니다. 도함수를 1로 설정하면 정상적으로 작동합니다. 항상 0이 되어야만 하는 것은 중요하지 않습니다.

만약 당신이 최적화 전문가라면, 기술적으로는 g 프라임은 z의 활성화 함수 g의 하위 기울기라고 불리는 것이 됩니다. 그렇기 때문에 기울기 하강이 계속 작동할 것입니다. 하지만 zz가 정확히 0.0000000…일 확률이라고 생각할 수 있습니다. 그것은 너무 작아서 zz가 0일 때 도함수를 어디와 같게 설정했는지는 거의 중요하지 않습니다. 실제로 이것은 사람들이 zz의 도함수에 대해 구현하는 것입니다.

마지막으로 Leaky ReLU 활성화 함수를 가진 싱경망을 훈련시키는 경우, g(z)=max(0.01z,z)g(z)=max(0.01z,z)이므로, g(z)g(z)zz가 0보다 작으면 0.01이고 0보다 크면 1입니다.

다시 말하지만 zz가 정확히 0일 때는 기술적으로 기울기는 정의되지 않지만, 도함수를 설정하거나 g 프라임을 0.01 또는 1로 설정하는 코드 조각을 구현한다면, 그것은 정말로 문제가 되지 않습니다. 어느쪽이든, 별로 중요하지 않습니다. zz가 정확히 0이면 코드가 제대로 작동합니다.

따라서 이러한 공식에서 활성화 함수의 도함수나 기울기를 계산해야 합니다. 이제 기본 빌딩 블록이 되는 내용을 다루었으니 여러분은 어떻게 신경망을 위해 기울기 하강을 구현할 수 있는지 보실 준비가 되었습니다.

Gradient descent for neural networksPermalink

image

image

댓글남기기