训练集、开发集(验证集)、测试集
偏差与方差
正则化
L2正则
Dropout
随机丢弃部分神经元输入,经常用于计算机视觉的神经网络内,因为通常没有足够的训练数据,很容易出现过拟合的问题
数据增强
训练集规一化
可以使其图像更均匀,梯度下降更容易收敛
梯度消失与梯度爆炸
梯度消失
-
激活函数:如Sigmoid或Tanh,其导数在输入较大或较小时会趋近于零,梯度在多层传播中逐渐减小。
-
网络深度:层数越多,梯度经过多次连乘后变得更小。
梯度爆炸
-
权重初始化不当,导致梯度在传播中不断放大。
-
网络深度增加,梯度连乘后变得过大。
参数初始化
He初始化与Xavier初始化
Mini-Batch梯度下降
在训练集数据量较大时,每轮迭代只使用小部分数据进行训练,大幅提高训练速度
如何选择batch大小
batch size太小会抖动严重,并且失去向量化带来的加速优势;太大则会每轮迭代成本很高
梯度下降算法的优化
Momentum 动量法传播
指数加权平均(exponentially weighted averages)
可以看到指数加权平均展开之后就是每老一点的数据就多乘以一次一个接近一的系数,使得老的数据影响越来越小,近似的计算近一段时间的平均值,这样相对直接取n填计算均值需要的内存更小。
如果单纯以上面的公式进行计算,会发现由于 导致在初始化的几天预测不准,大部分情况下只需要等待预热期过去就好,但是如果你关注预热期的准确度,可以每轮迭代增加一步
进行计算,当t比较小时可以放大结果,当t比较大时则分母接近于0影响渐小
梯度下降结合指数加权平均
即针对偏导数结果进行指数加权平均,这样在偏导数震荡时可以减小震荡幅度,而连续同朝向时则可以加速收敛
RMSprop 均方根传播
区别于指数加权平均,这里使用梯度的平方进行指数加权,加速收敛
Adam 亚当优化算法
Adam算法结合了Momentum和RMSprop,增加了参数防止分母为0,并且对结果进行了误差校正
超参的选择
的对最终效果的影响很小,
和
一般也使用固定值,分别为0.9和0.999,一般只需要对学习率
进行调参
学习率衰减
可以减小在接近收敛时的震荡,加快收敛速度
局部最优问题
因为深度学习中都是高维空间,在高维空间中几乎不会出现真正的局部最优点(需要所有维度上都是局部最小值或局部最大值),因此这个不是问题。
实际经常会出现的是鞍点,鞍点是指部分维度为局部最大值而部分维度是局部最小值,还有更多的维度并不是局部最值(所有维度梯度均为0的概率也是极低的)。这种情况下Adam等算法都可以帮助加速逃离鞍点。
超参调参
随机取点,从粗到细
正态随机
指数随机
有时候不能直接正态分布的随机取点,比如对于学习率和指数加权平均系数等,可以结合指数随机增加特定区域随机出的概率
batch normalization 批归一化
前面讲过训练集归一化,还可以进一步对中间输出进行归一化,同时为了避免值只能在(0,1)之间,增加了和
两个可学习参数用于调整平均值
神经网络训练中应用归一化
在计算z之后对z进行归一化处理即可,β和γ均作为学习参数。通过归一化可以减少网络不同层的耦合,前一层网络的变化始终将输出保持一定范围内,减少了对后面网络层的影响。
由于归一化过程中输入会减掉平均值,所以在下面使用方式中的
并没有用
作用
推理时处理归一化
由于实际推理时可能只有一个输入,没有平均值、方差等统计值,此时需要使用训练时得到的统计值,比如使用每个batch计算得到的μ和的指数加权平均。
Softmax regression 多类分类问题
输出层神经元个数与分类数量一致,各神经元输出之和为1。softmax的命名是跟hardmax相对的,hardmax是指输出中只有一个1,其他均为0。
损失函数
后向传播
训练框架TensorFlow
两种实现方式