Optimizer การฝึก และการประเมินผล

Deep Learning ระดับกลางด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

Training loop

import torch.nn as nn
import torch.optim as optim

criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)


for epoch in range(1000): for features, labels in dataloader_train:
optimizer.zero_grad()
outputs = net(features)
loss = criterion( outputs, labels.view(-1, 1) )
loss.backward()
optimizer.step()
  • กำหนด loss function และ optimizer
    • BCELoss สำหรับ binary classification
    • SGD optimizer
  • วนซ้ำตาม epoch และ batch ของข้อมูลฝึก
  • ล้างค่า gradient
  • Forward pass: รับค่าผลลัพธ์จากโมเดล
  • คำนวณ loss
  • คำนวณ gradient
  • ขั้นตอนของ optimizer: อัปเดตพารามิเตอร์
Deep Learning ระดับกลางด้วย PyTorch

Optimizer ทำงานอย่างไร

 

เวกเตอร์สองตัวที่มีความยาวสอง: ตัวแรกมีค่าพารามิเตอร์ (1 และ 0.5) และตัวที่สองมีค่า gradient (0.9 และ -0.2)

Deep Learning ระดับกลางด้วย PyTorch

Optimizer ทำงานอย่างไร

 

ลูกศรแสดงการส่งเวกเตอร์ของพารามิเตอร์และ gradient เข้าสู่ optimizer ที่แสดงเป็นกระดานเป้า

Deep Learning ระดับกลางด้วย PyTorch

Optimizer ทำงานอย่างไร

 

An arrow from the optimizer points towards a vector with two parameter updates: -0.5 and 0.5.

Deep Learning ระดับกลางด้วย PyTorch

Optimizer ทำงานอย่างไร

 

ลูกศรจากการอัปเดตพารามิเตอร์ชี้ไปยังค่าพารามิเตอร์ที่อัปเดตแล้ว: 0.5 และ 1.0

Deep Learning ระดับกลางด้วย PyTorch

Optimizer ทำงานอย่างไร

 

ลูกศรจากการอัปเดตพารามิเตอร์ชี้ไปยังค่าพารามิเตอร์ที่อัปเดตแล้ว: 0.5 และ 1.0

Deep Learning ระดับกลางด้วย PyTorch

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • การอัปเดตขึ้นอยู่กับ learning rate
  • เรียบง่ายและมีประสิทธิภาพ เหมาะกับโมเดลพื้นฐาน
  • ไม่ค่อยนิยมใช้ในทางปฏิบัติ
Deep Learning ระดับกลางด้วย PyTorch

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • ปรับ learning rate สำหรับแต่ละพารามิเตอร์
  • เหมาะกับข้อมูล sparse
  • อาจลด learning rate เร็วเกินไป
Deep Learning ระดับกลางด้วย PyTorch

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • อัปเดตแต่ละพารามิเตอร์โดยอิงจากขนาดของ gradient ก่อนหน้า
Deep Learning ระดับกลางด้วย PyTorch

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • มีความยืดหยุ่นและได้รับความนิยมสูงที่สุด
  • รวม RMSprop กับ gradient momentum
  • มักใช้เป็น optimizer ตัวเลือกหลัก
Deep Learning ระดับกลางด้วย PyTorch

การประเมินโมเดล

from torchmetrics import Accuracy

acc = Accuracy(task="binary")


net.eval() with torch.no_grad(): for features, labels in dataloader_test:
outputs = net(features)
preds = (outputs >= 0.5).float()
acc(preds, labels.view(-1, 1))
accuracy = acc.compute() print(f"Accuracy: {accuracy}")
Accuracy: 0.6759443283081055
  • กำหนด accuracy metric
  • ตั้งโมเดลเป็น eval mode และวนซ้ำ batch ของข้อมูลทดสอบโดยไม่คำนวณ gradient
  • ส่งข้อมูลเข้าโมเดลเพื่อรับค่าความน่าจะเป็นที่ทำนาย
  • คำนวณ label ที่ทำนายได้
  • อัปเดต accuracy metric
Deep Learning ระดับกลางด้วย PyTorch

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

Deep Learning ระดับกลางด้วย PyTorch

Preparing Video For Download...