Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ການປັບແຕ່ງ Hyperparameters ໃນ Neural Network: ວິທີການປັບ Learning Rate ແລະ Batch Size

ໂພສເມື່ອ # Neural Networks # Deep Learning # PyTorch Optimization

ການປັບແຕ່ງ Hyperparameters ໃນ Neural Network: ວິທີການປັບ Learning Rate ແລະ Batch Size

ສະບາຍດີນັກພັດທະນາ ແລະ ຜູ້ສົນໃຈ AI ທຸກທ່ານ! ຖ້າທ່ານກຳລັງຝຶກ (Train) ໂມເດວ Neural Network ເພື່ອພະຍາກອນສະພາບການສັນຈອນຢູ່ສີ່ແຍກສີໄຄ ຫຼື ຄາດເດົາລະດັບນ້ຳຂອງໃນຊ່ວງລະດູຝົນ ແລ້ວພົບວ່າໂມເດວຂອງທ່ານບໍ່ຍອມຮຽນຮູ້, ຄວາມແມ່ນຍຳຕໍ່າ, ຫຼື ໃຊ້ເວລາເທຣນດົນຜິດປົກກະຕິ, ບັນຫາເຫຼົ່ານີ້ມັກຈະເກີດມາຈາກການຕັ້ງຄ່າ “Hyperparameters” ທີ່ບໍ່ເໝາະສົມ.

ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະເລິກວິທີການປັບແຕ່ງສອງຕົວແປທີ່ສຳຄັນທີ່ສຸດໃນການເຮັດ Deep Learning ນັ້ນກໍຄື: Learning Rate ແລະ Batch Size ວ່າມັນເຮັດວຽກແນວໃດ ແລະ ຈະຂຽນໂຄດນຳໃຊ້ໃນ PyTorch ແນວໃດໃຫ້ມີປະສິດທິພາບ.

Hyperparameters ແມ່ນຫຍັງ?

ໃນໂລກຂອງ Neural Networks ເຮົາແບ່ງຕົວແປອອກເປັນສອງປະເພດຄື:

  1. Parameters (Weights & Biases): ແມ່ນຄ່າທີ່ໂມເດວ “ຮຽນຮູ້” ແລະ ປັບປ່ຽນດ້ວຍຕົວມັນເອງໂດຍອັດຕະໂນມັດ ຜ່ານຂໍ້ມູນທີ່ເຮົາປ້ອນເຂົ້າໄປ.
  2. Hyperparameters: ແມ່ນຄ່າທີ່ ຕົວເຮົາເອງ (Developer) ຕ້ອງເປັນຜູ້ກຳນົດກ່ອນທີ່ຈະກົດປຸ່ມເລີ່ມ Train ຊຶ່ງມັນຈະເປັນຕົວຄວບຄຸມ “ວິທີການຮຽນຮູ້” ຂອງໂມເດວ.

ວິເຄາະ: ການປັບ Learning Rate (ອັດຕາການຮຽນຮູ້)

Learning Rate (LR) ແມ່ນຂະໜາດຂອງບາດກ້າວທີ່ໂມເດວໃຊ້ໃນການປັບປ່ຽນນໍ້າໜັກ (Weights) ເພື່ອລຸດຜ່ອນຄ່າຄວາມຜິດພາດ (Loss).

ລອງນຶກພາບວ່າ ໂມເດວຂອງທ່ານຄືນັກເດີນປ່າທີ່ຫຼົງທາງຢູ່ເທິງ ຈອມພູເຂົາຄວາຍ ໃນຕອນກາງຄືນ. ເປົ້າໝາຍແມ່ນການຍ່າງລົງມາຫາພື້ນຮ່ອມພູທີ່ຕໍ່າທີ່ສຸດ (ຈຸດທີ່ Loss = 0). Learning Rate ກໍຄືຄວາມກວ້າງຂອງບາດກ້າວຍ່າງໃນແຕ່ລະກ້າວ:


ວິເຄາະ: ຜົນກະທົບຂອງ Batch Size (ຂະໜາດຂອງແບັດສ໌)

Batch Size ແມ່ນຈຳນວນຊຸດຂໍ້ມູນທີ່ເຮົາປ້ອນໃຫ້ໂມເດວ “ເບິ່ງ” ກ່ອນທີ່ຈະທຳການອັບເດດນໍ້າໜັກ 1 ຄັ້ງ.

ລອງນຶກພາບວ່າ ທ່ານມີທຸລະກິດ SME ສົ່ງອອກກາເຟ ແລະ ຕ້ອງຂົນສົ່ງເມັດກາເຟຈຳນວນ 10,000 ກິໂລ ຈາກ ປາກຊ່ອງ ລົງມາ ປາກເຊ. ທ່ານຈະຂົນສົ່ງແນວໃດ?


ຕົວຢ່າງການຂຽນໂຄດດ້ວຍ PyTorch

ເພື່ອໃຫ້ເຫັນພາບແຈ້ງຂຶ້ນ, ເຮົາມາເບິ່ງວິທີການກຳນົດ Learning Rate ແລະ Batch Size ໃນການສ້າງໂມເດວພະຍາກອນປະລິມານລົດຕິດຢູ່ສີ່ແຍກໄຟແດງ ດ້ວຍ PyTorch ກັນເລີຍ.

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset

# ---------------------------------------------------------
# 1. ສ້າງ Dummy Data ສະຳລັບຕົວຢ່າງການພະຍາກອນລົດຕິດ
# ---------------------------------------------------------
# X = ຂໍ້ມູນ Feature ຕ່າງໆ (ເຊັ່ນ: ເວລາ, ວັນ, ອຸນຫະພູມ) ຈຳນວນ 1,000 ແຖວ, 10 ຟີເຈີ
# y = ປະລິມານລົດຕົວຈິງທີ່ນັບໄດ້ (Labels)
X = torch.randn(1000, 10)  
y = torch.randn(1000, 1)   
dataset = TensorDataset(X, y)

# ---------------------------------------------------------
# 2. ຕັ້ງຄ່າ BATCH SIZE - ໃຊ້ Data Loader ເພື່ອແບ່ງຂໍ້ມູນ
# ---------------------------------------------------------
# ເຮົາໃຊ້ Mini-batch ທີ່ 32 ເພື່ອດຸ່ນດ່ຽງ Memory ແລະ ຄວາມໄວ
BATCH_SIZE = 32 
dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)

# ---------------------------------------------------------
# 3. ສ້າງແບບຈຳລອງ Neural Network ຄ່າພື້ນຖານ
# ---------------------------------------------------------
model = nn.Sequential(
    nn.Linear(10, 64),
    nn.ReLU(),
    nn.Linear(64, 1)
)

# ---------------------------------------------------------
# 4. ກຳນົດ Loss Function ແລະ ຕັ້ງຄ່າ LEARNING RATE
# ---------------------------------------------------------
# ເຮົາເລີ່ມຕົ້ນດ້ວຍ 0.001 ຖ້າ Training ແລ້ວ Loss ບໍ່ລຸດລົງ ໃຫ້ລອງພິຈາລະນາກຳນົດເປັນ 0.01 
LEARNING_RATE = 0.001 
criterion = nn.MSELoss()

# ສົ່ງ Parameter ຂອງໂມເດວເຂົ້າໄປໃນ Optimizer ພ້ອມກຳນົດຄ່າ lr (Learning Rate)
optimizer = optim.Adam(model.parameters(), lr=LEARNING_RATE)

# ---------------------------------------------------------
# 5. ຂັ້ນຕອນການຝຶກສອນໂມເດວ (Training Loop)
# ---------------------------------------------------------
epochs = 5
for epoch in range(epochs):
    epoch_loss = 0.0
    for batch_X, batch_y in dataloader:
        # ກ້າວທີ 1: Forward pass (ຄາດເດົາ)
        predictions = model(batch_X)
        loss = criterion(predictions, batch_y)
        
        # ກ້າວທີ 2: Backward pass (ຄິດໄລ່ຄວາມຜິດພາດແຕ່ລະຈຸດ - Gradients)
        optimizer.zero_grad() 
        loss.backward()
        
        # ກ້າວທີ 3: Optimization step (ອັບເດດນໍ້າໜັກຕາມ Learning Rate ທີ່ຕັ້ງໄວ້)
        optimizer.step()
        
        epoch_loss += loss.item()
        
    # ສະແດງຜົນ Loss ຫຼັງຈາກຈົບແຕ່ລະ Epoch
    avg_loss = epoch_loss / len(dataloader)
    print(f"Epoch [{epoch+1}/{epochs}], Average Loss: {avg_loss:.4f}")

💡 Key Takeaways (ສິ່ງສຳຄັນທີ່ຄວນຈື່)

ສະຫຼຸບ

ການປັບຮາຍເປີພາຣາມິເຕີຄືສິລະປະແລະວິທະຍາສາດທີ່ຕ້ອງອາໄສທັງການທົດລອງແລະຄວາມເຂົ້າໃຈ. ການເຂົ້າໃຈກົນໄກຂອງອັດຕາການຮຽນຮູ້ (Learning Rate) ແລະ ຂະໜາດຂອງແບັດສ໌ (Batch Size) ຈະຊ່ວຍໃຫ້ທ່ານສາມາດພັດທະນາໂມເດວ AI ທີ່ແກ້ໄຂບັນຫາໃນທ້ອງຖິ່ນຂອງລາວເຮົາ ບໍ່ວ່າຈະເປັນການທຳນາຍການຈະລາຈອນ, ວິເຄາະຜົນຜະລິດກະສິກຳ, ຫຼື ລະບົບແນະນຳສິນຄ້າໃນ SME ໄດ້ຢ່າງມີປະສິດທິພາບ ແລະ ປະຢັດເວລາຫຼາຍຂຶ້ນ. ລອງນຳເອົາໂຄດເບື້ອງຕົ້ນໄປດັດແປງ ແລະ ທົດສອບກັບຂໍ້ມູນຂອງທ່ານເບິ່ງເດີ!