ในบทนำฉันเพิ่งจะเปลี่ยน
loss = tf.reduce_mean(tf.square(y - y_data))
ถึง
loss = tf.reduce_mean(tf.abs(y - y_data))
และโมเดลไม่สามารถเรียนรู้การสูญเสียที่ยิ่งใหญ่ขึ้นตามกาลเวลา ทำไม?
ในบทนำฉันเพิ่งจะเปลี่ยน
loss = tf.reduce_mean(tf.square(y - y_data))
ถึง
loss = tf.reduce_mean(tf.abs(y - y_data))
และโมเดลไม่สามารถเรียนรู้การสูญเสียที่ยิ่งใหญ่ขึ้นตามกาลเวลา ทำไม?
คำตอบ:
ฉันลองและได้ผลลัพธ์เดียวกัน
มันเป็นเพราะการไล่ระดับสีของ.abs
ยากขึ้นสำหรับเครื่องมือเพิ่มประสิทธิภาพอย่างง่ายที่จะติดตาม minima ซึ่งแตกต่างจากความแตกต่างยกกำลังสองที่การไล่ระดับสีเป็นศูนย์ช้าการไล่ระดับของความแตกต่างสัมบูรณ์มีขนาดคงที่ซึ่งกลับด้านทันที จุดต่ำสุด โคตรลาดขั้นพื้นฐานมีความไวต่อขนาดของการไล่ระดับสีและอัตราการเรียนรู้ซึ่งเป็นเพียงตัวคูณของการไล่ระดับสีสำหรับขนาดก้าว
การแก้ไขที่ง่ายที่สุดคือการลดอัตราการเรียนรู้เช่นสายการเปลี่ยนแปลง
optimizer = tf.train.GradientDescentOptimizer(0.5)
ถึง
optimizer = tf.train.GradientDescentOptimizer(0.05)
นอกจากนี้ยังมีการเล่นกับเครื่องมือเพิ่มประสิทธิภาพที่แตกต่างกัน บางคนจะสามารถรับมือกับ.abs
การสูญเสียฐานที่ดีขึ้น