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?
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:
Tôi đã thử điều này và nhận được kết quả tương tự.
Đó là do độ dốc .abs
khó 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 .abs
mất mát dựa trên cơ sở tốt hơn.