一介绍
该章主要是介绍深层网络, 该章节主要按照损失函数,优化技巧俩部分进行展开。
二 损失函数
在损失函数介绍几种经典损失函数:
1. 交叉熵:刻画了俩个概率分布之间的距离,它是分类问题中使用比较广的一种损失函数,计算公式如下:
注意:H(p,q) != H(q, p)即交叉熵不满足对称性,它刻画的是通过概率分布q来表达概率分布p的困难程度。因为正确答案是希望得到的结果,所以当交叉熵作为损失函数时,P代表的是正确答案, q代表的是预测值。交叉熵刻画的是俩个概率分布的距离,也就是说交叉熵值越小,俩个概率分布越接近。
tips: 因为log x,如果x小于等于0会报错,所以在损失函数需要注意这种情况,在tensorlow中tf.clip_by_value可以将一个张量中的数值控制在一个范围内。

2. 自定义损失函数:根据需要,需要自己定义损失函数,比如:当x>y时:
tips:需要用到tf.greater()以及tf.where
tf.where 有三个参数。第一个为选择条件依据,当选择条件为true时,tf.where函数会选择第二个参数中的值,否则使用第三个参数中的值。
三神经网络优化算法
3.1 学习率设置
学习率决定了参数更新的幅度。如果幅度过大,那么可能导致参数在极优值的俩侧 来回移动。为了设置合理的学习率,在本书中提到了指数衰减法。tf.train.exponential_decay。原理是可以先使用较大的学习率来得到一个比较优的解,然后随着迭代的继续逐步减小学习率。主要是事先的是: learning_rate表示学习率, decay_rate表示衰减系数,decay_steps为衰减速度 tips:函数还有一个参数staircase布尔型, 如果为 true表示在一个数据集内学习率是一样的,即decay_rate的指数取整
3.2 过拟合问题
过拟合问题表示在训练集训练的太好,将噪音数据都学出来了,在验证集上的表现却太差。为了让模型的结构不至于负责。引入了正则化的概念。
L1:
L2:
将正则化添加到损失函数,可以有效避免过拟合的问题。tensorflow中正则化的表达式为tf.contrib.layers.l2_regularizer(lambda),lambda为权重。

3.3 滑动平均模型
在tensorflow提供tf.train.ExponentialMovingAverage来实现滑动平均模型。 该函数就是给每一个变量维护一个影子变量。 tips: decay衰减率控制模型更新速度。如果函数参数中有step参数,即模型迭代次数,衰减率为:
具体代码如下:

四 总结
该部分主要介绍了一些trick,可以提高模型的稳定性,避免过拟合。