CNTK - การวัดประสิทธิภาพ

บทนี้จะอธิบายวิธีการวัดประสิทธิภาพของโมเดลใน CNKT

กลยุทธ์ในการตรวจสอบประสิทธิภาพของโมเดล

หลังจากสร้างแบบจำลอง ML เราใช้ในการฝึกอบรมโดยใช้ชุดตัวอย่างข้อมูล เนื่องจากการฝึกอบรมนี้แบบจำลอง ML ของเราเรียนรู้และได้รับกฎทั่วไปบางประการ ประสิทธิภาพของแบบจำลอง ML มีความสำคัญเมื่อเราป้อนตัวอย่างใหม่กล่าวคือตัวอย่างที่แตกต่างจากที่ให้ไว้ในขณะฝึกอบรมไปยังโมเดล โมเดลจะทำงานแตกต่างกันในกรณีนั้น มันอาจจะแย่กว่าในการคาดการณ์ที่ดีสำหรับตัวอย่างใหม่เหล่านั้น

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

ชุดข้อมูลระงับ

เป็นวิธีที่ง่ายที่สุดวิธีหนึ่งในการสร้างชุดข้อมูลเพื่อตรวจสอบความถูกต้องของ NN ตามความหมายของชื่อในวิธีนี้เราจะระงับตัวอย่างหนึ่งชุดจากการฝึกอบรม (พูด 20%) และใช้เพื่อทดสอบประสิทธิภาพของโมเดล ML ของเรา แผนภาพต่อไปนี้แสดงอัตราส่วนระหว่างตัวอย่างการฝึกอบรมและการตรวจสอบ -

แบบจำลองชุดข้อมูลที่ระงับไว้ช่วยให้มั่นใจได้ว่าเรามีข้อมูลเพียงพอที่จะฝึกโมเดล ML ของเราและในเวลาเดียวกันเราจะมีตัวอย่างจำนวนพอสมควรเพื่อให้ได้การวัดประสิทธิภาพของโมเดล

หากต้องการรวมไว้ในชุดฝึกและชุดทดสอบควรเลือกตัวอย่างแบบสุ่มจากชุดข้อมูลหลัก ช่วยให้มั่นใจได้ว่ามีการกระจายอย่างสม่ำเสมอระหว่างชุดฝึกและชุดทดสอบ

ต่อไปนี้เป็นตัวอย่างที่เรากำลังผลิตชุดข้อมูลแบบระงับเองโดยใช้ train_test_split ฟังก์ชั่นจาก scikit-learn ห้องสมุด.

ตัวอย่าง

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Here above test_size = 0.2 represents that we provided 20% of the data as test data.
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
classifier_knn = KNeighborsClassifier(n_neighbors=3)
classifier_knn.fit(X_train, y_train)
y_pred = classifier_knn.predict(X_test)
# Providing sample data and the model will make prediction out of that data
sample = [[5, 5, 3, 2], [2, 4, 3, 5]]
preds = classifier_knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds] print("Predictions:", pred_species)

เอาต์พุต

Predictions: ['versicolor', 'virginica']

ในขณะที่ใช้ CNTK เราจำเป็นต้องสุ่มลำดับของชุดข้อมูลของเราทุกครั้งที่เราฝึกโมเดลของเราเพราะ -

  • อัลกอริธึมการเรียนรู้เชิงลึกได้รับอิทธิพลอย่างมากจากตัวสร้างตัวเลขสุ่ม

  • ลำดับที่เราจัดเตรียมตัวอย่างให้กับ NN ระหว่างการฝึกอบรมมีผลต่อประสิทธิภาพอย่างมาก

ข้อเสียที่สำคัญของการใช้เทคนิคชุดข้อมูลแบบระงับคือไม่น่าเชื่อถือเพราะบางครั้งเราได้ผลลัพธ์ที่ดีมาก แต่บางครั้งเราก็ได้ผลลัพธ์ที่ไม่ดี

K-fold cross validation

เพื่อให้แบบจำลอง ML ของเรามีความน่าเชื่อถือมากขึ้นมีเทคนิคที่เรียกว่า K-fold cross validation โดยธรรมชาติแล้วเทคนิค K-fold cross validation นั้นเหมือนกับเทคนิคก่อนหน้านี้ แต่จะทำซ้ำหลาย ๆ ครั้งโดยปกติจะใช้เวลาประมาณ 5 ถึง 10 ครั้ง แผนภาพต่อไปนี้แสดงถึงแนวคิด -

การทำงานของ K-fold cross validation

การทำงานของ K-fold cross validation สามารถเข้าใจได้ด้วยความช่วยเหลือของขั้นตอนต่อไปนี้ -

Step 1- เช่นเดียวกับในเทคนิค Hand-out dataset ในเทคนิค K-fold cross validation อันดับแรกเราต้องแยกชุดข้อมูลออกเป็นชุดฝึกและชุดทดสอบ ตามหลักการแล้วอัตราส่วนคือ 80-20 คือ 80% ของชุดฝึกและ 20% ของชุดทดสอบ

Step 2 - ต่อไปเราต้องฝึกโมเดลของเราโดยใช้ชุดฝึก

Step 3สุดท้ายนี้เราจะใช้ชุดทดสอบเพื่อวัดประสิทธิภาพของโมเดลของเรา ข้อแตกต่างเพียงอย่างเดียวระหว่างเทคนิค Hold-out dataset และเทคนิค k-cross validation คือกระบวนการข้างต้นมักจะทำซ้ำเป็นเวลา 5 ถึง 10 ครั้งและในตอนท้ายค่าเฉลี่ยจะถูกคำนวณจากเมตริกประสิทธิภาพทั้งหมด ค่าเฉลี่ยดังกล่าวจะเป็นตัวชี้วัดประสิทธิภาพขั้นสุดท้าย

ให้เราดูตัวอย่างด้วยชุดข้อมูลขนาดเล็ก -

ตัวอย่าง

from numpy import array
from sklearn.model_selection import KFold
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
kfold = KFold(5, True, 1)
for train, test in kfold.split(data):
   print('train: %s, test: %s' % (data[train],(data[test]))

เอาต์พุต

train: [0.1 0.2 0.4 0.5 0.6 0.7 0.8 0.9], test: [0.3 1. ]
train: [0.1 0.2 0.3 0.4 0.6 0.8 0.9 1. ], test: [0.5 0.7]
train: [0.2 0.3 0.5 0.6 0.7 0.8 0.9 1. ], test: [0.1 0.4]
train: [0.1 0.3 0.4 0.5 0.6 0.7 0.9 1. ], test: [0.2 0.8]
train: [0.1 0.2 0.3 0.4 0.5 0.7 0.8 1. ], test: [0.6 0.9]

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

CNTK ไม่รองรับการตรวจสอบความถูกต้อง k-cross ดังนั้นเราจึงต้องเขียนสคริปต์ของเราเองเพื่อดำเนินการดังกล่าว

การตรวจจับข้อบกพร่องและข้อต่อมากเกินไป

ไม่ว่าเราจะใช้ Hand-out dataset หรือ k-fold cross-validation technique เราจะพบว่าผลลัพธ์สำหรับเมตริกจะแตกต่างกันสำหรับชุดข้อมูลที่ใช้สำหรับการฝึกอบรมและชุดข้อมูลที่ใช้สำหรับการตรวจสอบความถูกต้อง

ตรวจจับการติดตั้งมากเกินไป

ปรากฏการณ์ที่เรียกว่า overfitting เป็นสถานการณ์ที่แบบจำลอง ML ของเราสร้างแบบจำลองข้อมูลการฝึกอบรมได้ดีเป็นพิเศษ แต่ไม่สามารถทำงานได้ดีกับข้อมูลการทดสอบกล่าวคือไม่สามารถทำนายข้อมูลการทดสอบได้

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

ต่อไปนี้เป็นสองวิธีด้วยความช่วยเหลือที่เราสามารถตรวจจับสภาพอากาศแบบจำลองของเราว่าเกินหรือไม่ -

  • แบบจำลองโอเวอร์ฟิตจะทำงานได้ดีกับตัวอย่างเดียวกับที่เราใช้ในการฝึกอบรม แต่จะให้ผลไม่ดีกับตัวอย่างใหม่นั่นคือตัวอย่างที่แตกต่างจากการฝึกอบรม

  • แบบจำลองนั้นเกินพอดีในระหว่างการตรวจสอบความถูกต้องหากเมตริกในชุดทดสอบต่ำกว่าเมตริกเดียวกันเราจะใช้กับชุดการฝึกของเรา

ตรวจจับ underfitting

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

วิธีหนึ่งในการตรวจสอบว่าแบบจำลองของเราเหมาะสมหรือไม่คือการดูเมตริกสำหรับชุดการฝึกอบรมและชุดทดสอบ แบบจำลองของเราจะอยู่ภายใต้ความเหมาะสมหากเมตริกในชุดทดสอบสูงกว่าเมตริกในชุดการฝึก