관리 메뉴

TEAM EDA

[파이토치로 시작하는 딥러닝 기초] 1.2~4 Linear Regression 본문

EDA Study/PyTorch

[파이토치로 시작하는 딥러닝 기초] 1.2~4 Linear Regression

김현우 2020. 3. 19. 22:29

이번 글에서는 PyTorch로 하는 선형 회귀 법에 대해서 배워보도록 하겠습니다. 이번 글은 EDWITH에서 진행하는 파이토치로 시작하는 딥러닝 기초를 토대로 작성하였습니다. 

 

목차 

  • Data Definition 

  • Hypothesis

  • Compute loss

  • Gradient Descent

  • Multivariate Linear Regression

  • nn.Module

  • Q&A 

1. Data Definition 

1시간 공부시에 2점을 받고, 2시간에는 4점, 3시간에는 6점을 얻었다면 4시간을 공부하면 몇 점을 얻을 수 있을까? 

2. Hypothesis 

"위의 문제를 해결하기 위해서 Hours(x)와 Points(y)를 가장 잘 표현하는 선형의 방정식을 찾겠다." 라는 것이 선형 회귀 방정식의 개념입니다. 이를 식으로 표현하면 아래와 같습니다. 

Pytorch로는 위의 식을 아래와 같이 표현할 수 있습니다. 

3. Compute loss 

"위의 문제를 해결하기 위해서 Hours(x)와 Points(y)를 가장 잘 표현하는 선형의 방정식을 찾겠다."가 선형회귀 방정식의 개념이라고 했는데, 여기서 가장 잘 표현한다는 것은 어떻게 정의할 수 있을까요? 가장 합리적인 방법으로는 Cost를 최소화하는 방법이 있습니다. 

 

가장 많이 사용하는 Cost로는 MSE로 아래와 같이 정의할 수 있습니다. 

그리고 Pytorch로는 아래와 같이 표현할 수 있습니다.

4. Gradient descent 

Gradient descent(경사 하강법)은 극점을 찾기 위해서 기울기가 낮은 쪽으로 조금씩 이동시켜가며 극 값에 이를 때까지 반복하는 방법입니다. 초기 포인트에서 시작해서 Cost값을 계산하고 파라미터 값을 조금씩 업데이트해가면서 Cost를 계산하다 보면 어느새 최솟값에 수렴한다는 방법론입니다. 

출처 : https://gdyoon.tistory.com/9

이제까지의 과정을 PyTorch로 정리하면 아래와 같습니다. 

아래의 3줄은 항상 사용되는 문인데 gradient 초기화 -> 계산 -> 파라미터 갱신의 과정이라고 생각하시면 됩니다. 

 

참고로 Gradient Descent의 과정을 수학적으로 살펴보면 아래와 같습니다. 

5. Multivariate Linear Regression 

기존의 데이터의 x변수는 한개인 반면 이제부터는 여러 개로 바뀌게 됩니다. 

마찬가지로 가설 함수도 그에 맞게 여러개의 변수를 가지게 됩니다. 

하지만 위의 처럼 표기할 경우 변수가 늘어남에 따라 표기하는 것이 힘들어지는데 이를 해결하기 위해서 벡터를 도입해서 해결하게 됩니다. 

이에 대한 내용을 기존의 단순 회귀와 비교하면 아래와 같습니다. 

6. nn.Module 

파이토치에서는 nn.Module이라는 패키지를 제공해서 모델을 쉽게 만들게 도움을 줍니다.

7. Q&A

Q1. Epoch 마다 왜 zero로 초기화를 해주어야 할까? 

A1. 그렇지 않은 경우 가중치가 계속 누적되어서 반영됨 

Q2. 평소에 선형 회귀에서 배운 행렬의 개념은 어떻게 해석할까? 

A2. 역행렬이 있거나 데이터가 적은 경우에 사용하기 편리함 

주재걸 교수님 강의  : https://www.edwith.org/linearalgebra4ai/lecture/24130/

Q3. 그 많던 선형회귀의 가정들은? 

  • 선형성 

  • 독립성 

  • 잔차의 등분산성 

  • 잔차의 정규성 

  • 잔차의 독립성 

출처 : https://kkokkilkon.tistory.com/175
출처 : https://brunch.co.kr/@gimmesilver/17

 

출처 : https://brunch.co.kr/@gimmesilver/17
출처 : https://brunch.co.kr/@gimmesilver/17