Matrix multiplication [ 1 ]
สวัสดีครับ ผมชื่อเพชรครับ ปัจจุบันเป็น Software developer อยู่ที่ SCB digital banking และเป็นนิสิตปริญญาเอก คณะวิศวกรรมศาสตร์ ภาควิชาวิศวกรรมคอมพิวเตอร์ ชั้นปีที่ 1 งานวิจัยที่ผมสนใจจะเป็นด้าน Machine learning, Deep learning
อยากเขียน Blog นี้ขึ้นมาเพื่อแบ่งปันความรู้ต่าง ๆ ที่ได้รับในช่วง explore หาข้อมูลเพิ่มเติมระหว่างศึกษาปริญญาเอก โดยผมได้รับโจทย์มาจากอาจารย์ให้ไปหาความรู้พื้นฐานเพิ่มเติม และอ่าน Paper ในขอบเขตที่ผมสนใจ
เรื่องแรกที่เริ่มทบทวนความรู้ก็คือ Linear Algebra นั่นเอง ซึ่งในงานวิจัยที่ผมสนใจได้นำองค์ความรู้ทางด้านนี้มาใช้อย่างมากมาย โดย course ที่ผมเข้าไปเริ่มเรียนนั้นเป็นของ Professor Gilbert strang แห่ง MIT(Massachusetts Institute of Technology) นั่นเอง หากท่านใดสนใจเพิ่มเติมสามารถ ศึกษา course ด้านล่างครับ
เรื่องแรกที่ผมเห็นว่าน่าสนใจ และนำมาแชร์วันนี้ คือเรื่องการคูณ matrix หลายท่านอาจทราบแล้วว่าการคูณ matrix นั้นสามารถทำได้หลายวิธี แต่บางท่านอาจไม่ทราบ วันนี้ผมจึงนำมาแชร์ให้ทุกท่านนำไปลองเล่นกันครับ
Matrix ตั้งต้นของเรามีดังนี้
และเราจะนำสอง matrix นี้มาคูณกัน
เราสมมุติว่าผลลัพธ์ที่ได้จากการคูณ Matrix A และ B เป็น Matrix C ดังนี้ครับ
- Note สิ่งที่เราต้องระวังก็คือ Dimension ของ Matrix ครับ Column ของ Matrix แรก ต้องเท่ากับ row ของ Matrix ที่สอง ดังนี้ครับ
วิธีที่ 1
โดยรูปแบบการคูณวิธีแรก จะอยู่ในลักษณะดังต่อไปนี้ครับ
จากโจทย์ด้านบนสามารถคิดได้ดังนี้
หรือสามารถเขียนออกมาเป็นสมการได้ดังนี้
นั่นคือ ค่าของ c ในแถวที่ i คอลัมน์ที่ j สามารถหาได้จาก แถวที่ i ของ matrix A คูณกับ คอลัมน์ที่ j ของ Matrix B นั่นเอง
สมมุติว่า Matrix ที่ได้จากการคูณนั้น คือ Matrix C ดังนั้น ตำแหน่งที่ C11 มีค่าเท่ากับ 17 ดังรูปที่ 8
หลังจากทำซ้ำครบทุก row และ column แล้วนั้นจะได้ Matrix C ดังรูปที่ 9
วิธีที่ 2
วิธีนี้เราจะเน้นมุมมองการคูณในเชิงคอลัมน์ครับ โดย Prof.Gilbert strang ได้ให้คำนิยามไว้ดังนี้ครับ
Columns of C are combinations of columns of A
เรากลับมาดูที่ตัว matrix กันครับ
จากด้านบนจะเห็นได้ว่าคอลัมน์ ของ matrix B นั้น มีจำนวนคอลัมน์ เท่ากับ matrix C ดังนั้น เราลองเราลองนำแต่ละ คอลัมน์ ของ B เป็นตัวตั้งนะครับ และนำไปคูณกับสมาชิกทั้งหมดใน Matrix A เพื่อที่จะได้ผลลัพธ์ใน matrix C ดังภาพด้านล่างนี้ครับ
กลับมาที่โจทย์ของเราครับ โดยเราจะมาเริ่มการคูณ matrix โดยมุมมอง column กัน โดยจะเริ่มจากคอลัมน์ แรกก่อน (สีแดง)
จากนั้นก็นำคอลัมน์ที่เราสนใจมาทำการคูณกับ Matrix A (นั่นคือคำนิยามที่ว่า Columns of C are combinations of columns of A นั่นเอง)
เมื่อนำทุกคอลัมน์มารวมกันก็จะได้ matrix C ที่เป็นคำตอบดังรูปที่ 16
วิธีที่ 3
วิธีนี้เราจะเน้นมุมมองการคูณในมุมมองแถวของ Matrix ครับ โดยมีคำนิยามดังนี้
Rows of C are combinations of rows of B
จากตัวอย่าง Matrix ในรูปที่ 8 เช่นเดิม แต่เราจะมาคูณในมุมมองเป็นแถวดูครับ ดังรูปที่ 15
เรามาลองทำการคูณจริงๆจากตัวอย่างของเรากันครับ ในแถวแรกของ Matrix A
เมื่อเราทำการคูณกับทุกๆ แถวของ Matrix A จะได้ผลลัพธ์ดังนี้ครับ
จากที่กล่าวมาจะเห็นได้ว่าการคูณทั้งสามวิธีนั้น ได้ผลลัพธ์แบบเดียวกันเลยครับ จริงๆแล้วยังมีเทคนิคการคูณอีก 2 วิธีครับ ซึ่งผมจะทำเสนอในครั้งต่อไปครับ
ปล. พึ่งเคยเขียนเป็นครั้งแรกครับ ถ้ามีอะไรผิดก็ขออภัยมา ณ ที่นี้และรบกวนช่วยแจ้งด้วยครับ