ทรานส์ฟอร์เมอร์
ส่วนหนึ่งของเนื้อหา |
การเรียนรู้ของเครื่อง และ การทำเหมืองข้อมูล |
---|
![]() |

ทรานส์ฟอร์เมอร์ (transformer) เป็นแบบจำลองการเรียนรู้เชิงลึก ที่เผยแพร่โดยนักวิจัยของกูเกิลเมื่อวันที่ 12 มิถุนายน 2017 มีการนำมาประยุกต์ใช้อย่างกว้างขวาง โดยเฉพาะในสาขาการประมวลภาษาธรรมชาติ[1]
เช่นเดียวกับ โครงข่ายประสาทแบบเวียนซ้ำ (RNN) สถาปัตยกรรมทรานส์ฟอร์เมอร์ได้รับการออกแบบมาเพื่อจัดการข้อมูลอนุกรมเวลา เช่น ภาษาธรรมชาติ เพื่อดำเนินการต่าง ๆ เช่น การแปล และ การสรุปความอัตโนมัติ แต่ในกรณีของทรานส์ฟอร์เมอร์นั้น สามารถทำการประมวลข้อมูลทั้งหมดในอนุกรมเวลาพร้อมกันโดยไม่ต้องตามลำดับได้ ตัวอย่างเช่น หากข้อมูลที่ป้อนเป็นประโยคภาษาธรรมชาติ ก็ไม่จำเป็นต้องประมวลผลตั้งแต่ต้นจนจบประโยค ด้วยเหตุนี้ทรานส์ฟอร์เมอร์จึงยอมให้มีการคำนวณแบบขนานได้มากกว่าโครงข่ายประสาทแบบเวียนซ้ำ ซึ่งทำให้ช่วยลดเวลาในการฝึกแบบจำลองลงไปได้มาก[1]
นับตั้งแต่ได้รับการเผยแพร่ แบบจำลองทรานส์ฟอร์เมอร์ได้รับการนำมาใช้งานอย่างกว้างขวางเพื่อแก้ไขปัญหามากมายในการประมวลผลภาษาธรรมชาติ โดยแทนที่แบบจำลองโครงข่ายประสาทแบบเวียนซ้ำแบบเก่า เช่น หน่วยความจำระยะสั้นแบบยาว (LSTM) แบบจำลองทรานส์ฟอร์เมอร์มีส่วนช่วยให้สามารถทำการคำนวณแบบขนานระหว่างการฝึก ช่วยให้สามารถฝึกชุดข้อมูลขนาดใหญ่ได้ ซึ่งนำไปสู่การพัฒนาระบบฝึกล่วงหน้า เช่น BERT (Bidirectional Encoder Representations from Transformers) และ GPT (Generative Pre-trained Transformer) แบบจำลองได้รับการฝึกโดยชุดข้อมูลภาษาทั่วไปขนาดใหญ่เพื่อสร้างแบบจำลองรากฐาน และนำไปทำการปรับละเอียดให้เข้ากับงานภาษาเฉพาะได้[2][3]
การออกแบบพื้นฐาน
[แก้]เช่นเดียวกับแบบจำลองที่ประดิษฐ์ขึ้นก่อนหน้านี้ ทรานส์ฟอร์เมอร์เป็นโครงสร้างที่ประกอบไปด้วยตัวเข้ารหัสและตัวถอดรหัส ตัวเข้ารหัสประกอบด้วยชุดของชั้นเข้ารหัสที่ประมวลผลค่าป้อนเข้าซ้ำ ๆ กัน และตัวถอดรหัสประกอบด้วยชุดของชั้นถอดรหัสที่ทำสิ่งเดียวกันกับข้อมูลขาออกจากตัวเข้ารหัส
หน้าที่ของชั้นเข้ารหัสแต่ละชั้นคือการประมวลผลข้อมูลขาเข้าและสร้างการเข้ารหัส รวมถึงข้อมูลเกี่ยวกับส่วนของข้อมูลขาเข้าที่เกี่ยวข้องกัน ชั้นเข้ารหัสแต่ละชั้นจะส่งผ่านลำดับของการเข้ารหัสแล้วใช้เป็นค่าขาเข้าป้อนไปยังชั้นตัวเข้ารหัสถัดไป
แต่ละชั้นตัวถอดรหัสทำสิ่งที่ตรงกันข้าม: โดยรับข้อมูลจากตัวเข้ารหัสทั้งหมดมา แล้วนำมาจัดการประมวลผล ใช้ข้อมูลบริบทที่ฝังไว้เพื่อสร้างลำดับขาออก[4]
เพื่อให้บรรลุเป้าหมายนี้ แต่ละชั้นของตัวเข้ารหัสและตัวถอดรหัสจะใช้กลไกความใส่ใจ โดยกลไกความใส่ใจจะกำหนดน้ำหนักแต่ละขาเข้าตามความสัมพันธ์กับข้อมูลขาเข้าอื่น ๆ ทั้งหมด แล้วดึงข้อมูล สร้างข้อมูลขาออก[5] ชั้นถอดรหัสแต่ละชั้นมีกลไกความใส่ใจเพื่อรับข้อมูลจากชั้นถอดรหัสก่อนหน้า ก่อนที่จะรับข้อมูลจากชั้นเข้ารหัส ทั้งชั้นเข้ารหัสและชั้นถอดรหัสประกอบด้วยโครงข่ายประสาทเทียมแบบป้อนไปข้างหน้าเพื่อประมวลผลค่าขาออกเพิ่มเติม
หน่วยความใส่ใจ
[แก้]ส่วนประกอบพื้นฐานของทรานส์ฟอร์เมอร์ คือหน่วยความใส่ใจ ซึ่งผ่านการคำนวณโดยผลคูณจุดแล้วปรับสเกล (Scaled dot-product attention unit) เมื่อข้อความถูกป้อนเข้าให้กับแบบจำลองทรานส์ฟอร์เมอร์ ค่าน้ำหนักความใส่ใจจะถูกคำนวณจากโทเค็นทั้งหมดพร้อมกัน หน่วยความใส่ใจจะสร้างการฝังโทเค็นทุกรายการภายในบริบท ซึ่งไม่เพียงแต่รวมถึงข้อมูลเกี่ยวกับตัวโทเค็นนั้นเท่านั้น แต่ยังรวมถึงความเชื่อมโยง (ถ่วงน้ำหนักด้วยน้ำหนักความใส่ใจ) กับโทเค็นอื่น ๆ ที่เกี่ยวข้องด้วย
แบบจำลองทรานส์ฟอร์เมอร์ จะทำการเรียนรู้ 3 อย่างคือ เมทริกซ์น้ำหนักเควียรี , เมทริกซ์น้ำหนักคีย์ และ เมทริกซ์น้ำหนักค่า สำหรับแต่ละหน่วยความใส่ใจ เมื่อคูณค่าป้อนเข้า จากชั้นการฝังคำด้วยเมทริกซ์น้ำหนักสำหรับโทเค็นที่ แต่ละตัวแล้ว จะได้เวกเตอร์เควียรี , เวกเตอร์คีย์ , เวกเตอร์ค่า น้ำหนักความใส่ใจ เป็นผลคูณจุดของเวกเตอร์เควียรี กับเวกเตอร์คีย์ แล้วหารด้วยรากที่สองของจำนวนมิติ เพื่อรักษาเสถียรภาพของความชัน จากนั้นผลรวมน้ำหนักจะถูกทำให้เป็น 1 โดยใช้ฟังก์ชันซอฟต์แมกซ์
พารามิเตอร์น้ำหนักเควียรี และพารามิเตอร์น้ำหนักคีย์ เป็นเมทริกซ์ที่แตกต่างกัน และอาจไม่จำเป็นต้องสมมาตร นั่นคือแม้โทเค็นตัวที่ จะมุ่งความใส่ใจไปที่โทเค็นตัวที่ (นั่นคือ มีขนาดใหญ่) แต่โทเคนตัวที่ ก็อาจไม่จำเป็นต้องให้ความใส่ใจกับโทเคนตัวที่ (นั่นคือ ไม่จำเป็นต้องใหญ่โต) ค่าขาออกของหน่วยความใส่ใจที่มีต่อโทเค็นตัวที่ นั้นเป็นผลรวมถ่วงน้ำหนักของเวกเตอร์ค่าของโทเค็นทั้งหมด
การคำนวณความใส่ใจโทเค็นทั้งหมดสามารถแสดงในรูปการคำนวณเมทริกซ์ขนาดใหญ่รายการเดียวได้ ซึ่งมีส่วนช่วยอย่างมากในการฝึกแบบจำลอง ทำให้สามารถฝึกได้อย่างรวดเร็ว
การคำนวณภายในหน่วยความใส่ใจของทรานส์ฟอร์เมอร์เขียนเป็นสูตรได้ว่าในที่นี้ , , คือเมทริกซ์ของเควียรี, คีย์, ค่า โดยเวกเตอร์เควียรี , เวกเตอร์คีย์ , เวกเตอร์ค่า จะแสดงถึงแถวที่ ของเมทริกซ์ , ,
กลไกความใส่ใจแบบหลายหัว
[แก้]เมทริกซ์ชุดหนึ่ง เรียกว่า หัวความใส่ใจ (attention head) และแต่ละชั้นของแบบจำลองทรานส์ฟอร์เมอร์จะมีหัวความใส่ใจหลายหัว ส่วนหัวความใส่ใจหนึ่งหัวให้ความใส่ใจกับโทเค็นที่เกี่ยวข้องกับแต่ละโทเค็น แต่การใช้ส่วนหัวความใส่ใจหลายหัวทำให้แบบจำลองสามารถดำเนินการที่คล้ายกันกับความเกี่ยวพันที่นิยามแบบต่าง ๆ ได้ การวิจัยแสดงให้เห็นว่าหัวความใส่ใจจำนวนมากใน ทรานส์ฟอร์เมอร์สามารถเข้ารหัสความสัมพันธ์ในแบบที่มนุษย์สามารถตีความได้ ตัวอย่างเช่น มีหัวความใส่ใจที่มุ่งความใส่ไปไปที่คำถัดไปเป็นหลัก และหัวความใส่ใจที่มุ่งความใส่ใจจากคำกริยาไปยังกรรมโดยตรง[6] เนื่องจากแบบจำลอง ทรานส์ฟอร์เมอร์ มีหัวความใส่ใจหลายหัว จึงสามารถจับความสัมพันธ์การเชื่อมโยงได้หลายระดับและหลายประเภท ตั้งแต่ผิวเผินไปจนถึงความหมาย ขาออกหลายรายการจากชั้นความใส่ใจแบบหลายหัวจะถูกต่อเข้าด้วยกันและส่งผ่านไปยังชั้นโครงข่ายประสาทแบบป้อนไปข้างหน้า
ชั้นย่อยป้อนไปข้างหน้าแบบตามจุด
[แก้]
ที่ส่วนชั้นย่อยป้อนไปข้างหน้าแบบตามจุด (point-wise feed-forward) ใช้โครงข่ายเชื่อมต่อสมบูรณ์แบบป้อนไปข้างหน้ากับเวกเตอร์ขาเข้า ที่ตำแหน่ง [7] พารามิเตอร์น้ำหนัก และ ไม่ขึ้นกับตำแหน่ง (น้ำหนักต่างกันสำหรับแต่ละชั้น)[8] กล่าวคือ จะดำเนินการประมวลผลเทียบเท่ากับชั้นสังวัตนาการแบบตามจุด (ซึ่งมีขนาดเคอร์เนลเป็น 1) 2 ชั้นในทิศทางตำแหน่ง[9]
โครงสร้างเชื่อมต่อสมบูรณ์สามารถทำการคำนวณแบบคู่ขนานภายในชั้นได้ ดังนั้นชั้นย่อยนี้สามารถทำการคำนวณแบบขนานในทิศทางของตำแหน่ง ทำให้สามารถเรียนรู้แบบคู่ขนานในระดับสูง ซึ่งนี่เป็นเป้าหมายหลักอย่างหนึ่งของทรานส์ฟอร์เมอร์[10]
เนื่องจากชั้นย่อยถูกใช้ภายในการเชื่อมต่อส่วนเหลือ จึงเป็นการดีที่จะให้มิติของขาเข้าและขาออกเท่ากัน ในงานวิจัยต้นฉบับใช้ขนาดขาเข้าและขาออกเป็น [11] ขนาดของชั้นกลางมีขนาดใหญ่กว่าขาเข้าและขาออก[12]
ตัวเข้ารหัส
[แก้]ตัวเข้ารหัสแต่ละตัวประกอบด้วย 2 ส่วน ได้แก่ กลไกความใส่ใจตัวเอง และชั้นย่อยป้อนไปข้างหน้าแบบตามจุด กลไกความใส่ใจตัวเองจะใช้ชุดการเข้ารหัสขาเข้าจากตัวเข้ารหัสตัวก่อน ๆ และถ่วงน้ำหนักด้วยค่าความเกี่ยวพันร่วมกันเพื่อสร้างชุดการเข้ารหัสขาออก จากนั้นชั้นย่อยป้อนไปข้างหน้าจะประมวลผลการเข้ารหัสขาออกแต่ละรายการแยกกัน การเข้ารหัสขาออกเหล่านี้จะถูกป้อนเป็นข้อมูลขาเข้าไปยังตัวเข้ารหัสถัดไปในที่สุด
ตัวเข้ารหัสตัวแรกจะรับข้อมูลตำแหน่งและการฝังลำดับขาเข้าเป็นข้อมูลป้อนเข้า ข้อมูลตำแหน่งเป็นสิ่งจำเป็นสำหรับทรานส์ฟอร์เมอร์ในการระบุข้อมูลตำแหน่งของข้อมูลป้อนเข้า เนื่องจากไม่มีส่วนอื่นใดให้ข้อมูลตำแหน่ง[1]
ตัวถอดรหัส
[แก้]ตัวถอดรหัสแต่ละตัวประกอบด้วย 3 ส่วน ได้แก่ กลไกความใส่ใจตัวเอง กลไกความใส่ใจที่เกี่ยวข้องกับการเข้ารหัส และชั้นย่อยป้อนไปข้างหน้า ตัวถอดรหัสทำหน้าที่คล้ายกับตัวเข้ารหัส โดยแทรกกลไกความใส่ใจเพิ่มเติมเพื่อดึงข้อมูลที่เกี่ยวข้องจากการเข้ารหัสที่สร้างโดยตัวเข้ารหัส[1][5]
เช่นเดียวกับตัวเข้ารหัสตัวแรก ตัวถอดรหัสตัวแรกจะได้รับค่าเป็นข้อมูลตำแหน่งขาเข้าและการฝังลำดับขาออก แทนที่จะเป็นการเข้ารหัส อย่างไรก็ตาม ภายในทรานส์ฟอร์เมอร์ไม่ควรใช้ค่าขาออกปัจจุบันหรือในอนาคตเพื่อคาดการณ์ขาออก ดังนั้นลำดับขาออกจึงควรถูกปกปิดบางส่วนเพื่อป้องกันการไหลของข้อมูลย้อนกลับ[1]
ตัวถอดรหัสตัวสุดท้ายจะตามด้วยการแปลงเชิงเส้นขั้นสุดท้ายและชั้นซอฟต์แมกซ์ เพื่อสร้างความน่าจะเป็นสำหรับคำศัพท์ ซึ่งเป็นผลลัพธ์สุดท้ายที่ต้องการ
รูปแบบทางเลือก
[แก้]การฝึกสถาปัตยกรรมที่ใช้ทรานส์ฟอร์เมอร์อาจใช้ทรัพยากรมาก โดยเฉพาะประโยคยาว ๆ[13] มีสถาปัตยกรรมที่เรียกว่า รีฟอร์เมอร์ (Reformer) ถูกสร้างขึ้นมาเป็นทางเลือก โดยอ้างว่าช่วยลดภาระในการคำนวณ จาก (โดยที่ คือความยาวของลำดับ) รีฟอร์เมอร์ใช้ locality sensitive hashing และชั้นที่พลิกกลับได้[14][15]
การฝึก
[แก้]โดยทั่วไปแล้ว ทรานส์ฟอร์เมอร์จะผ่านการเรียนรู้แบบกึ่งมีผู้สอน (การฝึกล่วงหน้าด้วยการเรียนรู้แบบไม่มีผู้สอน ตามด้วยการปรับละเอียดด้วยการเรียนรู้แบบมีผู้สอน) เนื่องจากข้อมูลการฝึกที่มีฉลากกำกับมีอยู่จำกัด การฝึกล่วงหน้าจึงมักดำเนินการกับชุดข้อมูลที่มีขนาดใหญ่ งานก่อนการเรียนรู้และการปรับแต่งมีดังนี้
- การทำนายคำถัดไป[2]
- การตอบคำถาม[3]
- การอ่านตีความ
- การวิเคราะห์ความรู้สึก[16]
- การสรุปความอัตโนมัติ
การเขียนโปรแกรม
[แก้]แบบจำลองทรานส์ฟอร์เมอร์ได้รับการบรรจุอยู่ในเฟรมเวิร์กการเรียนรู้เชิงลึกที่สำคัญ เช่น TensorFlow และ PyTorch สำหรับเขียนด้วยภาษาไพธอน
การประยุกต์ใช้
[แก้]ทรานส์ฟอร์เมอร์ถูกนำมาใช้เป็นหลักในด้าน การประมวลภาษาธรรมชาติ เช่น การแปลด้วยเครื่อง และ การทำนายอนุกรมเวลา[17] แบบจำลองที่ได้รับการฝึกล่วงหน้าจำนวนมาก เช่น GPT (GPT-1, GPT-2, GPT-3, GPT-4, ChatGPT), BERT, XLNet, RoBERTa ฯลฯ ล้วนมีพื้นฐานจากทรานส์ฟอร์เมอร์[2][3][18]
ในปี 2020 ยังพบว่า GPT-2 ซึ่งใช้โครงสร้างทรานส์ฟอร์เมอร์สามารทำการปรับละเอียดให้ใช้เล่นหมากรุกได้ด้วย[19]
วิชันทรานส์ฟอร์เมอร์ ซึ่งสร้างขึ้นจากสถาปัตยกรรมทรานส์ฟอร์เมอร์ เผยแพร่โดยทีมวิจัยของกูเกิลในปี 2020 ได้รับการนำมาใช้ในด้านคอมพิวเตอร์วิทัศน์ และบรรลุผลสำเร็จที่เหนือกว่าโครงข่ายประสาทเทียมแบบสังวัตนาการ[20]
อ้างอิง
[แก้]- ↑ 1.0 1.1 1.2 1.3 1.4 Polosukhin, Illia; Kaiser, Lukasz (2017-06-12). "Attention Is All You Need". arXiv:1706.03762 [cs.CL].
- ↑ 2.0 2.1 2.2 "Open Sourcing BERT: State-of-the-Art Pre-training for Natural Language Processing". Google AI Blog. สืบค้นเมื่อ 2019-08-25.
- ↑ 3.0 3.1 3.2 "Better Language Models and Their Implications". OpenAI. 2019-02-14. สืบค้นเมื่อ 2019-08-25.
- ↑ "Sequence Modeling with Neural Networks (Part 2): Attention Models". Indico. 2016-04-18. คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2020-10-21. สืบค้นเมื่อ 2019-10-15.
- ↑ 5.0 5.1 Alammar, Jay. "The Illustrated Transformer". jalammar.github.io. สืบค้นเมื่อ 2019-10-15.
- ↑ Clark, Kevin; Khandelwal, Urvashi; Levy, Omer; Manning, Christopher D. (August 2019). "What Does BERT Look at? An Analysis of BERT's Attention". Proceedings of the 2019 ACL Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP. Florence, Italy: Association for Computational Linguistics: 276–286. doi:10.18653/v1/W19-4828.
- ↑ "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.
- ↑ "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
- ↑ Kitaev, Nikita; Kaiser, Łukasz. "Reformer: The Efficient Transformer". arXiv:2001.04451 [cs.LG].
- ↑ "Task with long sequences". คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2020-10-26. สืบค้นเมื่อ 2020-11-20.
- ↑ "Reformer: The Efficient Transformer". Google AI Blog (ภาษาอังกฤษ). สืบค้นเมื่อ 2020-10-22.
- ↑ Wang, Alex; Singh, Amanpreet; Michael, Julian; Hill, Felix; Levy, Omer; Bowman, Samuel (2018). "GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding". Proceedings of the 2018 EMNLP Workshop BlackboxNLP: Analyzing and Interpreting Neural Networks for NLP. Stroudsburg, PA, USA: Association for Computational Linguistics: 353–355. arXiv:1804.07461. doi:10.18653/v1/w18-5446.
- ↑ Allard, Maxime (2019-07-01). "What is a Transformer?". Medium (ภาษาอังกฤษ). สืบค้นเมื่อ 2019-10-21.
- ↑ Yang, Zhilin Dai, Zihang Yang, Yiming Carbonell, Jaime Salakhutdinov, Ruslan Le, Quoc V. (2019-06-19). XLNet: Generalized Autoregressive Pretraining for Language Understanding. OCLC 1106350082.
{{cite book}}
: CS1 maint: multiple names: authors list (ลิงก์) - ↑ Noever, David; Ciolino, Matt (2020-08-21). "The Chess Transformer: Mastering Play using Generative Language Models". arXiv:2008.04057 [cs.AI].
- ↑ "An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale". สืบค้นเมื่อ 2020-11-19.