머신러닝에서 초기 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 |