VSB Power Line Fault Detection — ตรวจสอบหาความผิดปกติบนสัญญาณไฟฟ้า 3 เฟส  

  RSS
The Neural Engineer
(@neural-engineer)
EfficientNet

(เครดิตภาพ : Pixabay)

ปัญหาอย่างย่อ

การแข่งครั้งนี้เป็นปัญหาเกี่ยวกับ Signal Processing โดยกำหนดให้เราสร้างโมเดลเพื่อ “detect” ความผิดปกติของสัญญาณไฟฟ้าสามเฟสครับ โดยผู้กำหนดปัญหาคือ VSB ซึ่งเป็นมหาวิทยาลัยในประเทศสาธารณรัฐเชก ดังนั้นเราขอเรียกการแข่งขันนี้ย่อๆ ว่า VSB ครับ

เว็บไซต์หลักของการแข่งขัน :  https://www.kaggle.com/c/vsb-power-line-fault-detection/overview

เกริ่นนำปัญหา

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

จริงๆ แล้วสายไฟอาจจะ “เริ่มเสียหาย” ก่อนที่มันจะส่งผลกระทบกับอุปกรณ์ก็ได้  ซึ่งถ้าเราตรวจเจอสายไฟที่ “เริ่มมีปัญหา” เจอตั้งแต่เนิ่นๆ เราก็จะสามารถแก้ไขได้ก่อนที่จะเกิดเหตุการณ์ไฟดับ หรืออุปกรณ์ไฟฟ้าเสียหาย

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

(Technical Note : ความหมายของคำว่า “เริ่มมีปัญหา” หรือ "เริ่มเสียหายบางส่วน" ในที่นี้ทาง VSB กำหนดนิยามว่า มันเกิดปรากฏการณ์ “คายไฟฟ้าบางส่วน” (Partial Discharge) หรือไม่ โดยปรากฏการณ์ partial discharge ที่จะนำไปสู่การพังของสายไฟและอุปกรณ์ไฟฟ้าในอนาคตนี้นักวิศวกรไฟฟ้าจะรู้จักดีครับ)

ปัญหาทำนองนี้จัดอยู่ในกลุ่มปัญหาที่เรียกว่า "Predictive Maintainance" หรือ "การทำนายอายุการใช้งานของอุปกรณ์" ซึ่งมีความสำคัญมากๆ ในโลกปัจจุบันซึ่งเราเข้าสู่ยุคของการใช้แรงงานเครื่องจักรเป็นหลัก แทนแรงงานคน โดยเฉพาะเครื่องจักรที่เกี่ยวข้องกับงานที่ต้องเน้นความปลอดภัยขั้นสูงครับ

This topic was modified 3 years ago 11 times by The Neural Engineer
อ้างอิง
Posted : 25/04/2019 4:03 pm nameless ถูกใจ
The Neural Engineer
(@neural-engineer)
EfficientNet

ข้อมูลที่การแข่งขันให้มาเพื่อเรียนรู้และทดสอบ

ข้อมูลจะเป็น “ค่า Voltage 800,000 ค่า ที่วัดได้ใน 20 milli-seconds (ms)”  ซึ่งจะครบ 1 รอบกระแสไฟ (หรือ 1 รอบ Sine Wave) พอดีสำหรับเครือข่ายไฟฟ้าที่ทำงานที่ความถี่ 50Hz  

การเก็บข้อมูลนั้นทำบนระบบไฟฟ้า 3 phases, ซึ่งถ้าเรานำข้อมูล 800,000 * 3 = 2.4 ล้านค่า Voltage มา plot ก็จะได้รูปข้างบนครับ

หมายเหตุ ในโจทย์นั้นแบ่งสัญญาณแต่ละ phase “แยกกัน”และในการทำนายเราสามารถตอบแยกเป็น phase ได้ว่า สัญญาณไฟของ phase ที่ 0-1 ปกติดี (class 0) แต่ phaseที่ 2 มีปัญหา (class 1) เป็นต้น

ข้อมูลสอน (training data)

สัญญาณไฟ (แยกเฟส) จำนวน 8712 สัญญาณ และข้อมูล labels ว่าเป็นสัญญาณที่มีปัญหา Partial Discharge (class 1) หรือไม่มีปัญหา (class 0)

ข้อมูลทดสอบ (testing data)

สัญญาณไฟ (แยกเฟส) จำนวน 2 หมื่นสัญญาณ

ความไม่สมดุล Imbalance ในข้อมูลสอน

ใน 8712 สัญญาณที่ให้มานั้น มีเพียงราวๆ 6% เท่านั้นที่เป็นสัญญาณที่ “มีปัญหา” ซึ่งการที่เรามีข้อมูลประเภทหนึ่งๆ (สัญญาณที่ไม่มีปัญหา) จำนวนมากกว่าอีกประเภทหนึ่งหลายเท่านั้น มักทำให้การเรียนรู้และการวัดผลยากขึ้นไปด้วย ดังนั้นเราจำเป็นต้องมีการวัดผลที่ซับซ้อนขึ้น ดังจะกล่าวในวิธีการวัดผล MCC ในหัวข้อข้างล่างครับ

This post was modified 3 years ago 4 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 25/04/2019 4:23 pm
The Neural Engineer
(@neural-engineer)
EfficientNet

จากตัวอย่างข้างล่างจะเห็นว่าสายตาของเราแยกออกได้ “ไม่ง่าย”เลย ว่าข้อมูลที่ได้มานั้นอยู่ในกลุ่มมีปัญหาหรือไม่ ดังนั้นปัญหานี้ท้าทายมากๆ ครับ

ตัวอย่างไฟที่ “มี” ปัญหา Partial Discharge (Class 1)

ตัวอย่างไฟที่ “ไม่มี” ปัญหา Partial Discharge (Class 0)

This post was modified 3 years ago 2 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 25/04/2019 4:36 pm
The Neural Engineer
(@neural-engineer)
EfficientNet

วิธีการวัดผล : Matthew Correlation Coefficient (MCC)

เนื่องจากธรรมชาติของข้อมูลมีความไม่สมดุล (imbalance) มาก (สัญญาณส่วนใหญ่ราวๆ 94%++ ไม่มีปัญหา) ดังนั้นวิธีการวัดผลความแม่นยำของ Model ด้วย Accuracy จึงไม่เหมาะสมนัก เพราะเพียงเราทำนายว่าสัญญาณไฟทุกสัญญาณ “ไม่มีปัญหา” เราก็จะได้ความแม่นยำของโมเดล 94% ซึ่งตัวเลขที่มากนี้ ทำให้เราทำความเข้าใจจุดบกพร่องของระบบและปรับจูนระบบได้ยาก

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

MCC = (A + B - 1)*C 

โดย

A = ความแม่นยำ (Precision)ในการทายตัวอย่างบวก

B = ความแม่นยำในการทายตัวอย่างลบ

C = ความแม่นยำในการทาย “สัดส่วน” ของตัวอย่างบวกและลบ

(ผู้สนใจรายละเอียดว่า สูตร MCC นั้นแปลงมาอยู่ในรูปนี้ได้อย่างไร ดูได้ที่ Kernel ของผมที่เขียนอธิบายแยกไว้ที่นี้ครับ

)

อย่างไรก็ดี เพื่อให้เข้าใจง่ายๆ คือจะได้คะแนน MCC ดีดี เราต้องทายแม่นทั้งบวกและลบ นอกจากนั้นสัดส่วนของบวกและลบที่เราทำนายก็ต้องใกล้เคียงจริงด้วย (เช่น ใน VSB คือ 6% และ 94% ตามลำดับ)

This post was modified 3 years ago 9 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 26/04/2019 7:59 am
The Neural Engineer
(@neural-engineer)
EfficientNet

ข้อสังเกตในเรื่อง Class ของสัญญาณทั้ง 3เฟส และการ Preprocess Data เบื้องต้น

แม้ว่าในการแข่งครั้งนี้ จะแยกสัญญาณไฟแต่ละเฟสมาให้เราทำนายแยกกัน (เช่น เราอาจทำนายว่า เฟส 1 เป็น class 0 ส่วน เฟส 2 เป็น class 1) ทว่าจากการสังเกตข้อมูลสอน เราพบว่า “ข้อมูลเกือบทั้งหมด” สัญญาณไฟทั้ง 3 เฟส (ของสายไฟเส้นเดียวกัน) จะมีคลาสเดียวกันอย่างสม่ำเสมอ  มีข้อมูลเพียงส่วนน้อยมากเท่านั้นที่  label ของสัญญาณบางเฟส ไม่เหมือนกับเฟสที่เหลือ

ซึ่งก็ดูสมเหตุสมผล เพราะสัญญาณทั้ง 3 เฟสมาจากสายไฟเส้นเดียวกัน ถ้าเฟสใดเฟสหนึ่งบกพร่อง ก็มีแนวโน้มที่จะทำให้สายไฟเสียหาย และทำให้อีกสองเฟสบกพร่องตามไปด้วย

ข้อสังเกตนี้ (ซึ่งสอดคล้องกับความรู้ความเข้าใจพื้นฐานของสายไฟ) เราอาจมองได้ว่าเป็น Background Knowledge หรือ Prior Information ที่เราสามารถนำมาใส่ความรู้ลงไปในโมเดล เพื่อให้แม่นยำสูงขึ้นได้  

ดังนั้นในการเทรนข้อมูลสอน เราจะแปลงข้อมูลเบื้องต้นด้วยการยุบสัญญาณทั้ง 3 เฟส (3 ตัวอย่างเดิม) ให้เป็น 1 ตัวอย่างใหม่ ทั้งนี้จะทำให้จำนวนตัวอย่างเราลดลง 1/3 นั่นคือจาก 8712 Examples ใน training data เราก็จะแปลงให้เหลือเพียง 2904 Examples ครับ (โดยในแต่ละ Example ก็จะมีปริมาณข้อมูลเพิ่มขึ้นสามเท่า)

สังเกตว่า ในทางตรงข้ามถ้าเราไม่ยุบข้อมูลมารวมกัน ในกระบวนการสอน Deep Learning Model มักจะมีการ shuffle training data ซึ่งจะทำให้โมเดลไม่สามารถทราบได้เลยว่าสัญญาณเฟสไหนมาจากสายไฟเส้นเดียวกัน และจะทำให้เราสูญเสียข้อมูลสำคัญตรงนี้ และทำให้ความแม่นยำของโมเดลสุดท้ายลดลง (ซึ่งผู้เข้าแข่งขันหลายคนได้ทดลองแล้วและได้ผลตรงกันครับ) 

This post was modified 3 years ago 2 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 29/04/2019 6:30 am
The Neural Engineer
(@neural-engineer)
EfficientNet

Raw Signal หรือ Denoised Signal  ?

เนื่องจากทุกๆ สัญญาณไฟฟ้าจะมีสัญญาณ Sinusoidal Waves (ในหลายช่วงความถี่) เป็นส่วนประกอบหลัก ดังเช่นเส้นสีดำเข้มในรูปข้างต้น   

AI Data Scientists หลายท่านเลยมีแนวคิดว่าน่าจะถอดสัญญาณ Sinusoidal Waves เหล่านี้ออกก่อน เนื่องจากเมื่อพิจารณจาก visualization ของสัญญาณที่ไม่ดี (class 1 ดังที่แสดงในกระทู้บน)   จุดสำคัญที่ตัดสินว่าสายไฟเสียหายบางส่วนหรือไม่น่าจะเป็น Variance รอบๆ Sinusoidal Signal เหล่านี้เสียมากกว่า

อย่างไรก็ดี แนวคิดนี้ก็อาจจะขัดกับแนวคิด Deep Learning ที่ว่าควรจะรักษาข้อมูลต้นฉบับให้มากที่สุด และให้ Deep Learning Model ทำการสกัด หรือ Extract information ที่สำคัญออกด้วยตัวเอง ซึ่งในความเห็นส่วนตัวของผม คิดว่าเราควรจะลองทั้งสองวิธี โดยมีวิธีการวัดผลที่ชัดเจนว่าวิธีไหนดีกว่ากัน หรืออาจจะนำผลทำนายที่ได้จากทั้งสองวิธีมารวมกันเพื่อให้ได้คำตอบที่แม่นยำที่สุดก็เป็นได้ (ทดลองทำด้วยตัวเองได้ใน Workshop ในลิงก์ข้างล่างครับ)

ในกรณีที่ต้องการใช้ Denoising Algorithm ผู้เข้าร่วมแก้ปัญหาหลายท่านได้นำเสนอหลากหลายวิธี เช่น

Wavelet Denoising

Fourier Denoising

Moving Average Denoising

This post was modified 3 years ago 3 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 29/04/2019 7:11 am
The Neural Engineer
(@neural-engineer)
EfficientNet

ออกแบบระบบการวัดผล validation score ด้วย Stratified K-Folds (1)

อย่างที่กล่าวไว้ข้างต้น ในปัญหานี้เรามี MCC score เป็นตัววัดผลหลักบน test set  อย่างไรก็ดีในการแข่งขัน VSB กติกากำหนดไว้ว่าจะสามารถวัดผลบน test set ได้เพียงวันละ 2 ครั้งเท่านั้น

ดังนั้นในทางปฏิบัติเราจึงจำเป็นต้องทำ validation score ขึ้นมาเอง ซึ่งวิธีที่ง่ายที่สุดที่อาจเรียกว่า validation split คือการแบ่งข้อมูลสอนแยกไว้ส่วนหนึ่ง โดยห้ามนำข้อมูลส่วนนี้มาสอน และเรียกข้อมูลนี้เรียกว่า validation set เพื่อใช้จำลอง test set นั่นเอง ตามรูปข้างล่าง

วิธีง่ายๆ นี้ได้ผลดีในกรณีที่เรามีข้อมูลสอนปริมาณมาก ทว่าในปัญหา VSB นี้เรามีสองปัญหา

(1) เรามีข้อมูลสอนน้อยมาก (2904 examples) ดังนั้นการแบ่งข้อมูลจาก training set มาสัก 10-20% ตัว validation set อาจจะเล็กเกินไปและไม่แม่นยำเท่าไรนัก 

(2) เรามีข้อมูลบวก (class 1) ในสัดส่วนที่น้อยมากๆ ถ้าเราแบ่ง validation set แบบสุ่ม อาจเป็นไปได้ว่า สัดส่วนตัวอย่างบวกใน training set กับ validation set อาจต่างกันมากและไม่สะท้อนถึงสัดส่วนแท้จริงครับ

วิธีที่จะเป็นพระเอกในการแก้ทั้งสองปัญหานี้เรียกว่า การทำ validation ด้วย Stratified K-Folds นั่นเองครับ

This post was modified 3 years ago 6 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 29/04/2019 12:01 pm
The Neural Engineer
(@neural-engineer)
EfficientNet

ออกแบบระบบการวัดผล validation score ด้วย Stratified K-Folds (2)

ก่อนที่เราจะพูดถึง Stratified K-Folds เราควรพูดถึง Simple K-Folds ก่อน โดย Simple K-Folds เป็นวิธี validation ที่สามารถแก้ปัญหาข้อ (1) ที่ว่าเรามีจำนวน data น้อยเกินไปได้ (แต่ไม่ได้แก้ปัญหาข้อ (2) ที่เรามี very imbalance data)

วิธี Simple K-Folds จะแบ่งข้อมูลเป็น K ส่วน (เรียกว่า K folds) เท่าๆ กัน และจะใช้ K-1 folds ในการสอน และ 1 fold ในการทำ validation ซึ่งดูเผินๆ ก็เหมือนการทำ validation split ธรรมดาในกระทู้ข้างบน  แต่สังเกตว่าเราสามารถทำกระบวนการนี้ซ้ำได้ K ครั้ง โดยในแต่ละครั้ง fold ทดสอบเราก็จะไม่เหมือนเดิม ไล่จาก fold ที่ 1st ไปยัง fold ที่ Kth  และ folds สอนก็เป็น K-1 folds ที่เหลือ

นั่นคือด้วยวิธีการ Simple K-Folds นี้ เราสามารถทำ validation split ได้ K ครั้งนั่นเอง  และสังเกตว่าทุกๆ validation split จะไม่ซ้ำกันเลย และผลทดสอบทั้งหมด K ครั้งถ้าเราเอามารวมกันจะเท่ากับจำนวน Training Data พอดี  ดังนั้นการทำ Simple K-Folds นี้แม้เราจะเสียเวลาในกระบวนการสอนและทดสอบเพิ่ม K เท่าตัว แต่เราใช้ข้อมูลทั้้งหมดอย่างคุ้มค่า นั่นคือเราใช้ข้อมูล Training Data ทั้งหมดเป็น Validation Set ด้วย

เนื่องจากข้อมูลที่ใช้ทำ validation มีเยอะกว่าวิธี simple split ในกระทู้บน ผล Validation score ของ Simple K-Folds ก็จะมีความแม่นยำมากขึ้นกว่า simple split มากครับ

 

Simple K-Folds ยังไม่ดีพอ

อย่างไรก็ดีในกรณี VSB ซึ่งเรามีปัญหา Imbalance Data อยู่ด้วย, simple K-Folds อาจให้คำตอบที่พลาดได้ในบาง fold เช่น บาง fold อาจจะบังเอิญไม่มีข้อมูล class 1 อยู่เลย (เพราะ class 1 เดิมมีน้อยอยู่แล้ว และสุ่มมาไม่อยู่ใน fold นี้เลย) ทำให้ model ที่ทำ validate บน fold นี้จะได้ Score MCC ต่ำผิดปกติ

วิธี upgrade simple K-Folds ให้จัดการ imbalance data ได้ก็คือ Stratified K-Folds ครับ!!  ไอเดียของ stratified K-Folds จริงๆ แล้วง่ายมาก นั่นคือในการแบ่ง K-Folds นั้นแทนที่จะสุ่มข้อมูลอะไรก็ได้ตรงๆ เหมือน Simple K-Folds, วิธี stratified K-Folds จะสุ่มแบบการันตีว่าทุกๆ folds จะมีสัดส่วนของทุกๆ classes เท่าๆ กันด้วย ซึ่งอธิบายได้ในรูปด้านล่างครับ

โดยในภาพประกอบนี้สมมติ K=4  และเรามี Class ทั้งหมด 3 classes คือ A,B และ C โดยค่อนข้าง Imbalance โดย A มีสัดส่วนที่น้อยที่สุด และ C มีสัดส่วนที่เยอะทีสุด ตามภาพครับ ... ในการสุ่มตรงๆ ถ้าเราแบ่ง folds เป็น K folds เราอาจโชคร้ายว่าบาง fold อาจไม่มี Class A เลยก็เป็นได้

วิธีการ Stratified 4-Folds นี้การันตีว่าจะไม่มีปัญหานี้เกิดขึ้นด้วยการสุ่มแบ่ง Class A เป็น 4 ส่วนเท่าๆ กัน, แบ่ง Class B เป็น 4 ส่วนเท่าๆ กัน และ Class C เป็น 4 ส่วนเท่าๆ กันเช่นกันครับ

จากนั้นในการสร้าง Fold แต่ละ fold ก็จะสุ่มนำ 1/4 ของ Class A, B และ C มารวมกันทำให้การันตีว่าในการสุ่มแบ่ง 4 folds ตามกระบวนการนี้นั้น ทุกๆ fold จะมีสัดส่วนของ classes ทั้งหมดใกล้เคียงกับ training data ตั้งต้นครับ  

ทั้งนี้ดูวิธีการสุ่มแบ่ง validation set ในแต่ละ fold (K=4) ตามรูปข้างบนเลยครับ

This post was modified 3 years ago 4 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 29/04/2019 1:55 pm
The Neural Engineer
(@neural-engineer)
EfficientNet

ไอเดียการเรียนรู้โมเดลด้วย Bidirectional LSTM

ในโพสต์ข้างบนเราได้เข้าใจ

(1) ที่มาที่ไปของปัญหา

(2) การ Formulate ปัญหาให้อยู่ในรูปของ Machine Classification

(3) มาตรวัดผล และการออกแบบกระบวนการวัดผลให้มีความแม่นยำทางสถิติ

(4) กระบวนการ Preprocess ข้อมูลเบื้องต้น

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

ในที่นี้เราจะทำนายว่าสัญญาณไฟฟ้ามาจากสายไฟที่เริ่มมีปัญหาหรือไม่ (class 1) ด้วยโมเดล LSTM ครับ โดย Model LSTM นั้นเป็น Sequential Model ที่มี Input / Output ที่อาจมองอย่างง่ายๆ ดังนี้

Input : Sequence of Vectors --> { LSTM with SoftMax } -->  Output : Prediction [0 หรือ 1]

สังเกตว่า LSTM ต้องการ input เป็น "ลำดับ" (Sequence) ของ vector ในทางคณิตศาสตร์ ดังนั้นเราต้องแปลงข้อมูลสัญญาณไฟเราให้อยู่ในรูปนี้ก่อนครับ ... จริงๆ แล้วใน 1 example, ข้อมูลสัญญาณไฟ 3 เฟส (แต่ละเฟสมีค่า voltage ที่วัดมา 8แสนค่า) ที่เรามี เราอาจมองเป็น Sequence of Vectors ขนาด (800,000 x 3) ได้เลย โดยไม่ต้องทำอะไร

อย่างไรก็ดีในกรณีนี้ข้อมูลต่อ 1 example อาจจะมีขนาดใหญ่เกินไป และข้อมูลทั้งหมดทำให้หน่วยความจำของ GPU ไม่เพียงพอในการเรียนรู้ ดังนั้นเราจะใช้วิธี Sliding Windows ในการแปลงข้อมูลให้เล็กลงครับ

ไอเดียของ Sliding Windows อาจแสดงได้ง่ายๆ ดังภาพข้างล่าง โดยเราจะกำหนดขนาดของ Window ขึ้นมา (ในที่นี้เพื่อความง่ายให้ขนาดของ window = 1% ของความยาวสัญญาณ = 8,000 หน่วยวัด) และสกัด Features ต่างๆ จำนวน D features ออกมาจากข้อมูลใน window นี้ครับ โดย Features ต่างๆ อาจจะเป็นค่าทางสถิติที่สำคัญของ Signal ใน window นั้นๆ เช่น mean, sigma, percentile ต่างๆ หรือใครจะ creative วัดค่าที่ซับซ้อนขึ้นเช่น Entropy ของ window นี้ก็ได้ครับ (รายละเอียดการทำจริงดูได้ใน Workshop Notebook ตามลิงก์ข้างล่าง)

This post was modified 3 years ago 4 times by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 29/04/2019 2:00 pm
The Neural Engineer
(@neural-engineer)
EfficientNet
ไอเดียการเรียนรู้โมเดลด้วย Bidirectional LSTM (2)
 
จากนั้น เราก็จะสกัดเวกเตอร์ขนาด D นี้ในทุกๆ windows ซึ่งจากตัวอย่างนี้เรากำหนดขนาดของ windows เท่ากับ 1% ดังนั้นเราก็จะมีเวกเตอร์ D นี้จำนวน 100 เวกเตอร์ครับ ซึ่งก็ทำให้เราได้ Sequence of 100 vectors เป็น input ของ LSTM ตามที่เราต้องการแล้วครับ!!
 
 
เมื่อนำ Sequence of Vectors นี้ใส่เข้าไปใน LSTM เราก็จะสร้างกระบวนการเรียนรู้โมเดล (ปรับจูน parameters ของโมเดล) ได้ตามที่ต้องการครับ โดยเนืื่องจากปัญหานี้เป็นปัญหา Binary Classification เราสามารถใช้ Cross Entropy Loss เพื่อทำการ Backpropagation หา parameters ที่ดีได้ครับ (เสต็ปนี้ใช้ Keras เพียง 1 บรรทัด 🙂
 
สังเกตว่า Sequence of Vectors นั้นเราอาจมองเป็น matrix ขนาด (100 x D) ได้ ในบริบทของ Neural Networks เราจะเรียกว่าเป็น Tensor 2D หรือ Tensor 2มิติครับ
และในทางปฏิบ้ัติ Keras จะรับ Batch ของหลายๆ สัญญาณไฟพร้อมๆ กันทำให้เราต้องเตรียม Input Data ให้อยู่ในรูป Tensor 3D ครับ โดยมิติก็จะเป็น (2904 x 100 x D) ครับ ซึ่งก็ตรงไปตรงมาเพราะเรามี 2904 examples, แต่ละ example มี 100 time-step และ แต่ละ time-step เป็น vector ใน D มิิติตามกระทู้บน
 
ขั้นตอนอย่างละเอียด step-by-step สามารถดูได้ใน Workshop Notebook ครับ
ตอบกลับอ้างอิง
Posted : 30/04/2019 5:44 am
The Neural Engineer
(@neural-engineer)
EfficientNet

การรวม Prediction จาก K-Folds ด้วย Ensemble

เนื่องจากว่าเราออกแบบการทดสอบระบบด้วย K-Folds ใช่ไหมครับ ดังนั้นเราก็จะมีโมเดลทั้งหมด K Models ที่เราได้ฝึกสอนไว้ตามจำนวน folds, ในการทำนายจริง ถ้าเราจะเลือกเพียงโมเดลเดียวมาทำนาย ก็จะทำให้เสียคุณค่าของโมเดลอื่นๆ ไปฟรีๆ  ดังนั้นวิธีการที่ง่ายและได้ผลดีก็คือ "รวมคำทำนายของทั้ง K models" เข้าด้วยกันครับ วิธีนี้เรียกว่า "K-Fold Ensemble" (คล้ายๆ Avenger Assemble :p ) ซึ่งแสดงในรูปด้านล่างครับ  โดยวิธีการรวมคำทายอาจมีตั้งแต่ง่ายๆ คือเอา ค่าความน่าจะเป็นของทุกโมเดลมาเฉลี่ยกัน หรือวิธีที่ซับซ้อนมากขึ้นคือพยายามหา weights ตามความแม่นยำของแต่ละโมเดล

สำหรับเนื้อหาของปัญหา VSB หรือ ปัญหาตรวจสอบหาความผิดปกติบนสัญญาณไฟฟ้า 3 เฟส ด้วย Deep Learning model ก็อธิบายภาพรวมหมดแล้วครับ เพื่อนๆ ที่พร้อมจะลุยแก้ปัญหาจริงแล้วก็ขอเชิญเข้าไปที่ workshop ได้เลยครับ หรือถ้าผมอธิบายอะไรตกหล่นหรือมีข้อสงสัยตรงไหน เพื่อนๆ สามารถโพสต์ถามในกระทู้นี้หรือใน workshop ได้เลยครับผม

ตอบกลับอ้างอิง
Posted : 30/04/2019 5:56 am
The Neural Engineer
(@neural-engineer)
EfficientNet

ถ้าเพื่อนๆ พร้อมแล้วสามารถเข้าไปทำ Workshop ของปัญหา VSB ได้ที่นี่เลยครับ

ตอบกลับอ้างอิง
Posted : 06/05/2019 9:55 am
Share:

Please Login or Register