[텐서플로우로 시작하는 딥러닝 기초] Lab 07-1: Application & Tips: 학습률(Learning Rate)과 데이터 전처리(Data Preprocessing)

2020. 12. 27. 23:53머신러닝

Learning rate의 조정방법과, 데이터의 노이즈가 뭔지 알아보자.


Learning rate

알다시피 Learning rate는 한 epoch 마다 Weight에 얼마큼 업데이트를 해주는지를 정하는 값이다. 

익숙합니다.

 

이 Learning rate 값은 적당해야하는데, 너무 크면 와리가리하느라 학습이 안되고 너무 작으면 시간이 오래 걸리기 때문이다.

두 이미지의 색상은 관계가 없다. 좌)http://aikorea.org/cs231n/neural-networks-3/ 우)Andrej Karpthy의 Adam 모델에서는 3e-4가 최적의 learning rate 라고 한다.

 

그래서 학습 중에 Learning rate를 알맞게 변경하는 방법이 있다. 

위 그림에는 exponenetial_dacay가 나와있는데, 일정한 epoch 마다 원하는 만큼의 learning rate를 감소시킨다.

(https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/exponential_decay)

 

▪ learning_rate: A scalar float32 or float64 Tensor or a Python number. The initial learning rate. 

 : 초기 learning rate.

▪ global_step : A scalar int32 or int64 Tensor or a Python number. Global step to use for the decay computation. Must not be negative.

: 현재 step

▪ decay_steps : A scalar int32 or int64 Tensor or a Python number. Must be positive. See the decay computation above.

: 몇 step마다 decay (감소) 시킬 것인지  ex)1000

▪ decay_rate : A scalar float32 or float64 Tensor or a Python number. The decay rate.

: decay 되는 비율  ex) 0.96

▪ staircase : Boolean. If True decay the learning rate at discrete intervals

: staircase가 True이면, decay_steps마다 learning rate의 급격한 decay를 하고, False 이면 decay_steps 마다 원하는 만큼 decay가 되도록 지속적으로 learning rate를 감소시킨다.

▪ name : String. Optional name of the operation. Defaults to 'ExponentialDecay'

 


Data Preprocessing 

Feature Scaling

데이터는 좌측 그림처럼 일부 동떨어진 녀석들(feature) 때문에 수많은 중요한 데이터가 심각하게 작아 보일 수 있다. (0에 근접한 수많은 값들이 하나로 보인다.) 그래서 이 데이터들을 알맞은 범위에 분포시키는 작업을 Feature Scaling이라고 한다. 

 

예를 들면 키(x1)와 발의 크기(x2)로 옷의 사이즈(y)를 예측할 때 사람들의 키(x1)와 몸무게(x2)는 범위와 값의 단위도 다르다.  optimize를 할 때 같은 learning rate를 사용하기 때문에 이 경우에 시간도 오래 걸리고 최적화가 잘 안될 수 있다.

x1에 비해 x2는 값도 범위도 작다. 당연히 Hypothesis(청록색 직선)에 대한 x1과 x2의 cost 값(보라색)들은 크기의 차이가 있다. 저렇게 타원형이라서 w2값에 대해서만 와리가리 하면서 갈 수 있다. 라고 이해했다. 그림그리느라 힘들었다.

그래서 이런 이유로 feature들을 같은 범위 (0~1)로 scaling 해주는 것이다. 그럼 cost function이 원형이겠지? feature scaling을 해주는 방법은 크게 두 가지가 있다.

Standardization(표준화)와 Normalization (정규화)이다. 간단하게 보면

Standardization

  • 기존 변수에 범위를 정규 분포로 변환한다.
  • 식) (X - X의 평균값) / (X의 표준편차)
  • 데이터의 최솟값, 최댓값을 모를 경우 사용한다.

Normalization

  • 데이터를 일반적으로 0~1 사이의 값으로 변환시켜준다.
  • 식) (X - X의 최솟값) / (X의 최대값 - X의 최소값)
  • 데이터의 최솟값, 최댓값을 알 경우 사용한다.

Noisy Data

raw data에는 학습에 필요 없는 noise들이 있다. 예를 들면 자연어 처리에서 Will you order a pizza?? 에서 파란 부분만 필요한 경우. 얼굴 인식에서 이목구비만 필요한 경우가 있다. 이러한 Noisy Data 들을 잘 preprocessing 해서 사용해야 효율적인 ML이 되겠다.