[CNN] ตัวอย่างการคำนวณ Batch Normalization 1D

https://pytorch.org/docs/stable/generated/torch.nn.BatchNorm1d.html

คัดลอกจาก https://blog.pjjop.org/modern-regularization-with-data-augmentation-batch-normalization-and-dropout/

Batch Normalization 

คืออะไร? 

คือ เทคนิคในการทำ Scaling Data หรือเรียกอีกอย่างหนึ่งว่าการทำ Normalization เพื่อปรับค่าข้อมูลให้อยู่ในขอบเขตที่กำหนด ก่อนส่งออกจาก Node ใน Neural Network Layer เป็น Input ของ Layer ถัดไป 

ทำตอนไหนบ้าง? 

1) เดิมเราจะทำ Normalization ในขั้นตอน Feature Engineering เช่น Normalize ด้วยการแปลงค่าสีของภาพแบบ Grayscale จาก 0-255 เป็น 0-1 โดยนำค่าสีเดิมหารด้วย 255 ฯลฯ

2) ทำในส่วน Feature Extraction โดยมักมีรูปแบบเป็น Conv-BN-ReLU

3) ทำในส่วน Classification ที่เป็น Fully-connected 

มีประโยชน์อย่างไร?

นอกจากนี้การทำ Data Normalization กับ Feature อย่างเช่น อายุ และเงินเดือน จะทำให้ทั้ง 2 Feature มีน้ำหนักเท่ากัน มีการกระจายตัวเหมือนกัน ไม่มีตัวหนึ่งตัวใดมีอิทธิพลมากกว่ากัน 

ทั้งยังเป็นการเพิ่มความเร็วในการ Train Model และทำให้ค่า Loss ลดลงเมื่อเทียบกันตอนที่ยังไม่ได้ทำ Normalization เพราะมีค่าข้อมูลที่เล็กกว่า

มีวิธีอะไรบ้าง?

ในการทำ Data Normalization เราสามารถเลือกวิธีการได้หลายวิธี เช่น การทำ Min-Max Normalization หรือการทำ Standardization เป็นต้น

ตัวอย่าง 

การทำ Standardization ด้วย torch.nn.BatchNorm1d



import torch
import torch.nn as nn

f = 2
bn = nn.BatchNorm1d(f, affine=False)

a = torch.Tensor([[1, 3],[3, 2],[8, 4]])
b = bn(a)
print(a)
print(b)
Previous
Next Post »