มารู้จัก Transformer กันเถอะ (ตอนที่ 4)


Self-Attention ดีกว่าวิธีอื่นอย่างไร และทำไมถึงต้องมาใช้ Self-Attention ในตอนนี้เราจะมาว่ากันครับ

Why Self-Attention

การใช้ Self-Attention เพียวๆ นี้ดีอย่างไร ในที่นี้เราจะมาลองเปรียบเทียบกับวิธีอื่น แล้วลองมาดู visualization ของ Self-Attention กันครับ

Comparison

เปรียบเทียบ Self-Attention กับวิธีอื่นๆ [Attention Is All You Need, Table 1]

จากตารางข้างบน คอลัมน์ Complexity per Layer คือการคำนวณที่ใช้ในแต่ละ layer คอลัมน์ต่อมาคือ sequential operation ที่จำเป็นต้องใช้ และคอลัมน์สุดท้ายคือระยะทางมากที่สุดที่ต้องส่งข้อมูลถึงกัน โดยที่ n คือความยาวของ sequence และ d คือ representation dimension ครับ

RNN

การที่ต้องส่งข้อมูลต่อกันเป็นทอดๆ นับเป็นข้อจำกัดสำคัญทั้งในด้านการคำนวณและความถูกต้องของข้อมูล ในด้านการคำนวณนั้น sequential operation ได้กีดกั้นความสามารถของ parallel computation ซึ่งเป็นหนึ่งในจุดแข็งของ deep learning ออกไป นอกจากนั้นการส่งข้อมูลต่อกันเป็นทอดๆ ก็จะเกิดปัญหา bottleneck และ vanishing gradient ดังที่กล่าวมาแล้ว เพราะฉะนั้น O(n) ในสองคอลัมน์หลังจึงถือเป็นจุดอ่อนที่สำคัญของ RNN ทีเดียวครับ

CNN

ถึงแม้ CNN จะทำ parallelization ได้ แต่การประมวลผลข้อมูลเป็นแบบ locality และกว่าที่ข้อมูลส่วนที่อยู่ไกลกันจะได้รับการประมวลผลร่วมกัน ก็ต้องผ่านไปหลายชั้นแล้ว เมื่อ k เป็นความกว้างของ receptive field ใน CNN จะได้ว่าข้อมูลทั้งหมดของ sequence จะถูกประมวลผลรวมกันในชั้นที่ O(log(n)/log(k)) ซึ่งต่างจาก Self-Attention ที่ข้อมูลถูกส่งถึงกันหมด จึงได้ maximum path length เป็น O(1) เท่านั้น

นอกจากนี้ Self-Attention ยังให้ความสำคัญกับข้อมูลแต่ละตัวได้ผ่านทางกลไก Attention ซึ่งต่างจาก CNN ที่มองเห็นข้อมูลแต่ละตัวแตกต่างกัน และมีความสำคัญพอๆ กันหมด ดังรูปด้านล่างนี้ครับ

Convolution และ Self-Attention [Łukasz Kaiser]

Self-Attention

เนื่องจาก ณ จุดๆ นึงใน Self-Attention ต้องคำนวณจากข้อมูลของทุกจุด ทำให้ใช้เวลาคำนวณเป็น O(n²d) แต่ในงาน sequence-to-sequence learning ทั่วไป ค่า n ซึ่งเป็นความยาวของ sequence จะไม่สูงมาก ทว่าค่า d อาจจะสูงมากๆ ได้ โดยทั่วไป O(n²d) จึงมีความได้เปรียบกว่า O(nd²) แต่ถ้า n มีค่ามากจริงๆ อาจจะใช้เป็น Restricted Self-Attention ที่ทำ Self-Attention กันเฉพาะในบริเวณที่ความยาว r ก็ได้ครับ

Visualization

เมื่อผ่านการเรียนรู้แล้ว Self Multi-Head Attention สามารถนำมาแสดงเป็นรูปได้ ดังเช่นตัวอย่างต่อไปนี้ครับ

Visualization of Self Multi-Head Attention [Attention Is All You Need, Figure 3]

โดยแต่ละสีแสดงถึงแต่ละหัวของ Multi-Head Attention ในที่นี้ได้เลือกคำว่า making ออกมาเพื่อดูว่าคำนี้ให้ความใส่ใจกับคำไหนในประโยคบ้าง ซึ่งก็พบว่าดูจะให้ความใส่ใจกับส่วนที่เป็น “more difficult” ซึ่งเป็นคำขยายที่ทำให้เกิดวลี “making … more difficult” ขึ้นมา

Coreference Resolution

มีคำกล่าวในวงการ NLP ที่เรียกว่า Winograd Schema ว่า ถ้าเจ้าสามารถแก้ปัญหา coreference resolution ได้อย่างไม่มีผิดพลาด นั่นเท่ากับว่าเจ้าได้เข้าใจภาษาธรรมชาติแล้ว เพราะว่าการแก้ปัญหานี้จำเป็นต้องอาศัยความเข้าใจทางภาษาเป็นอย่างมากทีเดียว และเป็นเรื่องน่าตื่นเต้นว่าการทำ Self-Attention นั้น เหมือนจะแก้ปัญหานี้ไปได้ในตัว ดังรูปด้านล่างนี้ครับ

Self-Attention ช่วยแก้ปัญหา coreference resolution [Google AI Blog]

มนุษย์เราเมื่ออ่านสองประโยคข้างบน จะรู้ได้ทันทีว่าคำว่า “it” หมายถึงอะไร แต่การจะสอนให้คอมพิวเตอร์เข้าใจนั้นยากมาก การทำ coreference resolution จึงเป็นหัวข้อวิจัยในทาง NLP มาช้านาน และงานด้าน machine translation ต้องแก้ปัญหานี้ให้ได้ด้วยเช่นกัน เช่นในการแปลจากภาษาอังกฤษเป็นภาษาฝรั่งเศส คำว่า “it” จะแปลเป็น “il” หรือ “elle” ก็ได้ ขึ้นอยู่กับว่า “it” ตัวนี้ใช้แทนคำนามเพศไหน การที่ Self-Attention ทำ coreference resolution ได้ดี จึงส่งผลให้ทำ machine translation ได้ดีตามไปด้วยครับ


ปิดท้าย

ผู้เขียนได้รู้จักเปเปอร์ Transformer จากการแนะนำของเพื่อนคนนึงเมื่อไม่กี่เดือนก่อน ขณะนั้นผู้เขียนเพิ่งเรียนจบคอร์สสุดท้ายในหลักสูตร Deep Learning Specialization ของอาจารย์ Andrew Ng ซึ่งทำให้มีความรู้เกี่ยวกับ RNN แน่นขึ้นมามาก แต่พอเจอกับเปเปอร์นี้ที่เลิกใช้ RNN โดยสิ้นเชิง ก็รู้สึกว่าอะไรกัน ฉันเพิ่งเรียนมาหมาดๆ เขาก็จะเลิกใช้กันแล้ว ราวกับว่าโลกมันหมุนเร็วขึ้นทุกวันฉันตามไม่ทันแล้วพี่บัวลอย ประมาณนี้เลยครับ

ถึงกระนั้น ผู้เขียนก็ยังเห็นว่า RNN เป็นวิธีพื้นฐานสำหรับงาน NLP และงานที่เกี่ยวกับ sequence ทั้งหลาย นอกจากนี้ยังมีความสวยงามในเชิง concept รวมทั้งนำไปใช้จริงในทางปฏิบัติก็ได้ผลดี ส่วน Transformer ก็ใช่ว่าจะประเสริฐศรีไปเสียหมด หากยังมีข้อเสียอยู่นั่นคือทำ optimization ได้ยากมาก ผู้ทำเปเปอร์ต้องประดิษฐ์ trick สำหรับเทรน Transformer ขึ้นมาหลายอย่าง เพื่อให้โมเดลนี้มันเวิร์ค ถึงขั้นที่ว่าถ้าเราปรับ parameter ผิดเพี้ยนไปนิดนึง หรือไม่ใช้เทคนิคการเทรนที่กำหนดไว้ ก็อาจทำให้ได้ผลลัพธ์ที่ไม่ดีไปได้เลย อย่างไรก็ตาม ผู้พัฒนาก็พยายามสร้างระบบ Transformer ในไลบรารี Tensor2Tensor ให้มีเสถียรภาพสูงสุด และเปิดเป็น open source เพื่อให้คนทั่วไปมาร่วมพัฒนาโมเดลนี้ให้ดียิ่งๆ ขึ้นไป

ในปีนี้เราได้เห็นเปเปอร์และระบบต่างๆ ที่ใช้ Self-Attention กันมากขึ้น กับคำถามที่ว่า Transformer จะมาแทนที่ทั้ง RNN และ CNN ได้โดยสิ้นเชิงหรือไม่ เวลาจะเป็นเครื่องพิสูจน์ต่อไปครับ


แหล่งเรียนรู้เพิ่มเติม

  • เปเปอร์หลัก
  • Google AI Blog
  • ในคอร์ส CS224n มีสไลด์ที่สรุป Transformer ได้ดีมากครับ
  • วีดีโอการบรรยายของ Łukasz Kaiser หนึ่งในผู้ทำเปเปอร์ ทำให้ได้รับรู้แง่มุมเพิ่มเติมในด้านต่างๆ เสริมจากการอ่านเปเปอร์เยอะเลย
  • ในฟากภาษาไทยจะมี lecture ของอาจารย์เอกพล ซึ่งบรรยายเรื่อง Transformer ไว้โดยละเอียด ทำให้ผู้เขียนมีความเข้าใจในเรื่องนี้มากขึ้นครับ
  • ในตอนต้นผู้เขียนได้ละรายละเอียดเกี่ยวกับ RNN ไว้ ซึ่งในทางปฏิบัติ RNN ส่วนใหญ่จะใช้ unit ที่เรียกว่า LSTM หรือไม่ก็ GRU ซึ่ง vector ของ seq2seq ในบทความนี้ ก็คือ hidden state ของ LSTM หรือ GRU สำหรับผู้ที่สนใจเรื่อง RNN อาจเริ่มต้นศึกษาจากคอร์ส Sequence Models ของอาจารย์ Andrew Ng ก็ได้ครับ

Source: Deep Learning on Medium