Example of machine learning application in material science

ณัฐวัฒน์ ปาเส
Super AI Engineer
Published in
3 min readMar 25, 2021

ในตอนที่แล้วผมได้เขียนแนะนำภาพรวมการนำ machine learning (ML) มาใช้ในงานวัสดุกันไปแล้วย้อนกลับไปอ่านได้ที่

ใน blog นี้ผมจึงจะพาทุกคนไปทำความรู้จักกับ tutorial ของเปเปอร์นี้กัน Machine Learning for Materials Scientists: An Introductory Guide toward Best Practices ซึ่งสามารถติดตามลิงค์หลักได้ที่ลิงค์ด้านล่าง ทางผู้เขียนเปเปอร์ทำไว้ดี ละเอียดมากมีทั้ง code และการอธิบายไว้ทุกขั้นตอน(เป็นภาษาอังกฤษ) เป็นแนวทางสำหรับคนที่อยากเริ่มใช้ ML ในงานวัสดุศาสตร์ได้เลย

เนื่องจากเจ้าของเปเปอร์ทำไว้ดีและละเอียดอยู่แล้วผมจึงจะไม่ได้ลงลึกในรายละเอียดแต่จะเป็นการ Overview (ซึ่งเขาก็ทำไว้แล้วแหละ 555 แต่ต่างที่ผมเป็นภาษาไทย) ในงานนี้ซะส่วนใหญ่

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

  • Formula หรือสูตรเคมี
  • Temperature(K) เป็นเงื่อนไขอุณหภูมิในการวัดสมบัติของสารนั้น ๆ
  • Heat Capacity(J/mol K) คือ ค่าความจุความร้อนของสาร หรือพูดง่าย ๆ สารหรือวัสดุตัวไหนมีค่านี้เยอะ ๆ จะเก็บความร้อนเยอะ

ถ้าดูจากตารางจะเห็นว่ามีค่า Heat Capacity(Cp) ที่อุณหภูมิต่างกัน ซึ่งในที่นี้ FORMULA และอุณหภูมิ จะถูกใช้เป็น features ที่ใช้สอน ML โดย FORMULA จะถูกแปลงเป็น features ด้วย library ที่ชื่อ CBFV ส่วน Cp จะเป็น target ที่ต้องการทำนาย

ต่อมา มาดูว่ามีไฟล์อะไรบ้าง อันดับแรกเข้าไปที่ลิงค์ github ด้านบนแล้วเข้าไปที่ folder ที่ชื่อว่า notebooks จะเห็นไฟล์ทั้งหมดตามรูปด้านล่าง ซึ่งผมจะอธิบายคร่าว ๆ แต่ละไฟล์ดังต่อไปนี้

  • CBFV คือ composition based-feature vector เป็น ไลบลารี่ที่ช่วยสร้าง feature ในการสอน ML โดยใช้แค่สูตรเคมี (มีการใช้กันในงานวิจัยพอสมควรเลยแหละ)
  • ML_figures เป็นตัวอย่างผลการคำนวณและรูปภาพที่ได้จากการทำ model (ไม่ต้องสนใจก็ได้)
  • imagesในนั้นจะมีรูปแสดงให้ดูว่าความสัมพันธ์ระหว่างอัตราส่วนการแบ่งข้อมูลกับ performance ของ model
  • 0a-overview.ipynb ไฟล์นี้เป็น overview ของ tutorial ว่าจะดำเนินการกับข้อมูลอย่างไรบ้าง ซึ่งจะมี 7 ขั้นตอน
  • 0b-check_dependencies.ipynb เป็นการตรวจสอบความพร้อมของคอมพิวเตอร์เราว่ามีไลบรารี่ต่าง ๆ พร้อมแล้ว
  • 1-data_loading_cleanup_processing.ipynb ในไฟล์นี้จะเริ่มยุ่งเกี่ยวกับข้อมูลแล้ว ซึ่งตรงส่วนนี้มักจะถูกเรียกว่า Explore Data Analysis (EDA) และจะเป็นการเตรียมและทำความสะอาดข้อมูลเพื่อให้พร้อมในการนำไปแบ่งข้อมูลต่อไป
  • 2-data_splitting.ipynb ไฟล์นี้จะเป็นการแบ่งข้อมูลออกเป็น trianing, validate, set และ test set แต่ในชุดข้อมูลนี้มีข้อมูลที่มีสูตรเคมีซ้ำกันจำเป็นต้องมีการเขียนโปรแกรมเพิ่มเพื่อไม่ให้มี สูตรเคมีซ้ำกันใน train และ test set เพราะอาจจะทำให้ model มีการจำข้อมูลใน train set ที่ใช้ในการฝึกสอน model ไปตอบใน test set เลยซึ่งจะทำให้ได้ผลของ model ไม่แม่นยำเท่าที่ควร
  • 3-modeling_classic_models.ipynb ในไฟล์นี้น่าจะเป็นขั้นตอนที่ทุกคนชอบมากที่สุดคือ เป็นขั้นตอนการสร้าง model แล้วซึ่งในที่นี้เป็น classical model อย่างพวก regression model (แต่ผลออกมาก็ไม่ได้แย่เลยนะ) ในไฟล์นี้จะเอาข้อมูลที่แบ่งไว้แล้วมาใช้ โดยจะสร้าง features สำหรับสอน model ด้วยไลบรารีที่ชื่อ CBFV ที่กล่าวไว้ในตอนต้น จากนั้นก็จะเอาเข้าวิธีมาตรฐานคือ ทำ standard และ normalize ก่อน train model นอกจากนี้ในไฟล์นี้จะ สร้าง model จากหลาย algorythm เพื่อเปรียบเทียบความถูกต้องกัน เพราะจำนวนข้อมูลในงานวัสดุศาสตร์นั้นมีไม่มากทำให้สามารถ train หลาย model ได้ และปิดท้ายด้วยแสดงตัวอย่างของผลกระทบที่เกิดจากการแบ่งข้อมูล train/validation/test dataset split
  • 4-modeling_neural_networks.ipynb นอกจากสร้าง classic model แล้วยังมีการสอนสร้าง neural network model (NN)อีกด้วย ซึ่งปกติแล้ว NN จะให้ค่าที่แม่นยำกว่า classical model แต่ข้อเสียคือผลที่ได้ไม่สามารถอธิบายได้ด้วยความรู้ทางด้านวัสดุศาสตร์ ซึ่งต่างจากแบบ classical model ที่สามารถบอกได้ว่าตัวแปรใดที่มีความสำคัญมากในการสร้าง model ซึ่งจะสามารถนำความสัมพันธ์ของตัวแปรดังกล่าวไปวิเคราะห์ต่อไปได้ แต่อย่างไรก็ดีสามารถใช้เป็นตัวเปรียบเทียบเพื่อประกอบการอภิปรายผลได้
  • 5-visualizing_results.ipynb ในไฟล์นี้จะเป็นการแสดงผลลัพธ์ออกมาในรูปกราฟต่าง ๆ ไม่ว่าจะเป็นกราฟที่พลอตการกระจายข้อมูลระหว่าง Actual and predicted value และกราฟ Loss vs number of training epochs ของ NN ที่แสดงถึงค่า error ที่ลดลงเมื่อมีจำนวนการ train เพิ่มขึ้น และส่วนสุดท้ายเป็นไลบรารี่ที่ใช้แสดงธาตุในตารางธาตุที่ถูกใช้ในตัวอย่างข้อมูลนี้มากที่สุด
  • model_checkpoint.pth อันสุดท้ายเป็น model จากการ train NN ที่ทางผู้เขียน save ไว้เพื่อแชร์ให้คนอื่นเอาไปลองใช้ดู

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

ขั้นตอนนี้ผมจะข้ามไปที่ import ข้อมูลที่คลีนแล้วเข้ามาสร้าง model เลย

รูปในขั้นตอนที่ 3 คือขั้นตอนการสร้าง regression model

จากนั้นดูหน้าตาข้อมูลกันหน่อย

รูปตารางชุดข้อมูลที่ใช้ในงานที่ผมทำ

จากนั้นแปลง formula ให้เป็น features ต่างๆ ด้วย CBFV

features ที่ได้จากการแปลง CBFV

ผลจากการ predict โดยได้ค่า r-square ที่ 0.8092

รูปผลการทำนายของ model ที่สร้างขึ้นและได้ผลดีที่สุดจาก model ทั้งหมด

ในรูปสุดท้ายผมได้ใช้ Lib ของ PlotlyFig ด้วย เพื่อใช้ในการ พลอตกราฟและ label ข้อมูลในกราฟเพื่อความสะดวกในการช่วยวิเคราะห์ข้อมูลแต่ละจุด และข้อมูลที่ผมใช้ทั้งหมดมีประมาณ 200 กว่าจุด เท่านั้น หากมีข้อมูลมากขึ้นจะสามารถสร้าง ML model ที่มีประสิทธิมากขึ้นกว่านี้ได้แน่นอน

แถม!!! หลังจากสร้าง model เสร็จผมได้ทำ validation ซึ่งได้ผลออกมาไม่ดีเท่าไหร่และได้ลองนำ model ไปทำการ predict หาสารใหม่ ๆ ถ้าสารไหนให้ค่าในแนวแกน X มากกว่า 1.0 หมายความว่าสารนั้นจะสามารถให้ผลที่ดี และได้ผลคร่าว ๆ ดังรูปด้านล่าง

รูปผลจากการ predict หาสารใหม่

ทั้งนี้ทั้งนั้น งานชินนี้ยังอยู่ในขั้นตอนที่ผมกำลังทำการวิจัยจึงอาจจะให้ผลไม่ดีมากนักแต่ก็เป็นอีกแนวทางหนึ่งในการนำ ML มาใช้ในการวิจัยวัสดุศาสตร์ ได้อย่างน่าสนใจ

นอกจากนั้น จากรายงานพบว่ามีการตีพิมพ์การประยุกต์ใช้ ML ในวัสดุศาสตร์เพิ่มขึ้นเรื่อย ๆ ใน 5 ปี ที่ผ่านมาแต่ในไทยยังมีคนที่ทำด้านนี้ค่อนข้างน้อย หากใครสนใจหรือมีคำแนะนำอะไรดี ๆ มาแบ่งปันกันสามารถส่ง อีเมลล์มาหาผมได้ที่ p.nuttawat@kkumail.com

--

--