본문 바로가기
Deep Learning

Normalizing the Inputs: 훈련 전, Input값들을 normalization 하는 이유에 대한 생각

by 정현규 2020. 12. 30.

 예시를 통해 생각을 빌드업해보자.

 

 학습에 쓰일 훈련집합에서 샘플링된 X가 두개의 성분을 갖고 첫번째 성분 x1은 키, 두번째 성분 x2는 시력을 갖는다고 하자. X1는 대충 120~200 사이의 값을 갖고, X2는 대충 0.1~2.0 까지의 값을 갖는다. Input Normalization은 두 성분이 비슷한 값의 범위를 갖도록 재조정 하는것이므로, X1도 [-1, 1], X2도 [-1, 1]의 범위를 갖도록 전처리 할 수 있겠다. 왜 이렇게 하는 걸까? 전처리 하지 않으면 뭐가 제대로 안돌아가는 것일까?

 

※ Input Normalization을 직관적으로 이해하는 것이 목표이므로, 다소 부정확한 표현들이 많습니다.

 

 키 x1([120, 200])와 시력 x2([0.1, 2.0])를 입력받아 잘생긴 정도 y([0, 1])를 출력하는 단순한 모델을 생각해 보자. 도식화 하면 다음과 같다.

시력과 키를 입력으로 받아 잘생긴 정도를 표현하는 네트워크!

 오차함수 J를 정의하고, W의 기울기(dJ/DW)를 구한다음, W를 갱신하면 그것이 한번의 학습이다.

 

W(Weight) 갱신 과정

 

J에 대한 W의 기울기

 곰곰히 생각해보면, 오차함수 J는 x1(키)에 곱해지는 w1의 변화가 x2(시력)에 곱해지는 w2의 변화보다 상대적으로 더 민감하다. (왜냐하면 x1는 x2보다 상대적으로 더 큰 수 이므로, J를 크게 움직이기 위해서 w2이 변하는 것 보다, w1이 변하는게 더 낫다) 더 민감하다는 것은 오차함수에서의 기울기다 더 크다는 것을 나타낸다.

J는 이런식으로 생기지 않았을까? (출처: https://www.coursera.org/lecture/deep-neural-network/normalizing-inputs-lXv6U)

 이러한 직관으로 dw1은 dw2 보다 대체로 더 크다는 것을 알 수 있고, 이는 업데이트 과정에서 w1가 업데이트 되는 것에 비해, w2는 굉장히 조금씩 업데이트 된다는 것을 알 수 있다. 이것은 오차함수의 기울기 감소과정에서 지그재그로 움직이며 수렴하는 것을 의미한다. 경사하강법의 목표는 global minimum인데, 지그재그로 움직이는것은 굉장히 비효율적이고 이는 학습시간의 증가로 이어진다. 이를 피하기 위해 Input Normalization 하는 것이다. 이것을 하게 되면 위의 그래프가 원통형으로 바뀐다. 즉 오차함수에 미치는 w1와 w2의 영향이 얼추 비슷해진다라고 이해할 수 있다.

 

 더 정확한 느낌을 얻기 위해, Andrew Ng 교수님의 강의 영상을 참고하자.

www.coursera.org/lecture/deep-neural-network/normalizing-inputs-lXv6U