​จาก One Shot Learning ไปถึง Siamese network (Deep Convolution Neural Network Model)

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

แต่ปัญหาอย่างหนึงของวงการ Data Science ในปัจจุบันคงไม่พ้นการมีข้อมูลไม่พอครับ ซึ่งการมีข้อมูลไม่พอสามารถแก้ได้หลายทางเหมือนกันเช่น Data Augmentation ใส่ Noise ]งไปในข้อมูลเดิม ลงไปแล้วเจนออกมาเยอะๆเพื่อให้มีดาต้าเยอะขึ้น หรือถ้ารวยหน่อยก็ซื้อดาต้าเพิ่ม แต่มีอีกวิธีที่ นิยมใช้กันในด้าน Image Recognition(การประมวลผลรูปภาพ) ก็คือ One Shot Learning วันนี้ผมจะขอพูดเรื่อง One Shot learning กันหน่อย โดยจะยกตัวอย่างการจำผู้คนโดยใช้ Image Recognition นะครับ

สมมุติ หลังจากที่หมอธีร์ไปมีข่าววิจารณ์บิ๊กป้อมที่อังกฤษ ลุงตู่ได้เรียกเข้าเคลียร์กะนสามคน แต่ครั้งนี้ลุงแกอยากให้มีความแบบไฮเทคหน่อย ลุงตู่อยากให้มี Face Recognition ตรวจจับใบหน้าของครม.สามท่านนี้เวลาเดินผ่านประตูทางเข้าที่จะเข้ามาเคลียร์กัน สมมุติอีกว่าเราจะจำแนกคนที่จะมาร่วมประชุมต่อไปนี้

ลุงตู่ นายกของเรา
บิ๊กป้อมผู้โด่งดังมากมีนาฬิกา!!
หมอธีร์รมต.ที่มีข่าวดังเร็วๆนี้

อัลกอริทึ่มที่ฮิตมากในด้าน Image Recognition ในยุค Deep Learning คงหนีไม่พ้น Convolution Neural Network(CNN) ถูกใช้กันอย่างกว้างขวางและสามารถทำผลงานในการรู้จำ Object ต่างๆได้ดีซะด้วย โมเดล CNN ด้านล่างนี้ครับ


โครงสร้างของโมเดล CNN

รายละเอียด Convolution Neural Network ทำงานอย่างไรผมจะเขียนวันหลังนะครับ แต่ตอนนี้ให้รู้แค่ว่า โมเดลที่ปรกติทำงานได้ดีในเรื่องการรู้จำรูปอย่างมากเพราะมีการทำ Convolution และ การ Pooling เพื่อให้ทำให้เรียนรู้ได้ถ้าเกิดข้อมูลมีการบิดเบี้ยวหรือเปลี่ยนแปลงรูปร่างไปบ้าง ตัวอย่างใน Task เช่น ทำนายตัวเลขคนเขียนอย่าง Mnist Data Set นี่ความแม่นยำไปถึง 99.79% กันแล้ว ผมว่าใกล้ถึง Bayes Error แล้วนะ (Error ธรรมชาติที่เราไม่สามารถทำให้ความแม่นยำสูงไปกว่านี้ได้อีกแล้ว) โดยงานที่ได้ความแม่นยำสูงสุดตอนนี้อ่านได้ที่Regularization of Neural Networks using DropConnect ครับ

ข้อมูล Mnist

แต่ข้อมูล Mnist มีหลายหมื่นข้อมูลครับ แต่ในงานของเราที่จะสร้างให้ลุงตู่เนี่ย ปัญหาคือเรามีข้อมูลน้อยมาก ถ้า Task นี้เรามีข้อมูลอยู่แค่สามคนเนี้ย โดยเจ้าโมเดล Deep Learning ถ้าข้อมูลมีน้อยมันก็ทำงานได้ไม่ค่อยเท่าไหร่หรอกครับเดี๋ยว  Kent Cheng มาเที่ยวพอดีละแย่เลย

ขวา บิ๊กป้อม ซ้าย Kent Cheng เอ้ยสลับกันล่ะ 555+

การที่จะดีลกับปัญหาที่เป็น One Shot Learning แบบนี้ เราก็ต้องสร้างโมเดลเป็นการ Similarity ของตัวอย่างสองตัวอย่างแทน Similarity(ลุงตู่, บิ๊กป้อม) ครับ แล้วมี Output ออกมา ถ้าค่าความต่างน้อยกว่า Threshold T หรือค่าที่ยอมรับได้รูปทั้งสองรูปว่าต่างกันได้มากแค่ไหนจึงจะยังนับว่าเป็นคนเดียวกัน ซึ่งถ้าค่าออกมาน้อยกว่า T นี้จะก็แปลว่าสองคนนี้เป็นคนเดียวกัน กลับกัน ถ้าน้อยกว่า Threshold T ก็แปลว่าเป็นคนละคนกัน

จากตัวอย่าง ไอเดียของมันก็คือ ถ้า นำรูปคนเดียวกันมาหา Similarity ก็หวังว่าจะมีค่าต่ำกว่า T เช่น จากรูป ลุงตู่ มี Similarity น้อยกว่า T และบิ๊กป้อมกับหมอธีร์ มีค่ามากกว่า T นั่นเอง

ปัญหามันอยู่ตรงนี้ครับ ถ้าเราใช้โมเดลที่ไม่ดีพอมาหา Similarity มันก็จะทำได้ไม่ดีนัก ถ้าลุงตู่ทำหน้าตาแปลกๆหน่อยก็อาจจะมองเป็นคนอื่นได้ แต่ถ้าเราใช้ Deep Learning เช่น CNN ข้อมูลที่มีมันก็จะน้อยไปอีกนี่สิ่

สรุป

  • อยากรู้จำหน้าแต่ข้อมูลน้อย จะต้องอาจจะต้องเรียนกับรูปเดียว One Shot Learning
  • มีข้อมูลน้อยทำงานกับ Deep Convolution Network ได้ไม่ดีเท่าไหร่
  • หา Similarity ด้วยโมเดลทั่วไปอาจจะไม่ได้ผลที่ดีนัก

ด้วยเหตุนั้นแหละครับ พระเอกมันต้องออกโรง!!!

Siamese Network!!!

Siamese Network หรือโครงข่ายแฝดสยาม มีแรงบัลดาลใจมาจากฝาแฝด อิน-จันทร์ ที่ตัวติดกันของไทยเรานี่เองครับ โดยเหตุที่ Siamese Network ใช้ชื่อนี้ก็เพราะโครงสร้างของโครงข่ายมันเหมือนกับฝาแฝดนั่นเอง

ฝาแฝดอินจันทร์1811-1874 ผู้ร่างกาย เหมือนกับสถาปัตยกรรมโครงสร้างของ Siamese Network

โดย อย่างคร่าวๆ Siamese Network นี่จะมีโครงสร้างเป็น CNN ธรรมดาๆนี่แหละครับ หลักการคือเรามีรูปเข้ามา X เป็นลุงตู่เข้ามา เราก็นำรูปไปเข้า Convolution layer จากนั้นเราก็ นำไปทำ Max Pooling กันตามปรกติ(อาจจะทำซ้ำๆกันหลายชั้น) จากนั้นก็นำข้อมูลในชั้นหลังจาก Pooling แล้วไปเข้าโครงข่ายนิวรอน(Fully Connected Neural Layer) ตามสถาปัตยกรรมของ CNN ปรกติ แต่คราวนี้เราจะตัดขั้นการทำนาย Output ออกครับ เหลือแต่ขั้น vector ที่ได้จากการทำ Convolution Pooling และ Fully Connected Neural Layer และ Vector ในขั้นสุดท้ายที่ได้ออกมาก็เหมือนกับการเข้ารหัสรูปลุงตู่นั่นแหละครับ ตามรูป

จากนั้นให้เรา Save ทั้งผล Vector(ลุงตู่ Encoding) และ โครงข่ายพร้อมParameter ของโครงข่ายไว้ กับลุงตู่ไว้

จากนั้นก็ทำแบบนี้กับบิ๊กป้อมแล้วก็หมอธีร์ด้วย แล้วก็ Save ทั้งผล Vector(บิ๊กป้อม Encoding และ หมอธีร์ Encoding) และ โครงข่ายพร้อม Parameter ของโครงข่ายไว้

วันงาน

สมมุติ วันประชุมครม. บิ๊กป้อมเดินเข้ามา เราก็ Detect หน้าบิ๊กป้อม เอาไป feed ใส่โครงข่ายของลุงตู่ที่เราที่เซฟไว้ จากนั้นให้เอา vector ของลุงตู่ Encoding (X1) มาเปรียบเทียบกับ รูปของบิ๊กป้อม Encoding (X2) ด้วยโครงข่ายและ parameter ของลุงตู่ จากนั้นเรานำมาหา Similarity Function กัน Similarity(X1, X2) ในขั้นนี้ผลลัพธ์ออกมากกว่า Threshold T มันก็จะบอกว่าคนที่เดินเข้ามาเนี่ยไม่ใช่ลุงตู่นะ

การเอามาหา Similarity นี่แหละครับที่เป็นตัวเชื่อมระหว่างสองเครือข่าย และเป็นที่มาของคำว่า Siamese Network

แล้วมันจะรู้ได้อย่างไรว่าเป็นบิ๊กป้อมล่ะ?

แน่นอนครับเราก็เรียกโมเดลอีกอันที่เราเซฟไว้ มาเทียบกันอีกทีกระบวนการก็เหมือนเดิมเลยครับ และถ้าครั้งที่เราเอามาเทียบเป็นโครงข่ายของตัวเอง ผลลัพธ์ที่ได้ของ Similarity Function ควรจะ< T แล้วผลก็จะบอกว่า บิ๊กป้อมมาแล้วววเด้อ ตามรูป

ถ้าบิ๊กตู่ หรือ หมอธีร์เราก็ทำกระบวนการเดียวกันนี้แหละครับ เอารูป ณ วันจริงที่มางาน โหลดเข้าโครงข่ายที่เราเซฟไว้ แล้วนำมาหา Similarity กัน จนครบทุกคนเท่านี้ก็สามารถแก้ปัญหาข้อมูลน้อยแต่ต้องการเรียนรู้แบบ one shot learning ได้แล้ว

สรุปSiamese Network

  • ใช้โครงสร้าง CNN เซฟผล Encoding Vector และ โครงข่าย+Parameterไว้
  • รูปใหม่ที่เข้ามาเอาไปเข้าโครงข่ายที่ว่านั้น
  • ผล Encoding Vector ที่ได้มานำไปหา Similarity กับผลที่เซฟไว้

กระบวนการก็ประมาณนี้นะครับสำหรับปัญหา One Shot Learning ปัญหาข้อมูลน้อยที่ Data Scientist ต้องแก้ปัญหา และโมเดล Siamese Network ที่ถูกพัฒนามาแก้ปัฐหา หวังว่าคงจะพอเห็นภาพแลวนะครับ ว่ามันทำงานยังไง จริงๆ ยังมีรายละเอียดอีกเยอะครับ เก็บไว้ค่อยพูดถึงวันหลังดีกว่า และก็ขอขอบคุณอาจารย์ Andrew Ng ที่ประสิทธิประสาทวิชา ^^

ว่าแต่ถ้าคนที่เดินเข้ามาเป็น Kent Cheng จริงๆล่ะ??

นี่ก็เกือบจะ Twin เลยนะเนี่ย ถ้าอายุเท่าๆกัน 555+

ขำๆนะครับ ขอเกี๋ยวเตี๋ยวน้ำโอเลี้ยง ที่เรือนจำคลองเปรมด้วยนะครับ จบจริงๆละครับกับ “นิวรอนเสี่ยงคุก!!!” 555+

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s