OpenVaccine: ออกแบบวัคซีน Covid-19 ภายใน 23 วันบน Kaggle!!  

  RSS
The Neural Engineer
(@neural-engineer)
EfficientNet

OpenVaccine: ออกแบบวัคซีน Covid-19 ภายใน 23 วันบน Kaggle!!

ThaiKeras and Kaggle  13 กย. 2563

 

สวัสดีครับเพื่อนๆ เมื่อสองวันก่อน (11 กย. 2563) ทาง Kaggle ได้ประกาศโปรเจกต์เร่งด่วน "OpenVaccine" เพื่อขอความร่วมมือ Data Scientists ทั่วโลกให้มาช่วยกันมีส่วนร่วมในกระบวนการออกแบบวัคซีน Covid-19 ซึ่งเป็นหนึ่งในภัยคุกคามประชากรโลกที่อันตรายที่สุดในปัจจุบัน ซึ่งพวกเราเองก็สามารถมีส่วนร่วมในโปรเจกต์สุดสำคัญนี้ได้ ทีมงาน ThaiKeras ขออาสาอธิบายที่มาที่ไปของโปรเจกต์เร่งด่วนนี้ในบทความนี้เพื่อเผยแพร่ให้กับเพื่อนๆ นักวิจัยชาวไทยเราที่ก็มีศักยภาพสูงที่จะช่วยโปรเจกต์นี้ได้ครับ

.

ความรู้เบื้องต้นเกี่ยวกับวัคซีน RNA และปัญหาสำคัญที่เรามีส่วนร่วมแก้ไขได้

ปัจจุบันมีเทคนิคผลิตวัคซีนหลายประเภทที่เป็นความหวังของมนุษยชาติเรา หนึ่งในนั้นก็คือเทคนิค "วัคซีน RNA"  ที่จะไปกระตุ้นให้ร่างกายสร้างโปรตีนที่มีรูปทรงแหลมคล้าย "หนามแหลม" บนไวรัส SARS-CoV-2 หรือไวรัสที่เป็นสาเหตุของโรค Covid-19 นี่เอง (รูปที่ 1) ดังนั้นเมื่อเราฉีดวัคซีน RNA ตัวนี้เข้าสู่ร่างกายจะทำให้ระบบภูมิคุ้มกันในร่างกายของคนเราเรียนรู้รูปร่างของไวรัสชนิดนี้ไว้ล่วงหน้าก่อนที่จะโดนไวรัสตัวจริงบุกเข้าสู่ร่างกายครับ (ดูความรู้เบื้องต้นของวัคซีนทั้งหลายในอ้างอิง 1. และความสัมพันธ์ระหว่าง RNA และ โปรตีนเบื้องต้นที่อ้างอิง 2.)

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

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

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

ปัญหานี้จะแก้ไขได้ดีขึ้น ด้วยการออกแบบ RNA ที่มีรูปร่างที่ทนทานต่อแสงแดดมากขึ้นครับ ***แต่เราจะรู้ได้อย่างไรว่า shape แบบไหนที่ทนทานต่อแสงแดดมากหรือน้อย???*** นั่นคือที่มาของปัญหาเร่งด่วนบน Kaggle นี่เอง!

.

 

รวมพลังอเวนเจอร์  Gamers, Puzzle Solvers และ Data Scientists!!=

การจะออกแบบเจ้าสาย RNA ที่ทนทานมากขึ้นนั้นมีองค์ประกอบที่สำคัญอยู่สองส่วนครับ

  1. การค้นหา shape ของ RNA ที่มีความทนทานต่อแสงแดดสูง
  2. โมเดลที่ทำนายว่า "shape แบบไหนจะทนทานสูง"

บริษัทที่มีชื่อว่า Eterna ซึ่งนำโดยศาสตราจารย์ผู้เชี่ยวชาญเรื่องยาของมหาวิทยาลัย Stanford นั้นได้ขอความร่วมมือนักเล่นเกมส์และ Puzzle Solvers ทั่วโลกเพื่อมาช่วยกันค้นหา shape ที่ดีที่สุด (องค์ประกอบ 1) (ดูได้ที่ https://eternagame.org/ ) และขอความร่วมมือพวกเราบน Kaggle เพื่อช่วยกันสร้างโมเดลทำนาย (องค์ประกอบ 2)

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

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

.

 

เข้าร่วมพัฒนาโมเดลได้วันนี้และมีเวลา 23 วันที่ Kaggle

โดยปัจจุบันนี้ Eterna มีโมเดลทำนายความทนทานแดดของ RNA ที่พอใช้ได้ระดับหนึ่งซึ่งมีพื้นฐานแนวคิดที่ว่าเบสใน RNA ที่มีการขดมาจับคู่กันจะมีการทนต่อแสงแดดมากกว่า (รูปที่ 4)

ซึ่งจากโมเดลทำนายนี้เหล่า gamers และ puzzle solvers ทั่วโลกที่เข้ามาช่วย Eterna ก็ได้ค้นพบเจ้า RNA ที่ทนทานต่อแสงแดดมากกว่า RNA ทั่วไปถึงสองเท่าครับ นับเป็นความสำเร็จก้าวแรกที่สำคัญมาก (ครึ่งล่างของรูปที่ 2)

 

อย่างไรก็ดีโมเดลทำนายในรูปที่ 4 ยังมีความคลาดเคลื่อนจากการทดลองจริงอยู่อีกพอสมควร (รูปที่ 5) ซึ่งกก็เลยเป็นหน้าที่ของ Data Scientists ที่จะพัฒนาโมเดลที่ทำนายโอกาสที่ RNA จะเสียหายได้แม่นยำขึ้นกว่าโมเดลปัจจุบันในรูปที่ 4 ครับ และด้วยโมเดลที่แม่นยำกว่าเดิม ก็จะยิ่งทำให้เรามีโอกาสค้นหา RNA ที่มีความทนทานมากกว่าเดิมได้มากขึ้นไป และช่วยทำให้วัคซีนถูกกระจายไปยังคนทั่วโลกได้เร็วขึ้นไปอีกหลายเท่าครับ

นี่คือที่มาของโปรเจกต์การแข่งขันชนิดเร่งด่วนบน Kaggle ที่จะจบในวันที่ 5 ตุลาคมนี้ และเราอาจจะเป็นส่วนหนึ่งในการต่อสู้กับมหาโรคร้าย Covid-19 นี่ครับ ถ้าเพื่อนๆ พร้อมแล้วเข้าร่วมโปรเจกต์ได้ที่นี่ https://www.kaggle.com/c/stanford-covid-vaccine/

.

 

**ผู้เขียนบทความมีความรู้ชีววิทยาเพียงเล็กน้อยที่พอจะอธิบายปัญหาในภาพใหญ่ได้เท่านั้น ถ้ามีข้อผิดพลาดประการใดในบทความนี้ต้องขออภัยล่วงหน้าและสามารถอ่านรายละเอียดเพิ่มเติมได้ในเอกสารอ้างอิงครับผม**

อ้างอิง

  1. ความรู้เบื้องต้นเกี่ยวกับวัคซีน Covid19 ทั่วโลกและของไทย - บทสนทนาระหว่าง ศ. นพ. เกียรติ กับคุณสุทธิชัย หยุ่น :

  2. ความรู้เบื้องต้นเกี่ยวกับ RNA โดย Amoeba Sisters :

  3. บทความต้นฉบับของ Eterna ที่อธิบายเรื่องวัคซีน RNA และที่มาของโปรเจกต์นี้ : https://medium.com/eternaproject/how-to-build-a-better-vaccine-from-the-comfort-of-your-own-web-browser-233343e0210d
  4. เข้าร่วมออกแบบ "โมเดลวัดความอ่อนไหวของวัคซีน RNA" บน Kaggle ได้ที่นี่ : https://www.kaggle.com/c/stanford-covid-vaccine/

 

 

This topic was modified 10 months ago 2 times by The Neural Engineer
อ้างอิง
Posted : 05/10/2020 8:32 am
The Neural Engineer
(@neural-engineer)
EfficientNet

สร้าง Keras Model สำหรับตรวจสอบ "ความเสถียร" ของวัคซีน RNA

ThaiKeras and Kaggle  14 กย. 2563

สวัสดีครับเพื่อนๆ สืบเนื่องจากบทความเมื่อวานที่ทาง Kaggle ขอความร่วมมือจากทั่วโลกบนโปรเจกต์เร่งด่วนชื่อว่า "OpenVaccine" เพื่อช่วยกันสร้างโมเดลที่ใช้ทำนายความเสถียรของวัคซีน RNA ที่เป็นหนึ่งในความหวังของวัคซีนที่จะช่วยหยุดยั้งการระบาดของ Covid-19

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

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

  ซึ่งผลการทำนายได้ค่อนข้างดีมาเป็นโน้ตบุคหลักที่เราจะคุยกันครับ

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

.

 

Input ของโมเดล

ในการสร้าง Machine Learning Model ทุกครั้งก่อนอื่นเราต้องมาทำความเข้าใจว่าเรามี input อะไร และต้องทำนาย output อะไรบ้างกันก่อนครับ

อย่างที่เล่าไว้ในบทความเมื่อวานว่าเราต้องการทำนาย "ความเสถียร" ของเจ้าวัคซีน RNA นั่ืนคือ Input ของเราก็คือ RNA รวมทั้งรูปร่างของมัน ส่วน Output ก็คือ "ค่าความเสถียร" ซึ่งใน training data นี้จะสนใจค่าความเสถียรทั้งหมด 5 รูปแบบของทุกเบสในสาย RNA

โดยในข้อมูลสอนของโปรเจกต์นี้นั้น RNA ในวัคซีนจะเป็นสายโมเลกุลความยาว 107 เบส โดยแต่ละเบสคือหนึ่งใน A G C U ซึ่งเป็นตัวอักษรที่จะร้อยเรียงกันเพื่อเข้ารหัสในการสร้างโปรตีน ส่วนรูปร่าง (shape) ของมันจะอธิบายโดย (1) เบสใดจับคู่กับเบสใด และ (2) การม้วนตัวของเบสตำแหน่งนี้เป็นลักษณะใด โดยมีการม้วนตัวทั้งหมด 7 แบบใช้รหัสว่า S, M, I, B, E และ X  --- รูปที่ 1 แสดงตัวอย่างของการจับคู่และม้วนตัวของ RNA ความยาว 30 เบส

 

สำหรับตัวอย่างง่ายๆ สมมติ RNA เรามีความยาวเท่ากับ 9 เบสเราจะมีข้อมูล input 3 arrays ตามตัวอย่างนี้

AGUCAGCCU

(..(.)..)

BSSSHHEEE

โดยในข้อมูล array บรรทัดที่ 2 แสดงจะใช้ "วงเล็บ" เพื่อแสดงเบสที่มีการสร้างพันธะ และ "จุด" สำหรับเบสที่ไม่มีการสร้างพันธะ โดย

(..(.)..) หมายความว่า RNA ของเราประกอบไปด้วย 9 เบส โดยเบสที่ 1 นั้นสร้างพันธะกับเบสที่ 9 และเบสที่ 4 นั้นสร้างพันธะกับเบสที่ 6 ตามลำดับ

ส่วนรูปร่างของแต่ละเบสก็จะอยู่ใน shape ที่นิยามด้วย BSSSHHEEE ตามลำดับ ซึ่งความเข้าใจเรื่อง shape แบบชัดๆ อาจไม่จำเป็นในการสร้างโมเดลของเรา แต่ผู้สนใจสามารถดูเพิ่มได้ที่นี่ : https://www.kaggle.com/c/stanford-covid-vaccine/data

เนื่องจากเรามีข้อมูลสอนทั้งหมด 2400 สาย RNA แต่ละ RNA ยาว 107 เบสและแต่ละเบสมีข้อมูล 3 Array ดังที่อธิบายข้างบนดังนั้น Input Shape ของ Training Data เราคือ

(2400, 107, 3)

ครับซึ่งในโน้ตบุคในลิงก์ข้างบนได้สร้างฟังก์ชัน "preprocess_inputs" เพื่อเตรียม input ไว้ให้เราเรียบร้อยแล้ว

.

 

Output ของโมเดล

ส่วน Output ที่เราต้องการทำนายนั้นคือความเสถียรของแต่ละเบส ในสภาวะต่างๆ กัน 5 สภาวะนั่นคือ

(1) ค่า reactivity ของแต่ละเบส (ค่านี้ไม่แน่ใจว่าทางเคมีหมายถึงอะไรนะครับ ในทางปฏิบัติเราสามารถสร้างโมเดลทำนายได้ แม้ไม่เข้าใจความหมายของมันก็ตาม)

(2) ค่า deg_pH10 คือค่าความเสถียรในสภาวะความเป็นด่างสูง (pH = 10)

(3) ค่า deg_mg_pH10 คือค่าความเสถียรในสภาวะที่มีแมกนีเซียมและมีความเป็นด่างสูง

(4) ค่า deg_50C คือค่าความเสถียรในสภาวะที่มีความร้อนสูง (50 องศาเซลเซียส)

(5) ค่า deg_mg_50C คือค่าความเสถียรในสภาวะที่มีแมกนีเซียมและมีความร้อนสูง

 

ทั้ง 5 ค่าวัดผลเป็นเลขจำนวนจริง และยิ่งค่าน้อยแปลว่าเสถียรมาก และเนื่องจากเหตุผลทางเทคนิคที่ทำให้เราไม่สามารถวัดค่าความเสถียรของทุกเบสใน input ได้ เราจึงจะสนใจวัดค่าความเสถียรตั้งแต่เบส 1 ถึงเบสที่ 68 เท่านั้น (ไม่นำคำทำนายเบสที่ 69 ถึง 107 มาคิด)

นั่นคือ Model Output ของ training data ก็คือค่าความเสถียรของ 2,400 RNA แต่ละ RNA ต้องทำนาย 68 เบส และแต่ละเบสทำนาย 5 สภาวะ ทำให้ Output Shape ของข้อมูลคือ

(2400, 68, 5)

 

.

 

โมเดล Character-based GRU

เมื่อเราเข้าใจ Input และ Output shapes ของข้อมูลของเราแล้ว ซึ่งก็คืออยู่ในรูปของตัวแปรคณิตศาสตร์ (เรียกว่า Tensor) ที่มีมิติเท่ากับ (2400, 107, 3) และ (2400, 68, 5) ตามลำดับ

การสร้างโมเดล Deep Learning ซึ่งก็คือโมเดลทางคณิตศาสตร์นี้จริงๆ แล้วก็คือการสร้าง function ที่จะ map Input Tensor ขนาด (2400, 107, 3) ไปยัง Output Tensor ขนาด (2400, 68, 5) นั่นเอง

โดยการสร้าง Function หรือ Model ที่ map Input-Output นี้สามารถ "ออกแบบ" ได้หลายรูปแบบ และในโน้ตบุคนี้เลือกที่จะออกแบบโมเดลตามรูปแนบที่ 2 ครับ ซึ่งจะเห็นว่าใน Deep Learning เราจะแตกโมเดลออกเป็นเลเยอร์ย่อยๆ (หรือฟังก์ชันย่อย) หลายเลเยอร์ และแต่ละเลเยอร์ก็จะทำหน้าที่ค่อยๆ เปลี่ยน input shape ไปเรื่อยๆ จนสุดท้ายได้ Output Shape ที่ต้องการ

 

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

โดยจากรูปแนบที่ 2 นั้นเป็นตัวอย่างโมเดลที่จะ map Input ของ RNA 1 สายไปเป็นค่าความเสถียรของแต่ละเบส โดยให้เราอ่านไดอะแกรมจากล่างขึ้นบนนะครับ

ด้านล่างสุดแสดง Input ของทั้ง 3 Array ทั้งที่ได้อธิบายไว้ในหัวข้อ Input ของโมเดล และเราจะปรับ Input เหล่านี้ที่่อยู่ในรูปของ "ตัวอักษร" ให้อยู่ในรูปของ index จำนวนจริงแทนครับ โดยแต่ละตัวอักษรจะถูก map ไปยัง index ที่แตกต่างกัน เช่น A G U C ( . ) ก็จะถูก map ไปยังเลข 0 1 2 3 4 5 6 ตามลำดับ เป็นต้น

 

จากนั้นเราจะสร้าง "Embedding char vector" สำหรับแต่ละตัวอักษรขึ้นมาโดยในที่นี่เราจะแทนแต่ละตัวอักษรด้วยเวกเตอร์ขนาด 75 มิติครับ โดย Char vector นี้ทำหน้าที่เหมือน word vector ทุกอย่าง (ดูเพิ่มได้ใน http://bit.ly/thaikeras-kaggle-quora19 ) ต่างกันเพียงการสร้างเวกเตอร์ในทุกๆ ตัวอักษร (char) แทนที่จะเป็นสร้างเวกเตอร์สำหรับทุกคำ (word) ครับ

 

การสร้าง Char vector จาก index ของตัวอักษรสามารถทำได้ใน 1 บรรทัดด้วยคำสั่ง

tf.keras.layers.Embedding(input_dim, output_dim)

จากนั้นเมื่อเราได้ Embedding vector ของทั้ง 3 input arrays แล้วเราก็จะนำทั้ง 3 input มาเรียงต่อ (concatenate) กันเนื่องจากทั้ง 3 input นี้เป็น information ของเบสในตำแหน่งเดียวกันครับ ซึ่งการ concat vector ขนาด 75 มิติ 3 เวกเตอร์จะทำให้ ในแต่ละเบสเรามีเวกเตอร์ขนาด 225 มิติครับ (ใช้คำสั่ีง tf.reshape ) ดังนั้นเมื่อผ่าน Embedding และ Reshape Layers นี้เราจะได้ Tensor ขนาด (2400, 107, 225)

จากนั้นเราก็จะนำ Tensor นี้มาเข้าโมเดล GRU (หรือ LSTM ก็ได้) ซึ่งเป็นโมเดลที่เหมาะสมมากๆ ในการประมวลผลข้อมูลประเภท Sequential แบบนี้โดยเรากำหนดให้ GRU ส่ง Output เวกเตอร์ขนาด 256 มิติจากเวกเตอร์ขนาด 225 มิติ ทำให้เมื่อผ่าน GRU แล้วเราจะได้ Tensor ขนาด (2400, 107, 256) ที่ในแต่ละเบสมีการประมวลข้อมูลทั้งหมดที่เกี่ยวข้อง (ข้อมูล structure, การจับคู่ และเบสรอบข้าง) เรียบร้อยแล้ว

หลังจากนั้นเราทำการ map ขั้นสุดท้ายโดยการ map เวกเตอร์จาก 256 มิติไปยังเวกเตอร์ 5 มิติ (ใช้คำสั่ง Dense(5) ) ที่จะแทน "ความเสถียร" ทั้ง 5 สภาวะ และตัดคำทำนายของเบสที่ 69 ถึง 107 ที่เราไม่ต้องการทิ้งไป เราก็จะได้โมเดลที่ map inputไปยัง (2400, 68, 5) ตามที่ต้องการครับผม

หลังจากที่เราได้โมเดลแล้ว บน Keras เราสามารถให้โมเดลหรือฟังก์ชันนี้ update ค่า weights ที่จะอธิบาย Training data ได้ดีที่สุดด้วยคำสั่ง model.fit ซึ่งในโน้ตบุคนี้ขั้นตอนทั้งหมดใช้เวลาการรันบน GPU ราวๆ 6 นาทีเท่านั้นครับ

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

ตอบกลับอ้างอิง
Posted : 05/10/2020 8:40 am
The Neural Engineer
(@neural-engineer)
EfficientNet

รู้จัก 5 ผลงานสำคัญบน Kaggle ในการสร้างโมเดล "ความเสถียร" ของวัคซีน RNA

ThaiKeras and Kaggle  28 กย. 2563

สวัสดีครับเพื่อนๆ สืบเนื่องจากสองบทความก่อนหน้าที่ Data Scientists ทั่วโลกมาร่วมสร้างโมเดลวัด "ความเสถียร" ของวัคซีน RNA บน Kaggle ผ่านโปรเจกต์เร่งด่วนนั้น ปัจจุบันดำเนินมาเกือบถึงสัปดาห์สุดท้ายแล้ว  โดยได้มีการแชร์ความรู้สำคัญในการสร้างโมเดลผ่าน Public Notebooks บน Kaggle มากมาย ซึ่งเป็นเสน่ห์ของการทำงานบน Kaggle ที่เราสามารถต่อยอดความรู้และโค้ดระดับสุดยอดได้ง่ายๆ 

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

 

**************

งานที่ 1. OpenVaccine: Simple GRU Model โดย @xhlulu -

- โน้ตบุคต้นแบบในสร้างโมเดล Keras ที่ง่ายที่สุดที่ประยุกต์ใช้ GRU แล้วทำนายได้ความแม่นยำยอดเยี่ยม ซึ่งเราได้อธิบายรายละเอียดการออกแบบ input-output ของโมเดลนี้อย่างละเอียดในบทความฉบับที่แล้ว

 

โดยหลังจากที่เราเล่าไอเดียของโค้ด GRU ผ่าน ThaiKeras ในบทความที่แล้ว xhlulu ได้บังเอิญค้นพบ loss function ที่ทำให้ GRU มีความแม่นยำมากในโปรเจกต์นี้ขึ้นอีกราวๆ 10% อย่างน่ามหัศจรรย์ สามารถดูรายละเอียดของ loss นี้ได้ในโน้ตบุคข้างบนเวอร์ชันล่าสุดครับ

 

**************

งานที่ 2. OpenVaccine: GRU + LSTM โดย Tuker Arrants -

- งานนี้แสดงไอเดียง่าย ๆ แต่ทรงพลังของ เทคนิคที่เรียกว่า "ensemble" ที่สามารถเพิ่มความแม่นยำให้โมเดลใดๆ ก็ได้ราวๆ 5% - 10% แทบจะทุกสถานการณ์

โดยเจ้า ensemble เทคนิคนี้ก็เทคนิคง่ายๆ คือการที่เราดัดแปลง parameters หรือ training data ของโมเดลเดิมเล็กน้อย หลายรูปแบบแล้วนำผลทำนายมาเฉลี่ยกันตรงๆ

เช่น งานที่ 1 ข้างต้นมาขยายเป็นอีกโมเดลใหม่โดยการเปลี่ยนจาก GRU เป็น LSTM

และสร้าง training data ที่ต่างกัน 5 ชุด (โดยใช้ 5-folds splitting) ทำให้เรามีโมเดล+ชุดข้อมูลที่แตกต่างกัน 10 แบบ จากนั้นทำผลลัพธ์ที่ได้จากทั้ง 10 โมเดลนี้มาเฉลี่ยกันก็จะได้ความแม่นยำเพิ่มขึ้น 5-10% ทันทีอย่างน่ามหัศจรรย์ครับ

เพื่อนๆ ที่สนใจเรื่อง ensemble ดูต่อได้ที่

 

**************

งานที่ 3. How to Generate Augmentation Data -

- โดย Takuya Ito งานของคุณ Ito ซึ่งเป็น Grandmaster ชาวญี่ปุ่นนั้นได้ทำให้โมเดลยังแม่นยำขึ้นได้อีกราวๆ  5% ครับ ด้วยเทคนิก data augmentation บนข้อมูลของ RNA

ไอเดียก็คือรูปร่าง RNA ที่อยู่ใน training data นั้นแท้จริงแล้วเป็นเพียงรูปร่างที่เป็นไปได้มากที่สุด บนสมการทางคณิตศาสตร์ในทฤษฎีทาง Molecular Biology เท่านั้น  ดังนั้นด้วยทฤษฎีเดียวกันนี้เราสามารถสร้าง strcture ของ RNA ที่เป็นไปได้ลำดับถัดๆ มาได้ และเราก็นำข้อมูลใหม่เหล่านั้นมาเป็น training data หรือ test data เพิ่มเติมได้ครับ

นอกจากนี้คุณ Ito ยังได้แนะนำไอเดีย Feature Enginieering ต่างๆ ไว้ในอีกโน้ตบุค

ซึ่งนับว่าคุณ Ito ได้มีส่วนสำคัญในโปรเจกต์นี้จริงๆ

 

**************

งานที่ 4. [covid] AE Pretrain + GNN + Attn + CNN โดย @mrkmakr

 และ

งานที่ 5. OpenVaccine: DeeperGCN โดย Mickey (@symyksr)

งานที่ 4 และ 5 นี้เป็นของสอง Data Scientists ที่ไม่เปิดเผยชื่อจริง แต่มีไอเดียคล้ายๆ กันนั่นคือ แทนที่จะโมเดล RNA เป็นสายสตริงยาวๆ ทั้งคู่มีไอเดียว่าการที่ RNA มันมี Structure ม้วนโค้งและไปสัมผัสกันบางส่วนนี้มันเป็น Graph Structure ชัดๆ (ดูรูปแนบ)

ดังนั้นเราสามารถใช้ Neural networks โมเดลที่เหมาะสำหรับกราฟโดยเฉพาะได้ และทั้งสองคนก็โชว์การออกแบบและโค้ดของ Graph Neural Networks (GNN) ที่มีความแม่นยำสูงมากๆ   สำหรับผู้เสนใจ Graph based Neural Networks นับว่าสองตัวนี้เป็นแหล่งเรียนรู้โค้ดชั้นเยี่ยมเลยครับ

การแข่งขัน OpenVaccine นี้จะจบในเช้าวันที่ 6 ตุลาคมบ้านเรา และทางเราจะมาสรุปผลการแข่งขันกันอีกทีครับ

 

ตอบกลับอ้างอิง
Posted : 05/10/2020 8:42 am
The Neural Engineer
(@neural-engineer)
EfficientNet

โปรเจกต์นี้ได้ข้อสรุปแล้วครับ โดยโมเดลที่แม่นยำที่สุดทั้งอันดับ 1 และ 2 ต่างก็ใช้ไอเดียหลักเดียวกัน คือ การสร้าง data เสมือนจริง (pseudo data) และใช้โมเดลออกแบบ pseudo label ขึ้นมาอย่างชาญฉลาด   ผู้ชนะเลิศทั้งสองได้อธิบายไดเดียสำคัญไว้อย่างดี ดูรายละเอียดได้ที่นี่ครับ

อันดับ 1 https://www.kaggle.com/c/stanford-covid-vaccine/discussion/189620

อันดับ 2 https://www.kaggle.com/c/stanford-covid-vaccine/discussion/189709

ล่าสุดผู้ชนะลำดับที่ 4 ได้เผยแพร่โค้ด ซึ่งเราสามารถนำมาปรับปรุงแก้ไขได้ทันทีที่ครับ

อันดับ 4

This post was modified 10 months ago 3 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 16/10/2020 3:41 am
Share:

Please Login or Register