Adore__
[Pytorch]1.2 Linear Regression 본문
Source : https://youtu.be/113b7O3mabY
_INTRO
전공 수업인 '인공지능 응용'을 듣고 기본적인 딥러닝 개념과 모델을 학습하였다.
하지만, 확실히 시험을 위한 공부 이외에 스스로 개념을 정리하고 실습해보는 과정은 반드시 필요하다.
따라서 Sung Kim의 '모두를 위한 딥러닝 강좌'와 병행하여 DL tool 중 연구에서 많이 활용되는 Pytorch를 공부하려 한다.
_What is Linear Regression ?
🔥Programming category에서는 코드 위주로 다룰 것이기때문에 더 자세한 개념은 ✔︎Learn category에서 다루겠다.
회귀 문제에는 크게 두가지, Linear과 Logistic이 있다. 오늘은 먼저 Linear Regression에 대해 알아보자.
하루에 운동하는 시간이 길수록 혈당은 감소한다. 술을 마시는 회수가 적을수록 복부지방이 감소한다.
이처럼 우리 생활에서 주어진 x값에 따라 y값이 변하는 경우를 볼 수 있다. 이때, y값은 연속되는 실수로 주어진다.
선형 회귀는 이 두 변수의 관계를 정의하는 함수, 즉 예측함수(Hypothesis)를 선형관계(일차방정식)으로 갖는다.
이때, optimizer로 Gradient descent (경사하강법)을 이용하여 Cost function이 최소가 되도록 하는 변수 (w) 를 찾는다.
_How to implement with Pytorch?
Pytorch Rythm
먼저 Pytorch로 모델을 디자인 할 때 순서는 다음과 같다.
1. Design the model using class with variables
2. Construct loss and optimizer : Pytorch API를 사용하여 손실함수와 optimizer를 제작한다.
3. Training Cycle : forward로 변수를 전달하고 backward로 돌아가면서 손실을 최소로 하도록 변수들을 update한다.
Forward / Backward
1. Forward
step 1. x가 주어졌을 때 Hypothesis로 구한 값 (위 예시에서는 x * w) 을 전달하여 y^을 정의하고,
step 2. y^을 받아 loss function을 정의한다. 선형회귀에서 오차함수는 실제 y값과 예측값 y^의 오차의 제곱 이다.
2. Backward
: 모델을 훈련시키면서 loss function 값을 구할때마다, 다시 입력층으로 되돌아가면서 손실값이 최소가 되도록 하는 변수 w를 찾는다.
-> backward() : 경사하강법을 간단하게 실행시켜 주는 method
Flow
먼저 입력값으로 들어올 x와 y를 Variable을 이용하여 Tensor 변수로 설정해 준다.
torch.nn.Linear(1,1) : 선형방정식인 Hypothesis 함수를 간단하게 구현해준다. 위 예시에서는 독립변수 x 와, 종속 변수 y 가 하나씩 존재하므로 (1,1)을 설정해준다.
torch.nn.MSELoss(): loss fucntion을 실행하는 criterion을 만들어 준다.
torch.optim.SGD(model.parameters(), lr = 0.01) : optimizer로서 SGD를 사용한 경우이다. optimizer에 모델의 Parameters을 넣어주어, 손실함수를 최소로 하는 parameters를 얻을 수 있다.
이때, pytorch는 Gradient Descent 이외의 여러 optimizer를 제공한다.
- torch.optim.Adagrad
- torch.optim.Adam
- torch.optim.Adamax
- torch.optim.ASGD
- torch.optim.LBFGS
- torch.optim.RMSprop
- torch.optim.Rprop
- torch.optim.SGD
_Exercise
이제 kaggle의 dataset을 사용하여 직접 모델을 만들어보자
(진행 후 다시 업로드 하겠다.)
앞서 봤던 Simple Linear Regression에서는 하나의 정보에서 하나의 결과값을 예측하는 것이었다.
하지만 현실에서는 예측을 할때 다양한 정보(값)들이 필요하다. 이를 해결하기 위한 것이 Multivariate Linear Regression (MLP)이다.
예시로 국어, 3번의 퀴즈 시험을 봤을 때 마지막 기말고사 점수를 예측하는 문제를 보자
여기서 x값은 3번의 퀴즈 각각에 해당하므로 x1, x2, x3가 입력값으로 들어온다.
이때 입력변수 x 갯수만큼 weight도 3개가 필요하다.
Hypothesis Function
단순히 위 그림처럼 모든 입력값들을 곱하고 계산하여 H(x) 값을 구할 수 있지만, 입력데이터가 많아질수록 매우 복잡해지므로
빠른 연산을 위해 Matrix (행렬)을 사용한다. pytorch를 사용하면 한줄로 이를 표현할 수 있다.
hypothesis = x_train.matmul(W) + b
Cost Function (MSE)
Linear Regression에서 손실함수는 MSE를 사용한다.
cost = torch.mean((hypothesis-y_train)**2)
Optimizer
손실함수를 최소화하기 위한 optimizer를 설정한다.
먼저 optimizer의 모든 gradient를 0으로 최소화하고, backward로 back propagation을 수행한다.