[머신러닝] 데이터 전처리(Feature Scaling)을 이용한 경사 하강 알고리즘(Gradient Descent Algorithm)
어제보다 나은 사람이 되기

걱정보단 실행을, 그러나 계획적으로

Box World 자세히보기

AI/Coursera ( Machine Learning )

[머신러닝] 데이터 전처리(Feature Scaling)을 이용한 경사 하강 알고리즘(Gradient Descent Algorithm)

Box형 2020. 4. 30. 22:47
반응형

시작하며

우리가 머신러닝을 하면서 어떤 알고리즘이나 기법을 사용하여 모델을 학습시킬 것인가도 중요하지만, 학습을 위해 사용되는 데이터를 어떻게 가공해서 모델에게 학습시킬 것인가 도 정말 중요합니다.

오늘은 데이터 전처리(Feature Scaling) 를 배우면서 효과적인 학습을 위해 어떻게 데이터를 가공하고 어떤 이점을 지니고 있는지 공부해보겠습니다.


데이터 전처리(Feature Scaling)

막대기의 길이를 비교하는 경우 를 생각해봅시다. 우리가 막대기의 대소관계를 파악하기 위해서는 왼쪽 처럼 아무렇게나 널부러뜨려놓고 눈대중으로 비교하기보단, 오른쪽 처럼 동일한 선상에 막대기를 가지런히 놓고 관측하면 훨씬 더 정확하고 빠르게 대소관계를 알 수 있겠죠?

우리가 머신러닝에서 사용할 데이터도 마찬가지입니다. 저번 포스팅을 통해 우리는 다변수 선형 회귀 를 배웠고 2개 이상의 feature를 가진 데이터를 다루게 되었습니다. 이때 어떤 feature 데이터의 Scale(범위 / Min ~ Max) 은 1~1000일수도 있고 어떤 feature 데이터의 Scale은 100만 단위로 표현될 수도 있습니다. 만약 이렇게 서로 Scale이 다른 데이터를 그대로 쓰게되면 어떤 단점이 있을까요?

만약 데이터를 그대로 사용하게 되면 비용함수 J에 대한 등고선이 왼쪽처럼 feature의 Scale에 따라 홀쭉하거나 뚱뚱한 형태 를 띄게 됩니다.

이것이 안좋은 이유는 알고리즘이 목표로하는 점 ( ex : 경사 하강 알고리즘에서 최소 비용(Min Cost)을 만드는 지점) 을 찾아가는데 오래 걸리기 때문입니다.


하지만 여러 feature들의 Scale을 동일하게 맞춰준다면 오른쪽처럼 좀 더 균형잡힌 형태가 나타남에 따라 목표 지점까지 좀 더 빠르게 도달할 수 있을 것입니다.

위 경우는 데이터를 각 feature의 max로 나눠 Scale을 '0 <= x <= 1'로 만들었습니다. 그렇다면 보통 몇에서 몇 사이로 Scale을 맞추는게 좋을까?

  • -100 <= ㅌ <= 100 은 너무 크기 때문에 등고선이 뚱뚱해져 목표지점까지 도달하는데 오래 걸립니다.
  • -0.0001 <= ㅌ <= 0.0001 은 등고선이 지나치게 홀쭉하여 미세하게 움직이기때문에 역시 적절치 않습니다.

그래서 보통 등고선의 목표 지점 즉 중앙 지점이 그래프의 원점에 오게 하기 위해서는 -1 <= x <= 1의 범위를 가지는 것이 좋고 보통은 -3 <= x <= 3으로 범위를 설정하는 것이 가장 좋습니다.

핵심은 각 feature 데이터의 Scale을 적절하게 통일하면 알고리즘을 더욱 효율적으로 동작시킬 수 있다는 점입니다.

다음은 적절한 Scale을 만드는 방법 중 하나인 Mean Normalization 에 대해 알아보겠습니다.


Mean Normalization

Mean Normalization은 해당 feature 데이터에 대하여

[ x - 평균(Avg) / x Max - x Min ]

을 적용해주면 됩니다. 이 경우 Scale은 -0.5 <= x <= 0.5 의 범위를 가지게 됩니다.


Learning Rate

알파값이라고도 부르는 Learning Rate 는 알고리즘의 학습 속도와 관련이 있으며 이것이 커지면 커질수록 비용함수의 미분값을 더 많이 반영하게 된다고 공부하였습니다.
이번엔 적절한 Learning Rate를 설정하는 방법에 대해 알아보겠습니다.

우리가 Cost Function이라 부르는 J 함수는 비용 함수로써 경사 하강 알고리즘에서는 이를 최소화하는 θ를 찾는 것이 목적입니다.

위 그래프를 보면 200번정도까지 갱신을 반복할 땐 나름 Cost가 잘 감소가 되다가 300번째부터는 Cost가 거의 감소하지 않고 평평해지는 것을 볼 수 있습니다. 이는 점점 더 목표지점으로 가까워질수록 기울기는 0에 가까워지면서 미분값이 작아지기 때문입니다. 이때 필요에 따라 Learning Rate를 조금 키워 속도를 올리기도 합니다.

보통 이런식으로 그래프가 그려지면 정상적인 Learning Rate를 가지고 동작하는 경우로 봅니다. 보통은 Cost가 0.001이 되면 목표 지점에 도달했다고 판단합니다. 물론 100% 일치되어서 Cost가 0이 되면 좋겠지만 현실적으로는 어렵습니다.

하지만 왼쪽 두 그래프와 같이 Cost값이 점점 증가하거나 진동하는 형태를 보인다면 이는 Learning Rate가 지나치게 클 가능성이 농후 하므로 Learning Rate를 좀 더 작은 값으로 조절하는 것이 좋습니다.

이때 주의해야할 점은 그렇다고 Learning Rate를 너무 작은 값으로 조절하면 그만큼 목표지점까지 도달하기 위해 많은 연산이 요구되고 시간도 오래 걸리니 유의해서 적절한 값을 찾는 것이 중요합니다.

결론적으로 적절한 Learning Rate를 찾는 공식은 없습니다. 다만 보통 0.001로 시작하여 3배 혹은 10배씩 Learning Rate를 키워나가며 Cost 그래프를 보며 적절한 값을 직접 찾는 수밖에 없습니다. 일종의 노가다라 생각하셔도 됩니다.


요약

1) 우리가 모델을 학습시키는데 사용하는 알고리즘도 중요하지만 데이터를 가공시켜 학습의 효율성을 높이는 것도 매우 중요하다.

2) 이러한 Feature Scaling의 기법으로는 오늘 배운 Mean Normalization이 있고 앞으로도 더욱 다양한 기법을 배우며 데이터 전처리를 공부할 것이다.

3) 적합한 Learning Rate를 찾는 공식은 없다. 보통 0.001부터 시작하여 Cost 그래프를 보면서 Learning Rate를 점점 키워나가며 적절한 값을 찾아나가는 수 밖에 없다.

반응형