CS231n 7. Training Neural Networks II 训练神经网络

7.1 更好的优化

随机梯度下降(SGD):在每次迭代中,选取一小部分训练样本,成为minibatch(小批量),用minibatch来估算误差总和L(W)和实际梯度wL(W).这种选取是随机的,当做对真实值期望的蒙特卡洛估计。

SGD存在的问题:
鞍点:既不是极大值点也不是极小值点的临界点
噪声项。。

优化算法:使网络更快收敛

SGD动量法
加入动量项 v t 初始化为0

Nesterov法

RMSProp法

AdaGrad法
title
有两个坐标轴,沿其中一个轴有很高的梯度,另一轴很小梯度,随着累加 d x 2 ,会在更新参数除一个很小的数,从而加速了在小梯度维度上的学习速率。
凸函数有利,因为adagrad法的学习率慢慢变小。

1e-7:为了除数不为0

Adam法:(默认使用此算法)
Adam
一开始second_moment很小,所以前几步结果很大,步长很大,可能就越过L极小值了


超参数设置:
学习率 learning rate:
learning rate
学习率用什么值 是最好的呢?
答:变成一个随时间变化的变量!
学习率衰减
learning rate
先尝试不用衰减,观察loss曲线,看看在哪个地方开始衰减。

以上优化算法都是一阶优化算法


怎么做来减少训练和测试之间的误差差距呢?(差距过大 过拟合)
答:模型集成
模型集成 Model Ensembles


7.2 正则化

提高性能,使网络更快收敛
title
第一项是能拟合匹配数据。

有正则化方法: L2正则化、dropout、batch normalization(常用)

dropout:正向传播过程中,在全连接层中,随机让某个神经元上的激活函数的结果置0.(有时也在卷积层,是随机把整个特征映射置0),然后在测试时被边缘化。
dropput避免了特征间的相互适应

训练中加入一些噪声,在测试时再将噪声边缘化(不是随机的了)。

7.3 迁移学习 Transfer Learning

不需要超大的样本集也能训练神经网络(因为样本数量少,易过拟合,所以要大的样本数)
下载预训练的模型,然后初始化部分模型/在数据上精调模型

猜你喜欢

转载自blog.csdn.net/eqiang8848/article/details/82255488