Học Semi có giám sát học tập - có phải là quá mức?


21

Tôi đang đọc báo cáo về giải pháp chiến thắng của một cuộc thi Kaggle ( Phân loại phần mềm độc hại ). Các báo cáo có thể được tìm thấy trong bài diễn đàn này . Vấn đề là một vấn đề phân loại (chín lớp, số liệu là tổn thất logarit) với 10000 phần tử trong tập tàu, 10000 phần tử trong tập kiểm tra.

Trong cuộc thi, các người mẫu được đánh giá so với 30% của bộ thử nghiệm. Một yếu tố quan trọng khác là các mô hình đã hoạt động rất tốt (độ chính xác gần 100%)

Các tác giả đã sử dụng các kỹ thuật sau đây:

Một kỹ thuật quan trọng khác mà chúng tôi đưa ra là Học tập Semisupervised. Trước tiên, chúng tôi tạo nhãn giả của bộ thử nghiệm bằng cách chọn xác suất tối đa của mô hình tốt nhất của chúng tôi. Sau đó, chúng tôi dự đoán bộ thử nghiệm một lần nữa theo kiểu xác thực chéo với cả dữ liệu huấn luyện và dữ liệu thử nghiệm. Ví dụ: tập dữ liệu kiểm tra được chia thành 4 phần A, B, C và D. Chúng tôi sử dụng toàn bộ dữ liệu đào tạo và dữ liệu kiểm tra A, B, C với nhãn giả của chúng, cùng với tập huấn luyện mới và chúng tôi dự đoán kiểm tra đặt D.

Phương pháp tương tự được sử dụng để dự đoán A, B và C. Cách tiếp cận này, được phát minh bởi Xiaozhou, hoạt động tốt một cách đáng ngạc nhiên và nó làm giảm mất xác nhận chéo cục bộ, mất LB công cộng và mất LB riêng. Mô hình học tập Semisupervised tốt nhất có thể đạt được 0,0023 trong mất nhật ký LB riêng, đây là điểm số tốt nhất trong tất cả các giải pháp của chúng tôi.

Tôi thực sự không thấy làm thế nào nó có thể cải thiện kết quả. Có phải vì 30% bộ kiểm tra đã bị "rò rỉ" và đó là một cách để sử dụng thông tin này?

Hoặc có bất kỳ lý do lý thuyết giải thích tại sao nó hoạt động?

Câu trả lời:


8

Nó không có vẻ là quá mức. Theo trực giác, quá mức ngụ ý đào tạo cho các quirks (tiếng ồn) của tập huấn luyện và do đó làm tồi tệ hơn trên một bộ kiểm tra tổ chức không chia sẻ các quirks này. Nếu tôi hiểu những gì đã xảy ra, họ đã không làm bất ngờ - kém về dữ liệu kiểm tra được tổ chức và do đó, theo quy tắc thực nghiệm là loại bỏ quá mức. (Họ có một vấn đề khác, cuối cùng tôi sẽ đề cập, nhưng nó không quá mức.)

Vì vậy, bạn đã đúng rằng nó tận dụng dữ liệu thử nghiệm có sẵn (30%?). Câu hỏi là: làm thế nào?

Nếu dữ liệu kiểm tra có sẵn có nhãn được liên kết với nó, bạn chỉ cần gộp dữ liệu đó vào dữ liệu đào tạo của mình và phóng to dữ liệu đào tạo, nói chung sẽ mang lại kết quả tốt hơn một cách rõ ràng. Không có thành tựu thực sự ở đó.

Lưu ý rằng các nhãn sẽ không phải được liệt kê rõ ràng nếu bạn có quyền truy cập vào điểm chính xác. Bạn có thể chỉ cần leo lên độ chính xác bằng cách liên tục gửi điểm, đó là những gì mọi người đã làm trong quá khứ với các cuộc thi được thiết kế kém.

Cho rằng dữ liệu thử nghiệm khả dụng không có nhãn liên quan đến nó - trực tiếp hoặc gián tiếp - có ít nhất hai khả năng khác:

Đầu tiên, đây có thể là một phương pháp tăng cường gián tiếp khi bạn tập trung vào các trường hợp dự đoán của bạn chỉ với dữ liệu huấn luyện không đồng ý với dự đoán của bạn với dữ liệu kiểm tra giả có nhãn giả.

Thứ hai, nó có thể là học tập bán giám sát đơn giản. Theo trực giác: bạn có thể sử dụng mật độ dữ liệu chưa được gắn nhãn để giúp định hình ranh giới phân loại của phương pháp được giám sát. Xem hình minh họa ( https://en.wikipedia.org/wiki/Semi-supervised_learning#/media/File:Example_of_unlabeled_data_in_semisupervised_learning.png ) trong định nghĩa Wikipedia về học bán giám sát để làm rõ.

NHƯNG điều này không có nghĩa là không có một mẹo ở đây. Và thủ thuật đó xuất phát từ định nghĩa về dữ liệu đào tạo và kiểm tra. Về nguyên tắc, dữ liệu đào tạo đại diện cho dữ liệu mà bạn có thể có trong tay khi bạn sẵn sàng triển khai mô hình của mình. Và dữ liệu thử nghiệm đại diện cho dữ liệu trong tương lai sẽ đi vào hệ thống của bạn sau khi nó hoạt động.

Trong trường hợp đó, đào tạo về dữ liệu thử nghiệm là một rò rỉ từ tương lai , nơi bạn đang tận dụng lợi thế của dữ liệu mà bạn chưa từng thấy. Đây là một vấn đề lớn trong thế giới thực, nơi một số biến có thể không tồn tại cho đến sau khi thực tế (giả sử sau khi điều tra được thực hiện) hoặc có thể được cập nhật vào một ngày sau đó.

Vì vậy, họ đang chơi trò chơi meta ở đây: những gì họ đã làm là hợp pháp trong các quy tắc của cuộc thi, bởi vì họ đã được cấp quyền truy cập vào một số dữ liệu thử nghiệm. Nhưng nó không hợp pháp trong thế giới thực, nơi thử nghiệm thực sự là nó hoạt động tốt như thế nào trong tương lai, trên dữ liệu mới.


2

Không, nó không phải là quá mức.

Tôi nghĩ rằng lo lắng của bạn ở đây là mô hình đang cảm thấy dữ liệu thay vì mô hình hóa nó. Điều đó phụ thuộc vào độ phức tạp của mô hình (vẫn giữ nguyên) và kích thước của dữ liệu. Nó xảy ra khi mô hình quá phức tạp và / hoặc khi dữ liệu đào tạo quá nhỏ, không có trường hợp nào ở đây. Thực tế là lỗi kiểm tra (lỗi xác thực chéo) được giảm thiểu sau khi học bán giám sát nên ngụ ý rằng nó không được trang bị quá mức.

Về lý do tại sao một cách tiếp cận như vậy thậm chí còn hiệu quả
Cách tiếp cận được sử dụng ở đây không phải là ngoài thế giới, tôi đã thấy nhiều người làm điều này trong nhiều cuộc thi học máy (Xin lỗi, tôi đã thử, nhưng không thể nhớ lại nơi tôi đã thấy điều này).
Khi bạn dự đoán một phần dữ liệu thử nghiệm và bao gồm trong phần đào tạo, mô hình sẽ được tiếp xúc với các tính năng mới. Trong trường hợp này, dữ liệu kiểm tra cũng lớn như dữ liệu đào tạo, không có gì ngạc nhiên khi họ đạt được rất nhiều bằng cách học bán giám sát.

Hy vọng điều này giải thích
Cảm ơn


Bạn cần xác định rõ "mô hình". Điều này giống như toàn bộ vấn đề Tự do Tổng quát hóa ( pegasus.cc.ucf.edu/~lni/sta6236/Ye1998.pdf ), trong đó ai đó chỉ vào "mô hình cuối cùng", có vẻ đơn giản, nhưng thực sự có rất nhiều phức tạp nhồi vào quá trình. Bản năng của tôi là bạn không thể bỏ qua phần còn lại của quy trình và chỉ vào "mô hình cuối cùng", cho rằng nó không phức tạp hơn "mô hình cuối cùng" mà không có bước bán giám sát, rồi tiến hành. Cải thiện kết quả kiểm tra ngoài mẫu một chỉ số tốt, như bạn nói.
Wayne

2

Nó không phải là quá phù hợp (tùy thuộc vào định nghĩa). Thông tin mục tiêu của bộ thử nghiệm được bảo tồn. Bán giám sát cho phép tạo ra một bộ dữ liệu tổng hợp bổ sung để huấn luyện mô hình trên. Trong phương pháp mô tả, dữ liệu đào tạo ban đầu được trộn không cân bằng với tổng hợp theo tỷ lệ 4: 3. Do đó, nếu chất lượng của dữ liệu tổng hợp kém, cách tiếp cận sẽ trở thành thảm họa. Tôi đoán cho bất kỳ vấn đề nào mà dự đoán không chắc chắn, tập dữ liệu tổng hợp sẽ có độ chính xác kém. Nếu cấu trúc cơ bản là rất phức tạp và hệ thống có độ ồn thấp, nó có thể giúp tạo ra dữ liệu tổng hợp, tôi đoán vậy. Tôi nghĩ rằng học bán giám sát là khá lớn trong học tập sâu (không phải chuyên môn của tôi), trong đó đại diện cho tính năng cũng sẽ được học.

Tôi đã cố gắng tái tạo độ chính xác tăng lên với đào tạo semi.supervised trên một số bộ dữ liệu với cả rf và xgboost mà không có kết quả khả quan nào. [Hãy thoải mái chỉnh sửa mã của tôi.] Tôi nhận thấy sự cải thiện độ chính xác thực tế khi sử dụng bán giám sát là khá khiêm tốn trong báo cáo kaggle, có thể là ngẫu nhiên?

rm(list=ls())
#define a data structure
fy2 = function(nobs=2000,nclass=9) sample(1:nclass-1,nobs,replace=T)
fX2 = function(y,noise=.05,twist=8,min.width=.7) {
  x1 = runif(length(y)) * twist
  helixStart = seq(0,2*pi,le=length(unique(y))+1)[-1]
  x2 = sin(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  x3 = cos(helixStart[y+1]+x1)*(abs(x1)+min.width) + rnorm(length(y))*noise
  cbind(x1,x2,x3)
}

#define a wrapper to predict n-1 folds of test set and retrain and predict last fold  
smartTrainPred = function(model,trainX,trainy,testX,nfold=4,...) {
  obj = model(trainX,trainy,...)
  folds = split(sample(1:dim(trainX)[1]),1:nfold)
  predDF = do.call(rbind,lapply(folds, function(fold) {
    bigX      = rbind(trainX ,testX[-fold,])
    bigy      = c(trainy,predict(obj,testX[-fold,]))
    if(is.factor(trainy)) bigy=factor(bigy-1)
    bigModel  = model(bigX,bigy,...)
    predFold  = predict(bigModel,testX[fold,])
    data.frame(sampleID=fold, pred=predFold)
  }))
  smartPreds = predDF[sort(predDF$sampleID,ind=T)$ix,2]
}

library(xgboost)
library(randomForest)

#complex but perfect separatable
trainy = fy2(); trainX = fX2(trainy)
testy  = fy2();  testX = fX2(testy )
pairs(trainX,col=trainy+1)

nhập mô tả hình ảnh ở đây

#try with randomForest
rf = randomForest(trainX,factor(trainy))
normPred = predict(rf,testX)
cat("\n supervised rf", mean(testy!=normPred))
smartPred = smartTrainPred(randomForest,trainX,factor(trainy),testX,nfold=4)
cat("\n semi-supervised rf",mean(testy!=smartPred))

#try with xgboost
xgb = xgboost(trainX,trainy,
              nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
normPred = predict(xgb,testX)
cat("\n supervised xgboost",mean(testy!=normPred))

smartPred = smartTrainPred(xgboost,trainX,trainy,testX,nfold=4,
                           nrounds=35,verbose=F,objective="multi:softmax",num_class=9)
cat("\n semi-supervised xgboost",mean(testy!=smartPred))



printing prediction error:
 supervised rf 0.007
 semi-supervised rf 0.0085
 supervised xgboost 0.046
 semi-supervised xgboost 0.049

1

Theo định nghĩa này: "Quá mức xảy ra khi một mô hình thống kê mô tả lỗi ngẫu nhiên hoặc nhiễu thay vì mối quan hệ cơ bản." (Wikipedia), giải pháp không phải là quá mức.

Nhưng trong tình huống này:
- Dữ liệu thử nghiệm là một luồng các mặt hàng và không phải là một bộ các mặt hàng cố định.
HOẶC
- Quá trình dự đoán không được chứa giai đoạn học tập (ví dụ do vấn đề về hiệu suất)

Giải pháp được đề cập là quá mức. Bởi vì độ chính xác của mô hình là nhiều hơn các tình huống thực tế.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.