'Normal distribution'에 해당되는 글 1건

  1. 2018.09.19 He 초기화 구현 in tensorflow

신경망을 처음 공부할 때 망 구현을 위해 tensorflow.org에 있는 document를 하나하나 읽었다.

문서만 보니 뭔소린지 개념적으로는 이해를 하겠는데, 막상 코딩하기 어렵더라.

그래서 요즘은 홍콩과기대 김성훈님 동영상의 실습과제를 따라하면서 tensorflow를 공부한다.

동영상에 나오는 실습내용을 따라하니 이제좀 tensorflow가 어떻게 동작하는지 알겠다.

혹시 나같이 tensorflow.org를 정독하겠다는 각오로 공부하는 분들이 있다면, 

김성훈님 강의에 딸린 실습과제를 먼저 돌려보길 추천한다. 감을 잡을 수 있다.


사설이 길었다. 이번 글에 적으려고 했던건 He Initialization을 Tensorflow에 구현하는 방법이다.

김성훈님 강의를 보다보니 Xavier Initialization은 구현방법을 보여주는데 He Initialization은 안나오더라.

그래서 어떻게 이걸 해야하나 한동안 구글링 했다. 결국 방법을 못찾았다.


그래서 아래와 같은 방식으로 추리해서 He Initialization을 구현했다.

사실 내가 해결한게 맞는지 이 포스트를 본 사람들에게 검증받고 싶기도 하다.


내 추리는 이렇다. 


mean, variance, std의 정의로부터 시작한다.

그리고 변수X를 a로 나눴을 때, mean, var, std가 어떻게 바뀌는지 봤다.

그런데 He Initialization은 N(0,1)을 1/sqrt(이전레이어의 output갯수/2) scaling해서 초기화에 사용한다.

즉, std가 1/sqrt(이전레이어의 output갯수/2) 이고 mean이 0인 normal distribution이라고 생각할 수 있다.

그러므로 아래와 같이 단순하게 tf.random_normal의 stddev argument에 1/np.sqrt(784/2)를 넣었다.

(MNIST 데이터셋을 사용해서 이전레이어의 output갯수가 784다)

784/2 이 부분을 784로 바꾸면 Xavier Initialization이 된다.

실제로 이렇게 Initialization해서 동일 조건에서 accuracy가 증가하는 것을 확인했다.

'이론 > 신경망' 카테고리의 다른 글

배치 정규화 논문 리뷰 (Batch normalization)  (1) 2018.11.07
tensorboard 간단 요약  (0) 2018.09.13
인공신경망과 학습  (0) 2018.03.05
전미분, 편미분, Gradient에 대해  (2) 2018.02.28
공부할 때 참고한 자료들  (0) 2018.02.27
Posted by 굿쟌
,