Tôi đang sử dụng quy tắc chuẩn hóa L1 trên các thông số mạng nơron của mình trong Keras với keras.regularizers.l1(0.01)
để có được mô hình thưa thớt. Tôi thấy rằng, trong khi nhiều hệ số của tôi là đóng bằng không, một vài trong số đó thực sự là số không.Việc chuẩn hóa L1 trong Keras/Tensorflow * có thực sự * L1-regularization không?
Khi nhìn vào the source code for the regularization, nó cho thấy rằng Keras chỉ thêm định mức L1 của các tham số vào hàm mất.
Điều này sẽ không chính xác vì các tham số gần như chắc chắn sẽ không bao giờ chuyển thành 0 (trong lỗi dấu chấm động) như dự định với quy tắc L1. Định mức L1 không thể phân biệt được khi tham số bằng 0, vì vậy các phương thức cấp dưới cần phải được sử dụng trong đó các thông số được đặt thành 0 nếu đủ gần bằng không trong thói quen tối ưu hóa. Xem toán tử ngưỡng mềm max(0, ..)
here.
Tensorflow/Keras có thực hiện việc này hay điều này không thực tế đối với gốc dốc ngẫu nhiên?
CHỈNH SỬA: Ngoài ra here là một bài đăng trên blog tuyệt vời giải thích toán tử thresholding mềm cho việc chuẩn hóa L1.
Quá trình chuẩn hóa 'L1' là tốt. L1 khuyến khích sparsity hơn L2, nhưng chắc chắn không đảm bảo nó. Cả theano và tensorflow đều được kiểm tra tốt, và tất nhiên xử lý các gradient chỉ tốt xung quanh điểm không thể phân biệt được. – y300
Tôi nghĩ rằng bạn đúng rằng cách nó được thực hiện nó không thực sự làm cho trọng lượng đi đến số không. Điều này là không may. – Aaron
Bạn đang sử dụng trình chỉnh sửa trong mã "của bạn" như thế nào? –