신경망을 훈련시키는 것,
특히 매우 깊은 신경망을 훈련시키는 것의 문제는 경사의 소실과 폭발입니다
매우 깊은 신경망을 훈련시킬 때, 미분값 혹은 기울기가 아주 작아지거나 커질 수 있습니다
기하급수적으로 작아져 훈련을 어렵게 만들 수도 있습니다
이 비디오에서는 경사 폭발과 소실의 문제점이 무엇인지 알아보고
그리고 무작위의 가중치 초기화에 대한 신중한 선택으로
이 문제를 상당히 줄이는 방법도함께 다뤄보겠습니다
이 그림처럼 매우 깊은 신경망을 훈련시키는 경우를 생각해봅시다
제가 그린 것은 오직 두 개의 은닉 유닛만을 갖지만 더 많을 수도 있습니다
이 신경망은 매개변수 w^[1], w^[2], w^[3]
이런 식으로 w^[L]까지 갖습니다 간단함을 위해 활성화 함수 g(z)가 선형 활성화 함수를 사용한다고 해봅시다
그리고 b^[l]은 0이라고 가정해봅시다
따라서 이 경우에 출력 y는 w^[L] 곱하기 w^[L-1] 곱하기 w^[L-2]이런 식으로 진행해
w^[3]*w^[2]*w^[1]
곱하기 x가 될 것입니다
수학적으로 확인하고 싶다면
w^[1] 곱하기 x는
z^[1]이 될 것입니다
b^[1]이 0과 같기 때문에
z^[1]은 w^[1] 곱하기 x입니다
b를 더해도 0을 더하는 것이니까요
a^[1]은 g(z^[1])과 같습니다
선형의 활성화 함수를 사용하기 때문에
이 값은 z^[1]과 같습니다
따라서 이 항은 결국 a^[1]과 같습니다
이런 이유로 w^[2]*w^[1]*x는
a^[2]와 같습니다
왜냐하면 a^[2]는 g(z^[2])와 같고
이것은 g(w^[2]*a^[1])과 같습니다
이것은 g(w^[2]*a^[1])과 같습니다
이것은 g(w^[2]*a^[1])과 같습니다
이것은 g(w^[2]*a^[1])과 같습니다
이 값을 여기에 대입한 것이죠
따라서 이 값은 a^[2]와 같습니다
그리고 이 값은 a^[3]가 됩니다
이런 식으로 계산하면
이 모든 행렬들의 곱은
y의 예측값이 됩니다
각각의 가중치 행렬인 w^[l]이
1.5, 1.5, 0, 0의 값을 갖는
행렬이라고 해봅시다
마지막 행렬은 다른 차원을 갖을 것입니다
나머지 행렬의 곱에 따라서요
그럼 y의 예측값은 다른 차원을 갖는
마지막 가중치 행렬 곱하기
이 행렬의 L-1 제곱 곱하기 x가
될 것입니다
이 각각의 행렬이
이 행렬과 같다고 가정하면
1.5 곱하기 단위행렬이죠
그럼 이 계산으로 끝나게 됩니다
따라서 y의 예측값은
1.5의 L-1 제곱 곱하기 x가
될 것입니다
만약 깊은 신경망에서 L의 값이 크다면
y의 예측값도 매우 커질 것입니다
매우 기하급수적으로 커질 것입니다
1.5에 층의 개수의 제곱만큼요
따라서 매우 깊은 신경망을 갖는다면
y의 값은 폭발할 것입니다
이와 반대로
만약 이 값을 0.5로 교체한다면,
즉 1보다 작은 값으로 교체하면
그럼 이 값은
0.5의 L 제곱이 될 것입니다
이 행렬은 0.5의 L-1 제곱
곱하기 x가 될 것입니다
w^[L]을 무시한다면요
만약 각 행렬이 1보다 작다면
예를 들어 x1과 x2가 각각 1인 경우에
그럼 활성화는 1/2, 1/2,
1/4, 1/4, 1/8, 1/8
이런 식으로 가서 마지막 활성값이
1/2^L이 될 것입니다
따라서 활성화의 값은
기하급수적으로 감소합니다
네트워크의 깊이, 즉 층의 개수 L에 대한
함수의 경우에 말입니다
따라서 매우 깊은 네트워크의 경우
활성값은 기하급수적으로 감소하게 됩니다
따라서 여기서 얻을 수 있는 직관은
가중치 w^[l]이 단위행렬보다
조금 더 크다면
매우 깊은 네트워크의 경우
활성값은 폭발할 수 있습니다
그리고 w^[l]이 단위행렬보다 조금 작다면,
예를 들어 0.9라면
매우 깊은 네트워크의 경우
활성값은 기하급수적으로 감소할 것입니다
비록 제가 L의 함수로 활성값이
기하급수적으로 증가 혹은 감소한다는
측면에서 설명을 드렸지만
비슷한 주장을 미분값,
즉 경사 하강법에서 계산하는 경사가
층의 개수에 대한 함수로
기하급수적으로 증가하거나 감소한다는
것을 보여주는데 사용할 수도 있습니다
현대의 신경망은 보통
L이 150의 값을 갖습니다
마이크로소프트는 최근 852개의
층을 가진 신경망을 결과로 내놓았죠
그러나 이런 깊은 신경망에서
활성값이나 경사가
L에 대한 함수로 기하급수적으로
증가하거나 감소한다면
그럼 이런 값들은 아주 커지거나
작아질 수 있습니다
그럼 훈련을 시키는 것이 어려워집니다
특히 경사가 기하급수적으로 작은 경우에요
경사 하강법은 아주 작은 단계만을 진행할 것이고
학습시키는데 아주 오랜 시간이 걸릴 것입니다
지금가지 경사의 소실 혹은 폭발의 문제로
신경망이 어떻게 고통받는지를 살펴보았습니다
사실 오랜 시간 동안 이 문제는
신경망을 훈련시키는데
큰 장벽으로 작용했었습니다
이 문제를 완전히 해결해주지는 않지만
부분적인 해결법이 있습니다
가중치를 어떻게 초기화시키는지에 대한
신중한 선택이 도움이 될 수 있습니다
다음 비디오에서 함께 살펴보시죠
Vanishing Gradient Problem(기울기값이 사라지는 문제)는 인공신경망을 학습시킬때 기울기값을 베이스로 하는 method(backpropagation)로 학습시키려고 할때 발생되는 어려움이다.
네트워크에서 앞쪽 레이어의 파라미터들을 학습시키고, 튜닝하기 정말 어렵게 만든다. 이 문제는 신경망 구조에서 레이어가 늘어날수록 더 악화된다.
이것은 뉴럴 네트워크의 근본적인 문제점이 아니다. 이것은 특정한 activation function를 통해서 기울기 베이스의 학습 method를 사용할 때 문제가 된다.
자 한번 이러한 문제를 직관적으로 이해해보고, 그것으로 인해 야기되는 문제를 짚어보자.