Gradient giảm dần không hoạt động theo cách bạn đề xuất nhưng một vấn đề tương tự có thể xảy ra.
Chúng tôi không tính toán tổn thất trung bình từ lô, chúng tôi tính toán độ dốc trung bình của hàm mất mát. Độ dốc là đạo hàm của tổn thất đối với trọng số và trong mạng nơ ron, độ dốc cho một trọng lượng phụ thuộc vào đầu vào của ví dụ cụ thể đó và nó cũng phụ thuộc vào nhiều trọng số khác trong mô hình.
Nếu mô hình của bạn có 5 trọng lượng và bạn có kích thước lô nhỏ là 2 thì bạn có thể nhận được điều này:
Ví dụ 1. Mất = 2,độ dốc = ( 1.5 , - 2.0 , 1.1 , 0.4 , - 0.9 )
Ví dụ 2. Mất = 3,độ dốc = ( 1.2 , 2.3 , - 1.1 , - 0.8 , - 0.7 )
Trung bình của độ dốc trong lô nhỏ này được tính toán, chúng là( 1.35 , 0.15 , 0 , - 0.2 , - 0.8 )
Lợi ích của việc tính trung bình trên một số ví dụ là độ biến thiên của gradient thấp hơn nên việc học tập nhất quán hơn và ít phụ thuộc vào chi tiết cụ thể của một ví dụ. Lưu ý cách độ dốc trung bình cho trọng số thứ ba là , trọng số này sẽ không thay đổi bản cập nhật trọng lượng này nhưng nó có thể sẽ khác không đối với các ví dụ tiếp theo được chọn được tính toán với các trọng số khác nhau.0
chỉnh sửa để phản hồi ý kiến:
Trong ví dụ của tôi trên mức trung bình của độ dốc được tính toán. Đối với kích thước lô nhỏ của trong đó chúng tôi tính toán tổn thất cho mỗi ví dụ, chúng tôi nhắm đến việc lấy độ dốc trung bình của tổn thất đối với trọng số .L i w jkLTôiwj
Cách tôi viết nó trong ví dụ của mình, tôi đã tính trung bình mỗi gradient như:∂L∂wj= 1kΣki = 1∂LTôi∂wj
Mã hướng dẫn mà bạn liên kết đến trong các bình luận sử dụng Tensorflow để giảm thiểu tổn thất trung bình.
Tensorflow nhằm mục đích giảm thiểu1kΣki = 1LTôi
Để giảm thiểu điều này, nó tính toán độ dốc của tổn thất trung bình theo từng trọng lượng và sử dụng độ dốc giảm dần để cập nhật các trọng số:
∂L∂wj= ∂∂wj1kΣki = 1LTôi
Sự khác biệt có thể được đưa vào bên trong tổng để nó giống như biểu thức từ cách tiếp cận trong ví dụ của tôi.
∂∂wj1kΣki = 1LTôi= 1kΣki = 1∂LTôi∂wj