반응형

머신러닝에서 초기 weight 값은 매우 중요합니다.

딥러닝 알고리즘들이 발표되고 나서 오랜 기간동안 학습 효율이 안나와서 외면받아왔었습니다.

이렇게 효율이 안나오게 된 이유중 하나가 이 초기 값의 잘못된 설정 때문이었습니다.


그후 여러가지 방식으로 초기값을 결정하려고 하는 노력들이 있었습니다.


Not all 0's

절대로 모든 값을 0을 주면 안된다.



RBM - restriced boltzmann machine

입력 값을 줘서 출력을 만들고 , 출력 레이어에서 입력 레이어 쪽으로 반대로 전달한다.

이렇게 했을때 초기 입력 값과 출력에서 보내서 입력 레이어를 거치고 나온 값이 유사하도록 W값을 조정한다.



PRE-TRAINING

RBM 을 각 레이어별로 계산함..



- 좋은 방식임 -

- 그러나 복잡함.


-------------------------------------


Xavier/He initialization

너무나도 간단한 방식으로 RBM과 유사한 결과를 만들어 낼 수 있는 방법이 생겼습니다.

Simple methods are OK


몇개의 입력인지와 몇개의 출력인지를 보고 이를 비례하게 결정해주면 됩니다.


2010

W = np.random.randn(fan_in, fan_out)/np.sqrt(fan_in)



2015

W  =np.random.randn(fan_in, fan_out)/np.sqrt(fan_in/2)

image net의 오류가 3%로 떨어뜨림.





def xavier_init(n_inputs, n_outpus, uniform=True)

  if uniform:

     init_rangle = math.sqrt(6.0(n_inputs + n_outputs))

     return tf.random_uniform_initializer(-init_range, init_range)

  else

     stddev = math.sqrt(3.0/(n_inputs + n_outputs))

     return tf.truncated_normal_initializer(stddev=stddev)


'머신러닝 & 텐서플로 & 파이썬' 카테고리의 다른 글

Softmax  (0) 2018.01.26
drop out 과 앙상블(ensemble)  (0) 2018.01.26
Sigmoid , ReLU  (0) 2018.01.26
tensorboard: 학습 모니터  (0) 2018.01.26
데이타 프로세싱(data processing)  (0) 2018.01.25

+ Recent posts