Sự hội tụ của trọng lượng mạng thần kinh


10

Tôi đã đến một tình huống mà trọng lượng của Mạng thần kinh của tôi không hội tụ ngay cả sau 500 lần lặp. Mạng thần kinh của tôi chứa 1 Lớp đầu vào, 1 Lớp ẩn và 1 Lớp đầu ra. Chúng có khoảng 230 nút trong lớp đầu vào, 9 nút trong lớp ẩn và 1 nút đầu ra trong lớp đầu ra. Tôi muốn biết, nếu tôi thực hiện điều kiện dừng sớm (nói dừng việc đào tạo mạng lưới thần kinh của tôi sau 100 lần lặp). Hiệu ứng này sẽ có ảnh hưởng gì đến mô hình?

Cũng muốn biết tiêu chuẩn công việc xung quanh là gì nếu các trọng số trong mạng lưới thần kinh không hội tụ?


Dữ liệu của bạn đã được chuẩn hóa đúng chưa? Đây thường là lý do cho hành vi như vậy.
sashkello

Thông thường số lượng tế bào thần kinh trong lớp ẩn phải có cùng kích thước so với lớp đầu vào của bạn. Tôi nghĩ rằng 9 tế bào thần kinh là quá nhỏ. Bạn đã cố gắng tăng lên 200-300 tế bào thần kinh?
ThiS

@sashkello Có dữ liệu được chuẩn hóa đúng.
Học viên

1
@juampa Không có lý do gì để có 9 nút trong lớp ẩn. chúng tôi cảm thấy rằng có nhiều nút hơn trong lớp ẩn sẽ làm tăng độ phức tạp của mạng và vượt quá dữ liệu.
Học viên

3
Bạn cần phải giải thích thêm một chút. Vấn đề bạn đang giải quyết là gì? Bạn có bao nhiêu điểm dữ liệu đào tạo? Bạn có ý nghĩa gì khi không hội tụ? - bạn chỉ có nghĩa là hiệu suất (trên tập huấn luyện) là kém, hoặc trọng lượng của bạn không hội tụ ... nếu trọng lượng hội tụ, thì bạn cần sử dụng tỷ lệ học tập thấp hơn, hoặc tỷ lệ học tập giảm dần. Bạn cũng có thể muốn sử dụng hồi quy logistic / tuyến tính làm đường cơ sở. cuối cùng, đầu vào của bạn tương quan như thế nào? Nếu chúng rất tương quan thì bình thường hóa sẽ không đủ, và bạn nên xem xét đường chéo (hay còn gọi là PCA).
seanv507

Câu trả lời:


13

Có một số câu hỏi để hỏi:

  • Bạn có số lượng tế bào thần kinh thích hợp trong mỗi lớp không
  • Bạn đang sử dụng các loại chức năng chuyển phù hợp?
  • bạn đang sử dụng loại thuật toán học tập thích hợp
  • bạn có cỡ mẫu đủ lớn không
  • bạn có thể xác nhận rằng các mẫu của bạn có các loại mối quan hệ phù hợp với nhau để được cung cấp thông tin? (không dư thừa, có kích thước phù hợp, v.v ...)

Những gì bạn có thể đưa ra trong cách của phù du? Bạn có thể cho chúng tôi biết một vài điều về bản chất của dữ liệu?

Bạn có thể tạo một cây tăng cường độ dốc của mạng lưới thần kinh.

Bạn hỏi điều gì xảy ra nếu bạn dừng lại sớm.

Bạn có thể thử bản thân mình. Chạy 300x khi bạn bắt đầu với các trọng số khởi tạo ngẫu nhiên, và sau đó dừng lại ở một số lần lặp được chỉ định, giả sử 100. Tại thời điểm đó, hãy tính toán lỗi tập hợp, lỗi tập con và lỗi tập kiểm tra của bạn. Nói lại. Sau khi bạn có 300 giá trị để cho bạn biết lỗi là gì, bạn có thể biết ý tưởng phân phối lỗi của mình với 100 lần lặp học tập. Nếu bạn thích, sau đó bạn có thể lấy mẫu phân phối đó ở một số giá trị học tập khác. Tôi đề nghị 200, 500 và 1000 lần lặp. Điều này sẽ cho bạn ý tưởng về cách SNR của bạn thay đổi theo thời gian. Một âm mưu của SNR vs số lần lặp có thể cho bạn ý tưởng về "vách đá" hoặc "đủ tốt". Đôi khi có những vách đá nơi lỗi sụp đổ. Đôi khi lỗi được chấp nhận tại thời điểm đó.

Phải mất dữ liệu "tương đối đơn giản" hoặc may mắn "khá tốt" để hệ thống của bạn luôn hội tụ trong hơn 100 lần lặp. Cả hai đều không phải là về độ lặp lại cũng không phải là khái quát.

Tại sao bạn suy nghĩ về các trọng số hội tụ và không có lỗi dưới một ngưỡng cụ thể. Bạn đã bao giờ nghe nói về một nghịch lý bỏ phiếu? ( liên kết ) Khi bạn có các tương tác theo chu kỳ trong hệ thống của mình (như phản hồi trong Mạng nơ-ron) thì bạn có thể có nghịch lý biểu quyết - thay đổi kết hợp. Tôi không biết nếu chỉ một mình trọng lượng là một chỉ số đủ để hội tụ mạng.

Bạn có thể nghĩ về trọng lượng như một không gian. Nó có nhiều hơn 3 chiều, nhưng nó vẫn là một không gian. Trong "trung tâm" của không gian đó là khu vực "phù hợp nhất" của bạn. Xa trung tâm là một phù hợp ít tốt. Bạn có thể nghĩ về thiết lập hiện tại của trọng lượng của bạn như là một điểm duy nhất trong không gian đó.

Bây giờ bạn không biết "tốt" thực sự ở đâu. Những gì bạn có là một "độ dốc" địa phương. Bạn có thể thực hiện giảm độ dốc về phía "tốt hơn" cục bộ được đưa ra khi điểm của bạn là ngay bây giờ. Nó không cho bạn biết "phổ quát" tốt hơn, nhưng địa phương tốt hơn không có gì.

Vì vậy, bạn bắt đầu lặp đi lặp lại, đi xuống dốc về phía thung lũng tốt hơn. Bạn lặp đi lặp lại cho đến khi bạn nghĩ rằng bạn đã hoàn thành. Có thể giá trị của trọng lượng của bạn là lớn. Có lẽ họ đang nảy khắp nơi. Có lẽ tính toán là "mất quá nhiều thời gian". Bạn muốn được thực hiện.

Vậy làm thế nào để bạn biết liệu bạn đang ở đâu là "đủ tốt"?

Đây là một bài kiểm tra nhanh mà bạn có thể làm:

Lấy 30 tập hợp con ngẫu nhiên thống nhất của dữ liệu (như một vài phần trăm dữ liệu mỗi dữ liệu) và đào tạo lại mạng trên chúng. Nó sẽ nhanh hơn nhiều. Quan sát mất bao lâu để chúng hội tụ và so sánh nó với lịch sử hội tụ của tập hợp lớn. Kiểm tra lỗi của mạng cho toàn bộ dữ liệu trên các tập hợp con này và xem cách phân phối lỗi đó so với lỗi lớn của bạn. Bây giờ hãy tăng kích thước tập hợp con lên tới 5% dữ liệu của bạn và lặp lại. Xem những gì điều này dạy cho bạn.

Đây là một biến thể về tối ưu hóa dòng hạt (xem tài liệu tham khảo) được mô hình hóa về cách ong mật đưa ra quyết định dựa trên trinh sát.

Bạn hỏi điều gì xảy ra nếu trọng lượng không hội tụ.

Mạng nơ-ron là một công cụ. Chúng không phải là công cụ duy nhất. Co nhung nguoi khac. Tôi sẽ xem xét việc sử dụng một trong số họ.

Tôi làm việc theo các tiêu chí thông tin, vì vậy tôi xem xét cả trọng số (số tham số) và lỗi. Bạn có thể thử một trong số đó.

Có một số loại tiền xử lý có thể hữu ích. Trung tâm và quy mô. Xoay bằng các thành phần chính. Nếu bạn nhìn vào các giá trị riêng trong các thành phần chính của mình, bạn có thể sử dụng quy tắc cốt truyện skree để ước tính kích thước của dữ liệu của mình. Giảm kích thước có thể cải thiện sự hội tụ. Nếu bạn biết điều gì đó về 'vật lý cơ bản' thì bạn có thể làm mịn hoặc lọc dữ liệu để loại bỏ nhiễu. Đôi khi hội tụ là về tiếng ồn trong hệ thống.

Tôi thấy ý tưởng về cảm biến nén là thú vị. Nó có thể cho phép lấy mẫu phụ triệt để của một số hệ thống mà không mất tính tổng quát. Tôi sẽ xem xét một số thống kê được lấy mẫu lại và phân phối dữ liệu của bạn để xác định xem và ở cấp độ lấy mẫu phụ nào, tập huấn luyện trở thành đại diện. Điều này cung cấp cho bạn một số thước đo về "sức khỏe" của dữ liệu của bạn.

Đôi khi một điều tốt là chúng không hội tụ

Bạn đã bao giờ nghe nói về một nghịch lý bỏ phiếu? Bạn có thể nghĩ về nó như một người anh em họ cao hơn với sự bế tắc hai chiều. Nó là một vòng lặp. Trong nghịch lý bầu cử 2 người, người đầu tiên muốn có ứng cử viên "A" trong khi người thứ hai muốn ứng viên "B" (hoặc không phải A hoặc như vậy). Phần quan trọng là bạn có thể nghĩ về nó như một vòng lặp.

Vòng lặp rất quan trọng trong các mạng lưới thần kinh. Phản hồi. Đệ quy. Nó làm cho perceptron có thể giải quyết các vấn đề giống như XOR. Nó tạo ra các vòng lặp, và đôi khi các vòng lặp có thể hoạt động như nghịch lý bầu cử, nơi chúng sẽ tiếp tục thay đổi trọng số nếu bạn có số lần lặp vô hạn. Chúng không có nghĩa là hội tụ bởi vì đó không phải là trọng lượng riêng mà là sự tương tác của các trọng số trong vòng lặp.

Ghi chú:

Chỉ sử dụng 500 lần lặp có thể là một vấn đề. Tôi đã có NN trong đó 10.000 lần lặp là không đủ. Số lần lặp là "đủ" phụ thuộc, như tôi đã chỉ ra, trên dữ liệu, cấu trúc liên kết NN, chức năng chuyển nút, chức năng học tập / đào tạo và thậm chí cả phần cứng máy tính. Bạn phải hiểu rõ về cách tất cả chúng tương tác với số lần lặp của bạn trước khi nói rằng đã có các lần lặp "đủ" hoặc "quá nhiều". Những cân nhắc khác như thời gian, ngân sách và những gì bạn muốn làm với NN khi bạn hoàn thành đào tạo cũng cần được xem xét.

Chen, RB, Chang, SP, Wang, W., & Wong, WK, (2011, tháng 9). Thiết kế thử nghiệm tối ưu thông qua các phương pháp tối ưu hóa dòng hạt (bản in sẵn), Lấy ngày 25 tháng 3 năm 2012, từ http://www.math.ntu.edu.tw/~mathlib/preprint/2011-03.pdf


2

Đối với tôi thật khó để nói vấn đề của bạn có thể là gì. Một điểm cần xem xét là việc triển khai cụ thể mà bạn sử dụng. Cụ thể, thuật toán tối ưu hóa. Nếu mạng của bạn mất nhiều thời gian để hội tụ và bạn đang sử dụng một số dạng độ dốc dốc ngẫu nhiên (hoặc lô nhỏ) thì đó có thể là trường hợp mạng của bạn ở một cao nguyên (khu vực có chức năng lỗi / năng lượng rất phẳng do đó độ dốc rất thấp và do đó hội tụ).

Nếu vậy, xin vui lòng kiểm tra độ lớn của độ dốc để xem nếu đây là trường hợp. Có một số kỹ thuật khác nhau để giải quyết vấn đề này, như thêm một động lượng cho gradient.

Để biết tổng quan chi tiết về các kỹ thuật và thủ thuật của giao dịch, hãy xem bài viết (phải đọc) này của Yann LeCun .


1

Hãy chắc chắn rằng độ dốc của bạn không vượt quá giới hạn hoặc cũng có thể là độ dốc đang trở thành số không. Điều này được biết đến phổ biến là nổ độ dốc và biến mất các vấn đề độ dốc.

Một giải pháp khả thi là sử dụng một trình tối ưu hóa thích ứng như AdaGrad hoặc Adam.

Tôi đã phải đối mặt với một vấn đề tương tự trong khi đào tạo một mạng lưới thần kinh đơn giản khi tôi bắt đầu với mạng lưới thần kinh.

Một số tài liệu tham khảo: https://en.wikipedia.org/wiki/Vanishing_gradient_probols https://www.youtube.com/watch?v=VuamhbEWEWA


0

Tôi đã có nhiều bộ dữ liệu hội tụ chậm - có thể là do các yếu tố đầu vào có tương quan cao.

Tôi đã viết máy phân tích C ++ NN của riêng mình và với nó, tôi có thể thay đổi tốc độ học tập cho từng trọng lượng. Đối với mỗi trọng lượng ở mỗi cạnh tôi làm hai việc giúp một số.

Đầu tiên, tôi nhân mỗi tỷ lệ học với một số ngẫu nhiên phân bố đồng đều từ [0,1]. Tôi đoán rằng điều đó sẽ giúp với vấn đề tương quan.

Thủ thuật khác là tôi so sánh gradient hiện tại với gradient trước ở mỗi cạnh. Nếu độ dốc hầu như không giảm theo tỷ lệ phần trăm, thì tôi nhân tỷ lệ học tập cho cạnh đó lên tới 5.

Tôi không có bất kỳ lời biện minh cụ thể nào cho một trong những thủ thuật đó, nhưng chúng dường như hoạt động khá tốt.

Hi vọng điêu nay co ich.

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.