HOML-深度学习-学习笔记1

Hands-On Machine Learning with Scikit-Learning & TensorFlow
深度学习部分前三章笔记

Chapter 9: tensorflow基础

1 计算图模型

  1. 优点
    1. 自助求导
    2. 并行计算
    3. 跨设备
    4. 可理解性(tensorboard)
  2. 缺点
    1. 不能进行阶段调试

2 tensorflow的优点

  1. 设计简洁
  2. 扩展性强
  3. 灵活度高
  4. 文档清晰

3 tensorflow程序的两个部分

  1. 构造阶段
  2. 执行阶段

4 tensorflow中的名词

  1. graph
  2. session
  3. tensor
  • variable与placeholder的区别
    1. variable有保存的值, 需要初始化.
    2. placeholder只是tensor结构的定义, 不存值(用feed_dict喂数据)

CHAPTER 10: ANN

1 神经元(Neuron)

  1. 活性(activate)
  2. 逻辑计算

2 多层感知机(MLP)

  1. 隐含层
  2. 偏置神经元
  3. 全连接

3 反向传播

作用: 训练多层感知机

多层感知机的训练过程:

  1. 预测(前向)
  2. 计算误差
  3. 反向传播, 每个神经元的贡献误差(逆向)
  4. 使用梯度调整参数

4 激活函数

常见的四个激活函数及导数

激活函数的作用: 引入非线性

基本的激活函数:

  1. step function(阶跃函数)
  2. logistic function
  3. hyperbolic tengent function
  4. rectifield linear unit(ReLU)

激活函数的选择:

激活函数的选择

CHAPTER 11: DNN

深度神经网络面临的关键问题:

  1. 梯度消失/爆炸
  2. 训练慢
  3. 过拟合

1 梯度消失/爆炸

现象:

  1. 训练过程中梯度不稳定, 容易过大或过小
  2. 每一层的训练速度不一致

原因分析:

  • 输出的方差大于输入的方差 -> BP训练过程中, 梯度逐渐减小 -> 低层出现梯度消失, 无法训练

1.1 初始化方法

在初始化权值阶段, 使输出的方差和输入的方差相同.

初始化方法

Logistic for Xavier, ReLU for He(Xavier前面乘以了sqrt(2)).

1.2 非饱和激活函数

1.2.1 ReLU

优点:

  1. 正值无饱和点
  2. 计算快速

缺点:

  1. dying ReLU(只输出0)

变体:

  • leaky ReLU, RReLU(Random, 随机参数值), PReLU(Parameter, 参数也作为模型计算的一部分)

1.2.2 ELU

优点:

  1. 平均输出趋近于0
  2. 当权值和为负的时候, 梯度不为0
  3. 平滑可导(计算梯度)

缺点:

  1. 计算略慢

1.3 批量归一化

训练过程中, 在输入到激活函数前, 对输入进行标准化(均值为0, 方差为1)

缺点: 训练和预测的复杂度都增加

1.4 梯度修剪

如果梯度过大, 对梯度进行修剪, 控制梯度爆炸

1.5 重用低层网络

  1. 迁移学习
  2. 更少的训练数据
  3. 训练的成本更低

2 训练时间慢

加快训练的方法:

  1. 有效的权值初始化策略(He)
  2. 有效的激活函数(ELU)
  3. 批量归一化(总的来说是加快速度的)
  4. 网络重用
  5. 更快的最优化方法(Adam)

2.1 更快的最优化方法

2.1.1 Momentum & NAG

考虑到之前的梯度(动量), $\beta$为动量系数(默认0.9)

Momentum NAG
$$m \gets \beta m + \eta \bigtriangledown_{\theta}J(\theta)$$ $$m \gets \beta m + \eta \bigtriangledown_{\theta}J(\theta + \beta m)$$
更新 = 动量 + 梯度(当前模型) 更新 = 动量 + 梯度(当前模型+动量)
略微超前(不收敛, 振荡) 计算(当前模型+动量)的梯度作为当前模型的梯度

2.1.2 AdaGrad & RMSProp

自适应学习率, 向全局最优方向移动

  • 缩小梯度大的学习率, 放大梯度小的学习率
AdaGrad RMSProp
$$s \gets s + \bigtriangledown_{\theta} J(\theta) \otimes J(\theta)$$ $$s \gets \beta s + (1-\beta) \bigtriangledown_{\theta} J(\theta) \otimes J(\theta)$$
减慢得太快, 不能到达最优, 复杂网络不适用. 增加指数衰减因子$\beta$控制衰减速度.

2.1.3 Adam

Momentum + RMSProp + 指数衰减

Adam Optimization

一阶偏导: Jacobians
二阶偏导: Hessians

二阶偏导的时间复杂度较高!

2.2 训练稀疏模型

  1. 零值化较小权值
  2. L1_norm
  3. FTRL

2.3 学习率计划

前面学习率高, 后面降低学习率

3 过拟合

使用规则化避免过拟合:

  1. 提前结束(early stopping, 额外的验证集)
  2. 正则化(L1_norm, L2_norm, 将权重和加入到损失函数中)
  3. 随机失活(dropout, 除输出层的任何神经元)
  4. 参数最大规则化(Max-norm Regularization, 每个神经元输入的最大参数和)
  5. 数据增强(data augmentation, 移动, 旋转, 缩放, 翻转, 修剪)

你可能感兴趣的:(HOML-深度学习-学习笔记1)