덕배의 블로그
다중 선형 회귀, 벡터 내적에 대해서 알아보고 파이토치로 실습해보기 본문
다중 선형 회귀
다중 선형 회귀를 알아보기 전에 단순 선형 회귀에 대해서 잘 모른다면 밑에 링크를 통해 공부해 보고 오는 게 좋을 듯하다.
딥러닝 선형 회귀(Linear Regression), 경사 하강법을 알고 파이토치로 실습해보자
선형 회귀(Linear Regression) 선형 회귀에 대해서 알아볼 건데 선형 회귀가 뭔지 또 평균 제곱 오차, 경사하강법과 손실함수에 대해서 알아보려고 한다. 선형 회귀는 학습 데이터와 가장 잘 맞는 하
kdbeom.com
이번 글은 다중 선형 회귀로서 훈련 데이터를 1000개로 가정해보려고 한다. 근데 일일이 다 선언하기가 힘들다. 이러한 코딩은 굉장히 비효율적이기에 행렬 곱셈 연산( 벡터 내적 )을 사용하면 편하고 간단하고 속도도 빠르다.
벡터 내적
H(x) = w1x1 + w2x2 + w3x3 이 식을 벡터의 내적으로 표현하면
위 식처럼 되는데 x의 변수가 3개임에도 H(x) = XW 이 식처럼 표현할 수 있다.
이렇게 벡터의 내적을 이용하면 간단한 식으로 표현이 가능하다.
다중 선형 회귀 실습 코드 (파이토치)
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
x_train = torch.FloatTensor([[73, 80, 75],
[93, 88, 93],
[89, 91, 80],
[96, 98, 100],
[73, 66, 70]]) # (5,3) 행렬
y_train = torch.FloatTensor([[152], [185], [180], [196], [142]]) # (5,1) 행렬
# 모델 초기화
W = torch.zeros((3, 1), requires_grad=True) #가중치 행렬 x가 특징이 3이기에 (3,1)
b = torch.zeros(1, requires_grad=True)
# optimizer 경사하강법 설정 lr = 학습률
optimizer = optim.SGD([W, b], lr=1e-5)
nb_epochs = 50
for epoch in range(nb_epochs + 1):
# H(x) 계산
# 편향 b는 브로드 캐스팅되어 각 샘플에 더해집니다.
hypothesis = x_train.matmul(W) + b
# 비용함수 (평균제곱오차)
cost = torch.mean((hypothesis - y_train) ** 2)
# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward() #w와 b에 대한 기울기 계산
optimizer.step() #lr 계산 업데이트
print('Epoch {:4d}/{} hypothesis: {} Cost: {:.6f}'.format(
epoch, nb_epochs, hypothesis.squeeze().detach(), cost.item()
))
optimizer.zero_grad()를 하는 이유와 backward, step 등이 궁금하다면 밑에 사이트에서 공부하기를 바란다.
딥러닝 선형 회귀(Linear Regression), 경사 하강법을 알고 파이토치로 실습해보자
선형 회귀(Linear Regression) 선형 회귀에 대해서 알아볼 건데 선형 회귀가 뭔지 또 평균 제곱 오차, 경사하강법과 손실함수에 대해서 알아보려고 한다. 선형 회귀는 학습 데이터와 가장 잘 맞는 하
kdbeom.com
자동 미분
import torch
w = torch.tensor(2.0, requires_grad=True) #기울기를 저장
y = w**2 #2w제곱
z = 2*y + 5
z.backward() #w에 대한 기울기 계산
print('미분한 값 : {}'.format(w.grad))
8.0
이렇게 다중 선형 회귀와 벡터 내적에 대한 연관성을 알아보고 자동 미분과 파이토치 실습까지 해보았다. 다른 딥러닝 공부에 어려움을 느낀다면 카테고리를 통해 공부하기를 바란다. 찾아볼 것들이 많으니 참고하면 좋을 것 같다.
'인공지능' 카테고리의 다른 글
NVIDIA Jetson Xavier Nx board에 대해서 알아보자 (0) | 2023.08.16 |
---|---|
파이토치 nn.Module 라이브러리를 이용한 선형 회귀 (0) | 2023.08.13 |
딥러닝 선형 회귀(Linear Regression), 경사 하강법을 알고 파이토치로 실습해보자 (0) | 2023.08.09 |
텐서 연결, 스택킹을 파이토치(pytorch) 실습해보기 (0) | 2023.08.08 |
텐서 크기 변경, 차원 제거, 타입 캐스팅 파이토치(pytorch)로 실습하기 (0) | 2023.08.07 |