Chiến lược xác nhận hiệu suất mô hình
Sau khi xây dựng mô hình ML, chúng tôi thường huấn luyện nó bằng cách sử dụng một tập hợp các mẫu dữ liệu. Nhờ quá trình đào tạo này, mô hình ML của chúng tôi học hỏi và rút ra một số quy tắc chung. Hiệu suất của mô hình ML quan trọng khi chúng tôi cung cấp các mẫu mới, tức là các mẫu khác với mẫu được cung cấp tại thời điểm đào tạo, cho mô hình. Mô hình hoạt động khác nhau trong trường hợp đó. Việc đưa ra dự đoán tốt về những mẫu mới đó có thể còn tệ hơn.
Tuy nhiên, mô hình cũng phải hoạt động tốt với các mẫu mới vì trong môi trường sản xuất, chúng tôi sẽ nhận được đầu vào khác với dữ liệu mẫu mà chúng tôi sử dụng cho mục đích đào tạo. Đó là lý do, chúng ta nên xác thực mô hình ML bằng cách sử dụng một tập hợp các mẫu khác với các mẫu mà chúng ta đã sử dụng cho mục đích đào tạo. Ở đây, chúng ta sẽ thảo luận về hai kỹ thuật khác nhau để tạo tập dữ liệu nhằm xác thực NN.
Tập dữ liệu chờ đợi
Đây là một trong những phương pháp dễ nhất để tạo tập dữ liệu nhằm xác thực NN. Đúng như tên gọi, trong phương pháp này, chúng tôi sẽ giữ lại một bộ mẫu từ quá trình đào tạo (giả sử là 20%) và sử dụng nó để kiểm tra hiệu suất của mô hình ML của chúng tôi. Sơ đồ sau đây cho thấy tỷ lệ giữa mẫu huấn luyện và mẫu xác nhận
Mô hình tập dữ liệu tạm thời đảm bảo rằng chúng tôi có đủ dữ liệu để huấn luyện mô hình ML của mình, đồng thời chúng tôi sẽ có số lượng mẫu hợp lý để có được phép đo tốt về hiệu suất của mô hình.
Để đưa vào tập huấn luyện và tập kiểm tra, cách tốt nhất là chọn các mẫu ngẫu nhiên từ tập dữ liệu chính. Nó đảm bảo sự phân bố đồng đều giữa tập huấn luyện và tập kiểm tra.
Sau đây là một ví dụ trong đó chúng tôi đang tạo tập dữ liệu nắm giữ của riêng mình bằng cách sử dụng train_test_split từ hàm thư viện scikit-learn.
Ví dụ :
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)
đầu ra
Predictions: [‘versicolor’, ‘virginica’]
Trong khi sử dụng CNTK, chúng tôi cần ngẫu nhiên hóa thứ tự của tập dữ liệu mỗi lần huấn luyện mô hình của mình vì −
- Các thuật toán học sâu bị ảnh hưởng nhiều bởi các trình tạo số ngẫu nhiên.
- Thứ tự chúng tôi cung cấp mẫu cho NN trong quá trình đào tạo ảnh hưởng lớn đến hiệu suất của nó.
Nhược điểm chính của việc sử dụng kỹ thuật tập dữ liệu giữ lại là nó không đáng tin cậy vì đôi khi chúng tôi nhận được kết quả rất tốt nhưng đôi khi lại nhận được kết quả tồi.
Xác thực chéo K-Fold
Để làm cho mô hình ML của chúng tôi đáng tin cậy hơn, có một kỹ thuật gọi là xác thực chéo K-Fold. Về bản chất, kỹ thuật xác thực chéo K-Fold cũng giống như kỹ thuật trước đó, nhưng nó lặp lại nhiều lần – thường là khoảng 5 đến 10 lần. Sơ đồ sau thể hiện khái niệm của nó
Hoạt động xác thực chéo K-Fold
Có thể hiểu rõ hoạt động xác thực chéo K-Fold với sự trợ giúp của các bước sau –
Bước 1 − Giống như trong kỹ thuật tập dữ liệu Phát tay, trong kỹ thuật xác thực chéo K-Fold, trước tiên chúng ta cần chia tập dữ liệu thành tập huấn luyện và tập kiểm tra. Lý tưởng nhất là tỷ lệ là 80-20, tức là 80% tập huấn luyện và 20% tập kiểm tra.
Bước 2 − Tiếp theo, chúng ta cần huấn luyện mô hình của mình bằng tập huấn luyện.
Bước 3 −Cuối cùng, chúng tôi sẽ sử dụng bộ kiểm tra để đo lường hiệu suất của mô hình của mình. Sự khác biệt duy nhất giữa kỹ thuật tập dữ liệu Hold-out và kỹ thuật xác thực k-cross là quy trình trên thường được lặp lại từ 5 đến 10 lần và cuối cùng, mức trung bình được tính trên tất cả các chỉ số hiệu suất. Mức trung bình đó sẽ là chỉ số hiệu suất cuối cùng.
Chúng ta hãy xem một ví dụ với một tập dữ liệu nhỏ – Ví dụ
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]))
đầu ra
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]
Như chúng ta thấy, do sử dụng kịch bản kiểm tra và đào tạo thực tế hơn, kỹ thuật xác thực chéo k-fold mang lại cho chúng ta phép đo hiệu suất ổn định hơn nhiều, nhưng nhược điểm là mất rất nhiều thời gian khi xác thực các mô hình học sâu.
CNTK không hỗ trợ xác thực k-cross, do đó chúng tôi cần viết tập lệnh của riêng mình để thực hiện việc đó.
Phát hiện trang bị thiếu và thừa
Cho dù chúng tôi sử dụng tập dữ liệu phát tay hay kỹ thuật xác thực chéo k-fold, chúng tôi sẽ phát hiện ra rằng kết quả đầu ra cho các số liệu sẽ khác nhau đối với tập dữ liệu được sử dụng để đào tạo và tập dữ liệu được sử dụng để xác thực.
Phát hiện trang bị quá mức
Hiện tượng được gọi là trang bị quá mức là tình huống trong đó mô hình ML của chúng tôi mô hình hóa dữ liệu huấn luyện cực kỳ tốt nhưng không hoạt động tốt trên dữ liệu thử nghiệm, tức là không thể dự đoán dữ liệu thử nghiệm.
Điều này xảy ra khi mô hình ML học một mẫu cụ thể và độ nhiễu từ dữ liệu huấn luyện đến mức ảnh hưởng tiêu cực đến khả năng khái quát hóa của mô hình đó từ dữ liệu huấn luyện sang dữ liệu mới, tức là dữ liệu chưa nhìn thấy. Ở đây, nhiễu là thông tin không liên quan hoặc tính ngẫu nhiên trong tập dữ liệu.
Sau đây là hai cách mà chúng tôi có thể phát hiện thời tiết mà mô hình của chúng tôi có phù hợp hay không –
- Mô hình overfit sẽ hoạt động tốt trên cùng các mẫu mà chúng tôi đã sử dụng để đào tạo, nhưng nó sẽ hoạt động rất kém trên các mẫu mới, tức là các mẫu khác với mẫu đào tạo.
- Mô hình quá phù hợp trong quá trình xác thực nếu số liệu trên tập kiểm tra thấp hơn số liệu tương tự mà chúng tôi sử dụng trên tập huấn luyện của mình.
Phát hiện sự thiếu trang bị
Một tình huống khác có thể phát sinh trong ML của chúng tôi là trang bị chưa đầy đủ. Đây là tình huống mà mô hình ML của chúng tôi không mô hình hóa tốt dữ liệu đào tạo và không dự đoán được kết quả đầu ra hữu ích. Khi chúng tôi bắt đầu đào tạo kỷ nguyên đầu tiên, mô hình của chúng tôi sẽ không đủ trang bị nhưng sẽ trở nên ít trang bị hơn khi quá trình đào tạo diễn ra. Một trong những cách để phát hiện xem mô hình của chúng tôi có phù hợp hay không là xem xét các số liệu cho tập huấn luyện và tập kiểm tra. Mô hình của chúng tôi sẽ không phù hợp nếu số liệu trên tập kiểm tra cao hơn số liệu trên tập huấn luyện.