# ทรานส์ฟอร์เมอร์
ทรานส์ฟอร์เมอร์ (transformer) เป็นแบบจำลองการเรียนรู้เชิงลึก ที่เผยแพร่โดยนักวิจัยของกูเกิลเมื่อวันที่ 12 มิถุนายน 2017 มีการนำมาประยุกต์ใช้อย่างกว้างขวาง โดยเฉพาะในสาขาการประมวลภาษาธรรมชาติ

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

นับตั้งแต่ได้รับการเผยแพร่ แบบจำลองทรานส์ฟอร์เมอร์ได้รับการนำมาใช้งานอย่างกว้างขวางเพื่อแก้ไขปัญหามากมายในการประมวลผลภาษาธรรมชาติ โดยแทนที่แบบจำลองโครงข่ายประสาทแบบเวียนซ้ำแบบเก่า เช่น หน่วยความจำระยะสั้นแบบยาว (LSTM) แบบจำลองทรานส์ฟอร์เมอร์มีส่วนช่วยให้สามารถทำการคำนวณแบบขนานระหว่างการฝึก ช่วยให้สามารถฝึกชุดข้อมูลขนาดใหญ่ได้ ซึ่งนำไปสู่การพัฒนาระบบฝึกล่วงหน้า เช่น BERT (Bidirectional Encoder Representations from Transformers) และ GPT (Generative Pre-trained Transformer) แบบจำลองได้รับการฝึกโดยชุดข้อมูลภาษาทั่วไปขนาดใหญ่เพื่อสร้างแบบจำลองรากฐาน และนำไปทำการปรับละเอียดให้เข้ากับงานภาษาเฉพาะได้

 การออกแบบพื้นฐาน 
เช่นเดียวกับแบบจำลองที่ประดิษฐ์ขึ้นก่อนหน้านี้ ทรานส์ฟอร์เมอร์เป็นโครงสร้างที่ประกอบไปด้วยตัวเข้ารหัสและตัวถอดรหัส ตัวเข้ารหัสประกอบด้วยชุดของชั้นเข้ารหัสที่ประมวลผลค่าป้อนเข้าซ้ำ ๆ กัน และตัวถอดรหัสประกอบด้วยชุดของชั้นถอดรหัสที่ทำสิ่งเดียวกันกับข้อมูลขาออกจากตัวเข้ารหัส

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

แต่ละชั้นตัวถอดรหัสทำสิ่งที่ตรงกันข้าม: โดยรับข้อมูลจากตัวเข้ารหัสทั้งหมดมา แล้วนำมาจัดการประมวลผล ใช้ข้อมูลบริบทที่ฝังไว้เพื่อสร้างลำดับขาออก

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

 หน่วยความใส่ใจ 
ส่วนประกอบพื้นฐานของทรานส์ฟอร์เมอร์ คือหน่วยความใส่ใจ ซึ่งผ่านการคำนวณโดยผลคูณจุดแล้วปรับสเกล (Scaled dot-product attention unit) เมื่อข้อความถูกป้อนเข้าให้กับแบบจำลองทรานส์ฟอร์เมอร์ ค่าน้ำหนักความใส่ใจจะถูกคำนวณจากโทเค็นทั้งหมดพร้อมกัน หน่วยความใส่ใจจะสร้างการฝังโทเค็นทุกรายการภายในบริบท ซึ่งไม่เพียงแต่รวมถึงข้อมูลเกี่ยวกับตัวโทเค็นนั้นเท่านั้น แต่ยังรวมถึงความเชื่อมโยง (ถ่วงน้ำหนักด้วยน้ำหนักความใส่ใจ) กับโทเค็นอื่น ๆ ที่เกี่ยวข้องด้วย

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

พารามิเตอร์น้ำหนักเควียรี  และพารามิเตอร์น้ำหนักคีย์  เป็นเมทริกซ์ที่แตกต่างกัน และอาจไม่จำเป็นต้องสมมาตร นั่นคือแม้โทเค็นตัวที่  จะมุ่งความใส่ใจไปที่โทเค็นตัวที่  (นั่นคือ  มีขนาดใหญ่) แต่โทเคนตัวที่  ก็อาจไม่จำเป็นต้องให้ความใส่ใจกับโทเคนตัวที่   (นั่นคือ  ไม่จำเป็นต้องใหญ่โต) ค่าขาออกของหน่วยความใส่ใจที่มีต่อโทเค็นตัวที่  นั้นเป็นผลรวมถ่วงน้ำหนักของเวกเตอร์ค่าของโทเค็นทั้งหมด

การคำนวณความใส่ใจโทเค็นทั้งหมดสามารถแสดงในรูปการคำนวณเมทริกซ์ขนาดใหญ่รายการเดียวได้ ซึ่งมีส่วนช่วยอย่างมากในการฝึกแบบจำลอง ทำให้สามารถฝึกได้อย่างรวดเร็ว

การคำนวณภายในหน่วยความใส่ใจของทรานส์ฟอร์เมอร์เขียนเป็นสูตรได้ว่าในที่นี้ , ,  คือเมทริกซ์ของเควียรี, คีย์, ค่า โดยเวกเตอร์เควียรี , เวกเตอร์คีย์ , เวกเตอร์ค่า  จะแสดงถึงแถวที่  ของเมทริกซ์ , , 

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

 ชั้นย่อยป้อนไปข้างหน้าแบบตามจุด 

ที่ส่วนชั้นย่อยป้อนไปข้างหน้าแบบตามจุด (point-wise feed-forward) ใช้โครงข่ายเชื่อมต่อสมบูรณ์แบบป้อนไปข้างหน้ากับเวกเตอร์ขาเข้า  ที่ตำแหน่ง "In addition to attention sub-layers, each of the layers in our encoder and decoder contains a fully connected feed-forward networkk, which is applied to each position separately and identically." from original paper. พารามิเตอร์น้ำหนัก  และ  ไม่ขึ้นกับตำแหน่ง  (น้ำหนักต่างกันสำหรับแต่ละชั้น)"While the linear transformations are the same across different positions, they use different parameters from layer to layer." original paper. กล่าวคือ จะดำเนินการประมวลผลเทียบเท่ากับชั้นสังวัตนาการแบบตามจุด (ซึ่งมีขนาดเคอร์เนลเป็น 1) 2 ชั้นในทิศทางตำแหน่ง"Another way of describing this is as two convolutions with kernel size 1." from original paper.

โครงสร้างเชื่อมต่อสมบูรณ์สามารถทำการคำนวณแบบคู่ขนานภายในชั้นได้ ดังนั้นชั้นย่อยนี้สามารถทำการคำนวณแบบขนานในทิศทางของตำแหน่ง ทำให้สามารถเรียนรู้แบบคู่ขนานในระดับสูง ซึ่งนี่เป็นเป้าหมายหลักอย่างหนึ่งของทรานส์ฟอร์เมอร์"The Transformer allows for significantly more parallelization" from original paper

เนื่องจากชั้นย่อยถูกใช้ภายในการเชื่อมต่อส่วนเหลือ จึงเป็นการดีที่จะให้มิติของขาเข้าและขาออกเท่ากัน ในงานวิจัยต้นฉบับใช้ขนาดขาเข้าและขาออกเป็น "To facilitate these residual connections, all sub-layers in the model ... produce outputs of dimension dmodel = 512." from original paper ขนาดของชั้นกลางมีขนาดใหญ่กว่าขาเข้าและขาออก"the inner-layer has dimensionality dff = 2048." from original paper

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

ตัวเข้ารหัสตัวแรกจะรับข้อมูลตำแหน่งและการฝังลำดับขาเข้าเป็นข้อมูลป้อนเข้า ข้อมูลตำแหน่งเป็นสิ่งจำเป็นสำหรับทรานส์ฟอร์เมอร์ในการระบุข้อมูลตำแหน่งของข้อมูลป้อนเข้า เนื่องจากไม่มีส่วนอื่นใดให้ข้อมูลตำแหน่ง

 ตัวถอดรหัส 
ตัวถอดรหัสแต่ละตัวประกอบด้วย 3 ส่วน ได้แก่ กลไกความใส่ใจตัวเอง กลไกความใส่ใจที่เกี่ยวข้องกับการเข้ารหัส และชั้นย่อยป้อนไปข้างหน้า ตัวถอดรหัสทำหน้าที่คล้ายกับตัวเข้ารหัส โดยแทรกกลไกความใส่ใจเพิ่มเติมเพื่อดึงข้อมูลที่เกี่ยวข้องจากการเข้ารหัสที่สร้างโดยตัวเข้ารหัส

เช่นเดียวกับตัวเข้ารหัสตัวแรก ตัวถอดรหัสตัวแรกจะได้รับค่าเป็นข้อมูลตำแหน่งขาเข้าและการฝังลำดับขาออก แทนที่จะเป็นการเข้ารหัส อย่างไรก็ตาม ภายในทรานส์ฟอร์เมอร์ไม่ควรใช้ค่าขาออกปัจจุบันหรือในอนาคตเพื่อคาดการณ์ขาออก ดังนั้นลำดับขาออกจึงควรถูกปกปิดบางส่วนเพื่อป้องกันการไหลของข้อมูลย้อนกลับ

ตัวถอดรหัสตัวสุดท้ายจะตามด้วยการแปลงเชิงเส้นขั้นสุดท้ายและชั้นซอฟต์แมกซ์ เพื่อสร้างความน่าจะเป็นสำหรับคำศัพท์ ซึ่งเป็นผลลัพธ์สุดท้ายที่ต้องการ

 รูปแบบทางเลือก 
การฝึกสถาปัตยกรรมที่ใช้ทรานส์ฟอร์เมอร์อาจใช้ทรัพยากรมาก โดยเฉพาะประโยคยาว ๆ มีสถาปัตยกรรมที่เรียกว่า รีฟอร์เมอร์ (Reformer) ถูกสร้างขึ้นมาเป็นทางเลือก โดยอ้างว่าช่วยลดภาระในการคำนวณ  จาก  (โดยที่  คือความยาวของลำดับ) รีฟอร์เมอร์ใช้ locality sensitive hashing และชั้นที่พลิกกลับได้

 การฝึก 
โดยทั่วไปแล้ว ทรานส์ฟอร์เมอร์จะผ่านการเรียนรู้แบบกึ่งมีผู้สอน (การฝึกล่วงหน้าด้วยการเรียนรู้แบบไม่มีผู้สอน ตามด้วยการปรับละเอียดด้วยการเรียนรู้แบบมีผู้สอน) เนื่องจากข้อมูลการฝึกที่มีฉลากกำกับมีอยู่จำกัด การฝึกล่วงหน้าจึงมักดำเนินการกับชุดข้อมูลที่มีขนาดใหญ่ งานก่อนการเรียนรู้และการปรับแต่งมีดังนี้

 การทำนายคำถัดไป
 การตอบคำถาม
 การอ่านตีความ
 การวิเคราะห์ความรู้สึก
 การสรุปความอัตโนมัติ

 การเขียนโปรแกรม 
แบบจำลองทรานส์ฟอร์เมอร์ได้รับการบรรจุอยู่ในเฟรมเวิร์กการเรียนรู้เชิงลึกที่สำคัญ เช่น TensorFlow และ PyTorch สำหรับเขียนด้วยภาษาไพธอน

 การประยุกต์ใช้ 
ทรานส์ฟอร์เมอร์ถูกนำมาใช้เป็นหลักในด้าน การประมวลภาษาธรรมชาติ เช่น การแปลด้วยเครื่อง และ การทำนายอนุกรมเวลา แบบจำลองที่ได้รับการฝึกล่วงหน้าจำนวนมาก เช่น GPT (GPT-1, GPT-2, GPT-3, GPT-4, ChatGPT), BERT, XLNet, RoBERTa ฯลฯ ล้วนมีพื้นฐานจากทรานส์ฟอร์เมอร์

ในปี 2020 ยังพบว่า GPT-2 ซึ่งใช้โครงสร้างทรานส์ฟอร์เมอร์สามารทำการปรับละเอียดให้ใช้เล่นหมากรุกได้ด้วย

วิชันทรานส์ฟอร์เมอร์ ซึ่งสร้างขึ้นจากสถาปัตยกรรมทรานส์ฟอร์เมอร์ เผยแพร่โดยทีมวิจัยของกูเกิลในปี 2020 ได้รับการนำมาใช้ในด้านคอมพิวเตอร์วิทัศน์ และบรรลุผลสำเร็จที่เหนือกว่าโครงข่ายประสาทเทียมแบบสังวัตนาการ