Chỉ để cho vui, tôi đang cố gắng phát triển một mạng lưới thần kinh.
Bây giờ, để backpropagation tôi thấy hai kỹ thuật.
Cái đầu tiên được sử dụng ở đây và ở nhiều nơi khác nữa.
Những gì nó làm là:
- Nó tính toán lỗi cho mỗi nơ ron đầu ra.
- Nó sao lưu nó vào mạng (tính toán một lỗi cho mỗi nơron bên trong).
- Nó cập nhật các trọng số với công thức: (trong đó sự thay đổi về trọng lượng, tốc độ học tập, lỗi của nơ ron nhận đầu vào từ khớp thần kinh và là đầu ra được gửi trên khớp thần kinh).
- Nó lặp lại cho mỗi mục của bộ dữ liệu, nhiều lần theo yêu cầu.
Tuy nhiên, mạng lưới thần kinh được đề xuất trong hướng dẫn này (cũng có sẵn trên GitHub) sử dụng một kỹ thuật khác:
- Nó sử dụng một hàm lỗi (phương thức khác không có hàm lỗi, nhưng nó không sử dụng nó cho đào tạo).
- Nó có một chức năng khác có thể tính toán lỗi cuối cùng bắt đầu từ các trọng số.
- Nó giảm thiểu chức năng đó (thông qua độ dốc giảm dần).
Bây giờ, nên sử dụng phương pháp nào?
Tôi nghĩ rằng cái đầu tiên là cái được sử dụng nhiều nhất (vì tôi đã thấy các ví dụ khác nhau sử dụng nó), nhưng nó có hoạt động tốt không?
Cụ thể, tôi không biết:
- Nó không phải là đối tượng tối thiểu cục bộ (vì nó không sử dụng các hàm bậc hai)?
- Do sự thay đổi của mỗi trọng lượng bị ảnh hưởng bởi giá trị đầu ra của nơ ron đầu ra của nó, nên các mục nhập của tập dữ liệu chỉ xảy ra để tạo ra các giá trị cao hơn trong các nơ ron (không chỉ các đầu ra) có ảnh hưởng đến các trọng số hơn các mục khác không?
Bây giờ, tôi thích kỹ thuật đầu tiên hơn, vì tôi thấy nó đơn giản hơn để thực hiện và dễ suy nghĩ hơn.
Mặc dù, nếu nó có những vấn đề tôi đã đề cập (mà tôi hy vọng nó không xảy ra), có lý do thực sự nào để sử dụng nó qua phương pháp thứ hai không?