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

ppp mena
mena.ai
Published in
3 min readJun 22, 2018

ในตอนที่ 3 นี้เราจะมาดู Transformer แบบเต็มๆ กันครับ

Transformer Model

The Transformer [Attention Is All You Need, Figure 1]

Transformer Model นี้ จะยังคงแบ่งเป็นสองฝั่งอยู่ โดยฝั่งซ้ายจะเป็น encoder ที่รับ input sequence เข้ามา ส่วนฝั่งขวาคือ decoder ที่รับ output sequence โดยในขั้นตอนการเทรนนี้ output sequence จะถูกเลื่อนไปทางขวาหนึ่งตำแหน่ง ซึ่งเป็นการเทรนแบบ teacher forcing นั่นเองครับ

Embedding & Positional Encoding

จากนั้นจะเข้าสู่การทำ embedding (กล่องสีชมพู) ที่เป็นขั้นตอนพื้นฐานสำหรับงาน NLP แทบทุกประเภท โดยสามารถทำ embedding ได้หลายรูปแบบ ในเปเปอร์นี้ได้ใช้วิธี Byte-Pair Encoding ซึ่งปัจจุบันใช้กันแพร่หลายในงาน neural machine translation ครับ

เนื่องจากในที่นี้เป็นการทำ Attention เพียงอย่างเดียว โดยไม่ได้ใช้ RNN หรือ CNN แล้ว ทำให้ข้อมูลเกี่ยวกับตำแหน่งสูญหายไป จึงมีการใส่ Positional Encoding เข้ามาด้วย โดยใช้ periodic function ซึ่งก็คือ sin และ cos ที่ความถี่ต่างๆ กัน มาหาค่าในแต่ละตำแหน่งดังนี้ครับ

โดยที่ pos ก็คือตำแหน่ง และ 2i กับ 2i+1 คือแต่ละ dimension ของ position vector หรืออาจแสดงเป็นรูปคร่าวๆ เพื่อให้เข้าใจได้ง่ายขึ้นดังนี้ครับ

ตัวอย่าง Positional Encoding [ricardokleinklein.github.io]

ในที่นี้ position vector ของตำแหน่ง p ตัวที่ j จะได้จากค่าของ periodic function ตัวที่ j ในตำแหน่ง p โดยช่วงความถี่สูงจะแยกแยะตำแหน่งที่อยู่ใกล้กัน และช่วงความถี่ต่ำจะแยกแยะตำแหน่งที่อยู่ไกล ซึ่งการทำ Positional Encoding แบบนี้ เป็นการใช้ข้อมูลเชิงความถี่มาประกอบกันครับ

Encoder

ส่วนของ Encoder [Attention Is All You Need, Figure 1]

ในแต่ละ block ของ encoder จะประกอบไปด้วยสอง layer ใหญ่ๆ โดย layer แรกจะมี Multi-Head Attention (กล่องสีส้ม) ที่ได้อธิบายไปแล้ว เป็น sub-layer หลัก จะเห็นว่า input ที่เข้ามาสู่ sub-layer นี้ เป็นลูกศรสามหัว ซึ่งแต่ละหัวก็คือ V, K, Q นั่นเอง ส่วน layer ถัดไป (กล่องสีฟ้า) จะเป็น position-wise fully connected feed-forward network สองชั้น ซึ่ง position-wise network ในที่นี้คือสิ่งเดียวกับ 1x1 convolutional network ครับ

ข้อมูลขาเข้าของ layer เหล่านี้ (x) จะถูกส่งผ่านทางลัดเป็น residual connection เข้ามาสมทบกับผลลัพธ์ที่ออกมาจาก sub-layer หลัก จากนั้นจะทำ layer normalization กับผลลัพธ์นี้อีกทีนึง ในที่สุดแล้วผลลัพธ์ของแต่ละ layer ก็คือ

โดยที่ทั้ง block นี้จะซ้อนกันไปเรื่อยๆ หลายชั้น ตามสไตล์ของ deep learning ซึ่งใน Transformer ได้เลือกใช้จำนวนชั้นเท่ากับ 6 และเพื่อความง่ายในการคำนวณ ทั้ง embedding กับผลลัพธ์จากทุก sub-layer จะมีจำนวน dimension เป็น 512 ครับ

Decoder

ส่วนของ Decoder [Attention Is All You Need, Figure 1]

แต่ละ block ของ decoder มีสาม layer ใหญ่ๆ โดย layer ล่างและ layer บน จะเหมือนกับทางฝั่ง encoder เลยครับ เว้นเสียแต่ว่าที่ layer ล่าง จะเป็น Masked Self-Attention ส่วน layer ตรงกลาง จะเป็น Encoder-Decoder Attention ซึ่งรับ V และ K มาจาก encoder และใช้ข้อมูลจาก decoder เป็น Q

ในส่วนของ decoder จะประกอบด้วย block เรียงกันไป 6 ชั้น เท่ากับของ encoder โดยผลลัพธ์จาก block สุดท้ายของ encoder จะถูกส่งเข้ามาที่ layer ตรงกลางของแต่ละ block และผลลัพธ์ที่ออกจาก block สุดท้ายของ decoder จะถูกนำเข้า softmax เพื่อผลิตเป็น output ออกไป

Animation

สุดท้ายนี้เป็น animation ที่แสดงให้เห็นการทำงานของ Transformer ครับ

animation การทำงานของ Transformer [Google AI Blog]

--

--