มาทำความรู้จัก ResNet กันดีกว่า

Original article can be found here (source): Deep Learning on Medium

มาทำความรู้จัก ResNet กันดีกว่า

สวัสดีครับทุกคน สำหรับบทความนี้ผมจะพาทุกคนมาเจาะลึกเจ้าโมเดลที่ชื่อว่า ResNet ( Deep Residual Network) ซึ่งตัวมันเองถือว่าได้รับความนิยมเป็นอย่างสูงมากในงานประเภทการเรียนรู้เชิงลึก (Deep Learning) หากเราลองสังเกตุงานวิจัยใหม่ๆที่เกี่ยวกับ Computer Vision เกือบแทบจะทุกงานมักจะนำ ResNet โมเดลมาเป็นโมเดลที่ใช้สำหรับสร้าง Features (หากใครยังไม่รู้ว่า Convolutional Neural Network สร้าง Features ได้ยังไงกดเข้าไปอ่านได้เลย)

Deep Residual Network

  • ชื่อเต็มของ ResNet คือ Deep Residual Network ได้รับการนำเสนอครั้ง แรกในงานวิจัยชื่อ Deep Residual Learning for Image Recognition
  • ได้รับการอ้างอิง 3,700 ครั้ง ในฐานข้อมูล Scopus
  • 41,537 ครั้ง ใน Google Scholar (Jan 2016 — Mar 2020)
  • นำเสนอวิธีการแก้ปัญหาเรื่อง Vanishing gradient ซึ่งเกิดขึ้นกับโครงข่ายที่ มีความลึกค่อนข้างมาก ด้วยการใส่ทางลัด (shortcut) ลงในโครงข่าย

Vanishing Gradient

  • สมมติว่าผลลัพธ์จากเลเยอร์แบบคอนโวลูชันอันแรกอยู่ในอาเรย์ x ต่อมาเรามี ชั้นคอนโวลูชันสองอันเพิ่มเติมตามมา
  • โดยปกติผลกระทบจาก x จะเริ่มเลือนหาย ติดตามได้ยากว่าการเปลี่ยน ค่าพารามิเตอร์ในเลเยอร์แรกจะให้ผลอะไร เพราะถูกกลืนไปกับเลเยอร์ถัดมา
  • เราแก้ปัญหานี้ได้ด้วยการส่งผ่านค่า x ลัดชั้นขึ้นมา แล้วเอาไปบวกกับผล จากเลเยอร์ที่สาม ดังภาพข้างล่างนี้
ถ้าโครงข่ายมันลึก เราจะ ทำาซ้ำวิธีการนี้ไปเรื่อย ๆ จนถึงปลายทาง (Credit: K. He et al)

อย่างไรก็ตามแต่การนำเลเยอร์มาบวกกัน ขนาดต้องเท่ากัน

Credit: K. He et al
  • พิจารณาโครงข่ายทั้งสอง ทางฝั่งซ้ายนั้นจำนวนฟีทเจอร์แม็พมี 64 เท่ากัน ตลอดสายจึงบวกกันได้ทันที แต่ทางขวา เริ่มมามี 256 แล้วลดเหลือ 64
  • เราปรับจำนวนฟีทเจอร์แม็พด้วยการใช้ฟิลเตอร์ขนาด 1×1 ได้
  • โครงสร้างการปรับจำนวนไปมาแบบนี้ เราเรียกว่า bottleneck building block

Filter 1×1

  • ที่จริงฟิลเตอร์จะขนาด 1×1 หรือ 3×3 พวกนี้มีหลักการทำงานเหมือนกันหมด เพียงแต่เรามักจะคิดไม่ถึงว่า 1×1 มันมีประโยชน์
  • อันดับแรกมาดูก่อนว่าถ้าเรามีอินพุตเป็นภาพสี RGB ซึ่งเปรียบได้กับการ มีฟีทเจอร์แม็พ 3 อันจะเกิดอะไรขึ้น (ภาพซ้ายล่าง)
  • สมมติว่าเราต้องการฟีทเจอร์แม็พผลลัพธ์เพียง 1 อัน โดยใช้ฟิลเตอร์ 1×1 นั่นคือตอนเข้ามามี 3 ตอนออกไปมี 1 ฟีทเจอร์แม็พ
  • ฟิลเตอร์ 1×1 นี้จะถูกใช้กับฟีทเจอร์แม็พทั้งสามอันดังภาพขวา แต่ค่าน้ำหนักที่คูณกันแต่ละแม็พจะไม่เท่ากัน

ค่าน้ำหนักของฟิลเตอร์ขนาด 1×1

  • เราคิดว่าเรามีค่าบนฟิลเตอร์เพียงค่าเดียว แต่อันที่จริงแล้ว ค่าน้ำหนักที่จะผูกอยู่กับฟีทเจอร์แม็พแต่ละอันแตกต่างกันได้
  • ในภาพข้างล่างนี้ แสดงออกมาให้เห็นว่าฟีทเจอร์ R, G, และ B ต่างก็ได้รับค่า น้ำหนักที่แตกต่างกันไป
  • ถ้าจะให้ยกตัวอย่างตัวเลข ก็อาจจะพูดได้ว่า ถ้าเราให้ค่าน้ำหนักสีแดงคือ 0.3, เขียว 0.5, และ น้ำเงิน 0.2 แบบนี้เราจะได้ฟีทเจอร์แม็พผลลัพธ์เป็น

Output = 0.3𝑅 + 0.5𝐺 + 0.2B

ResNet Architecture

  • ตัวโครงข่ายนี้จะประกอบด้วย 4 บล็อกใหญ่ (stage) จำนวนเลเยอร์ที่มี พารามิเตอร์สำหรับการฝึกทั้งหมดจะกลายเป็นจำนวนชั้นที่เราใช้เรียกชื่อ
  • เช่น ResNet34 ในเปเปอร์หมายความว่ามีจำนวนเลเยอร์ในบล็อกใหญ่ 32 ชั้น + ชั้8/li>
  • เนื่องจากโครงสร้างของ ResNet นั้นจัดให้เป็น คอนโวลูชันสองชั้นติดและมีเส้นเชื่อมกระโดดข้าม ดังนั้นเวลาบอกจำนวนในแต่ละบล็อกใหญ่ เรามัก จะบอกเป็นเลขหารสองแทน
  • ภาพด้านบนนี้เป็นบล็อกใหญ่แรกใน ResNet34 ซึ่งเราอธิบายขนาดของบล็อกนี้ด้วยค่า 3
  • ResNet34 ในเปเปอร์จึงถูกอธิบายขนาดเป็น [3, 4, 6, 3] ซึ่งหมายถึงจำนวนคู่ในบล็อกทั้ง 4
  • โครงสร้างที่เป็นที่นิยมส่วนใหญ่จะมีจำนวนชั้นเป็น 18, 34, 50, 101, 152

เดี๋ยวก่อนทำไมมี ResNet ที่ชั้นเป็นเล8/p>

  • ก่อนหน้านี้เรากล่าวถึงโครงสร้างของ ResNet ว่าประกอบด้วย 4 บล็อกใหญ่ ซึ่งองค์ประกอบย่อยข้างในจะมาเป็นคู่ และมีชั้นภายนอกอีก 2 ชั้น
  • แบบนี้จำนวนชั้นรวมยังไงก็ต้องเป็นเลขคู่ แล้ว ResNet101 นี่มายังไง
  • คำตอบของข้อนี้มาจากเหตุที่ว่าองค์ประกอบย่อยนั้นมีทั้งแบบพื้นฐานที่มา เป็นคู่ และแบบ bottleneck ที่มาเป็นแพ็ค 3
  • เรานิยมใช้แบบ bottleneck เมื่อจำนวนชั้นถึง 50 ดังนั้นเราจะอธิบายขนาด ใน ResNet50 เป็น [3, 4, 6, 3] ซึ่งก็คือ (3+4+6+3)x3 = 48 ชั้น
  • ResNet101 แท้จริงก็คือ [3, 4, 23, 3] -> (3+4+23+3)x3 = 99 ชั้น
  • ResNet152 และ 200 ก็มา แบบเดียวกันคือใช้ bottleneck อยู่ข้างใน

Reference

[1] ResNet50: https://arxiv.org/pdf/1512.03385.pdf

[2] Deep Learning Course: Silpakorn University, Pinyo Taeprasartsit