Tạo mạng lưới thần kinh cho chức năng xor


8

Một thực tế nổi tiếng là mạng 1 lớp không thể dự đoán hàm xor, vì nó không thể phân tách tuyến tính. Tôi đã cố gắng tạo một mạng 2 lớp, sử dụng hàm sigmoid logistic và backprop, để dự đoán xor. Mạng của tôi có 2 nơ-ron (và một sai lệch) trên lớp đầu vào, 2 nơ-ron và 1 sai lệch ở lớp ẩn và 1 nơ-ron đầu ra. Tôi ngạc nhiên, điều này sẽ không hội tụ. Nếu tôi thêm một lớp mới, vì vậy tôi có một mạng 3 lớp với đầu vào (2 + 1), hidden1 (2 + 1), hidden2 (2 + 1) và đầu ra, nó hoạt động. Ngoài ra, nếu tôi giữ một mạng 2 lớp, nhưng tôi tăng kích thước lớp ẩn lên 4 nơ ron + 1 sai lệch, nó cũng hội tụ. Có một lý do tại sao một mạng 2 lớp có 3 nơ ron ẩn hoặc ít hơn sẽ không thể mô hình hóa chức năng xor?


2
Bạn có thể dự đoán XOR bằng cấu trúc đó. Trong thực tế, bạn thậm chí không cần thành kiến ​​(xem ở đây ).
krychu

Tôi có cần khởi tạo trọng lượng của mình theo bất kỳ cách đặc biệt nào để có được sự hội tụ không? Tôi đang thử một mạng lưới thần kinh đơn giản với các trọng số giữa (-1,1) được khởi tạo ngẫu nhiên, nhưng tôi không thể làm cho nó hội tụ (thậm chí sử dụng các thành kiến)
người dùng

Trên thực tế, sử dụng sigmoid logistic đôi khi nó hội tụ, nhưng không phải tất cả các lần, nó phụ thuộc vào sự lựa chọn ban đầu của trọng số ngẫu nhiên.
người dùng

Phạm vi của bạn có vẻ khá lớn, hãy thử (-0.1, 0.1). Mặt khác, bạn có nguy cơ tín hiệu đầu vào của một nơ-ron có thể lớn ngay từ đầu trong trường hợp việc học cho nơ-ron đó chậm. Bạn cũng có thể muốn giảm tốc độ học tập và tăng số lần lặp.
krychu

Ngược lại, các giá trị lớn hơn làm cho nó hội tụ nhanh hơn. Tôi đã thử tốc độ học tập nhỏ hơn và nhiều lần lặp lại. Tôi nghĩ câu trả lời của Neil Slater dưới đây tổng hợp các vấn đề, mặc dù tôi vẫn không chắc tại sao.
người dùng

Câu trả lời:


6

Vâng, có một lý do. Nó có liên quan đến cách bạn khởi tạo trọng lượng của bạn.

Có 16 mức tối thiểu cục bộ có xác suất hội tụ cao nhất trong khoảng 0,5 - 1.

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

Dưới đây là một bài viết phân tích vấn đề xor.


2
Xuất hiện liên kết bị hỏng.
Adam Kingsley

@Emil Vậy, nếu trọng lượng rất nhỏ, bạn đang nói rằng nó sẽ không bao giờ hội tụ? Tôi cũng đã sửa liên kết cho bạn.
người dùng

@ Người dùng đúng.
Emil

6

Một mạng có một lớp ẩn chứa hai nơ ron phải đủ để ngăn cách vấn đề XOR. Tế bào thần kinh thứ nhất hoạt động như một cổng OR và cổng thứ hai là cổng KHÔNG VÀ. Thêm cả hai tế bào thần kinh và nếu chúng vượt qua ngưỡng thì nó dương tính. Bạn chỉ có thể sử dụng các nơ-ron quyết định tuyến tính cho việc này bằng cách điều chỉnh các độ lệch cho các ngưỡng. Các đầu vào của cổng NOT AND phải âm đối với các đầu vào 0/1. Bức ảnh này sẽ làm cho nó rõ ràng hơn, các giá trị trên các kết nối là các trọng số, các giá trị trong các nơ-ron là các sai lệch, các hàm quyết định đóng vai trò là các quyết định 0/1 (hoặc chỉ là chức năng ký hiệu cũng hoạt động trong trường hợp này).

Mạng thần kinh XOR

Hình ảnh nhờ "blog Abhranil"


Cảm ơn bạn, sau đó không thể thực hiện điều này bằng cách sử dụng sigmoid logistic, vì nó giới hạn giá trị ở (0,1)
người dùng

Không nên vẫn có thể học điều này với một sigmoid logistic, nó chỉ nên học các ngưỡng / trọng lượng khác nhau
Jan van der Vegt

+1,5

4

Nếu bạn đang sử dụng giảm dần độ dốc cơ bản (không có tối ưu hóa nào khác, chẳng hạn như động lượng) và mạng tối thiểu 2 đầu vào, 2 nơ ron ẩn, 1 nơ ron đầu ra, thì chắc chắn có thể đào tạo nó để học XOR, nhưng nó hoàn toàn có thể khó khăn và không đáng tin cậy

  • Bạn có thể cần phải điều chỉnh tỷ lệ học tập. Lỗi thông thường nhất là đặt nó quá cao, do đó mạng sẽ dao động hoặc phân kỳ thay vì học.

  • Nó có thể mất một số lượng lớn đáng kinh ngạc để đào tạo mạng tối thiểu bằng cách sử dụng giảm dần theo lô hoặc trực tuyến. Có thể vài nghìn epoch sẽ được yêu cầu.

  • Với số lượng trọng lượng thấp như vậy (chỉ 6), đôi khi việc khởi tạo ngẫu nhiên có thể tạo ra một sự kết hợp dễ dàng bị mắc kẹt. Vì vậy, bạn có thể cần phải thử, kiểm tra kết quả và sau đó bắt đầu lại. Tôi khuyên bạn nên sử dụng trình tạo số ngẫu nhiên có hạt để khởi tạo và điều chỉnh giá trị hạt giống nếu giá trị lỗi bị kẹt và không cải thiện.


Vâng, đó là những gì tôi đang quan sát, với một số giá trị hạt giống nó hội tụ, những cái khác, nó sẽ không. Ngoài ra, nếu tôi sử dụng tiếp tuyến hyperbol thay vì sigmoid, nó hoạt động khá tốt mọi lúc, với sigmoid, nó phụ thuộc vào hạt giống, như bạn quan sát. Lý do cho nó là khó khăn như vậy là gì?
người dùng

Tôi không hoàn toàn chắc chắn lý do toán học là gì, đây chỉ là từ bộ bài kiểm tra viết kinh nghiệm của tôi xung quanh việc học xor. Trong trường hợp của tôi, việc thêm động lực đã giúp, nhưng tôi nghĩ rằng hầu như mọi điều chỉnh đều tránh khỏi mạng đơn giản nhất và / hoặc trình tối ưu hóa giúp.
Neil Slater
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.