티스토리 뷰

Data Science/Machine Learning

Learning Rate

Hula_Hula 2018. 11. 16. 00:10

[Learning Rate]


실습과정에서 Learning Rate는 Optimize한 이후 Minimize하는 과정에서 등장합니다.


optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1)
train = optimizer.minimize(cost)


위의 예시에서는 Learning Rate를 0.1로 잡았는데요. 이 의미는 뭘까요?


[그림1] 기울기가 줄어드는 방향으로 Minimize하는 과정 (과장해서 그림)


[그림1]은 GradientDescentOptimize로 기울기를 구하고, minimize로 기울기를 줄이는 방식을 그림으로 표현했습니다. Learning Rate가 0.1이므로 0.1의 비율만큼 기울기가 줄어들죠.

이 식을 보더라도 알파값 만큼의 비율로 기울기가 줄어든다는 걸 알 수 있습니다.

그럼 Learning Rate가 왜 중요할까요? [그림1]을 보면 0.1의 Learning Rate를 부여했을 때, cost가 최소인 점을 제대로 찾을 수 있을까요? 어느정도 cost가 0인 부분을 찾아낼 수 있는 것으로 보입니다. (실제로는 더 좁은 간격으로 움직이나 과장해서 그린 그림임을 염두하세요.) 

그럼 이 경우는 어떨까요?

[그림2] 기울기가 큰 폭으로 왔다갔다 한다.


제대로 된 최소 Cost값을 찾지 못할 것 같습니다. 그리고 오히려 최소 Cost값을 찾기 위해서 Cost값이 밖으로 튕겨져 나가는(멘탈과 함께 승천(?)하는Overshooting이 발생합니다.


그렇다면 Learning rate는 무조건 작을수록 좋겠군요! 네. 아닙니다.

너무 작으면 최소 Cost값을 찾는데 굉장히 오랜시간이 걸리겠죠. 게다가 이런 경우에는 적당한 learning rate가 아님을 알아차리기도 힘듭니다. Local minimum에 빠지는 경우가 그 예시가 될 수 있겠죠.


그래서 적당한 Learning rate가 필요합니다. 그 Learning rate를 찾기위한 방법은 "그냥 적당한 값 찾기" 입니다. 특별한 방법은 없습니다. 다만 [그림1]과 [그림2]와 같은 Cost Function을 그려놓고 Learning rate에 따라 Cost값이 얼만큼 변하는지 확인할 필요는 있는거죠.


우리가 여태 봤던 데이터들의 파라미터들은 1개가 아닙니다. 동물 데이터는 다리개수, 평균수명, 날개여부, 평균신장 등의 파라미터들을 가지고 있죠. 이러한 값들은 다 비슷비슷한 범위의 숫자들에서 결정되기 때문에 다음과 같이 Cost Function이 그려집니다.


[그림3] 등고선의 낮은 부분으로 이동하는 그래프라고 생각하자.


그래프의 x방향과 y방향의 간격이 크지 않기 때문에 x방향, y방향으로 기울기가 일정간격으로 줄어든다면 적당히 원의 가운데로 향할 수 있는거죠.


그렇다면 값의 크기차이가 엄청난 변수들의 그래프는 어떻게 그려질까요?

[그림4] 이제는 수명을 시간으로 표시했다. 엄청나게 큰 숫자와 작은 숫자가 만나면 이렇게 길쭉한 그래프가 그려진다.


정해져있는 learning rate로 기울기가 줄어든다면 [그림4]와 같이 원의 중앙으로 향하지 않을 확률이 높습니다.

그렇기 때문에 우리는 데이터 전처리가 필요합니다. 비슷한 값을 가질 수 있도록 데이터를 미리 처리해주는거죠. 수명이 시간으로 표시되어 있는것을 년으로 바꿔주는 것도 일종의 데이터 전처리입니다.

그리고 이렇게 데이터의 값을 조정해주는 걸 특별하게 Feature Scaling이라고 합니다.


Feature Scaling 에는 기본적으로 두가지 방법이 있습니다.






[Overfitting]


머신러닝에 있어서 가장 큰 문제가 되는 경우입니다. 바로 학습 데이터가 모델에 너무 딱 들어맞는 것입니다. 학습 데이터(즉, 정답을 미리 보여준 것)는 딱 맞지만 활용을 위해서 다른 데이터를 넣어보면 값을 예측하지 못하는 경우가 많습니다. 예를들면 교수님이 중간고사 문제를 모두 알려줘서 완벽하게 정답을 암기했지만 실제 시험 문제는 달랐던거죠. (흔히 볼 수 있는 통수) 하지만 학습을 잘한 학생들은 문제를 어렵지 않게 풀었을겁니다.


이런 경우를 Overfitting이라고 합니다. 너무 잘맞는다는 거죠. 반대로 너무 맞지 않는다면 Underfitting이라고 합니다.



[그림5] 모든건 적당한게 최고다


Overfitting을 막기 위해서 Regularization의 과정을 거칩니다.

Regularization은 작은 Weight의 값일수록 Overfitting을 막을 수 있다는 개념입니다. Weight가 크면 굴곡이 커지므로 구불구불한 선이 나오고 작으면 평평한 선이 나오기 때문입니다.


Regularization을 위해서는 Cost Function에 Regularization strength term을 추가해줍니다.



W값이 크면 Cost값이 크게 나오도록 장치를 걸어주는 겁니다.

즉, 학습이 이뤄질수록 Cost값과 W값이 작은 값으로 수렴하겠죠.

lambda는 Regularization에 얼마나 가중치를 두느냐를 뜻합니다. 큰 값일수록 Regularization을 크게 하겠다는 뜻입니다.


## cost function
reg = 0.001*tf.reduce_sum(tf.square(W))    ## 0.001 is lambda
cost_i = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y_one_hot)
cost = tf.reduce_mean(cost_i) + reg









'Data Science > Machine Learning' 카테고리의 다른 글

MNIST Dataset  (0) 2018.11.16
Softmax Regression을 이용해서 동물 맞추기  (0) 2018.11.15
Softmax Regression  (0) 2018.11.14
Logistic Regression으로 당뇨병환자 예측  (0) 2018.11.14
Logistic Regression  (0) 2018.11.09
댓글
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
공지사항
최근에 달린 댓글