2010-06-04 33 views
89

Tôi đang sử dụng this library để thực hiện tác nhân học tập.Sự khác biệt giữa đào tạo, xác nhận và kiểm tra tập hợp, trong mạng nơron là gì?

Tôi đã tạo ra các trường hợp đào tạo, nhưng tôi không biết chắc chắn những gì các xác nhận và kiểm tra bộ được.
Giáo viên nói:

70% nên có những trường hợp tàu, 10% sẽ là trường hợp thử nghiệm và phần còn lại 20% nên có những trường hợp xác nhận.

chỉnh sửa

tôi có mã này cho việc đào tạo, nhưng tôi không có ý tưởng khi đến dừng đào tạo.

def train(self, train, validation, N=0.3, M=0.1): 
    # N: learning rate 
    # M: momentum factor 
    accuracy = list() 
    while(True): 
     error = 0.0 
     for p in train: 
      input, target = p 
      self.update(input) 
      error = error + self.backPropagate(target, N, M) 
     print "validation" 
     total = 0 
     for p in validation: 
      input, target = p 
      output = self.update(input) 
      total += sum([abs(target - output) for target, output in zip(target, output)]) #calculates sum of absolute diference between target and output 

     accuracy.append(total) 
     print min(accuracy) 
     print sum(accuracy[-5:])/5 
     #if i % 100 == 0: 
     print 'error %-14f' % error 
     if ? < ?: 
      break 

chỉnh sửa

tôi có thể nhận được một lỗi trung bình 0,2 với dữ liệu xác nhận, sau khi có 20 lần lặp đào tạo, mà nên là 80%?

lỗi trung bình = tổng của sự khác biệt tuyệt đối giữa mục tiêu xác thực và đầu ra, do đầu vào/kích thước dữ liệu xác thực của dữ liệu xác thực.

1 
     avg error 0.520395 
     validation 
     0.246937882684 
2 
     avg error 0.272367 
     validation 
     0.228832420879 
3 
     avg error 0.249578  
     validation 
     0.216253590304 
     ... 
22 
     avg error 0.227753 
     validation 
     0.200239244714 
23 
     avg error 0.227905  
     validation 
     0.199875013416 
+1

"... phải là 80%?" Không, lỗi trung bình và phần trăm chính xác là hai điều khác nhau. Giả sử giá trị đích của bạn là 5.0 và nơron của bạn trả về 4.8 (tức là một lỗi 0.2). Tùy thuộc vào dữ liệu một lỗi của 0,2 có thể chấp nhận được, vì vậy nếu lỗi là đủ nhỏ thì bạn có thể xem xét trường hợp đó được chỉ định chính xác. Vì vậy, nếu bạn có 10 mục tiêu và lỗi phân loại của bạn cho 7 trong số đó nằm trong phạm vi có thể chấp nhận được, thì bạn đã phân loại được 70% dữ liệu chính xác. – Kiril

+0

Tiêu chí chấm dứt theo yêu cầu của giáo viên của bạn là gì? – Kiril

Trả lời

158

Bộ đào tạo và xác thực được sử dụng trong quá trình đào tạo.

for each epoch 
    for each training data instance 
     propagate error through the network 
     adjust the weights 
     calculate the accuracy over training data 
    for each validation data instance 
     calculate the accuracy over the validation data 
    if the threshold validation accuracy is met 
     exit training 
    else 
     continue training 

Sau khi bạn đã hoàn thành khóa đào tạo, khi đó bạn chạy với bộ thử nghiệm của mình và xác minh rằng độ chính xác là đủ.

Bộ đào tạo: bộ dữ liệu này được sử dụng để điều chỉnh trọng số trên mạng thần kinh.

Bộ xác thực: bộ dữ liệu này được sử dụng để giảm thiểu quá mức. Bạn không điều chỉnh trọng số của mạng bằng tập dữ liệu này, bạn chỉ xác minh rằng bất kỳ sự gia tăng nào về độ chính xác trên tập dữ liệu đào tạo thực sự làm tăng độ chính xác so với tập dữ liệu chưa được hiển thị cho mạng trước đó, hoặc ít nhất mạng đã không được đào tạo về nó (tức là tập hợp dữ liệu xác nhận). Nếu độ chính xác trên tập dữ liệu đào tạo tăng lên, nhưng độ chính xác trên thì tập dữ liệu hợp lệ vẫn giữ nguyên hoặc giảm, khi đó bạn đang overfitting mạng thần kinh của mình và bạn nên ngừng đào tạo.

Bộ kiểm tra: bộ dữ liệu này chỉ được sử dụng để kiểm tra giải pháp cuối cùng nhằm xác nhận công suất tiên đoán thực tế của mạng.

+0

bạn có thể xem mã của tôi không? – Daniel

+1

@Daniel, ngôn ngữ đó là gì? Tôi không quen thuộc với cú pháp đó ... – Kiril

+0

python của nó: xi không thể có được một tiêu chí dừng .. các giá trị hội tụ .. nhưng luôn luôn với một số flutuation .. – Daniel

-4

Tôi tin rằng trong chế độ đào tạo, bạn cho phép các nút trong mạng của bạn thay đổi giá trị của trọng lượng đầu vào hoặc đầu ra của chúng. Bạn cũng cung cấp phản hồi tích cực hoặc tiêu cực để thay đổi trọng số. Nói cách khác, bạn cung cấp cho một bộ đầu vào, và đầu ra phản hồi với đầu ra XOR ed so với true/false đã biết, sau đó NOT đó. Nói cách khác, khi câu trả lời phù hợp, bạn đưa ra phản hồi tích cực và khi họ không đồng ý, bạn đưa ra phản hồi tiêu cực.

Không chắc chắn sự khác nhau giữa các trường hợp kiểm tra/xác thực là khác với bạn có thể biết câu trả lời cho các trường hợp xác thực và sử dụng chúng để xác thực đầu ra, có thể là trường hợp kiểm tra bạn không biết câu trả lời và chấp nhận câu trả lời từ mạng lưới thần kinh đã được xác thực của bạn ...

40

Đào tạo thiết: Một tập hợp các ví dụ sử dụng cho việc học tập, đó là để phù hợp với các thông số [ví dụ, trọng lượng] của phân loại.

Validation thiết: Một tập hợp các ví dụ sử dụng để điều chỉnh các thông số [ví dụ, kiến ​​trúc, không trọng lượng] của một bộ phân loại, ví dụ để chọn số lượng các đơn vị ẩn trong một mạng lưới thần kinh.

Bộ kiểm tra: Một số ví dụ chỉ được sử dụng để đánh giá hiệu suất [tổng quát] của một trình phân loại được chỉ định đầy đủ.

Từ ftp://ftp.sas.com/pub/neural/FAQ1.txt phần "gì là dân số, mẫu, tập huấn luyện, thiết kế bộ, xác nhận"

Bề mặt lỗi sẽ khác nhau cho bộ khác nhau của dữ liệu từ thiết lập dữ liệu của bạn (học tập hàng loạt) . Do đó, nếu bạn tìm thấy một minima địa phương rất tốt cho dữ liệu tập hợp thử nghiệm của bạn, đó có thể không phải là một điểm rất tốt, và có thể là một điểm rất xấu trên bề mặt được tạo ra bởi một số tập dữ liệu khác cho cùng một vấn đề. Vì vậy, bạn cần tính toán một mô hình như vậy mà không chỉ tìm thấy một cấu hình trọng lượng tốt cho tập huấn luyện mà còn có thể dự đoán dữ liệu mới (không có trong tập huấn luyện) với lỗi tốt. Nói cách khác, mạng có thể để khái quát hóa các ví dụ sao cho nó tìm hiểu dữ liệu và không đơn giản ghi nhớ hoặc tải tập huấn luyện bằng cách ghi đè dữ liệu đào tạo.

Tập dữ liệu xác thực là tập hợp dữ liệu cho hàm bạn muốn tìm hiểu, mà bạn không trực tiếp sử dụng để đào tạo mạng. Bạn đang đào tạo mạng với một bộ dữ liệu mà bạn gọi là tập dữ liệu đào tạo. Nếu bạn đang sử dụng thuật toán dựa trên gradient để đào tạo mạng thì bề mặt lỗi và gradient ở một số điểm sẽ hoàn toàn phụ thuộc vào tập dữ liệu huấn luyện, do đó tập dữ liệu đào tạo đang được sử dụng trực tiếp để điều chỉnh trọng số. Để đảm bảo bạn không vượt quá mạng, bạn cần phải nhập bộ dữ liệu hợp lệ vào mạng và kiểm tra xem lỗi có nằm trong phạm vi nào đó không. Bởi vì bộ xác nhận không được sử dụng trực tiếp để điều chỉnh trọng số của netowork, do đó một lỗi tốt cho việc xác thực và cũng là bộ kiểm tra cho thấy mạng dự đoán tốt cho các ví dụ về tập huấn, cũng được dự kiến ​​sẽ hoạt động tốt khi mới ví dụ được trình bày cho mạng không được sử dụng trong quá trình đào tạo.

Dừng sớm là cách dừng đào tạo. Có các biến thể khác nhau, phác thảo chính là, cả lỗi đào tạo và các lỗi xác thực được giám sát, lỗi đào tạo giảm ở mỗi lần lặp lại (backprop và anh em) và lúc đầu lỗi xác nhận bị giảm. Việc đào tạo được dừng lại tại thời điểm lỗi xác nhận bắt đầu tăng lên. Cấu hình trọng lượng tại thời điểm này cho biết một mô hình, dự đoán dữ liệu đào tạo tốt, cũng như dữ liệu mà không được xem bởi mạng. Nhưng vì dữ liệu xác thực thực sự ảnh hưởng đến cấu hình trọng lượng gián tiếp để chọn cấu hình trọng lượng. Đây là nơi bộ kiểm tra xuất hiện. Bộ dữ liệu này không bao giờ được sử dụng trong quá trình đào tạo. Khi một mô hình được chọn dựa trên bộ xác thực, dữ liệu bộ thử nghiệm được áp dụng trên mô hình mạng và lỗi cho bộ này được tìm thấy.Lỗi này là một đại diện của lỗi mà chúng ta có thể mong đợi từ dữ liệu hoàn toàn mới cho cùng một vấn đề.

EDIT:

Ngoài ra, trong trường hợp bạn không có đủ dữ liệu cho một bộ xác nhận, bạn có thể sử dụng crossvalidation để điều chỉnh các thông số cũng như ước tính kiểm tra lỗi.

+5

Tôi biết tôi không phải đăng những ý kiến ​​vô nghĩa như thế này, nhưng muốn nói với bạn rằng tôi đánh giá cao câu trả lời này rất nhiều :) – Llamageddon

2

Bộ xác thực chéo được sử dụng để chọn mô hình, ví dụ, chọn mô hình đa thức với số lượng lỗi ít nhất cho một tập hợp thông số nhất định. Bộ thử nghiệm sau đó được sử dụng để báo cáo lỗi tổng quát trên mô hình được chọn. Từ đây: https://www.coursera.org/learn/machine-learning/lecture/QGKbr/model-selection-and-train-validation-test-sets

+1

Tôi đang tham gia các lớp học của Andrew Ng và tôi đồng ý với bạn. Bộ xác thực phải là một phần của khóa đào tạo. Nó chỉ nên được sử dụng để biến hyperparameters. –

Các vấn đề liên quan