본문 바로가기
AI/[DLBasic]모두의 딥러닝(딥러닝의 기본)

[DLBasic] 10 -2 . Initialize weights in a smart way

by 쵸빙 2020. 1. 20.

     저번 시간에 vanishing gradient라는 시그모이드 함수의 단점을 보완한 ReLU를 배웠다.

 

     이번 시간에는 hinton 교수님이 발견하셨던 두 번째 문제점인 weight들을 어떻게 초기화할지를 배워보도록 하겠다.

 

     이전 데이터에서 ReLU로 실험했을 때도 코드가 똑같은데 실행할 때마다 결과가 달라졌다.

그 이유는 weight을 random값으로 생성하도록 했기 때문이다.

 

가중치를 모두 0으로 했을 때

     예를 들어, 가중치를 모두 0으로 설정했을 때를 보자. x는 입력값이니 일단 0은 아니다. 그런데 weight이 0이면 기울기가 다 곱해질 때 gradient가 다 사라지는 문제점이 발생한다. 그렇기 때문에 weight을 잘 설정하는 것도 중요하다.

 

     그래서 weight의 초기값을 설정할 때 주의해야할 점은 위와 같다. 만약 0이면 학습이 안 되므로 절대로 0이 되면 안 된다. 그래서 RBM (Restricted Boatman Machine)을 사용해서 초기화를 하는 것이 좋다고 했다.

 

RBM structure

     RBM의 구조를 보자면 위와 같다. 예를 들어, 2단만 있어서 입력단과 출력단만 있다고 보자. Restriction이라는 것은 앞뒤로만 연결되어 있는 것이다.

 

Recreate Input

     어떤 입력값이 있을 때, forward와 backward operation의 목적은 입력을 재생산해내는 것이다.

어떤 입력이 있을 때 weight을 곱하고 b를 더해서 값들을 구한 것은 forward 값을 구한다. 그 결과값에 따라

어떤 경우에는 활성화가 되고, 어떤 경우에는 비활성화가 될 것이다. 

Backward에서는 그 결과를 거꾸로 다시 보낸다. 이후에 구할 것은 맨 처음에 주었던 입력값과 backpropagation으로 구한 x값을 비교하는 것이다. 이 차가 최저가 되도록 weight을 주도록 한다.

이런 일을 하는 것을 Restricted Boatman Machine, RBM이라고 한다. 이것을 또 다른 말로는 encoder-decoder라고 한다.

RBM으로 가중치들 초기화하기

     layer 2개만 보고 초기값이 처음 값과 유사하게 나오는 weight만 학습시키면서 점점 뒤로 가면서 학습을 시킨다.

 

          이런 것을 deep belief network라고 한다.

 

Deep Relief Network에서의 Pre-training

     깊은 네트워크가 있을 때 위와 같이 pre-training 과정을 거친다. x로 RBM을 돌리고, 다음 층으로 가고,

마지막까지 진행을 시킨다. 

 

     이것은 학습이라고 하지도 않고 fine tuning이라고 한다.

깊은 네트워크의 초기화 값을 RBM으로 결정해서 좋은 결과를 얻을 수 있다.

 

     RBM을 사용하지 않고 간단하게 weight을 줘도 된다는 Xavier Initialization 방법이 나왔다. 입력 노드, 출력 노드 개수에 따라서 weight을 결정하면 된다는 Xavier/He Initialization 방법을 자세히 살펴보자.

 

Xavier / He Initialization

     Xavier과 He Initialization 방법은 입력이 몇 개인지(fan_in), 출력이 몇 개인지(fan_out)에 따라서 결정된다.

코드는 위와 같이 작성하면 된다.

 

     텐서로는 위와 같이 구현할 수 있다.

 

     weight 초기화 방법들에 따른 정확도의 차이를 나타낸다.

 

     이 분야가 아직도 연구되고 있고, 아직 완벽하게 가중치의 초기값을 정하는 방법을 알아내지는 못했다.

 

다음 시간에는 Dropout과 앙상블에 대해 배워보도록 하겠다.