机器学习个人总结

其实记录的基本是深度学习内容。

1. 梯度移动:

Y = 4 + 3wX +b

损失函数意义:  输入的x, 产出的预期y, 应接近真实Y。

Z = sqrt(y- Y2)

w = w - ∂Z/∂x        更新权值:

Y = 4 + 3wX +b   

更新w 是更新该函数的斜率, 应用梯度, 使该斜率向着极小值点移动。

2. Tensorflow工作原理:

f(x,y) = x2y + y + 2

GPU1计算: x2y

GPU2计算: y + 2

深层网络, 比如10层, 每层百个神经元,  就有可能遇到两个问题:

1. 梯度消失:  斜率变化越来越小, 无法到达极值点。

2. 梯度爆炸:  斜率变化在一些层变化非常大, 跨越极值点。

梯度消失解决办法: 

  1. sigmod + 随机初始化:  使每层的输出方差 远大于输入方差。

  

随机初始化连接权重必须如下图所描述的那样。其中n_inputsn_outputs是权重正在被初始化的层(也称为扇入和扇出)的输入和输出连接的数量。

  2. 批量标准化:

该技术包括在每层的激活函数之前在模型中添加操作,简单地对输入进行zero-centering和规范化,然后每层使用两个新参数(一个用于尺度变换,另一个用于偏移)对结果进行尺度变换和偏移。

换句话说,这个操作可以让模型学习到每层输入值的最佳尺度,均值。为了对输入进行归零和归一化,算法需要估计输入的均值和标准差。 它通过评估当前小批量输入的均值和标准差(因此命名为“批量标准化”)来实现。

 在测试时,没有小批量计算经验均值和标准差,所以您只需使用整个训练集的均值和标准差。 这些通常在训练期间使用移动平均值进行有效计算。 因此,总的来说,每个批次标准化的层次都学习了四个参数:γ(标度),β(偏移),μ(平均值)和σ(标准差)。

 作者证明,这项技术大大改善了他们试验的所有深度神经网络。梯度消失问题大大减少了,他们可以使用饱和激活函数,如 tanh 甚至 sigmoid 激活函数。网络对权重初始化也不那么敏感。他们能够使用更大的学习率,显著加快了学习过程。

  3. 迁移学习:

规范输入图像,与原始图像保持一致, 删除输出层。

冻结所有层, 替换掉softmax层, 较低层会对图像特征有效理解, 较高层已经是抽象后的, 因此较高层应逐层删除。

如果自己的数据集非常小, 冻结所有层, 将softmax输出层删除, 换成自己的分类。  freeze = 1。

数据增强技术: 镜像、随机裁剪、PCA色彩转换。

提升模型精度的保守方法: 集成神经网络。

  4. 优化梯度下降速度:

如果局部梯度非常小, 则梯度更新非常缓慢: 

使用动量优化:

动量优化很关心以前的梯度:在每次迭代时,它将动量矢量m(乘以学习率η)与局部梯度相加,并且通过简单地减去该动量矢量来更新权重(参见如下公式 )。 换句话说,梯度用作加速度,不用作速度。 为了模拟某种摩擦机制,避免动量过大,该算法引入了一个新的超参数β,简称为动量,它必须设置在 0(高摩擦)和 1(无摩擦)之间。 典型的动量值是 0.9。

 使用梯度局部斜坡:

尽管 AdaGrad 的速度变慢了一点,并且从未收敛到全局最优,但是 RMSProp 算法通过仅累积最近迭代(而不是从训练开始以来的所有梯度)的梯度来修正这个问题。 它通过在第一步中使用指数衰减来实现(见如下公式 )。

   5. 解决过拟合问题:

构建稀疏模型: 使用L1 正则化。  或 L2正则化。

随机裁剪: drop out

早期停止法。

  6. 学习率优化:

找到一个好的学习速度可能会非常棘手。 如果设置太高,训练实际上可能偏离(如我们在第 4 章)。 如果设置得太低,训练最终会收敛到最佳状态,但这需要很长时间。 如果将其设置得太高,开始的进度会非常快,但最终会在最优解周围跳动,永远不会安顿下来(除非您使用自适应学习率优化算法,如 AdaGrad,RMSProp 或 Adam

设学习率为 。 超参数c通常被设置为 1。这与指数调度类似,但是学习率下降要慢得多。

Andrew Senior 等2013年的论文。 比较了使用动量优化训练深度神经网络进行语音识别时一些最流行的学习率调整的性能。 作者得出结论:在这种情况下,性能调度和指数调度都表现良好,但他们更喜欢指数调度,因为它实现起来比较简单,容易调整,收敛速度略快于最佳解决方案。

e.g. r=100, 每100步衰减一次。

猜你喜欢

转载自www.cnblogs.com/ruili07/p/9639419.html
今日推荐