- Published on
πPyTorch Zero to All - Lecture02 Overview
Model Design
λ¨Έμ λ¬λμ λͺ¨λΈμλ 3κ°μ§ μ’ λ₯κ° μλ€.
- Supervised Learning(μ§λνμ΅)
- Unsupervised Learning(λΉμ§λνμ΅)
- Reinforcement Learning(κ°ννμ΅)
κ΅μλμ κ°μμμ μ¬μ©λ λ¨Έμ λ¬λμ μ’ λ₯λ Supervised Learning(μ§λνμ΅) νμ μ΄λ€.
κ°μ μμμμλ μκ°μ λ°λ₯Έ μ μλ₯Ό μμΈ‘νλ λͺ¨λΈμ μμ μΌμ μ€κ³λ₯Ό μ§ννλ€.
μ°μ , μ§λνμ΅μ νκΈ° μν΄ μ£Όμ΄μ§ λ°μ΄ν°λ€μ λΆλ₯κ° νμνλ€. ν¬κ² Training dataset κ³Ό Test datasetμΌλ‘ λλλ€. μμ μ λ λ°μ΄ν°μ μ λ€μκ³Ό κ°λ€.
Hours(x) | Points(y) | |
---|---|---|
1 | 2 | Train |
2 | 4 | Train |
3 | 6 | Train |
4 | ? | Test |
λ§μ§λ§ "?"μ κ°μ μμΈ‘νλ λ¨Έμ λ¬λ λͺ¨λΈμ μ€κ³νλ κ²μ΄ νμ¬μ λͺ©νμ΄λ€.
λ€μκ³Ό κ°μ λ°μ΄ν°λ₯Ό κ°μ₯ μ μ 리ν μ μλ λͺ¨λΈμ μ ν(Linear)λͺ¨λΈμ΄λΌκ³ λ³Ό μ μλ€. κΈ°μ΄μ μΈ μ ν λ°©μ μμ ν λλ‘ λμ€μ μΆκ°λ κ°μ€μΉ(weight)κ°λ κ³Ό λ°μ΄μ΄μ€(bias) κ°λ κΉμ§ νμ©νμ¬ νννλ©΄ λ€μκ³Ό κ°λ€.
λ μμ€, μμ μ μμ bλ λμ± κ°λ¨ν μμ ννμ μν΄ μλ΅νκ³ κ·Έλνλ₯Ό μμ±νλ©΄ λ€μκ³Ό κ°λ€.
μμ κ·Έλνμ μ μ μ λ ₯μ λν μ λ΅μ μ νν μμΈ‘νλ True Lineμ΄λ€. μ§κΈλΆν° μ°λ¦¬κ° μ€κ³ν λͺ¨λΈμ ν΄λΉ True Lineμ κ°μ₯ κ·Όμ ν μ μλ κ°μ random guessingνλ€. 무μμ μμΈ‘μ΄κΈ° λλ¬Έμ, True Lineμμλ λΉκ»΄κ° λ€μν μμΈ‘ λͺ¨λΈλ€μ΄ λ±μ₯νλ€. κ·Έλν μμ νννλ©΄ λ€μκ³Ό κ°λ€.
μ§κΈ λΆν° μ°λ¦¬κ° ν΄μΌ ν μΌμ, μμΈ‘λ λ€μν κ·Έλνλ€μ΄ μ΅λν True Lineμ κ°κΉλλ‘ νλ κ²μ΄λ€. κ·Έλ¬κΈ° μν΄μλ κ·Έλν λ³λ‘ True Lineκ³Όμ 거리λ₯Ό μΈ‘μ νμ¬ μ€μ΄λ κ²μ΄λ€. True Lineμ , μ°λ¦¬κ° λ§λ κ·Έλνλ₯Ό λ‘ λ³΄μμ λ, λ κ·Έλνμ 거리λ μ΄λ€. μ°λ¦¬μκ²λ λΆνΈμ μλ―Έκ° νμμκ³ κ±°λ¦¬μ ν¬κΈ°κ° νμνκΈ°μ μ κ³±μ μμ΄μ€λ€. μ΄λ κ² λμ¨ κ°μ error(μ€λ₯) λΌκ³ λΆλ₯΄κ³ , μ΄λ¬ν κ°μ μ»λ ν¨μλ₯Ό Loss Function(μμ€ν¨μ) μ΄λΌκ³ λΆλ₯Έλ€. μ΄λ¬ν μ€λ₯λ₯Ό μ€μ΄λ κ²μ΄ μ΅μ μ κ°μ μ°μΆν΄ λΌ ν΄λ²μ΄λ€.μμΌλ‘ μ 리νλ©΄ λ€μκ³Ό κ°λ€.
λ€μμ κ°μ λ³νμ λ°λ₯Έ μμ€μ λ³νλ₯Ό μ 리ν νμ΄λ€.
MSE = Mean Square Error, μμ€ μ κ³± νκ·
=>
Hours, | Loss( = 0) | Loss( = 1) | Loss( = 2) | Loss( = 3) | Loss( = 4) |
---|---|---|---|---|---|
1 | 4 | 1 | 0 | 1 | 4 |
2 | 16 | 4 | 0 | 4 | 16 |
3 | 36 | 9 | 0 | 9 | 36 |
MSE = 56/3 = 18.7 | MSE = 14/3 = 4.7 | MSE = 0 | MSE = 14/3 = 4.7 | MSE = 56/3 = 18.7 |
κ·Έλνλ‘ λνλλ©΄ λ€μκ³Ό κ°λ€.
Let's code
sungkim κ΅μλμ λͺ¨λ μ½λλ ν΄λΉ git-hubμ μ 리 λμ΄ μ¬λΌμ μλ€. κ·Έ μ€ κ°λ μ±κ³Ό μ 리λ₯Ό μν΄ μΌλΆμ©λ§ λ°μ·νμ¬ μ€λͺ κ³Ό ν¨κ» μ½λλ₯Ό μ λ¦¬ν΄ λ³΄κ² λ€.
μ°μ , μμ λ‘ μΌμ μκ°μ λ°λ₯Έ μ μ μμΈ‘ λͺ¨λΈ μ°μ°μ μν΄ νμν κΈ°μ΄μ μΈ ν¨ν€μ§λ€μ λΆλ¬μ€κ³ μ°λ¦¬κ° μ€μ ν λ°μ΄ν° κ°μ λ£μ΄μ€λ€.
import numpy as np
import matplotlib.pyplot as plt
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
λ€μμΌλ‘ μ ν΄λΉνλ ννΈμΈ λͺ¨λΈ μ€κ³ ν¨μλ₯Ό μ€μ νμ.
w = 1.0
# our model for the forward pass
def forward(x):
return x * w
μμ€ν¨μλ μ½λλ‘ μμ±νμ
# Loss function
def loss(x, y):
y_pred = forward(x)
return (y_pred - y) * (y_pred - y)
μ λ°λ₯Έ μμ€ κ³μ°μ μν λ°λ³΅λ¬Έ λΆλΆλ μλ€.
for w in np.arange(0.0, 4.1, 0.1):
# Print the weights and initialize the lost
print("w=", w)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
# For each input and output, calculate y_hat
# Compute the total loss and add to the total error
y_pred_val = forward(x_val)
l = loss(x_val, y_val)
l_sum += l
print("\t", x_val, y_val, y_pred_val, l)
# Now compute the Mean squared error (mse) of each
# Aggregate the weight/mse from this run
print("MSE=", l_sum / len(x_data))
μ λ°λ₯Έ μμ€ λ³νλ₯Ό μ νμΈνκΈ°μν΄ κ·Έλνλ₯Ό κ·Έλ €μ νμΈν μλ μλ€. κ·Έλνλ₯Ό 그리기 μν΄μλ λ€μ μ½λλ₯Ό μΆκ°ν΄μ£Όλ©΄ κ°λ₯νλ€.
w_list.append(w)
mse_list.append(l_sum / len(x_data))
# Plot it all
plt.plot(w_list, mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()
μ μ½λμμ λμ€μ, μ΄μ μμ€ κ³μ°μ μν λ°λ³΅λ¬Έ μμ λ£μ΄μ£ΌκΈ°λ§ νλ©΄ μΈλΆμ 리μ€νΈμ λ΄μμ νλ²μ κ°κ³΅νμ¬ κ·Έλνλ₯Ό κ·Έλ¦°λ€. κ·Έλ €μ§ κ·Έλνλ λ€μκ³Ό κ°λ€.
μ°Έκ³ μλ£ : Youtube Link