저번 비디오에서 아주 깊은 신경망에서
경사 소실과 폭발의 문제가 있다는 것을 보았습니다
문제를 완전히 해결하지는 못하지만
많은 도움을 주는 해결법은
신경망에 대한 무작위의 초기화를
더 신중하게 선택하는 것입니다
먼저 단일 뉴런에 대한 가중치를
초기화하는 예제를 함께 살펴보시죠
그리고 더 깊은 네트워크로
이를 일반화시킬 것입니다
하나의 뉴런이 있는 예제를
먼저 살펴봅시다
하나의 뉴런에 특성 4개,
x_1부터 x_4까지를 입력합니다
a는 g(z)이고
출력은 y의 예측값입니다
나중에 다룰 더 깊은 망에서 이 입력은
a^[l]인 어떤 층이 될 것입니다
지금은 그냥 x라고 부르겠습니다
z는 w_1x_1 + w_2x_2+ ... + w_nx_n의
값을 갖습니다
b를 0이라고 하고
지금은 b의 값을 무시합시다
따라서 z의 값이 너무 크거나
작아지지 않도록 만들어야 합니다
n의 값이 클수록 w_i의 값이
작아져야 합니다
z는 w_i x_i의 합이기 때문에
이 많은 항들을 더하면
각각의 항이 작아지기를 바랄 것입니다
한 가지 합리적인 일은
w_i의 분산을
w_i의 분산을
1/n으로 설정하는 것입니다
n은 뉴런으로 들어가는
입력 특성의 개수입니다
따라서 실제로 특정 층에 대한
가중치 행렬 w^[l]을
np.random
np.random
np.random.randn에
행렬의 어떤 모양을 집어넣습니다
이 값에 곱하기
np.sqrt
여기에 들어가는 것은
층 l의 뉴런에 들어가는
특성의 개수의 역수입니다
따라서 1/n^[l-1]입니다
이것이 층 l의 각각의 유닛에 들어가는
유닛의 개수이기 때문입니다
ReLU 활성화 함수를 사용하는 경우
분산을 1/n보다 2/n으로 설정하는 것이
더 잘 작동합니다
특히 ReLU 활성화 함수를
사용하는 경우
초기화에서 많이 보게 될 것입니다
즉 g^[l](z)는
ReLU(z)입니다
랜덤 변수에 익숙하면
좀 더 자세히 말해서
랜덤 변수에 익숙하면
좀 더 자세히 말해서
가우시안 랜덤 변수를 분산을 2/n으로
설정하는 이 값의 제곱근에 곱해줍니다
가우시안 랜덤 변수를 분산을 2/n으로
설정하는 이 값의 제곱근에 곱해줍니다
n^[l-1]을 사용하는 이유는
이 예제의 로지스틱 회귀에서는
n개의 입력 특성을 갖지만
더 일반적인 경우에 층 l은 해당 층의
각 유닛에 대해 n^[l-1]의 입력을 갖습니다
더 일반적인 경우에 층 l은 해당 층의
각 유닛에 대해 n^[l-1]의 입력을 갖습니다
따라서 입력 특성 혹은 활성값의
평균이 대략 0이고 표준 편차 1을 갖는다면
이것 역시 비슷한 크기를
갖게 될 것입니다
완전히 해결하지는 못하지만 경사 소실과
폭발 문제에 확실히 도움을 줄 수 있습니다
왜냐하면 각각의 가중치 행렬 w를
1보다 너무 커지거나
너무 작아지지 않게 설정해서
너무 빨리 폭발하거나
소실되지 않게 합니다
다른 변형을 살펴보면
그 전까지는 ReLU 활성화 함수를
사용하는 상황을 가정했습니다
tanh 활성화 함수를 사용한다면
상수 2 대신 상수 1을 사용하라는
논문이 있습니다
따라서 1/n^[l-1]의
제곱근을 구해줍니다
따라서 이 제곱근 항은
이 항을 대체하게 됩니다
tanh 활성화 함수를 사용하는 경우
이 값은 세이비어 초기화라고 부릅니다
이 값은 세이비어 초기화라고 부릅니다
또 다른 버전은
논문에서 보셨을 겁니다만
이런 식을 사용합니다
이론적으로 타당한 이유가 있습니다
그러나 가장 일반적인 활성화 함수인
ReLU를 사용하는 경우에
저는 이 식을 사용할 것입니다
tanh를 사용하는 경우는
이 버전을 시도해볼 수 있고
어떤 사람들은 이 버전을
사용하기도 합니다
그러나 실제로 이 모든 식들은
그저 시작점을 제공합니다
가중치 행렬의 초기화 분산에 대한
기본 값을 줄뿐입니다
이와 같은 분산을 원한다면 분산 매개변수는
 하이퍼파라미터로 조정할 또 다른 값이 됩니다
따라서 이 식에 곱할
매개변수를 가질 수 있고
하이퍼파라미터 탐색의 일부로
그 곱하는 수를 조정할 수 있습니다
가끔 그 하이퍼파라미터를 조정하는 것은
적당한 크기의 효과를 가집니다
제가 조정을 시도하는 첫 번째
하이퍼파라미터는 아닙니다
그러나 그 조정이 상당한 도움이 되는
경우를 많이 보았습니다
그러나 저에게는 다른
하이퍼파라미터를 조정하는 것에 비해
상대적으로 중요하지 않은 문제입니다
경사 소실과 폭발 문제에 대한 직관을
얻는데 도움이 되셨기를 바랍니다
가중치를 초기화하는 합당한 크기를
선택하는데에도 말입니다
이를 통해 가중치가 너무 빨리 폭발하거나
0으로 수렴하지 않기를 바랍니다
가중치 혹은 경사의 폭발과 소실 없이
상당히 깊은 네트워크를 훈련시킬 수 있습니다
깊은 네트워크를 훈련시킬 때 신경망을
더 빨리 훈련시키는 또 다른 기법이었습니다
