Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

10 P3 실습: 경사하강법

Updated: 09 okt 2026

감사의 글

오렐리앙 제롱Aurélien Géron의 Hands-On Machine Learning with Scikit-Learn and PyTorch (O’Reilly, 2025)에 사용된 코드를 참고한 강의노트이다. 보다 심화된 이해를 위해 책 원본을 읽을 것을 강력하게 권장한다. 자료를 공개한 오렐리앙 제롱과 일부 그림 자료를 제공해 준 한빛아카데미에게 진심어린 감사를 전한다.

코드 실행

(구글 코랩) P3 실습: 경사하강법에서 코드를 실행할 수 있다.

환경설정

10.11단계: 좋은 직선은 무엇인가

10.1.1P0의 삶의 만족도 데이터를 다시 사용한다

머신러닝 소개 국가별 1인당 GDP를 이용하여 삶의 만족도를 예측했다.

이번에도 같은 데이터를 사용한다. 이전과 마찬가지로 1인당 GDP가 23,500달러에서 62,500달러 사이인 31개 국가를 선택한다.

선택된 국가 수: 31

P0에서는 GDP를 달러 단위 그대로 사용했다. 이번에는 경사하강법의 움직임을 쉽게 보기 위해 1만 달러 단위로 바꾸어 사용한다.

예를 들어 40,000달러는 4.0으로 표현된다.

단위만 바뀌었을 뿐 데이터의 관계는 그대로다.

<Figure size 640x480 with 1 Axes>

10.1.2직선은 두 개의 파라미터로 정해진다

하나의 특성을 사용하는 선형 회귀 모델은 다음 직선을 사용한다.

y^=θ0+θ1x\hat y = \theta_0 + \theta_1 x
  • θ0\theta_0: 절편

  • θ1\theta_1: 기울기

  • xx: 1인당 GDP

  • y^\hat y: 예측한 삶의 만족도

P0에서도 서로 다른 절편과 기울기를 가진 직선들을 비교했다. 같은 세 직선을 다시 확인한다.

<Figure size 640x480 with 1 Axes>

직선이 달라지면 예측값도 달라진다. 그러면 어떤 직선이 더 좋은지 숫자로 비교할 기준이 필요하다.

회귀에서는 평균 제곱 오차(MSE)를 사용할 수 있다.

MSE=1m∑i=1m(y^(i)−y(i))2\mathrm{MSE} = \frac{1}{m} \sum_{i=1}^{m} (\hat y^{(i)} - y^{(i)})^2

여기서는 공식을 외우기보다 다음 의미만 기억한다.

예측값과 실제값의 차이가 클수록 MSE가 커지고, 잘 맞을수록 MSE가 작아진다.

Loading...

10.1.31단계 확인

세 직선의 MSE를 비교한다.

  • MSE가 가장 작은 직선은 어느 것인가?

  • 그래프에서 데이터에 가장 잘 맞아 보였던 직선과 일치하는가?

  • 더 좋은 절편과 기울기가 있을 수 있을까?

모델 훈련의 목표는 바로 MSE를 더 작게 만드는 파라미터를 찾는 것이다.

10.22단계: 경사하강법은 어떻게 좋은 직선을 찾는가

10.2.1한 번에 정답을 맞히는 것이 아니라 조금씩 수정한다

경사하강법은 처음부터 최적의 θ0\theta_0, θ1\theta_1을 알고 시작하지 않는다.

먼저 임의의 값에서 시작한 다음 다음 과정을 반복한다.

현재 파라미터 → 예측 → MSE 확인 → MSE가 줄어드는 방향 확인 → 파라미터 조금 수정

이 한 번의 수정을 스텝(step)이라고 생각할 수 있다.

파라미터를 수정하는 핵심 형태는 다음과 같다.

새 파라미터=현재 파라미터−학습률×기울기\text{새 파라미터} = \text{현재 파라미터} - \text{학습률} \times \text{기울기}

여기서 기울기(gradient)는 현재 위치에서 파라미터를 어느 방향으로 바꾸면 MSE가 증가하는지를 알려준다.

따라서 그 반대 방향으로 움직이면 MSE를 줄일 수 있다.

이번 실습에서는 기울기의 계산식을 직접 유도하지 않는다. 아래 코드에 주어진 계산식을 사용하여 파라미터가 어떻게 움직이고 MSE가 어떻게 감소하는지를 관찰한다.

10.2.2경사하강법을 직접 실행한다

경사하강법을 시작하려면 파라미터의 초기값이 필요하다. 초기값은 0이나 임의의 값으로 정할 수 있다. 이번 선형 회귀 예제에서는 학습 과정을 쉽게 관찰하기 위해 θ0=θ1=0\theta_0 = \theta_1=0에서 시작한다.

그리고 모든 31개 국가를 이용해 MSE와 기울기를 계산한 다음, 파라미터를 한 번씩 수정한다.

Loading...

표를 보면 에포크가 진행될수록 θ0\theta_0와 θ1\theta_1이 조금씩 바뀐다.

이번에는 시작과 마지막을 비교한다.

Loading...

10.2.3직선이 어떻게 움직이는지 본다

경사하강법이 진행되는 동안 몇 개의 시점에서 직선을 그려 본다.

<Figure size 640x480 with 1 Axes>

처음의 직선은 데이터와 거의 맞지 않는다. 하지만 파라미터를 반복해서 수정하면서 직선이 데이터의 전체적인 방향에 가까워진다.

이것이 fit() 내부에서 일어나는 모델 훈련의 핵심 아이디어다.

10.2.4MSE도 함께 확인한다

좋은 방향으로 학습되고 있다면 에포크가 진행될수록 MSE가 감소해야 한다.

<Figure size 640x480 with 1 Axes>

10.2.5LinearRegression이 찾은 결과와 비교한다

P0에서는 LinearRegression.fit()을 이용해 절편과 기울기를 자동으로 학습했다.

같은 데이터를 사용하여 결과를 비교한다.

Loading...

두 방법이 완전히 같은 방식으로 파라미터를 구하는 것은 아니다. 하지만 충분히 학습한 경사하강법은 LinearRegression이 찾은 좋은 직선에 가까워진다.

핵심은 다음이다.

fit()은 결국 데이터에 잘 맞는 파라미터를 찾는 과정이고, 경사하강법은 그 파라미터를 반복적인 수정으로 찾아가는 방법이다.

10.2.6학습률이 중요한 이유

학습률(learning rate)은 한 스텝에서 얼마나 크게 움직일지를 정한다.

같은 데이터, 같은 모델, 같은 초기값을 사용하고 학습률만 바꾸어 비교한다.

학습률이 0.01일 때 MSE가 가장 빠르게 최저점으로 수렴한다.

반면에 0.0001로 너무 작으면 MSE가 훨씬 느리게 수렴하는 것으로 보인다.

<Figure size 640x480 with 1 Axes>

반면에 학습률이 0.054 이상이면 MSE가 수렴하지 않고 오히려 폭발적으로 증가, 즉 발산한다.

<Figure size 640x480 with 1 Axes>

그래프를 보면서 다음을 확인한다.

  • 학습률이 너무 작으면 파라미터가 조금씩만 움직여 학습이 느리다.

  • 적절한 학습률이면 MSE가 빠르게 감소한다.

  • 학습률이 너무 크면 MSE가 불안정하게 움직이거나 아예 발산할 수 있다.

좋은 학습률은 데이터와 모델에 따라 달라질 수 있다.

10.2.7배치 → 스텝 → 에포크 → 학습률

지금까지 사용한 예제로 네 용어를 연결하면 다음과 같다.

배치(batch)
한 번의 파라미터 업데이트에 사용하는 데이터 묶음이다. 지금까지는 31개 국가 전체를 한 번에 사용했다.

스텝(step)
한 배치로 예측하고 MSE를 계산한 뒤 θ0\theta_0, θ1\theta_1을 한 번 업데이트하는 과정이다.

에포크(epoch)
훈련 데이터 전체를 한 번 사용한 과정이다. 지금 예제에서는 한 배치가 전체 31개 국가이므로 한 스텝이 곧 한 에포크다.

학습률(learning rate)
각 스텝에서 파라미터를 얼마나 크게 움직일지를 정한다.

지금까지 사용한 방식처럼 훈련 데이터 전체를 한 배치로 사용하는 경사하강법을 배치 경사하강법이라고 한다.

10.2.82단계 확인

다음을 자신의 말로 설명할 수 있는지 확인한다.

  • 모델의 파라미터는 무엇인가?

  • MSE가 작다는 것은 무엇을 의미하는가?

  • 경사하강법은 왜 기울기의 반대 방향으로 움직이는가?

  • 학습률이 하는 역할은 무엇인가?

  • 지금 실습에서 한 스텝과 한 에포크가 같은 이유는 무엇인가?

10.3실습 정리

이번 실습에서 기억할 핵심은 다음과 같다.

  • 선형 회귀의 훈련은 데이터에 잘 맞는 절편과 가중치를 찾는 과정이다.

  • 모델의 예측 오차는 MSE와 같은 손실 함수로 측정할 수 있다.

  • 경사하강법은 손실을 줄이는 방향으로 파라미터를 조금씩 수정한다.

  • 학습률은 한 번에 얼마나 크게 수정할지를 결정한다.

  • 이번 실습에서는 훈련셋 전체를 한 번에 사용했으며, 이를 배치 경사하강법이라고 한다.

  • 한 배치가 전체 훈련셋이므로 이번 예제에서는 한 스텝이 곧 한 에포크다.

모델 훈련 = 예측 → 오차 확인 → 파라미터 수정 → 반복