TensorFlow求导机制、损失函数、优化

一、使用流程

使用 tape.gradient(ys, xs) 自动计算梯度;
使用 optimizer.apply_gradients(grads_and_vars) 自动更新模型参数。

X = tf.constant(X)  
y = tf.constant(y) 
a = tf.Variable(initial_value=0.) 
b = tf.Variable(initial_value=0.)  
variables = [a, b] 
num_epoch = 10000 
optimizer = tf.keras.optimizers.SGD(learning_rate=1e-3) 
for e in range(num_epoch): 
    # 使用tf.GradientTape()记录损失函数的梯度信息 
    with tf.GradientTape() as tape: 
        y_pred = a * X + b 
        loss = 0.5 * tf.reduce_sum(tf.square(y_pred - y)) 
    # TensorFlow自动计算损失函数关于自变量(模型参数)的梯度 
    grads = tape.gradient(loss, variables) 
    # TensorFlow自动根据梯度更新参数 
    optimizer.apply_gradients(grads_and_vars=zip(grads, variables)) 
print(a, b)

特别提示:

loss = 0.5 * tf.reduce_sum(tf.square(y_pred - y))

损失函数为:
在这里插入图片描述
tf.reduce_sum(): Computes the sum of elements across dimensions of a tensor.(计算张量各维元素之和)
tf.reduce_mean(): Computes the mean of elements across dimensions of a tensor.(计算张量各维元素的平均值)
tf.reduce_std(): Computes the standard deviation of elements across dimensions of a tensor.(计算张量各维元素的标准方差)

二、TensorFlow优化算法

优化算法的目标: 如果说让损失函数的越来越小是深度学习的性能指标。那么让损失函数趋向极小值的同时,令这个过程越短越好,就是优化算法的目标。

optimizer = tf.keras.optimizers.SGD(learning_rate=learning_rate)

两个阵营:

  1. 基于梯度递减的优化
  2. 牛顿方法(Newton Method):为了改善牛顿法在数值计算(如病态Hessian矩阵)上的不稳定性,通常使用它的近似版本—拟牛顿法(quasi-Newton Method)

2.1 基于梯度递减的优化:常见梯度下降优化器(学习率)

利用一阶收敛寻找极值

2.1.1 梯度递减(基础)

三种方法区别:每次参数更新时计算的样本数据量不同,下面分别给予简单介绍。

SGD(随机梯度递减法): Stochastic Gradient Descent

BGD(批量梯度递减法): Batch Gradient Descent

MGD(小批量梯度递减): Mini-Batch Gradient Descent

2.1.2 基于梯度递减的优化(提升)

Adam: Adaptive Moment Estimation
Adam使用动量和自适应学习率来加快收敛速度。

AdaGrad:自适应梯度算法
参数更新法则:
在这里插入图片描述
其中,
在这里插入图片描述

AdaDelta:
RMSprop:
Momentum:动量优化法

2.2 牛顿方法 —> 拟牛顿方法

利用二阶收敛寻找极值:收敛速度快
DFP:
BFGS:
L-BFGS:

三、常见损失函数(代价函数、目标函数)

损失函数: 度量实际输出 y_i 与预测值 y^_i的“落差”(差异)程度。
在这里插入图片描述
其中,N是参与训练的样本数量。

3.1 MAE(平均绝对误差):Mean Absolute Error

在这里插入图片描述

tf.keras.losses.MeanAbsoluteError()

3.2 MSE(均方误差):Mean Squared Error

在这里插入图片描述

tf.keras.losses.MeanSquaredError()

MAE和MSE的主要区别在于,MSE损失相比MAE损失通常可以更快地收敛,但MAE损失对于孤立点(Outlier)更加健壮,即更不易受到孤立点的影响。这是因为MSE的平方项,放大了孤立点带来的差异。

3.3 CE(交叉熵):Cross Entropy Loss 也被称为 Softmax Loss

在这里插入图片描述
其中,c_j 是样本 x_i 的目标类。若从不确定性上考虑,则交叉熵表示的是在给定的真实分布下,使用非真实分布所指定的策略来消除系统的不确定性所需要付出的努力大小。

二分类交叉熵损失函数:

loss = tf.keras.losses.binary_crossentropy(y_true=y, y_pred=y_pred)     

多分类交叉熵损失函数:

loss = tf.keras.losses.categorical_crossentropy(y_true=y, y_pred=y_pred)

参考资料
《简单粗暴TensorFlow 2.0》进击的皇虫
《深度学习与TensorFlow实践》张玉宏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值