10-2. Weight 초기화 잘해보자

Vanishing Gradient ( 계속된 Sigmoid 방식으로 인해 입력 layer 가 많아질 경우 처음에 입력하는 값들의 영향이 줄어든다.) 문제를 해결하기 위해 두 가지의 해결 방법이 있었는데, 하나는 Relu 이고 다른 하나는 Weight 초기값을 잘못 설정한 것이다.
초기값을 0으로 주는 경우 : x 관련 미분값에 W(0) 이 곱해지므로 그 값도 0이 되어서 Gradient가 사라진다.

초기값을 현명하게 지정하는 방법

  • 절대 0으로는 초기화 하지 않는다.
  • RBM(Restricted Boatman Machine) (2006) 알고리즘을 사용해서 초기화하는 방법

왼쪽 Forward 부터 보면 입력값들 x1, x2, x3 와 출력값들로 여러번 돌리면서 weight 값을 계산한다. (좌 -> 우)
그 다음에 오른쪽 Backward 방식을 통해서 설정된 weight 값과 y 값을 이용해서 x 추정치를 역으로 계산한다.
그 다음 Forward에 있던 원래의 x 값과 x 추정치 값을 최저로 만드는 weight 를 구하는 방식이다.
Forward, Backward (Encoder, Decoder 라고도 한다.)

RBM 알고리즘을 활용한 PRE-TRAINING 방법

두개 씩 RBM 알고리즘을 써서 Weight 를 정하면 최적화된 Weight 초기값을 찾을 수 있다!!

그런 다음 데이터를 넣어서 학습할 때 몇 개 학습을 안했는데도 학습이 잘 된다. 이미 weight 값들이 잘 설정되어 있기 때문이다.
이걸 Fine Tuning 이라고 한다.

Xavier initialization : 복잡한 RBM을 대신할 수 있도록 나온 방식이다. 한 노드에 몇 개의 입력, 몇 개의 출력이 필요한지를 세팅하고 그거에 맞게 값을 뽑아내는 알고리즘이다. 이렇게 비교적 간단한 과정으로도 RBM 알고리즘으로 나온 값과 유사한 값을 찾을 수 있다.

# Xavier initialRization
# 입력, 출력의 갯수를 넣어서 랜덤값을 뽑고 입력갯수를 제곱근으로 나눠준다. (2010)
W = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in)

# 2015년 -> 나누기 2를 하면 값이 더 좋게 나오는 게 밝혀짐
W = np.random.randn(fan_in, fan_out) / np.sqrt(fan_in/2)

results for ""

    No results matching ""