การกำหนดค่าเริ่มต้นของเลเยอร์และ Transfer Learning

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

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

การกำหนดค่าเริ่มต้นของเลเยอร์

import torch.nn as nn

layer = nn.Linear(64, 128)
print(layer.weight.min(), layer.weight.max())
(tensor(-0.1250, grad_fn=<MinBackward1>), tensor(0.1250, grad_fn=<MaxBackward1>))

$$

  • ค่าน้ำหนักของเลเยอร์จะถูกกำหนดค่าเริ่มต้นเป็นค่าเล็กน้อย
  • การให้ทั้งข้อมูลอินพุตและค่าน้ำหนักมีขนาดเล็กช่วยให้ผลลัพธ์มีเสถียรภาพ
Deep Learning เบื้องต้นด้วย PyTorch

การกำหนดค่าเริ่มต้นของเลเยอร์

import torch.nn as nn

layer = nn.Linear(64, 128)
nn.init.uniform_(layer.weight)

print(layer.weight.min(), layer.weight.max())
(tensor(0.0002, grad_fn=<MinBackward1>), tensor(1.0000, grad_fn=<MaxBackward1>))
Deep Learning เบื้องต้นด้วย PyTorch

Transfer Learning

  • นำโมเดลที่ฝึกไว้กับงานหนึ่งมาใช้กับงานที่คล้ายกัน
    • ฝึกโมเดลด้วยข้อมูลเงินเดือน Data Scientist ในสหรัฐฯ
    • นำค่าน้ำหนักมาฝึกต่อกับข้อมูลเงินเดือนในยุโรป

$$

import torch

layer = nn.Linear(64, 128)
torch.save(layer, 'layer.pth')

new_layer = torch.load('layer.pth')
Deep Learning เบื้องต้นด้วย PyTorch

Fine-tuning

  • รูปแบบหนึ่งของ Transfer Learning
    • ใช้ Learning Rate ที่เล็กลง
    • ฝึกเฉพาะบางส่วนของเครือข่าย (โดยตรึงบางเลเยอร์ไว้)
    • หลักการทั่วไป: ตรึงเลเยอร์ต้นๆ และ Fine-tune เลเยอร์ใกล้ Output
import torch.nn as nn

model = nn.Sequential(nn.Linear(64, 128),
                      nn.Linear(128, 256))

for name, param in model.named_parameters():
    if name == '0.weight':
        param.requires_grad = False
Deep Learning เบื้องต้นด้วย PyTorch

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

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

Preparing Video For Download...