Tại sao TensorFlow không thể phù hợp với mô hình tuyến tính đơn giản nếu tôi giảm thiểu lỗi trung bình tuyệt đối thay vì lỗi bình phương trung bình?


10

Trong Giới thiệu Tôi vừa thay đổi

loss = tf.reduce_mean(tf.square(y - y_data))

đến

loss = tf.reduce_mean(tf.abs(y - y_data)) 

và mô hình không thể học được sự mất mát chỉ trở nên lớn hơn theo thời gian. Tại sao?

Câu trả lời:


17

Tôi đã thử điều này và nhận được kết quả tương tự.

Đó là do độ dốc .abskhó hơn đối với trình tối ưu hóa đơn giản để theo cực tiểu, không giống như chênh lệch bình phương khi độ dốc tiến đến 0 chậm, độ dốc của chênh lệch tuyệt đối có cường độ cố định đảo ngược đột ngột, có xu hướng làm cho trình tối ưu hóa dao động xung quanh điểm tối thiểu. Độ dốc cơ bản rất nhạy cảm với độ lớn của độ dốc và với tốc độ học tập, về cơ bản chỉ là một số nhân của độ dốc cho kích thước bước.

Cách khắc phục đơn giản nhất là giảm tốc độ học tập, ví dụ như thay đổi dòng

optimizer = tf.train.GradientDescentOptimizer(0.5)

đến

optimizer = tf.train.GradientDescentOptimizer(0.05)

Ngoài ra, hãy chơi với những người tối ưu khác nhau. Một số sẽ có thể đối phó với .absmất mát dựa trên cơ sở tốt hơn.

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.