Chuyển hướng mạng thần kinh thay vì hội tụ


9

Tôi đã triển khai một mạng lưới thần kinh (sử dụng CUDA) với 2 lớp. (2 nơ-ron mỗi lớp). Tôi đang cố gắng làm cho nó học 2 hàm đa thức bậc hai đơn giản bằng cách sử dụng backpropagation .

Nhưng thay vì hội tụ, nó đang chuyển hướng (đầu ra đang trở nên vô tận)

Dưới đây là một số chi tiết về những gì tôi đã thử:

  • Tôi đã đặt các trọng số ban đầu thành 0, nhưng vì nó đang phân kỳ nên tôi đã chọn ngẫu nhiên các trọng số ban đầu (Phạm vi: -0,5 đến 0,5)
  • Tôi đọc được rằng một mạng lưới thần kinh có thể phân kỳ nếu tốc độ học tập quá cao nên tôi đã giảm tỷ lệ học tập xuống 0,000001
  • Hai hàm tôi đang cố gắng để thêm nó là: 3 * i + 7 * j + 9 và j * j + i * i + 24 (Tôi đang đưa ra lớp i và j làm đầu vào)
  • Tôi đã thực hiện nó như một lớp duy nhất trước đây và điều đó có thể xấp xỉ các hàm đa thức tốt hơn so với hiện tại
  • Tôi đang nghĩ đến việc thực hiện động lực trong mạng này nhưng tôi không chắc nó sẽ giúp nó học được
  • Tôi đang sử dụng hàm kích hoạt tuyến tính (như không có)
  • Có dao động khi bắt đầu nhưng đầu ra bắt đầu chuyển hướng thời điểm bất kỳ trọng số nào trở nên lớn hơn 1

Tôi đã kiểm tra và kiểm tra lại mã của mình nhưng dường như không có vấn đề gì với nó.

Vì vậy, đây là câu hỏi của tôi: điều gì đang xảy ra ở đây?

Bất kỳ con trỏ sẽ được đánh giá cao.

Câu trả lời:


8
  1. Với các mạng thần kinh, bạn luôn cần khởi tạo ngẫu nhiên các trọng số của mình để phá vỡ tính đối xứng.
  2. Nếu bạn không sử dụng chức năng kích hoạt phi tuyến tính trong các đơn vị ẩn, thì bạn cũng có thể ở lại với một lớp duy nhất. Mạng của bạn bây giờ chỉ là một thành phần của hai hàm tuyến tính, tất nhiên chỉ là một hàm tuyến tính khác.
  3. Tỷ lệ học tập đó dường như quá nhỏ. Nếu tôi đang sử dụng một tỷ lệ học tập cố định, tôi thường tìm thấy một giá trị ở đâu đó trong khoảng từ 0,1 đến 0,0001 để hoạt động tốt cho hầu hết các vấn đề. Đây rõ ràng là vấn đề phụ thuộc, vì vậy hãy lấy kinh nghiệm của tôi cho những gì nó là.
  4. Ngoài việc kiểm tra mã của bạn dựa trên toán học bạn đã học, khi thực hiện tối ưu hóa dựa trên độ dốc, có thể rất hữu ích để phân tích các độ dốc cần thiết bằng cách sử dụng các khác biệt hữu hạn và so sánh chúng với các giá trị bạn tính toán trong mã của mình. Xem ở đây để thảo luận về cách bạn có thể làm điều này. Tôi đã bắt gặp nhiều lỗi theo cách này và thấy các loại thử nghiệm này vượt qua luôn giúp tôi cảm thấy chắc chắn hơn về tính chính xác của mã.
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.