[Ⅰ. Neural Networks and Deep Learning] Shallow Neural Networks (4)
Neural Networks Basics
Shallow Neural Networks
Activation Function
신경망을 생성할 때, 선택할 수 있는 한 가지 방법은 신경망의 출력 단위와 은닉층에서 사용할 활성화 함수입니다. 지금까지 시그모이드 활성화 함수를 사용했지만 때로는 다른 선택이 훨씬 더 잘 작동할 수 있습니다. 몇가지 옵션을 살펴보겠습니다.
신경망의 순방향 전파단계에서 시그모이드 함수를 사용하는 이 두 단계를 가졌습니다. 그래서 시그모이드를 활성화 함수라고 합니다. 그리고 여기 익숙한 시그모이드 함수 $a = \cfrac{1}{1+e^{-z}}$가 있습니다.
그래서 더 일반적인 경우에 다른 함수 $g(z)$를 가질 수 있습니다. 제가 여기에 적을 것은 $g$는 시그모이드 함수가 아닌 비선형 함수일 수 있습니다. 예를 들어 시그모이드 함수는 0과 1사이에 있습니다.
거의 항상 시그모이드 함수보다 더 잘 작동하는 활성화 함수는 탄젠트 함수 또는 쌍곡선 탄젠트 함수입니다. 이것은 $a = tanh(z)$ 입니다. 그리고 이것은 +1과 -1 사이가 됩니다. $tanh$의 공식은 $\cfran{e^z-e^{-z}}{e^z+e^{-z}}$입니다. 그리고 그것은 사실 수학적으로 시그모이드 함수의 이동 버전입니다.
그래서 시그모이드 함수는 그와 비슷하지만 이제 스케일의 0점을 넘어서 이동했습니다. 따라서 이것은 -1과 +1 사이가 됩니다. 그리고 숨겨진 단위의 경우 함수 $g(z)$를 $tanh(z)$와 같게 하면 됩니다.
탄젠트 함수는 항상 시그모이드 함수보다 더 잘 작동합니다. 왜냐하면 +1과 -1사이의 값으로 은닉층에서 나오는 활성화의 평균은 0에 더 가깝기 때문입니다. 때때로 학습 알고리즘을 훈련할 때와 마찬가지로 데이터를 중심에 위치시키고 시그모이드 함수 대신 $tanh$를 이용하여 데이터의 평균이 0이 되도록 할 수 있습니다.
데이터의 평균이 0.5가 아닌 0에 가깝도록 데이터를 중심으로 하는 효과가 있습니다. 이렇게 하면 다음 레이어에 대한 학습이 조금 더 쉬워집니다. 최적화 알고리즘에 대해서도 다음에 자세히 설명하겠습니다.
그러나 한 가지 유의할 점은 더 이상 시그모이드 활성화 함수를 거의 사용하지 않는다는 것입니다. $tanh$ 함수는 거의 항상 우수합니다. 한 가지 예외는 출력 레이어에 대한 것입니다. $y$가 0이거나 1이면 $\hat{y}$이 -1과 1사이가 아니라 0과 1사이에 있는 출력하려는 숫자가 되는 것이 합리적입니다.
시그모이드 활성화 함수를 사용하는 한 가지 예외는 이진 분류를 사용할 때입니다. 이 경우 상위 레이어의 시그모이드 활성화 함수를 사용할 수 있습니다. 따라서 $g^{[2]}(z^{[2]}) = \sigma{(z^{[2]})}$와 같습니다. 그래서 이 예제에서는 은닉층에 대한 $tanh$ 활성화 함수와 출력층에 대한 시그모이드가 있는 곳입니다.
따라서 활성화 함수는 레이어마다 다를 수 있습니다. 그리고 때때로 활성화 함수가 레이어마다 다르다는 것을 나타내기 위해 대괄호 윗첨자를 사용하여 $g^{[1]}$과 $g^{[2]}$이 다를 수 있음을 나타낼 수도 있습니다. 다시, [1] 윗첨자는 은닉층을 나타내고 윗첨자 [2]이 출력층을 나타냅니다.
시그모이드 함수와 $tanh$함수의 단점 중 하나는 $z$가 매우 크거나 매우 작으면 이 함수의 기울기의 도함수가 매우 작아진다는 것입니다. 따라서 $z$가 매우 크거나 $z$가 매우 작으면 함수의 기울기가 0에 가까우므로 기울기 하강 속도가 느려질 수 있습니다.
머신 러닝에서 매우 인기 있는 또 다른 선택은 정류 선형 유닛(ReLU)라고 불리는 것입니다. 공식은 $a = max(0,z)$입니다. 따라서 $z$가 양수이고 도함수이거나 $z$가 음수일 때 기울기가 0이면 도함수는 1입니다. 이것을 구현하는 경우 $z$가 정확히 0일 때의 도함수는 기술적으로 잘 정의되지 않습니다. 하지만 컴퓨터에서 이것을 구현할 때 정화히 $z$가 0.000000000000이 될 확률은 매우 낮습니다. 그래서 걱정할 필요는 없습니다.
실제로 $z$가 0일 때 도함수를 1 또는 0으로 가정할 수 있습니다. 여기 활성화 기능을 선택하기 위한 몇 가지 규칙이 있습니다. 출력이 0, 1 값이고 이진 분류를 사용하는 경우 시그모이드 활성화 함수는 출력층에 대해 매우 자연스러운 선택입니다. 그런 다음 다른 모든 단위 값 또는 정류된 선형 유닛은 점차 활성화 함수의 기본 선택이 됩니다.
은닉층에 무엇을 사용해야 할지 잘 모르겠다면 요즘 대부분의 사람들이 사용하고 있는 값 활성화 함수를 사용합니다. 비록 사람들이 가끔 $tanh$ 활성화 함수를 사용하기도 하지만 말입니다.
값의 한 가지 단점은 $z$가 음수일 때 도함수가 0과 같다는 것입니다. 실제로 이것은 잘 작동합니다. 그러나 Leaky ReLU라는 값의 또 다른 버전이 있습니다. 이어서 공식을 알려드리겠지만 $z$가 음수일 때 0이 되는 대신 약간의 기울기가 필요합니다. 이를 Leaky ReLU라고 합니다.
일반적으로 값 활성화 함수보다 더 잘 작동합니다. 하지만 실제로는 잘 사용하지는 않습니다. 둘 중 어느 하나라도 괜찮습니다. 하지만, 하나를 골라야 한다면 저는 보통 그 값을 사용합니다. 그리고 값과 Leaky ReLU의 장점은 활성화 함수의 도함수인 $z$의 많은 공간에 대해 활성화 함수의 기울기가 0과 매우 다르다는 것입니다.
그래서 실제로 값 활성화 기능을 사용하여 신경망은 종종 $tanh$ 또는 시그모이드 활성화 함수를 사용할 때 보다 훨씬 빠르게 학습할 것입니다. 주된 이유는 함수의 기울기가 0이 되어 학습 속도가 느려지는 효과가 적기 때문입니다. 그리고 $z$ 범위의 절반에 대해 값의 기울기가 0이라는 것을 알고 있습니다.
따라서 대부분의 훈련 예제에서 학습은 여전히 매우 빠를 수 있습니다. 다음으로 다른 활성화 함수들의 장단점을 간단히 요약해 보겠습니다.
여기 시그모이드 활성화 함수가 있습니다. 저는 이항 분류를 하거나 거의 사용하지 않는 경우 출력층을 제외하고는 이것을 사용하지 말라고 말하고 싶습니다. 그리고 제가 이것을 거의 사용하지 않는 이유는 $tanh$가 훨씬 더 완벽하기 때문입니다.
그리고 기복적으로 가장 일반적으로 사용되는 활성화 함수 ReLU입니다. 그래서 무엇을 더 사용해야 할지 모르겠다면 이것을 사용하세요. 그리고 자유롭게 Leaky ReLU도 사용해 보세요.
그래서 신경망에서 사용할 수 있는 활성화 함수의 선택에 대한 감을 잡기를 바랍니다. 딥 러닝에서 보게될 것 중 하나는 신경망을 구축하는 방법에 있어 다양한 선택이 종종 있다는 것입니다. 숨겨진 단위의 수에서 선택 활성화 기능 나중에 볼 방법을 초기화하는 방법까지 다양합니다. 그런 많은 선택지들이 있습니다.
그리고 어떤 것이 당신의 문제에 가장 적합한지에 대한 좋은 지침을 얻는 것이 때때로 어렵다는 것이 밝혀졌습니다. 그래서 이 과정을 통해 업계에서 무엇이 더 인기 있는지 또는 덜 인기 있는지에 대해 계속해서 알려드리겠습니다.
하지만 애플리케이션의 경우 어떤 것이 가장 잘 동작하는지 미리 알기란 매우 어렵습니다. 일반적인 조언은 어떤 활성화 함수가 가장 잘 작동하는지 잘 모르겠으면 모두 시도해 보는 것입니다. 홀드아웃 검증 세트나 개발 세트처럼 평가해 주십시오. 이것에 대해서는 나중에 설명하겠습니다.
어떤 것이 가장 잘 작동하는지 살펴보고 그것을 사용하라는 것입니다. 이러한 다양한 선택들을 애플리케이션에 맞게 테스트함으로써 향후에 신경망 아키텍처에 대한 특이성 문제를 보다 효과적으로 입증할 수 있을 것으로 생각합니다.
알고리즘의 진화뿐만 아니라 항상 값 활성화를 사용하고 다른 것은 사용하지 말라고 말한다면 결국 작업하게 되는 모든 문제에 적용될 수도 있고 적용되지 않을 수도 있습니다. 가까운 미래에 또는 먼 미래에 말이죠.
그것은 활성화 함수의 선택이었고 가장 인기 있는 활성화 함수를 볼 수 있습니다. 가끔 물어볼 수 있는 또 다른 질문이 있습니다. 활성화 함수를 사용해야 하는 이유는 무엇입니까? 왜 그걸 그냥 없애버리지 않는 거죠? 다음에는 신경망에 일종의 비선형 활성화 함수가 필요한 이유에 대해 다뤄보겠습니다.
Why do you need Non-Linear Activation Functions?
왜 신경망은 비선형 활성화 함수를 필요로 할까요? 신경망이 흥미로운 함수를 계산하기 위해서는, 비선형 활성화 함수를 선택해야 합니다. 한 번 봅시다.
여기 신경망에 대한 네 가지 방정식이 있습니다. 왜 이것을 제거하지 않을까요? 함수 $g$를 제거하면 어떻게 될까요? 그렇게 되면 $a^{[1]}$은 $z^{[1]}$이 될겁니다. 때로는 이것을 선형 활성화 함수라고 부르기도 합니다. 혹은 항등 활성화 함수는 입력된 모든 것을 출력하기 때문에 더 좋은 이름이 될 수 있습니다. 이를 위해 $a^{[2]} = z^{[2]}$이 된다면 어떻게 될까요?
이렇게 하면 이 모델은 처음 두 방정식을 구하기 위해 입력 기능인 $x$의 선형 함수로 $y$ 또는 $\hat{y}$을 계산하는 것입니다.
오른쪽 식을 보면 $a^{[1]}$의 정의를 가지고 아래식에 대입을 하면 $W’x + b’$와 같습니다. 선형 활성화 함수를 사용하거나 이를 항등 활성화 함수라고도 부를 수 있다면 신경망은 입력의 선형 함수를 출력하는 것입니다.
그리고 나중에 깊은 네트워크, 많은 계층이 있는 신경망에 대해 이야기할 것입니다. 많은 은닉층을 가지고 있고 그리고 선형 활성화 함수를 사용하거나 또는 활성화 기능이 없다면 신경망에 얼마나 많은 레이어가 있든 선형 활성화 함수를 계산하기만 하면 됩니다. 그렇기 때문에 이왕이면 은닉층이 없는 것이 좋겠죠.
간략하게 언급한 사례 중 일부는 여기에 은닉층에 활성화 함수가 있고 출력층에 시그모이드 함수가 있는 경우 이 모델은 은닉층이 없는 표준 로지스틱 회귀 보다 더 표현력이 없다는 것이 밝혀졌습니다. 그래서 증명하려고 애쓰지 않겠지만 여러분이 원한다면 그렇게 할 수 있습니다.
그러나 두 선형 함수의 구성 자체가 선형 함수이기 때문에 선형의 은닉층은 거의 쓸모가 없습니다. 비선형 항목을 넣지 않는 한 더 많은 계산을 할 수 없습니다. 네트워크 깊숙이 들어갈 때도 흥미로운 기능을 제공합니다.
선형 활성화 함수를 사용할 수 있는 곳은 한 곳뿐입니다. $g(x) = z$입니다. 그리고 그것은 회귀 문제에 대해 머신 러닝을 하고 있는 경우입니다. 따라서 $y$가 실수인 경우 예를 들어, 여러분이 주택 가격을 예측하려고 한다면 $y$는 0과 1이 아니라 실제 숫자입니다. $0는 아무리 비싸도 주택 가격인 것 같습니다. 아마도 주택은 잠재적으로 수백만 달러가 될 수 있으므로 데이터 세트에 많은 주택 비용이 필요합니다.
하지만 $y$가 이러한 실제 값을 취하는 경우 은닉층에서 선형 활성화 함수를 사용하면 출력 $\hat{y}$가 마이너스 무한대에서 플러스 무한대로 가는 실수일 수 있습니다. 그러나 은닉 유닛은 선형 활성화 함수를 사용하지 않아야 합니다. 그들은 ReLU, tanh, Leaky ReLU 또는 다른 것을 사용할 수 있습니다. 따라서 선형 활성화 함수를 사용할 수 있는 한 곳은 일반적으로 출력층입니다.
하지만 그 외에는 선형 활성화 함수를 사용하는 것에 대해 이야기할 압축과 관련된 몇몇 매우 특별한 상황을 제외하고는 은닉층에서 선형 활성화 함수를 사용하는 것은 극히 드뭅니다.
그리고 물론 우리가 실제로 주택 가격을 예측한다면 처음에 다룬것 처럼 주택 가격은 모두 음수가 아니기 때문에 아마도 그때에도 가치 활성화 함수를 사용하여 $\hat{y}$를 0보다 크거나 같게 할 수도 있습니다. 그래서 비선형 함수를 갖는 것이 왜 신경망의 중요한 부분인지 알 수 있기를 바랍니다.
다음엔 개별 활성화 함수의 기울기 또는 도함수를 추정하는 방법을 다뤄보겠습니다.
댓글남기기