12_神经网络

150 阅读5分钟

DL方法论

深度学习在研究什么

  • 设计数据集,标注各种实际业务中需要的数据集
  • 设计网络层节点,
  • 设计连接节点的框架,形成了各种各样的网络
  • 设计优化器,策略:即如何训练网络,
  • 最终提高网络泛化能力
  • 核心思想是要得到一个general的model

主要步骤

  • 网络结构设计:感知机层,激活函数,损失函数,归一化层

    1. 根据任务逻辑,设计合理的,能够提取较好特征的网络
    2. 损失函数,激活函数设计
    3. 前向传播过程,连接网络结构和激活函数,归一化函数等

  • 训练过程设计:梯度优化过程,参数更新策略

    1. 优化器选择
    2. 学习率调整
    3. 正则惩罚和参数更新策略

多层感知机

  • 主要是矩阵计算
  • 单纯的感知机还是一个线性操作,隐藏层到输出层要加激活函数才有非线性因素

凸优化与梯度下降

  • 凸优化问题的局部最优解就是全局最优解
  • 如何将优化问题转为凸函数:拉格朗日乘子,KKT,对偶理论
  • 鞍点:既不是极大值也不是极小值的临界点

拉格朗日乘子,KKT,对偶理论

www.cnblogs.com/massquantit…

  • 拉格朗日乘子:将约束优化问题转为无约束优化形式表示

  • KKT:更加广义的拉格朗日变换,针对拉格朗日只能对原问题是等式的形式改进,可将不等式约束的约束优化问题转为无约束优化

  • 对偶问题:使约束问题更容易求解,将KKT变换后等式进行转换求解

梯度下降

  • 为什么梯度是下降最快的方向: 和法向量垂直,曲线的切线方向,是一个标量,有方向
  • 有点:是一种贪心策略,能够得到解
  • 缺点:
    1. 靠近极小值收敛速度减慢
    2. 得到的最优解不保证是全局最优
  • 常见的梯度下降算法
    1. 随机梯度下降,SGD:每次一个样本的计算梯度,更新参数
    2. 批量梯度下降,BGD: 每次计算一个batch样本的梯度来更新参数
    3. 牛顿法:泰勒一阶展开等式求解

常见优化器

主要是结合梯度下降算法,设置合理的参数更新策略, 主要是对下式做改进:

[更新后参数 = 原参数 - (步长 x 梯度)]

AdaGrad:

  • 动态调整学习步长,(学习平稳)
  • 移动平均防止抖动,(结合历史梯度(方向)信息,收敛速度加快)

RMSProp:

  • 在移动平均项上做了改进

Adam:

正向传播,链式法则,反向传播

  • 正向传播就是按照计算图进行传播计算
  • 反向传播,按照计算图,结合计算出来的损失反向计算每个节点的梯度,更新参数

softmax

  • 主要针对分类问题,将输出归一化到一个量纲,得到不同类别的概率

激活函数

使网络具有非线性能力,且学习朝着活跃方向进行学习

  • Sigmoid:

    1. Logistic激活函数, 输出值在0-1之间
    2. 输出在接近0或者1的时候很平缓,梯度可能为0,容易造成梯度消失
    3. 输出中心不在0而在0.5附近
    4. 计算成本大
  • Tanh:

    1. 双曲正切激活函数(hyperbolic tangent activation function),输出在-1到1之间
    2. 梯度也会消失

  • Relu:

    1. 修正线性单元(rectified linear unit)
    2. 简单的阈值化->计算效率高,不会饱和因此不会梯度消失
    3. 不以0为输出中心,且0点没有梯度,一般用左侧或者右侧梯度表示
    4. x < 0 为非激活状态

  • LeakyRelu:

    1. 对relu负数部分的修正

训练优化操作

欠拟合,过拟合,正则化,标准化

主要都是针对训练过程的优化。

  • 欠拟合,学习效果不佳,减小学习率,改善网络结构,残差结构
  • 过拟合,线下好线上差,增加数据样本,损失函数增加惩罚项,减少网络结构
    • 正则化是损失函数加惩罚项,使学习的参数不太过分,常见有L1正则,L2正则
    • 标准化是对每一层输出进行变化,使其输出分布不太过分 一般在深度学习中过拟合比较严重,大多是针对过拟合提出改进

深度学习的困难:

  • 每一层输入分布改变
  • 梯度消失
  • 过拟合

Skip-Connection

主要是为了能够合理的堆叠深层次网络,防止过拟合。

Dropout

主要是为了解决过拟合问题,类似于正则化惩罚,随机丢弃神经元

能够work的解释:

实现方式

DropConnect

Dropout在CNN上应用:

Dropout在RNN上的问题:

  • 有几篇论文都是在RNN不同连接的地方尝试dropout

BatchNormalization

DNN训练需要

BN原理:

  • 就是对每一个batch在训练的时候进行标准化
  • 每一个隐藏层后面接BN层
  • 训练过程要保留每一个batch的均值和方差,在测试过程使用

优点:

缺点:

  • 即RNN中一个batch里面的数据可能步长不一样
  • 改进LN或者数据进行padding(但是计算出来的标准差也很差)

LayerNormalization

  • 是在每一个隐藏层维度进行归一化,只和隐藏层节点数量有关,和样本数量(batch)没关
  • 也需要学习一个反变换的参数,保证信息不丢失