4.1 深度学习与深层神经网络
维基百科对深度学习的精确定义为"一类通过多层非线性变换对高复杂性数据建模算法的合集"。在实际中基本上可以认为深度学习就是深层神经网络的代名词。从维基百科给出的定义可以看出,深度学习有两个非常重要的特性一一多层和非线性。
4.1.1 线性模型的局限性
线性模型只能解决二分问题。。。。
线性模型中,的维数(特征变量)为2。
4.1.2 激活函数实现去线性化
4.1.3 多层网络解决异或运算
当加入隐藏层之后,异或问题就可以得到很好地解决。
4.2 损失函数定义
分类问题和回归问题是监督学习的两大种类。分类问题希望解决的是将不同的样本分到事先定义好的类别中。与分类问题不同,回归问题解决的是对具体数值的预测。比如房价预测、销量预测等都是回归问题。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数。解决回归问题的神经网络一般只有一个输出节点,这个节点的输出值就是预测值。
4.2.1 经典损失函数
loss = tf.contrib.losses.mean_squared_error(y, y_)
4.2.2 自定义损失函数
# 定义损失函数使得预测少了的损失大,于是模型应该偏向多的方向预测。
loss_less = 10
loss_more = 1
loss = tf.reduce_sum(tf.where(tf.greater(y, y_), (y - y_) * loss_more, (y_ - y) * loss_less))
train_step = tf.train.AdamOptimizer(0.001).minimize(loss)
4.3 神经网络优化算法
梯度下降算法并不能保证被优化的函数达到全局最优解:如图4.12所示,图中给出的函数就有可能只能得到局部最优解而不是全局最优解。
除了不一定能达到全局最优外,梯度下降算法的另外一个问题就是计算时间太长。因为要在全部训练数据上最小化损失,在海量训练数据下,要计算所有训练数据的损失函数是非常消耗时间的。为了加速训练过程,可以使用随机梯度下降的算法(stochasticgradientdescent)。这个算法优化的不是在全部训练数据上的损失函数,而是在每一轮迭代中,随机优化某一条训练数据上的损失函数。
4.4 神经网络进一步优化
4.4.1 学习率的设置
定学习率的问题,TensorFlow提供了一种更加灵活的学习率设置方法一一指数衰减法。tf.train、exponential-decay函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减小学习率,使得模型在训练后期更加稳定。exponential_decay函数会指数级地减小学习率。
4.4.2 过拟合问题
所谓过拟合,指的是当一个模型过为复杂之后,它可以很好地"记忆"每一个训练数据中随机噪音的部分而忘记了要去"学习"训练数据中通用的趋势。举一个极端的例子,如果一个模型中的参数比训练数据的总数还多,那么只要训练数据不冲突,这个模型完全可以记住所有训练数据的结果从而使得损失函数为0。然而,过度拟合训练数据中的随机噪音虽然可以得到非常小的损失函数,但是对于未知数据可能无法做出可靠的判断。
4.4.3 滑动平均模型
这篇文章还没有评论