Python — Keras Model Traning Tips
Post id: 37, 27/04/2022
คำเตือน
เคล็ดลับต่อไปนี้ เป็นเทคนิคการเตรียมข้อมูลเพื่อเทรนโมเดล Keras ใน Python สำหรับใช้ในการเทรด Forex โดยเฉพาะ ไม่มีหลักการอ้างอิงใดๆ และอาจใช้ไม่ได้กับงานด้านอื่นๆ
1. การตั้งค่าโมเดล
การตั้งค่า Drop Out
keras.layers.LSTM(size, dropout=0.0)
โดยปกติแล้ว dropout ควรจะตั้งเอาไว้ประมาณ 0.2 เพื่อป้องกันการ Over fitting ของข้อมูล แต่หากต้องการใช้โมเดลในตลาด forex ผมแนะนำให้ตั้งค่า dropout เป็น 0 เท่านั้นครับ ซึ่งผมทดลองมาแล้วพบว่าได้ผลดีที่สุด
สาเหตุ คาดว่าเป็นเพราะในตลาด forex ข้อมูลที่แตกต่างกันเหล่านั้น ไม่ใช่ข้อมูลในรูปแบบ over fitting แต่เป็นข้อมูลจริงที่แตกต่างกันอีกรูปแบบหนึ่ง ดังนั้นการตัดข้อมูลใดๆ ออกไปเพื่อให้ผล loss น้อยลง จึงเป็นเรื่องที่ผิดพลาด และเมื่อนำไปใช้งานจริง ผลลัพธ์จะไม่ดีเหมือนตอนเทรน
การกำหนด Feature Lengh
การกำหนดความยาวฟีเจอร์ให้มากขึ้น ไม่ได้ช่วยให้ผลลัพธ์การเทรนแม่นยำขึ้นมากนัก หรือก็คือ หากฟีเจอร์นั้นเทรนออกมาแล้วไม่แม่นยำ สาเหตุหลักไม่ใช่เพราะจำนวนฟีเจอร์น้อยไป แต่เป็นเพราะฟีเจอร์นั้นไม่สอดคล้องกับผลลัพธ์ ยกตัวอย่างเช่น การใช้ข้อมูล Open, High, Low, Close, Volume ในการเทรนโมเดล ไม่ว่าจะใช้ 10 แท่ง หรือ 100 แท่ง ผลลัพธ์ก็ไม่ได้ต่างกันมากนัก
2. การเตรียมข้อมูล Xtrain, Ytrain
หากใครเคยศึกษาเรื่อง Deep Learning มาก่อนมักจะเคยเห็นว่าก่อนเทรนโมเดล จะต้องทำการ Normalize Data ก่อน แต่ผมจะบอกว่า…
การ Normalize Data ใน Forex นั้นใช้ไม่ได้ผล
สาเหตุก็คือ ค่าความละเอียดของจุดทศนิยมในตลาด Forex ละเอียดมากเกินไป ส่วนมากจะอยู่ที่ระดับ 0.00001 หรือ ทศนิยม 5 หลัก ดังนั้นการ Normalize จึงไม่ได้ทำให้ข้อมูลดีขึ้น (แต่บางครั้งก็อาจใช้ได้เช่นกันขึ้นอยู่กับ Symbol ที่เทรน)
วิธีแก้ปัญหาเรื่องนี้ให้ทำการทดสอบตามลำดับต่อไปนี้
- เทรนโมเดลด้วยข้อมูลปกติ แล้วสังเกตุดูค่า loss
3114/3123 [============================>.] - ETA: 0s - loss: 1.8720
ปกติแล้วยิ่ง loss น้อยเท่าไรก็ยิ่งดี แต่ถ้าเป็นโมเดลสำหรับ Forex ผมแนะนำว่าค่า loss ไม่ควรต่ำกว่า 1 ถ้าค่า loss ต่ำกว่า 1 มากๆ หมายความว่าข้อมูลที่เราใช้เทรนนั้นเป็น small signal ไม่ใช่โมเดลเทรนออกมาได้ผลดี แต่จริงๆ แล้วเป็นตรงกันข้าม เพราะหากข้อมูลที่ใช้เทรนเป็น small signal การปรับค่า weight ของ Deep Learning แค่นิดเดียว ก็จะทำให้ผลลัพธ์สวิงมาก เมื่อเทียบกับตัวข้อมูล
หากพบว่า loss ต่ำกว่า 1 ให้แก้ปัญหาด้วยขั้นตอนต่อไป
2. ปรับ Learning rate ให้น้อยลง เช่น จาก 0.01 เป็น 0.0001 จริงๆ การปรับ parameter ตัวนี้ ไม่ได้ทำให้ค่า loss เปลี่ยนมากนัก แต่เป็นการควบคุมกระบวนการเทรนโมเดล ให้ค่อยๆ ลู่เข้าสู่คำตอบ เพื่อป้องกันไม่ให้โดดข้ามค่า weight ที่อาจจะเป็นผลลัพธ์ที่ถูกต้อง
แต่หากผลลัพธ์ยังไม่ดีขึ้น ให้แก้ปัญหาด้วยขั้นตอนต่อไป
3. กำหนดตัวคูณ Xtrain และ Ytrain เช่น 1, 2, 10 หรือ 100 โดยคูณเข้าไปทั้งใน Xtrain และ Ytrain การทำแบบนี้จะทำให้ small signal ของเรากลายเป็น large signal ขึ้นมา เหมือนกับเป็นการขยายสัญญาณ ซึ่งจะทำให้ค่า loss เพิ่มขึ้นโดยตรง วิธีการปรับก็คือ หากค่า loss ของเรายังน้อยกว่า 1 ก็ให้เพิ่มตัวคูณเข้าไปเรื่อยๆ จนกว่าค่า loss จะมากกว่า 1
เทคนิคที่ผมนำเสนอก็มีเพียงเท่านี้ครับ หวังว่าคงจะเป็นประโยชน์สำหรับใครหลายคน