ทรานส์ฟอร์เมอร์

thumb|โครงสร้างสถาปัตยกรรมทรานส์ฟอร์เมอร์มาตรฐาน ด้านซ้ายคือตัวเข้ารหัส ด้านขวาคือตัวถอดรหัส

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

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

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

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

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

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

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

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

แบบจำลองทรานส์ฟอร์เมอร์ จะทำการเรียนรู้ 3 อย่างคือ เมทริกซ์น้ำหนักเควียรี W_Q, เมทริกซ์น้ำหนักคีย์ W_Kและ เมทริกซ์น้ำหนักค่า W_V สำหรับแต่ละหน่วยความใส่ใจ เมื่อคูณค่าป้อนเข้า x_i จากชั้นการฝังคำด้วยเมทริกซ์น้ำหนักสำหรับโทเค็นที่ i แต่ละตัวแล้ว จะได้เวกเตอร์เควียรี q_i = x_iW_Q, เวกเตอร์คีย์ k_i = x_iW_K
, เวกเตอร์ค่า v_i=x_iW_V น้ำหนักความใส่ใจ a_{ij} เป็นผลคูณจุดของเวกเตอร์เควียรี q_i กับเวกเตอร์คีย์ k_j แล้วหารด้วยรากที่สองของจำนวนมิติ \sqrt{d_k} เพื่อรักษาเสถียรภาพของความชัน จากนั้นผลรวมน้ำหนักจะถูกทำให้เป็น 1 โดยใช้ฟังก์ชันซอฟต์แมกซ์

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

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

การคำนวณภายในหน่วยความใส่ใจของทรานส์ฟอร์เมอร์เขียนเป็นสูตรได้ว่า
\begin{align}
\mathrm{Attention}(Q, K, V) = \mathrm{softmax} \left( \frac{QK^\mathrm{T}}{\sqrt{d_k}} \right)\,V
\end{align}
ในที่นี้ Q, K, V คือเมทริกซ์ของเควียรี, คีย์, ค่า โดยเวกเตอร์เควียรี q_i, เวกเตอร์คีย์ k_i, เวกเตอร์ค่า v_i จะแสดงถึงแถวที่ i ของเมทริกซ์ Q, K, V

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


\begin{align}
\mathrm{MultiHead}(Q, K, V) = \mathrm{Concat} \left( \mathrm{head}_1, \dots, \mathrm{head}_h \right)\,W^O \\
\mathrm{where}\quad\mathrm{head}_i = \mathrm{Attention}(QW_i^Q, KW_i^W, VW_i^V)
\end{align}


### ชั้นย่อยป้อนไปข้างหน้าแบบตามจุด
FFN(x_t) = ReLU(x_t W_1)W_2

ที่ส่วนชั้นย่อยป้อนไปข้างหน้าแบบตามจุด (point-wise feed-forward) ใช้โครงข่ายเชื่อมต่อสมบูรณ์แบบป้อนไปข้างหน้ากับเวกเตอร์ขาเข้า x_t ที่ตำแหน่ง t พารามิเตอร์น้ำหนัก W_1 และ W_2 ไม่ขึ้นกับตำแหน่ง t (น้ำหนักต่างกันสำหรับแต่ละชั้น) กล่าวคือ จะดำเนินการประมวลผลเทียบเท่ากับชั้นสังวัตนาการแบบตามจุด (ซึ่งมีขนาดเคอร์เนลเป็น 1) 2 ชั้นในทิศทางตำแหน่ง

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

เนื่องจากชั้นย่อยถูกใช้ภายในการเชื่อมต่อส่วนเหลือ จึงเป็นการดีที่จะให้มิติของขาเข้าและขาออกเท่ากัน ในงานวิจัยต้นฉบับใช้ขนาดขาเข้าและขาออกเป็น d_{model} = 512 ขนาดของชั้นกลางมีขนาดใหญ่กว่าขาเข้าและขาออก

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

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

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

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

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

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

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

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

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

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

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

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

## อ้างอิง

หมวดหมู่:โครงข่ายประสาทเทียม