Attention on Seq2seq

Pisit Bee
Boobee
Published in
2 min readAug 12, 2019

วันนี้ขอข้าม บทไปยัง Attention ก่อนนะครับ เป็นเรื่องเกี่ยวกับ Seq2seq หมายถึง sequenct to sequence Translation จำพวก Neural Machine Translations. เป็น Model โครงสร้างที่ใช้ในการแปลภาษาหนึ่งไปยังอีกภาษาหนึ่งเป็นต้น หรืออาจจะเป็นจำพวก สรุปข้อความ Summary หรือจะเป็นพวก สร้าง Chat bot ก็ได้ครับ เหตุที่ข้ามมาพูดเรื่องนี้เพราะ เดี๋ยวลืม ขอเขียนบทความจดไว้ก่อนครับ

ก่อนอื่นเลยจะขอแนะนำการทำงานของ Seq2Seq คร่าวๆ ก่อนเริ่มจาก โครงสร้างพื้นฐานของ Seq2seq จะมีโครงสร้างที่นิยมกันนั่นก็คือ จำมีส่วนของ Encoder และส่วนของ Decoder ส่วนของ Encoder จะทำหน้าที่ ก็คือ Encoder ข้อมูลที่ได้จากฝั่งของภาษาหนึ่งมาอยู่ในรูปของ encoder vector/thought vector (Block สีส้ม)และส่งไปให้กับ Decoder เพื่อทำการแกะ ออกไปยังอีกภาษาหนึ่งนั่นเอง มาดูรูปกันครับ

source: http://complx.me/2016-12-31-practical-seq2seq/

จะเห็นว่ามี Feature vector ที่ส่งผ่านกันระหว่าง Encoder และ Decoder ครับ ทีนี้ปัญหาของมันก็เกิดขึ้น เมื่อ ถ้า เรามี Sequence จำนวนยาวๆๆๆๆๆ มากๆ ตัว Feature Vector หรือ Encoder vector ที่จะส่งผ่านไปให้กับ Decoder นั้นมัน represent ได้ไม่หมด หมายถึงมัน เก็บข้อมูลได้ไม่หมด ยกตัวอย่างเช่น สมมุติว่าเราต้องการอ่าน ข้อความ 1 paragraph แล้วแปลข้อความนั้นออกมาเป็นอีกภาษา แน่นอน เราจำได้ไม่หมดครับ เช่นกัน Encoder vector มันจำได้ไม่หมด ข้อมูลแรกๆ ก็จะค่อยๆ เลือนหายไป ก็เลยเกิด เทคนิคขึ้นมาใหม่ชื่อว่า Attention ครับ สร้างขึ้นมาเพื่อ จดบันทึกว่าแต่ละ คำที่ได้ output ออกไป ได้ข้อมูลอะไรมาบ้างแล้วค่อยนำมาประมวลผลอีกครั้งตอน แปล

ถ้าให้เปรียบเทียบก็คือจดไว้ว่า คำนี้ มีผลมากน้อยไหม จดเป็น keyword ไว้ คำนี้ไม่ค่อยน่าสนใจให้ น้ำหนักมันต่ำ คำนี้น่าจะเป็นประโยชน์ ก็ให้น้ำหนักสูงๆ อะไรแบบนี้ครับ

เจ้าตัว Attention มี 2 แบบ ที่นิยมกันนั้นก็คือ เทคนิค ของ Luong ([1]Luong et al., 2015) และ Bahdanau, ([2]2015) มาดู Graphic ครับ

source: http://cnyah.com/2017/08/01/attention-variants/#Luong-attention-and-Bahdanau-attention

สังเกตุว่า ทั้ง 2 เทคนิค มีลักษณะเหมือนๆ กันนั่นก็คือเอา output ของแต่ละ Time step ของ Encoder มาคำนวนหา a_t ซึ่ง a_t คำนวนได้จาก

โดยที่

ทั้งนี้จะเห็นว่า ทั้ง 2 เทคนิคใช้สมการเดียวกัน ต่างกันตรงที่

  1. Luong attention คำนวนที่ time step t และใช้คำนวน ที่ step t เลย แต่ Bahdanau attention ใช้ hidden state ที่ time step t-1,
  2. Bahdanau attention เลือกที่จะเอาข้อมูล Context Vector ที่คำนวนได้ ไปต่อกับ Hidden vector เพื่อให้กลายเป็น Hidden vector ตัวใหม่ และ Feed เพื่อคำนวนหา output แต่ Luong attention เลือกที่จะสร้าง layer RNN ใหม่ขึ้นมา และทำ Context vector ไปต่อกับ output vector ที่คำนวนออกมาได้ ไปเป็น input ใหม่ของอีก 1 ชั้น และให้ชั้น Rnn ใหม่นี้ให้คำนวนค่า output ออกมา สรุปคือ Bahdanau เอาข้อมูล context vector ไปต่อ ในส่วนของ Hidden vector และคำนวนต่อไปเลย แต่ Luong สร้าง Layer ใหม่มา เอา context vector ไปรวมกับ output ที่ได้จาก time step ปัจจุบัน และรวมกันกลายเป็น input ใหม่และส่งให้ RNN ที่สร้างใหม่ เพื่อคำนวน output ครับ

ในส่วนของ paper ของ Thang Luong . ได้ทำการ นำเสนอ ส่วนของที่เป็น Global Attention , local-m , local-p model อีกด้วย ซึ่ง ที่อธิบายข้างต้นเป็นลักษณะแบบ Global Attention นะครับ คือ พิจารณา ข้อมูล output ที่ได้จาก Time step ทั้งหมด แต่ส่วน Local นั้น จะค่อยๆ พิจารณา เป็น subset ของ output ที่ได้ ซึ่งรายละเอียดเดี่ยวเอาไว้เล่าให้ฟัง

ส่วน ของ Implement นั้น กำลังเขียนอยู่ครับ เดี๋ยวจะนำมาเขียนใหม่คราวหน้า สวัสดี

Reference

[1] Thang Luong et al. Effective approaches to attention-based neural machine translation. 2015
[2] Dzmitry Bahdanau et al. Neural Machine Translation by Jointly Learning to Align and Translate, 2014

--

--