Có nên rút mẫu ngẫu nhiên rút ra cho lưới thần kinh đào tạo hàng loạt nhỏ mà không cần thay thế?


18

Chúng tôi xác định một kỷ nguyên là đã trải qua toàn bộ tất cả các mẫu đào tạo có sẵn và kích thước lô nhỏ là số lượng mẫu mà chúng tôi lấy trung bình để tìm các bản cập nhật về trọng số / độ lệch cần thiết để giảm độ dốc.

Câu hỏi của tôi là liệu chúng ta có nên rút ra mà không thay thế từ tập hợp các ví dụ đào tạo để tạo ra từng lô nhỏ trong một kỷ nguyên hay không. Tôi cảm thấy như chúng ta nên tránh thay thế để đảm bảo chúng ta thực sự "vẽ tất cả các mẫu" để đáp ứng yêu cầu cuối kỷ nguyên, nhưng gặp khó khăn khi tìm câu trả lời dứt khoát bằng cách này hay cách khác.

Tôi đã thử googling và đọc Ch. 1 trong Mạng lưới thần kinh và học tập sâu của Nielsen nhưng chưa tìm thấy câu trả lời rõ ràng. Trong văn bản đó, Nielsen không chỉ định rằng việc lấy mẫu ngẫu nhiên được thực hiện mà không cần thay thế, nhưng dường như ngụ ý rằng đó là.

Một chính thức rõ ràng hơn về đào tạo trong kỷ nguyên có thể được tìm thấy ở đây nếu muốn - /stats//a/141265/131630

Chỉnh sửa: câu hỏi này có vẻ giống với tôi nhưng không rõ làm thế nào để áp dụng thực tế rằng tính tuyến tính của sự kỳ vọng không quan tâm đến sự độc lập trong tình huống này - Nên lấy mẫu xảy ra có hoặc không có thay thế


Trừ khi có một lý do cụ thể về dữ liệu, mini-batch cho đào tạo mạng lưới thần kinh luôn được rút ra mà không cần thay thế. Ý tưởng là bạn muốn ở đâu đó giữa chế độ hàng loạt, tính toán độ dốc với toàn bộ tập dữ liệu và SGD, chỉ sử dụng một ngẫu nhiên.
horaceT

SGD không bị hạn chế sử dụng một mẫu ngẫu nhiên. Quá trình đó được gọi là đào tạo trực tuyến. "Một phiên bản cực đoan của độ dốc dốc là sử dụng kích thước lô nhỏ chỉ 1 ... Quy trình này được gọi là học trực tuyến, trực tuyến hoặc tăng dần." Ngoài ra, "Một ý tưởng được gọi là gốc dốc ngẫu nhiên có thể được sử dụng để tăng tốc độ học tập. Ý tưởng là ước tính độ dốc ∇C bằng cách tính [nó] cho một mẫu nhỏ các đầu vào đào tạo được chọn ngẫu nhiên. Bằng cách lấy trung bình trên mẫu nhỏ này .. chúng tôi có thể nhanh chóng có được ước tính tốt về độ dốc thực sự ". Cả hai trích dẫn từ Nielsen Ch. 1.
bobo

Câu trả lời:


13

Một phân tích lý thuyết tốt về có và không có các lược đồ thay thế trong bối cảnh các thuật toán lặp dựa trên các lần rút ngẫu nhiên (có bao nhiêu mạng lưới thần kinh sâu phân biệt (DNN) được đào tạo chống lại) có thể được tìm thấy ở đây

Nói tóm lại, hóa ra việc lấy mẫu mà không thay thế, dẫn đến sự hội tụ nhanh hơn so với lấy mẫu bằng thay thế.

Tôi sẽ đưa ra một phân tích ngắn ở đây dựa trên ví dụ về đồ chơi mà họ cung cấp: Hãy nói rằng chúng tôi muốn tối ưu hóa chức năng mục tiêu sau:

xopt=argminx12i=1N(xyi)2

trong đó mục tiêu . Trong ví dụ này, chúng tôi đang cố gắng giải quyết nhãn tối ưu , chox N y iyiN(μ,σ2)xNyi .

Ok, vì vậy nếu chúng ta trực tiếp giải quyết tối ưu ở trên, thì chúng ta sẽ lấy đạo hàm của hàm mất ở đây, đặt nó thành 0 và giải choxxx . Vì vậy, ví dụ của chúng tôi ở trên, mất mát là

L=12i=1N(xyi)2

và nó là phái sinh đầu tiên sẽ là:

δLδx=i=1N(xyi)

Đặt thành 0 và giải quyết cho xδLδxx , mang lại:

xopt=1Ni=1Nyi

Nói cách khác, giải pháp tối ưu không gì khác ngoài giá trị trung bình mẫu của tất cả các mẫu củayNy .

Bây giờ, nếu chúng ta không thể thực hiện tất cả các tính toán trên cùng một lúc, chúng ta sẽ phải thực hiện đệ quy, thông qua phương trình cập nhật gốc dốc bên dưới:

xi=xi1λi(f(xi1))

và chỉ cần chèn các điều khoản của chúng tôi ở đây mang lại:

xi=xi1λi(xi1yi)

Nếu chúng tôi chạy ở trên cho tất cả , thì chúng tôi đang thực hiện hiệu quả bản cập nhật này mà không cần thay thế. Sau đó, câu hỏi trở thành, chúng ta có thể nhận được giá trị tối ưu của theo cách này không? (Hãy nhớ rằng giá trị tối ưu của không là gì ngoài giá trị trung bình mẫu của ). Câu trả lời là có, nếu bạn để . Để xem, điều này chúng tôi mở rộng: x x y λ i = 1 / ii1,2,...Nxxyλi=1/i

xi=xi1λi(xi1yi) xi=xi11i(xi1yi) xi=ixi1(xi1yi)i xi=(i1)xi1+yii ixi=(i1)xi1+yi 

Tuy nhiên, phương trình cuối cùng không có gì ngoài công thức tính trung bình! Do đó, khi chúng tôi lặp lại tập hợp từ , , v.v., tất cả các cách để , chúng tôi sẽ thực hiện các cập nhật của mình mà không cần thay thế công thức cập nhật của chúng tôi cung cấp cho chúng tôi giải pháp tối ưu là , đó là ý nghĩa mẫu!i = 2 i = N xi=1i=2i=Nx

NxN=(N1)xN1+yN==>xN=1Ni=1Nyi=μ

Tuy nhiên, ngược lại, nếu chúng ta thực sự vẽ bằng thay thế, thì trong khi các lần rút của chúng ta sẽ thực sự độc lập, giá trị tối ưu sẽ khác với trung bình (tối ưu) và lỗi vuông sẽ được đưa ra bởi:xNμ

E{(xNμ)2}

đó sẽ là một giá trị tích cực và ví dụ đồ chơi đơn giản này có thể được mở rộng đến các kích thước cao hơn. Điều này có hậu quả là chúng tôi muốn thực hiện lấy mẫu mà không cần thay thế như một giải pháp tối ưu hơn.

Hy vọng điều này làm rõ nó thêm một số!


Ví dụ này sử dụng khá nhiều giả định, tức là việc sử dụng sai số bình phương và độ lồi của cảnh quan mất mát. Có kết quả giữ khi những giả định đó không được thỏa mãn?
bayerj

@bayerj Ví dụ đồ chơi đặc biệt này, vâng. Tuy nhiên, bài báo tiếp tục mở rộng nó cho một số trường hợp lý thuyết khác. Tôi tin rằng các nguồn khác [Boutou tôi nghĩ] cho thấy sự hỗ trợ theo kinh nghiệm cho việc lấy mẫu không thay thế là vượt trội.
Tarin Ziyaee

@TarinZiyaee Cảm ơn câu trả lời này - bạn có thể làm rõ _k = 1 / k không? Mà k chúng ta đang nói về đây, k từ phương trình trên? Tôi đã không theo dõi bạn ở đây, điều này khiến cho việc tổng kết và kết luận sau đó trở nên khó khăn. Cảm ơn.
bobo

1
@bobo Mình sẽ cố gắng làm rõ bài lên tối nay.
Tarin Ziyaee

1
@bobo Tôi cập nhật câu trả lời của tôi một loạt. Xin hãy xem và cho tôi biết nếu điều đó giúp.
Tarin Ziyaee

5

Theo mã trong kho lưu trữ của Nielsen, các lô nhỏ được rút ra mà không cần thay thế:

    def SGD(self, training_data, epochs, mini_batch_size, eta, test_data=None):
    n = len(training_data)
    for j in range(epochs):
            random.shuffle(training_data)
            mini_batches = [
                training_data[k:k+mini_batch_size]
                for k in range(0, n, mini_batch_size)
            ]
            for mini_batch in mini_batches:
                self.update_mini_batch(mini_batch, eta)

Chúng ta có thể thấy rằng không có sự thay thế của các mẫu đào tạo trong một kỷ nguyên. Thật thú vị, chúng ta cũng có thể thấy rằng Nielsen chọn không lo lắng về việc điều chỉnheta (tỷ lệ học tập) cho kích thước mini_batch cuối cùng, có thể không có nhiều mẫu đào tạo như các đợt nhỏ trước đó. Có lẽ đây là một sửa đổi nâng cao mà ông để lại cho các chương sau. **

** EDIT: Trên thực tế, tỷ lệ này xảy ra trong def update_mini_batchhàm. Ví dụ: với các trọng số:

self.weights = [w-(eta/len(mini_batch))*nw for w, nw in zip(self.weights, nabla_w)]     

Điều này là cần thiết bởi vì mini_batch cuối cùng có thể nhỏ hơn mini_batch trước đó nếu số lượng mẫu đào tạo trên mini_batch không chia đều cho tổng số mẫu đào tạo có sẵn.

mylist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
n = len(mylist)
mini_batch_size = 2
mini_batches = [
    mylist[k:k+mini_batch_size]
    for k in range(0, n, mini_batch_size)
    ]
for mini_batch in mini_batches:
    print(mini_batch)

Đầu ra:

['1', '2']
['3', '4']
['5', '6']
['7', '8']
['9', '10']

Thay đổi mini_batch_sizethành 3, không chia đều cho 10 mẫu đào tạo của chúng tôi. Đối với đầu ra, chúng tôi nhận được:

['1', '2', '3']
['4', '5', '6']
['7', '8', '9']
['10']

Khi đánh giá một loạt hơn chỉ số danh sách (một cái gì đó có dạng [x:y]nơi xymột số chỉ số vào danh sách), nếu giá trị bên phải của chúng tôi vượt quá độ dài danh sách, python chỉ đơn giản trả về các mục từ danh sách lên cho đến khi giá trị đi ra khỏi phạm vi chỉ số .

Vì vậy, lô nhỏ cuối cùng có thể nhỏ hơn các lô nhỏ trước đó, nhưng nếu nó có trọng số tương tự etathì các mẫu đào tạo đó sẽ đóng góp nhiều hơn cho việc học so với các mẫu trong các lô nhỏ khác lớn hơn. Vì đây chỉ là đợt nhỏ cuối cùng nên có lẽ không đáng lo ngại quá nhiều, nhưng có thể dễ dàng giải quyết bằng cách nhân rộng etatheo chiều dài của đợt nhỏ.

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.