Tag: linear-regression
All the articles with the tag "linear-regression".
PYTORCH모두를 위한 딥러닝 2
이런 형태로 학습을 하는 이유를 한번 알아보자.
아래의 두 gif는 각각 극소점의 좌우에서 극소점에 접근할 때 접선의 변화를 나타낸 것이다.
먼저 왼쪽에서 접근하는 경우 기울기(gradient)가 음수이고 극소점으로 도달하기 위해서는 가 커져야 한다. 그러므로 음수인 기울기를 빼주어 극소점에 가깝게 도달할 수 있다.
다음으로 오른쪽에서 접근하는 경우 기울기가 양수이고 극소점으로 도달하기 위해서는 가 작아져야 한다. 이 때는 양수인 기울기를 빼주어 극소점에 가깝게 도달할 수 있다.
결국 이 둘다 빼야하므로 모두 만족하는 식이 , 기울기의 뺄셈으로 주어지는 것이다. 이 때 인 는 말 그대로 학습률(한 번에 학습을 얼마나 할 것인가)을 나타내는 것이므로 상황에 맞게 최적화 하여 사용한다.
모두를 위한 딥러닝 2 - Lab3: Minimizing Cost
이번에는 Gradient descent에 대해 조금 더 집중적으로 알아보기 위해 Hypothesis를 조금 더 단순하게 로 바꾸어 살펴보자.
PYTORCH모두를 위한 딥러닝 2
# 데이터
x_train = torch.FloatTensor([[1], [2], [3]])
y_train = torch.FloatTensor([[1], [2], [3]])
# 모델 초기화
W = torch.zeros(1, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
# optimizer 설정
optimizer = optim.SGD([W, b], lr=0.01)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
# H(x) 계산
hypothesis = x_train * W + b
# cost 계산
cost = torch.mean((hypothesis - y_train) ** 2)
# cost로 H(x) 개선
optimizer.zero_grad()
cost.backward()
optimizer.step()
# 100번마다 로그 출력
if epoch % 100 == 0:
print('Epoch {:4d}/{} W: {:.3f}, b: {:.3f} Cost: {:.6f}'.format(
epoch, nb_epochs, W.item(), b.item(), cost.item()
))
''' output
Epoch 0/1000 W: 0.093, b: 0.040 Cost: 4.666667
Epoch 100/1000 W: 0.873, b: 0.289 Cost: 0.012043
Epoch 200/1000 W: 0.900, b: 0.227 Cost: 0.007442
Epoch 300/1000 W: 0.921, b: 0.179 Cost: 0.004598
Epoch 400/1000 W: 0.938, b: 0.140 Cost: 0.002842
Epoch 500/1000 W: 0.951, b: 0.110 Cost: 0.001756
Epoch 600/1000 W: 0.962, b: 0.087 Cost: 0.001085
Epoch 700/1000 W: 0.970, b: 0.068 Cost: 0.000670
Epoch 800/1000 W: 0.976, b: 0.054 Cost: 0.000414
Epoch 900/1000 W: 0.981, b: 0.042 Cost: 0.000256
Epoch 1000/1000 W: 0.985, b: 0.033 Cost: 0.000158
'''모두를 위한 딥러닝 2 - Lab2: Linear regression
선형 회귀에서 사용하는 1차 방정식을 말한다. weight와 bias를 계속 바꿔가면거 마지막 학습이 끝난 뒤의 최종값을 사용하여 데이터를 예측한다. 수식은 다음과 같다.