CNTK - Hiệu suất đo lường

Chương này sẽ giải thích cách đo lường hiệu suất của mô hình trong CNKT.

Chiến lược xác thực hiệu suất mô hình

Sau khi xây dựng mô hình ML, chúng tôi đã sử dụng để đào tạo nó bằng cách sử dụng một bộ mẫu dữ liệu. Vì quá trình đào tạo này, mô hình ML của chúng tôi học 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ể tệ hơn.

Nhưng mô hình cũng phải hoạt động tốt đối 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 chúng tôi sử dụng cho mục đích đào tạo. Đó là lý do, chúng ta nên xác nhận 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 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 để xác thực NN.

Tập dữ liệu tạm dừng

Đây là một trong những phương pháp dễ nhất để tạo tập dữ liệu để xác thực NN. Như tên của nó, 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ử 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. Biểu đồ sau đây cho thấy tỷ lệ giữa các mẫu đào tạo và xác nhận:

Mô hình tập dữ liệu tạm dừng đảm bảo rằng chúng tôi có đủ dữ liệu để đào tạo mô hình ML của mình và đồng thời chúng tôi sẽ có một 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 thử nghiệm, bạn nên 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 tạm dừng riêng bằng cách sử dụng train_test_split chức năng từ scikit-learn thư viện.

Thí 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 ta cần phải ngẫu nhiên hóa thứ tự của tập dữ liệu mỗi khi chúng ta đào tạo 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 bộ tạo số ngẫu nhiên.

  • Thứ tự mà chúng tôi cung cấp các mẫu cho NN trong quá trình đào tạo ảnh hưởng rất nhiều đến hoạt động của NN.

Nhược điểm chính của việc sử dụng kỹ thuật tập dữ liệu tạm dừng là nó không đáng tin cậy vì đôi khi chúng ta nhận được kết quả rất tốt nhưng đôi khi, chúng ta lại nhận được kết quả xấu.

Xác thực chéo K-lần

Để 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 được gọi là xác thực chéo K-lần. Về bản chất, kỹ thuật xác nhận chéo K-lần 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ó -

Làm việc của xác nhận chéo K-lần

Hoạt động của xác thực chéo K-lần có thể được hiểu với sự trợ giúp của các bước sau:

Step 1- Giống như trong kỹ thuật tập dữ liệu Hand-out, trong kỹ thuật xác nhận chéo K-fold, trước tiên chúng ta cần chia tập dữ liệu thành một tập huấn luyện và kiểm tra. Lý tưởng nhất, tỷ lệ là 80-20, tức là 80% tập huấn luyện và 20% tập kiểm tra.

Step 2 - Tiếp theo, chúng ta cần huấn luyện mô hình của mình bằng cách sử dụng tập huấn luyện.

Step 3− Cuối cùng, chúng tôi sẽ sử dụng bộ thử nghiệm để đo lường hiệu suất của mô hình của chúng tôi. 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à quá trình trên thường được lặp lại từ 5 đến 10 lần và cuối cùng, giá trị 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.

Hãy để chúng tôi xem một ví dụ với một tập dữ liệu nhỏ -

Thí 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, vì sử dụng kịch bản đào tạo và thử nghiệm thực tế hơn, kỹ thuật xác thực chéo k-lần mang lại cho chúng ta phép đo hiệu suất ổn định hơn nhiều nhưng mặt trái của nó là mất rất nhiều thời gian khi xác thự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 để làm như vậy.

Phát hiện trang bị thiếu và trang bị 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-lần, chúng tôi sẽ phát hiện ra rằng kết quả đầu ra cho các chỉ số 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 nhận.

Phát hiện overfitting

Hiện tượng được gọi là overfitting là một 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 biệt 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.

Nó xảy ra khi một 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ư vậy, nó tác động tiêu cực đến khả năng tổng quát hóa từ dữ liệu huấn luyện thành dữ liệu mới của mô hình đó, tức là dữ liệu không 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 với sự trợ giúp của 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ó quá phù hợp hay không -

  • Mẫu overfit sẽ hoạt động tốt trên cùng một mẫu mà chúng tôi đã sử dụng để đào tạo, nhưng nó sẽ hoạt động rất tệ 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 bị thừa trong quá trình xác thực nếu chỉ số trên tập hợp thử nghiệm thấp hơn chỉ số tương tự mà chúng tôi sử dụng trên tập hợp đào tạo của mình.

Phát hiện trang bị thiếu

Một tình huống khác có thể phát sinh trong ML của chúng tôi là trang bị kém. Đây là tình huống mà mô hình ML của chúng tôi không mô hình hóa dữ liệu đào tạo tốt 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 phù hợp, nhưng sẽ trở nên kém phù hợp hơn theo tiến trình đào tạo.

Một trong những cách để phát hiện mô hình của chúng tôi có phù hợp hay không là xem xét các chỉ số cho tập huấn luyện và tập thử nghiệm. Mô hình của chúng tôi sẽ không phù hợp nếu chỉ số trên tập hợp thử nghiệm cao hơn chỉ số trên tập huấn luyện.