Recurrent Neural Networks

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

Michal Oleszak

Machine Learning Engineer

Recurrent neuron

  • Feed-forward networks
  • RNNs: มีการเชื่อมต่อย้อนกลับ
  • Recurrent neuron:
    • อินพุต x
    • เอาต์พุต y
    • Hidden state h
  • ใน PyTorch: nn.RNN()

แผนผัง RNN neuron แบบพื้นฐาน: neuron ที่ใช้ weights และ activation รับอินพุต x และสร้างเอาต์พุต y และ h โดย h ถูกป้อนกลับเข้าสู่ตัวเอง

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

การคลี่ recurrent neuron ตามเวลา

แผนผัง recurrent neuron ที่ time step 0 รับอินพุต h0 และ x0 และสร้างเอาต์พุต y0 และ h1

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

การคลี่ recurrent neuron ตามเวลา

แผนผัง recurrent neuron ที่ time step 1 รับอินพุต h1 และ x1 และสร้างเอาต์พุต y1

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

การคลี่ recurrent neuron ตามเวลา

แผนผัง recurrent neuron ที่ time step 2 รับอินพุต h2 และ x2 และสร้างเอาต์พุต y2 และ h3

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

Deep RNNs

แผนผังของ recurrent neuron สอง neuron ที่ประกอบเป็น layer โดยแต่ละ time step เอาต์พุต y จะถูกส่งต่อไปยัง neuron อื่น

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

สถาปัตยกรรม Sequence-to-sequence

  • ป้อนลำดับเป็นอินพุต และใช้เอาต์พุตทั้งหมด
  • ตัวอย่าง: การรู้จำเสียงพูดแบบเรียลไทม์

แผนผังสถาปัตยกรรม: แต่ละ time step มีอินพุตใหม่ และเอาต์พุต y ทุกค่าจากแต่ละ time step จะถูกระบุด้วยสีเขียวว่าถูกใช้งาน

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

สถาปัตยกรรม Sequence-to-vector

  • ป้อนลำดับเป็นอินพุต และใช้เฉพาะเอาต์พุตสุดท้าย
  • ตัวอย่าง: การจำแนกหัวข้อข้อความ

แผนผังสถาปัตยกรรม: แต่ละ time step มีอินพุตใหม่ และเฉพาะเอาต์พุต y จาก time step สุดท้ายถูกระบุด้วยสีเขียวว่าถูกใช้งาน

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

สถาปัตยกรรม Vector-to-sequence

  • ป้อนอินพุตเดียว และใช้เอาต์พุตทั้งหมด
  • ตัวอย่าง: การสร้างข้อความ

แผนผังสถาปัตยกรรม: มีเพียงอินพุตเดียวที่ time step แรก และเอาต์พุต y ทุกค่าจากแต่ละ time step ถูกระบุด้วยสีเขียวว่าถูกใช้งาน

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

สถาปัตยกรรม Encoder-decoder

  • ป้อนลำดับอินพุตทั้งหมดก่อน แล้วจึงเริ่มใช้ลำดับเอาต์พุต
  • ตัวอย่าง: การแปลภาษา

แผนผังสถาปัตยกรรม: ในส่วนแรก (encoder) รับอินพุตแต่ละ time step แต่ไม่ใช้เอาต์พุต ส่วนที่สอง (decoder) ไม่รับอินพุตแต่ใช้เอาต์พุตทุก time step

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

RNN ใน PyTorch

class Net(nn.Module):
    def __init__(self):
        super().__init__()

self.rnn = nn.RNN( input_size=1, hidden_size=32, num_layers=2, batch_first=True, )
self.fc = nn.Linear(32, 1)
def forward(self, x): h0 = torch.zeros(2, x.size(0), 32)
out, _ = self.rnn(x, h0)
out = self.fc(out[:, -1, :]) return out
  • กำหนดคลาสโมเดลพร้อม method __init__
  • กำหนด recurrent layer self.rnn
  • กำหนด linear layer fc
  • ใน forward() กำหนด hidden state แรกเป็นศูนย์
  • ส่งอินพุตและ hidden state แรกผ่าน RNN layer
  • เลือกเอาต์พุตสุดท้ายของ RNN แล้วส่งผ่าน linear layer
Deep Learning ระดับกลางด้วย PyTorch

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

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

Preparing Video For Download...