Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ວິທີການເບິ່ງເຫັນພາບ Weights ແລະ Biases ຂອງ Neural Network ດ້ວຍ TensorBoard

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

ວິທີການເບິ່ງເຫັນພາບ Weights ແລະ Biases ຂອງ Neural Network ດ້ວຍ TensorBoard

ຫຼາຍຄົນມັກຈະປຽບທຽບວ່າ ໂຄງຂ່າຍປະສາດທຽມ (Neural Networks) ແລະ Deep Learning ເປັນຄືກັບ “ກ່ອງດຳ” (Black Box). ເຮົາປ້ອນຂໍ້ມູນເຂົ້າໄປ (ເຊັ່ນ: ຂໍ້ມູນສະພາບອາກາດໃນປາກຊ່ອງ), ໂມເດວທຳການຄຳນວນບາງຢ່າງ, ແລະ ມັນກໍສົ່ງຜົນການຄາດຄະເນອອກມາ (ເຊັ່ນ: ຄຸນນະພາບຂອງເມັດກາເຟ). ແຕ່ສິ່ງທີ່ເກີດຂຶ້ນພາຍໃນກ່ອງນັ້ນມັກຈະເປັນສິ່ງທີ່ເຂົ້າໃຈຍາກສຳລັບນັກພັດທະນາຖ້າບໍ່ມີເຄື່ອງມືທີ່ເໝາະສົມ.

ໃນບົດຄວາມນີ້, ເຮົາຈະມາເປີດກ່ອງດຳນັ້ນອອກ! ສຳລັບນັກພັດທະນາ (Developers) ລະດັບປານກາງທີ່ຄຸ້ນເຄີຍກັບການສ້າງໂມເດວມາແດ່ແລ້ວ, ການເຂົ້າໃຈວິທີການປ່ຽນແປງຂອງ ພາຣາມິເຕີ (Parameters) ພາຍໃນໂມເດວ ເຊັ່ນ: Weights ແລະ Biases ແມ່ນສິ່ງສຳຄັນຫຼາຍໃນການແກ້ໄຂບັນຫາ (Debugging) ແລະ ປັບແຕ່ງໂມເດວໃຫ້ດີຂຶ້ນ. ເຮົາຈະມາໃຊ້ເຄື່ອງມືທີ່ຊື່ວ່າ TensorBoard ຮ່ວມກັບ PyTorch ເພື່ອເບິ່ງພາຍໃນໂມເດວກັນ.

ທົບທວນກັນໜ້ອຍໜຶ່ງ: Weights ແລະ Biases ແມ່ນຫຍັງ?

ຊັ້ນເຊື່ອງ (Hidden Layers) ຂອງ Neural Network ປະກອບດ້ວຍໂນດ (Nodes) ທີ່ເຊື່ອມຕໍ່ກັນ, ເຊິ່ງແຕ່ລະການເຊື່ອມຕໍ່ຈະມີຄ່າທີ່ເອີ້ນວ່າ:

ເປັນຫຍັງເຮົາຈຶ່ງຕ້ອງເບິ່ງເຫັນພາບ (Visualize) ພວກມັນ?

ການເບິ່ງພຽງແຕ່ຄ່າ Loss ຫຼື Accuracy ບາງຄັ້ງອາດບໍ່ພຽງພໍ. ການເບິ່ງເຫັນການກະຈາຍຕົວທີເປັນຮູບແບບຮິສໂຕແກຣມ (Histogram) ຂອງ Weights ແລະ Biases ຈະຊ່ວຍໃຫ້ເຮົາສັງເກດເຫັນບັນຫາເຊັ່ນ:

  1. Vanishing Gradients: ເມື່ອ Weights ກາຍເປັນ 0 ໝົດ, ໂມເດວຈະຢຸດການຮຽນຮູ້.
  2. Exploding Gradients: ເມື່ອ Weights ມີຄ່າໃຫຍ່ຜິດປົກກະຕິ ຈົນເຮັດໃຫ້ໂມເດວບໍ່ສະຖຽນລົງ (NaN).
  3. Dead Neurons: ເມື່ອຄ່າ Biases ຖືກຕັ້ງໃຫ້ຕິດລົບຫຼາຍເກີນໄປ (ໂດຍສະເພາະເມື່ອໃຊ້ ReLU) ເຮັດໃຫ້ Nodes ເຫຼົ່ານັ້ນບໍ່ເຄີຍຖືກເປີດນຳໃຊ້.

ລົງມືປະຕິບັດ: ການໃຊ້ TensorBoard ໃນ PyTorch

ລອງມາຈິນຕະນາການວ່າ ເຮົາກຳລັງສ້າງໂມເດວໃຫ້ກັບບໍລິສັດ SME ທີ່ສົ່ງອອກກາເຟໃນພາກໃຕ້ຂອງລາວ. ເຮົາວາງໂຄງສ້າງເຄືອຂ່າຍປະສາດທຽມ (Neural Network) ແບບງ່າຍໆ ເພື່ອວິເຄາະຂໍ້ມູນ, ແລະ ນີ້ຄືວິທີທີ່ເຮົາຈະດຶງຄ່າ Weights/Biases ອອກມາເບິ່ງດ້ວຍ SummaryWriter.

ຂັ້ນຕອນທີ 1: ສ້າງ Model ແລະ Setup TensorBoard

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.tensorboard import SummaryWriter

# ໂມເດວຄາດຄະເນຄຸນນະພາບກາເຟປາກຊ່ອງ (PaksongCoffeeNet)
class PaksongCoffeeNet(nn.Module):
    def __init__(self):
        super(PaksongCoffeeNet, self).__init__()
        # Input: ລະດັບຄວາມສູງ, ປະລິມານນໍ້າຝົນ, ອຸນຫະພູມ
        self.fc1 = nn.Linear(3, 16)
        self.fc2 = nn.Linear(16, 8)
        self.fc3 = nn.Linear(8, 1) # Output: ຄະແນນຄຸນນະພາບ (Quality Score)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.relu(self.fc1(x))
        x = self.relu(self.fc2(x))
        return self.fc3(x)

# ສ້າງ Instant ຂອງໂມເດວ
model = PaksongCoffeeNet()

# ກະກຽມ TensorBoard writer ໂດຍການລະບຸໂຟນເດີທີ່ຈະເກັບ Log 
writer = SummaryWriter('runs/paksong_coffee_experiment')

ຂັ້ນຕອນທີ 2: ການ Training Loop ແລະ ບັນທຶກຄ່າ (Logging)

ທຸກໆຄັ້ງທີ່ໂມເດວທຳການ Update, ເຮົາຢາກຈະບັນທຶກຄ່າການກະຈາຍຕົວຂອງ Weights ໄວ້. ເຮົາໃຊ້ add_histogram() ຂອງ TensorBoard.

optimizer = optim.SGD(model.parameters(), lr=0.01)
criterion = nn.MSELoss()

for epoch in range(200):
    # ຈຳລອງຂໍ້ມູນ (Dummy Data) ສຳລັບການ Train
    inputs = torch.randn(20, 3) # 20 ຕົວຢ່າງ, 3 features
    targets = torch.randn(20, 1)
    
    # Forward & Backward Pass ຕາມປົກກະຕິ
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, targets)
    loss.backward()
    optimizer.step()
    
    # --- ສ່ວນສຳຄັນ ---
    # ບັນທຶກ Weights, Biases ແລະ Gradients ລົງໃນ TensorBoard ທຸກໆ 10 epochs
    if epoch % 10 == 0:
        for name, param in model.named_parameters():
            # ບັນທຶກ Histogram ຂອງ Weights/Biases ປັດຈຸບັນ
            writer.add_histogram(name, param.data, epoch)
            
            # ບັນທຶກ Histogram ຂອງ Gradients ຖ້າມີການປ່ຽນແປງ
            if param.grad is not None:
                writer.add_histogram(f'{name}.grad', param.grad, epoch)

        # ບັນທຶກຄ່າ Loss ເພື່ອເບິ່ງກຣາຟ
        writer.add_scalar('Training/Loss', loss.item(), epoch)

# ປິດ Writer ເມື່ອຮຽນຮູ້ສຳເລັດ
writer.close()

ຂັ້ນຕອນທີ 3: ເປີດເບິ່ງ TensorBoard

ຫຼັງຈາກທີ່ Code ເຮັດວຽກສຳເລັດ, ໃຫ້ທ່ານເປີດ Terminal (ຫຼື Command Prompt) ໃນໂຟນເດີດຽວກັນແລ້ວພິມຄຳສັ່ງ:

tensorboard --logdir=runs

ຈາກນັ້ນໃຫ້ເປີດ Browser ຂຶ້ນມາແລ້ວເຂົ້າໄປທີ່ http://localhost:6006/. ເມື່ອເຂົ້າໄປໃນແຖບ Histograms ຫຼື Distributions, ທ່ານຈະເຫັນແຜນວາດທີ່ສະແດງໃຫ້ເຫັນການປ່ຽນແປງຂອງ Layer fc1, fc2 ແລະ fc3.

ວິທີການຕີຄວາມໝາຍຈາກຮິສໂຕແກຣມ (Histogram)

ເມື່ອທ່ານເຫັນກຣາຟໃນ TensorBoard ແລ້ວ ຄວນສັງເກດຫຍັງແດ່?

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

ສະຫຼຸບ

ສຳລັບນັກພັດທະນາໃນລາວ ທີ່ກຳລັງນຳໃຊ້ Machine Learning ເຂົ້າມາຊ່ວຍແກ້ໄຂບັນຫາໃນຊີວິດຈິງ ບໍ່ວ່າຈະເປັນການກວດຈັບພະຍາດພືດ, ລະບົບແນະນຳສິນຄ້າ, ຫຼື ການເກັບກຳຂໍ້ມູນກະສິກຳ; ການສ້າງໂມເດວໃຫ້ແລ່ນໄດ້ເປັນພຽງກ້າວທຳອິດເທົ່ານັ້ນ. ການໃຊ້ເຄື່ອງມືເຊັ່ນ TensorBoard ເພື່ອ “ແນມທະລຸ” ເຂົ້າໄປເບິ່ງພາຍໃນ Weights ແລະ Biases ຈະຍົກລະດັບທັກສະການປັບແຕ່ງ (Tuning) ໂມເດວຂອງທ່ານໃຫ້ມີຄວາມໝັ້ນຄົງ, ແມ່ນຢຳ, ແລະ ແກ້ໄຂບັນຫາໄດ້ຢ່າງຖືກຈຸດຫຼາຍຂຶ້ນ. ເທື່ອໜ້າທີ່ທົດລອງ Train AI ຢ່າລືມລອງວາດພາບນໍ້າໜັກໂມເດວຂອງທ່ານເບິ່ງ!