Coding Diary.

(Machine Learning) Feature Scaling 과 경사하강법 본문

Coding/Machine Learning

(Machine Learning) Feature Scaling 과 경사하강법

life-of-nomad 2023. 9. 15. 12:02
728x90
반응형

이전 글에서 feature scaling을 하는 이유 중 하나는 경사 하강법을 빨리 할 수 있도록 도와주기 때문이라고 했습니다.

어떤 방법으로 도와주는지 알아봅시다.

 

1. 선형 회귀, 경사하강법

선형 회귀는 위와 같은 데이터가 있을 때 데이터에 가장 잘 맞는 선 또는 가설 함수

를 찾는 것입니다. 데이터에 가장 잘 맞는다는 것은 데이터에 대한 평균 제곱 오차를 최소화한다는 뜻입니다. 평균 제곱 오차는 아래와 같이 계산합니다.

여기서 m은 데이터 개수, htheta(x^(i))는 i번째 데이터의 목표변수의 예측값, y^(i)는 i번째 데이터의 목표변수의 실제값을 나타냅니다.

 

그리고 손실 함수라는 것은 아래와 같이 평균 제곱 오차로 정의합니다.

손실 함수는 가설 함수를 평가하기 위한 함수입니다. 손실이 크면 가설 함수가 안 좋다는 뜻이고, 손실이 작으면 가설 함수가 좋다는 뜻입니다. 선형 회귀의 경우 평균 제곱 오차가 크면 가설 함수가 안 좋고, 평균 제곱 오차가 작으면 가설 함수가 좋다는 뜻입니다.

손실 함수는 아래와 같이 생겼습니다.

x축은 theta0, y축은 theta1, z축은 손실을 나타냅니다. 

이 그래프의 최소점, 즉 손실이 가장 적은 지점에 해당하는 세타값들을 찾으면 됩니다. 이럴 때 쓰이는 방법 중 하나가 경사 하강법입니다.

경사 하강법은 어떤 지점에서 경사가 가장 가파른 방향으로 한 걸음씩 내려가는 것입니다. 계속 조금씩 내려가다 보면 언젠가는 최소점에 도달하게 됩니다. 

 

2. 등고선

위에서 본 3차원 그래프를 2차원으로 표현하는 방법입니다. 위 3차원 그래프를 이렇게 표현할 수 있습니다.

오른쪽 그래프는 왼쪽 3차원 그래프를 위에서 내려다 본 모습입니다. 이어진 하나의 선에 있는 점들은 모두 같은 높이에 있는 점들입니다. 이런걸 '등고선'이라고 부릅니다. 따라서 노랑, 초록, 파랑, 남색, 보라 순서대로 더 낮은 지점, 즉 손실이 더 작은 부분을 나타내고 중간에 빨간 점은 손실이 가장 작은 부분, 최소점을 나타냅니다. 경사 하강법을 써서 이 빨간 점을 찾고 싶은 것입니다.

 

그래프를 2차원으로 그리면 좋은 점은 특정 지점에서 경사가 가장 가파른 방향은 등고선과 수직이 되는 방향입니다.

 

3. Feature Scaling과 경사 하강법

선형 회귀를 이용해서 사람들의 연봉을 가지고 나이를 예측해보고 싶다고 합시다.

데이터에 가장 적합한 선 즉 세타0과 세타1을 찾는 게 목표입니다.

그런데 세타1은 천만 단위의 숫자인 연봉과 곱해지기 때문에 값이 어느 정도 바뀌어도 아웃풋이 크게 변하지 않습니다. 아웃풋에 큰 영향을 준다는 것은 결국 평균 제곱 오차, 즉 손실 함수에도 큰 영향을 준다는 뜻입니다. 이걸 그래프로 보면

세타1 방향으로 조금만 움직여도 손실이 급격히 증가하거나 감소하는 것입니다.

 

그런데 feature scaling 예를 들어 normalization을 적용해서 연봉을 0과 1사이의 숫자들로 바꿔주면 세타0과 세타1에 비슷한 숫자들이 곱해지기 때문에 손실 함수에 비슷한 영향을 주게 됩니다. 이걸 그래프로 보면

이렇게 조금 더 동그란 형태의 그래프가 나옵니다.

위 두 그래프에서 경사하강을 하면 특정 지점에서 경사가 가장 가파른 방향, 즉 등고선과 수직이 되는 방향으로 조금씩 내려가면 됩니다.

따라서 위 그래프에서 경사 하강을 하면 지그재그 모양으로 그래프가 내려오게 됩니다. 많은 지점에서 경사가 가장 가파른 방향을 최소점을 향하는 방향이 아니기 때문에 그런 것입니다.

반면 동그란 그래프는 어떤 지점이든 경사가 가장 가파른 방향이 최소점을 향하는 방향이기 때문에 가장 가파른 경사를 따라서 내려오면 위처럼 반듯하게 내려올 수 있습니다. feature scaling을 해줌으로써 훨씬 더 빨리 최소점을 찾을 수 있게 됩니다.

 

다항 회귀나 로지스틱 회귀를 할 때도 feature scaling을 해 주면 모델을 더 빠르게 학습시킬 수 있는 것입니다.

728x90
반응형