สวัสดีอีกครั้งครับคุณ @KWN ในเบื้องต้นขอตอบคำถามข้อ 2, 3 ก่อนนะครับ
ข้อ 2. ถูกต้องครับ ใช้ทำนายความน่าจะเป็นว่าอุปกรณ์นี้จะอยู่ในเฟสใดครับ
ข้อ 3. ถูกต้องตามรูปที่แปะไว้ข้างบนเลยครับ อย่างไรก็ตามรูปข้างต้นเป็นเพียงไอเดียเริ่มต้นครับ ในทางปฏิบัติ จำนวน Hidden Layers และจำนวน Nodes ในแต่ละ Layers นั้นมักต้อง Tune เพื่อให้ได้ค่า Validation Performance ที่ดีที่สุดครับ (ขั้นตอนนี้เรียกว่า Hyperparameters Optimization ซึ่งคิดว่าน่าจะมีใน MachineLearningMastery.com เว็บที่คุณ @KWN อ้างอิงครับ เว็บนี้มีบทความเยอะมากๆ จริงๆ ครับ)
เดี๋ยวขออนุญาตมาตอบข้อที่เหลือภายหลังนะครับผม
ปล. แจ้งข่าวดี ในช่วงไม่กี่วันนี้เราสามารถโหลดหนังสือ Deep Learning ที่ใช้ SciKit-Learn + TF + Keras ได้ฟรีที่นี่ครับ เอาไว้อ้างอิงในหลายๆ เรื่องได้ดีเลยครับ
ขออภัยที่ตอบช้านะครับ
ข้อ 1. สามารถทดลองนำโมเดลของคุณ Jason มาประยุกต์ใช้ได้เลยครับ โดยน่าจะเริ่มต้นที่ 2-3 layers และ layer สุดท้ายอาจจะลองมี Dimension 2 หรือ 3 เพื่อที่ว่าเมื่อเรา extract embedding vector ออกมาแล้ว เราอาจจะทดลอง plot ดูได้ด้วยครับว่าสมเหตุสมผลหรือไม่
ในขั้นตอนการทำ validation ตรงนี้งานของคุณ @KWN อาจต้องทำสองขั้นตอนครับ คือ ขั้นที่ 1 validation เพื่อตรวจสอบความแม่นยำในการทำ classification และขั้นที่ 2 หาวิธีเช็คว่าค่า probability ที่ได้จาก distance ของ embedding vectors ว่าสมเหตุสมผลหรือไม่
ข้อ 4. เมื่อเทรน model สำเร็จแล้ว เราสามารถถอด layer สุดท้ายได้ด้วยคำสั่ง
model.layers.pop()
ครับ (อาจดูเพิ่มเติมที่ https://stackoverflow.com/questions/49108256/popping-upper-layers-in-keras)
และสามารถใช้คำสั่ง
embed_vector = model.predict(x)
ได้เลยครับโดย x เป็น numpy array ของ input data (ที่ต้องการหา embedding vector)
ขอบคุณมากครับสำหรับคำแนะนำของคุณ @neural-engineer
ผมยังคงมีความสับสนในบางจุด จึงขอรบกวนถามเพิ่มเติมครับ
1. embedding vectors ที่ได้จาก output แต่ละ layer คือ vector ของ matrix A^[layer x] ที่มี dimension เป็น (# nodes, # examples) ตาม notation ใน lecture ของ Andrew Ng หรือเปล่าครับ
2. ผมเข้าใจว่า output ของ softmax จะอยู่ในรูป ตัวอย่างเช่น
Prob(Phase 1) = 0.22, Prob(Phase 2) = 0.95, และ Prob(Phase 3) = 0.03
ผลที่ได้คือ อุปกรณ์นี้มีความน่าจะเป็นอยู่ในเฟส 2 เท่ากับ 95% ส่วนค่า Prob(Phase 1), Prob(Phase 2), Prob(Phase 3) มีความสัมพันธ์กับค่า probability ที่ได้จาก distance ของ embedding vectors หรือไม่ครับ
สวัสดีครับคุณ @KWN,
ข้อ 1) สมมติเรายึดตามรูปนี้
Embedding Vectors ของแต่ละ layer เช่น FC1, FC2, FC3 ก็จะเป็น matrix ขนาด (N, 256), (N, 64) และ (N, 16) ตามลำดับครับ เมื่อ N คือจำนวนข้อมูลทดสอบที่เราต้องการหา embedding vector นั่นคือใน layer สุดท้ายก่อน softmax, embedding vector ของแต่ละข้อมูลก็จะเป็นเวกเตอร์ขนาด 16 มิติครับ
ในทางปฏิบัติเริ่มต้น เราอาจให้ FC2 หรือ 3 มีจำนวน nodes สัก 2-3 เพื่อจะได้ visualize embedding vectors ได้ง่ายๆ (เช่นกรอบสีเขียวในรูปข้างบน)
ข้อ 2) ตรงนี้อาจจะเกี่ยวบางส่วนครับผม คุณ @KWN เข้าใจถูกแล้วว่า output ของ softmax จะบอกความน่าจะเป็นที่ข้อมูลนี้จะอยู่ใน class ใด
ทว่าสิ่งที่เราต้องการจริงๆ (จากโจทย์แรกที่คุณ @KWN เล่า) คือเราต้องการทราบ “[ความน่าจะเป็น] หรือ [ระยะเวลา] ที่อุปกรณ์แต่ละชิ้น จะเปลี่ยนเฟสจาก เฟส A ไป เฟส B” ซึ่งข้อมูลนี้จะบอกไม่ได้จาก softmax ตรงๆ (และถ้าให้ดีที่สุดเราควรมีข้อมูลนี้เพื่อสอนโมเดล ดั่งที่ได้กล่าวไปในโพสต์ก่อนหน้า)
ในกรณีที่เราไม่มีข้อมูลตรงนี้มาสอนโมเดล เราเลยอาจต้อง “ประมาณ” (approximate) “[ความน่าจะเป็น] หรือ [ระยะเวลา] ที่อุปกรณ์แต่ละชิ้น จะเปลี่ยนเฟสจาก เฟส A ไป เฟส B” จาก distance ของ embedding vector ซึ่งไม่ได้เป็น solution ที่สมบูรณ์ แต่พอจะตอบโจทย์ได้เท่าที่ข้อมูลเอื้ออำนวยครับ
สวัสดีครับ แวะเอาตัวอย่าง predictive maintenance ที่แก้ด้วย Deep Learning บน Kaggle มาฝากครับ
https://www.kaggle.com/nafisur/predictive-maintenance-using-lstm-on-sensor-data
https://www.kaggle.com/billstuart/predictive-maintenance-ml-iiot
และขออนุญาตนำบทความเกี่ยวเนื่องเก่ียวกับ predictive maintenance และ machine learning มาลงไว้ที่นี่เผื่อเป็นประโยชน์กับท่านอื่นครับ
https://www.blognone.com/node/98970