TensroFlow学习——第二章(一)

损失函数

经典损失函数

分类问题和回归问题是监督学习的两大种类。

1. 分类问题——将不同的样本分到事先定义好的类别中。

  • 交叉熵(cross entropy):刻画两个概率分布之间的距离,是分类问题中使用较为广泛的一种损失函数。
    (1)Softmax回归,可以将神经网络的输出转化为一个概率分布
    在这里插入图片描述tensorflow中提供了交叉熵和Softmax两个功能的函数tf.nn.sparse_softmax_cross_entropy_with_logits

2. 回归问题——对具体数值的预测,例如房价预测、销量预测等,这些问题预测的不是一个实现定义好的分类,而是一个实数。

  • 回归问题最常用的损失函数是均方根误差(Mean Squared Error)
    在这里插入图片描述TensorFlow中实现均方根误差损失函数:
    在这里插入图片描述

3.自定义损失函数
TensorFlow可以优化任意的自定义损失函数。

在这里插入图片描述

神经网络优化算法

反向传播算法(backpropagation)——训练神经网络的核心算法,根据定义好的损失函数优化神经网络中参数的取值,从而使训练集的损失函数达到一个较小值。
梯度下降算法(gradient decent)——主要用于优化单个参数的取值。
在这里插入图片描述梯度下降算法并不能保证被优化的函数达到全局最优解,如下图所示。
在这里插入图片描述
除此之外,梯度下降算法的另外一个问题是计算时间太长,因为要在全部训练数据上最小化损失,为了加速训练过程,可以使用随机梯度下降的算法(stochastic gradient descent)。

神经网络的进一步优化

1. 学习率的设置
在训练神经网路的过程中, 需要设置学习率控制参数更新的速度。
学习率决定了参数每次更新的幅度,如果幅度过大,那么可能导致参数在极优值两次来回移动。当学习率过小时,虽然能保证收敛性,但是会打打降低优化速度。
Tensorflow提供了一种更加灵活的学习率设置方法——指数衰减法tf.train.exponential_decay。通过该方法,可以使用较大学习率来快速得到一个比较优的解。然后随着迭代的继续逐步减小学习率,使模型在训练的后期更加稳定。
2. 过拟合问题
在应用中,希望通过训练出来的模型对未知数据给出判断。模型在训练数据上的表现并不一定代表他在位未知数据上的表现。
所谓过拟合,指的是当一个模型过为复杂之后,他可以很好的“记忆”每一个训练数据中随机噪音的部分而忘记要去“学习”训练数据中通用的趋势。
为了避免过拟合,一个非常常用的方法是正则化(regularization)。正则化的思想是在损失函数中加入刻画模型复杂程度的指标。
3. 滑动平均模型
滑动平均模型——可以使模型在测试数据上更健壮(robust)。在采用随机梯度下降算法训练神经网络时,滑动平均模型可以在一定程度上提高最终模型在测试数据上的表现。
Tensorflow中提供了tf.train.ExponentialMovingAverage来实现滑动平均模型。在初始化ExponentialMovingAverage时,需要提供一个衰减率(decay)。这个衰减率将用于控制模型更新的速度。ExponentialMovingAverage对每一个变量会维护一个影子变量(shadow variable),这个影子变量的初始值就是相应变量的初始值,而每次运行变量更新时,影子变量的值会更新为:

shadow_varibale=decay*shadow_varibale+(-1decay)*variable

其中,shadow_varibale为影子变量,variable为待更新的变量,decay为衰减率。decay决定了模型更新的速度,decay越大模型越趋于稳定,decay一般会设成非常接近1的数。

猜你喜欢

转载自blog.csdn.net/m0_38120677/article/details/84309817