#回归Loss
1.L1 & L2 loss
代码
import tensorflow as tf
import matplotlib.pyplot as plt
sess = tf.Session()
x_val = tf.linspace(-1.,-1.,500)
target = tf.constant(0.)
#计算L2_loss
l2_y_val = tf.square(target - x_val)
l2_y_out = sess.run(l2_y_val)#用这个函数打开计算图
#计算L1_loss
l1_y_val = tf.abs(target - x_val)
l1_y_out = sess.run(l1_y_val)#用这个函数打开计算图
#打开计算图输出x_val,用来画图
#用画图来体现损失函数的特点
x_array = sess.run(x_val)
plt.plot(x_array, l1_y_out, 'b--', lable = 'L1_loss')
plt.plot(x_array, l2_y_out, 'r--', lable = 'L2_loss')
对L1和L2损失的分析
-
用L1能够对异常值更鲁棒。
-
用L2能够更快的收敛。
L2比L1能更快速的收敛的原因在于接近与目标值的时候,L2曲线更加平滑。
L1比L2对异常值更加鲁棒的原因,是因为当出现异常值时,L2对异常值反应后的error会比L1大,因为一个是平方级的,一个是绝对值。这会导致用L2更新参数时,由于异常值的Loss大导致参数更新方向往异常值偏。所以说L1对异常值更加鲁棒。