การใช้อนุพันธ์เพื่ออัปเดตพารามิเตอร์ของโมเดล

Deep Learning เบื้องต้นด้วย PyTorch

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

การเปรียบเทียบเพื่อทำความเข้าใจอนุพันธ์

$$

อนุพันธ์แทนความชันของเส้นโค้ง

$$

  • ความชันสูง (ลูกศรสีแดง):
    • ก้าวขนาดใหญ่ อนุพันธ์มีค่าสูง
  • ความชันน้อย (ลูกศรสีเขียว):
    • ก้าวขนาดเล็ก อนุพันธ์มีค่าต่ำ
  • พื้นหุบเขา (ลูกศรสีน้ำเงิน):
    • ราบเรียบ อนุพันธ์เป็นศูนย์

$$

ภาพแสดงหุบเขา

Deep Learning เบื้องต้นด้วย PyTorch

ฟังก์ชันนูนและฟังก์ชันไม่นูน

นี่คือฟังก์ชันนูน (convex function)

ตัวอย่างฟังก์ชันนูน

นี่คือฟังก์ชันไม่นูน (non-convex function)

ตัวอย่างฟังก์ชันไม่นูนพร้อมไฮไลต์จุดต่ำสุดสัมบูรณ์

Deep Learning เบื้องต้นด้วย PyTorch

เชื่อมโยงอนุพันธ์กับการฝึกโมเดล

  • คำนวณค่า loss ใน forward pass ระหว่างการฝึก

$$ การคำนวณค่า loss

Deep Learning เบื้องต้นด้วย PyTorch

เชื่อมโยงอนุพันธ์กับการฝึกโมเดล

  • gradient ช่วยลดค่า loss และปรับ weights กับ biases ของแต่ละเลเยอร์
  • ทำซ้ำจนกว่าเลเยอร์จะถูกปรับจูน

$$ การคำนวณ gradient

Deep Learning เบื้องต้นด้วย PyTorch

แนวคิด Backpropagation

$$

  • สมมติว่าเครือข่ายประกอบด้วยสามเลเยอร์:

    • เริ่มด้วย loss gradient ของ $L2$
    • ใช้ $L2$ คำนวณ gradient ของ $L1$
    • ทำซ้ำสำหรับทุกเลเยอร์ ($L1$, $L0$)

แผนภาพ Backpropagation

Deep Learning เบื้องต้นด้วย PyTorch

Backpropagation ใน PyTorch

# Run a forward pass 
model = nn.Sequential(nn.Linear(16, 8),
                      nn.Linear(8, 4),
                      nn.Linear(4, 2))
prediction = model(sample)


# Calculate the loss and gradients criterion = CrossEntropyLoss() loss = criterion(prediction, target) loss.backward()
# Access each layer's gradients
model[0].weight.grad
model[0].bias.grad
model[1].weight.grad
model[1].bias.grad
model[2].weight.grad
model[2].bias.grad
Deep Learning เบื้องต้นด้วย PyTorch

การอัปเดตพารามิเตอร์ของโมเดลด้วยตนเอง

# Learning rate is typically small
lr = 0.001

# Update the weights
weight = model[0].weight
weight_grad = model[0].weight.grad


weight = weight - lr * weight_grad
# Update the biases bias = model[0].bias bias_grad = model[0].bias.grad
bias = bias - lr * bias_grad

$$

  • เข้าถึง gradient ของแต่ละเลเยอร์
  • คูณด้วย learning rate
  • ลบผลคูณออกจาก weight
Deep Learning เบื้องต้นด้วย PyTorch

Gradient Descent

  • สำหรับฟังก์ชันไม่นูน จะใช้ gradient descent

  • PyTorch ทำให้กระบวนการนี้ง่ายขึ้นด้วย optimizers

    • Stochastic gradient descent (SGD)
import torch.optim as optim

# Create the optimizer
optimizer = optim.SGD(model.parameters(), lr=0.001)

# Perform parameter updates optimizer.step()
Deep Learning เบื้องต้นด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning เบื้องต้นด้วย PyTorch

Preparing Video For Download...