Mạng thần kinh phải luôn luôn hội tụ?


16

Giới thiệu

Bước một

Tôi đã viết một mạng nơ ron backpropegating tiêu chuẩn, và để kiểm tra nó, tôi quyết định đặt nó lên bản đồ XOR.

Đó là mạng 2-2-1 (có chức năng kích hoạt tanh)

X1  M1
        O1
X2  M2

B1  B2

Để thử nghiệm, tôi tự thiết lập nơ-ron giữa (M1) thành cổng AND và nơ-ron dưới (M2) thành cổng OR (cả đầu ra 1 nếu đúng và -1 nếu sai).

Bây giờ, tôi cũng tự thiết lập kết nối M1-O1 thành -.5, M2-O1 thành 1 và B2 là -.75

Vậy nếu M1 = 1 và M2 = 1, tổng là (-0,5 +1 -0,75 = -.25) tanh (0,25) = -0,24

nếu M1 = -1 và M2 = 1, tổng là ((-0,5) * (- 1) +1 -0,75 = .75) tanh (0,75) = 0,63

nếu M1 = -1 và M2 = -1, tổng là ((-0,5) * (- 1) -1 -0,75 = -1,25) tanh (1,25) = -0,8

Đây là một kết quả tương đối tốt cho "lần lặp đầu tiên".

Bước hai

Sau đó tôi đã tiến hành sửa đổi các trọng số này một chút, và sau đó huấn luyện chúng bằng thuật toán lan truyền lỗi (dựa trên độ dốc giảm dần). Trong giai đoạn này, tôi giữ nguyên các trọng số giữa các nơ ron đầu vào và giữa, và chỉ sửa đổi các trọng số giữa giữa (và sai lệch) và đầu ra.

Để thử nghiệm, tôi đặt các trọng số là và .5 .4 .3 (tương ứng cho M1, M2 và độ lệch)

Ở đây, tuy nhiên, tôi bắt đầu có vấn đề.


Câu hỏi của tôi

Tôi đặt tốc độ học tập của mình thành .2 và để chương trình lặp qua dữ liệu đào tạo (ABA ^ B) cho 10000 lần lặp trở lên.

Hầu hết thời gian, các trọng số hội tụ đến một kết quả tốt. Tuy nhiên, đôi khi, các trọng số đó hội tụ đến (giả sử) 1.5, 5.7 và .9 dẫn đến đầu ra +1 (chẵn) thành đầu vào {1, 1} (khi kết quả phải là -1).

Có thể đối với một ANN tương đối đơn giản có giải pháp để không hội tụ hoàn toàn hoặc có lỗi trong quá trình triển khai của tôi không?

Câu trả lời:


13

(Tôi giả sử bằng "lan truyền lỗi", ý bạn là "tôi truyền lại lỗi ".)

Trên trang 231 của Mạng nơ-ron (của Haykin), ông nói rằng sự lan truyền trở lại luôn hội tụ, mặc dù tốc độ có thể (theo cách nói của ông) "chậm đến mức khó tin".

Tôi nghĩ rằng những gì bạn đang hỏi không phải là liệu thuật toán sẽ luôn hội tụ, mà là nó sẽ luôn hội tụ đến câu trả lời tối ưu hay không. Và thật không may, nó sẽ không. Ngay cả trong những trường hợp đơn giản như của bạn, hoàn toàn có thể có những cực tiểu địa phương không phải là cực tiểu toàn cầu.

Đối phó với cực đoan cục bộ là một chủ đề cực kỳ quan trọng trong việc tối ưu hóa, và bạn có thể tìm thấy rất nhiều lời khuyên về cách đối phó với nó. Một trong những điều phổ biến nhất là những gì nó nghe giống như bạn đang làm: khởi động lại ngẫu nhiên (tức là chỉ chạy thuật toán nhiều lần, mỗi lần bắt đầu từ một nơi ngẫu nhiên).

Để tìm hiểu xem có lỗi trong mã của bạn không, tôi sẽ in ra thuật ngữ lỗi và xác minh rằng nó sẽ giảm ở mỗi lần lặp. Nếu vậy, thì có lẽ bạn chỉ cần đạt một cực tiểu địa phương.


Tất cả các trọng số đều tăng (trọng lượng của nơron OR tăng nhanh hơn), giúp giảm thiểu lỗi khi đầu vào là {1,0}, {0,1}, {0,0} nhưng tối đa hóa lỗi khi {1,1}. Đây có phải là một vấn đề với học trực tuyến trên học tập theo đợt?

@Shmuel: cả trực tuyến và hàng loạt sẽ đi theo hướng của gradient. Nếu độ dốc đó chỉ sai hướng, cả hai sẽ đi sai hướng. Trang Wikipedia về Hill Leo có một số cách để khắc phục điều này, nếu bạn quan tâm.
Xodarap

6

Nếu bạn đã cố định các trọng số giữa các đơn vị đầu vào và ẩn và chỉ sửa đổi trọng số ẩn thành trọng số đầu ra trong quá trình đào tạo thì sẽ không có cực tiểu cục bộ. Với đầu vào cố định cho các trọng số ẩn, vấn đề tối ưu hóa bạn đang giải quyết tương tự như hồi quy logistic nhưng với hàm tanh thay vì hàm sigmoid. Bất kể vấn đề là lồi và chỉ nên có một, cực tiểu toàn cầu.

Vì cực tiểu cục bộ không gây ra vấn đề của bạn, tôi sẽ khuyên bạn nên tính gần đúng số lượng các công cụ phái sinh của bạn và sau đó so sánh chúng với các giá trị bạn đang tính toán. Nếu bạn không chắc chắn cách thực hiện việc này, hướng dẫn Standford ULFDL có một cái nhìn tổng quan đẹp.

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.