Hands-On Machine Learning with Scikit-Learning & TensorFlow
深度学习部分前三章笔记
Chapter 9: tensorflow基础
1 计算图模型
- 优点
- 自助求导
- 并行计算
- 跨设备
- 可理解性(tensorboard)
- 缺点
- 不能进行阶段调试
2 tensorflow的优点
- 设计简洁
- 扩展性强
- 灵活度高
- 文档清晰
3 tensorflow程序的两个部分
- 构造阶段
- 执行阶段
4 tensorflow中的名词
- graph
- session
- tensor
- variable与placeholder的区别
- variable有保存的值, 需要初始化.
- placeholder只是tensor结构的定义, 不存值(用
feed_dict
喂数据)
CHAPTER 10: ANN
1 神经元(Neuron)
- 活性(activate)
- 逻辑计算
2 多层感知机(MLP)
- 隐含层
- 偏置神经元
- 全连接
3 反向传播
作用: 训练多层感知机
多层感知机的训练过程:
- 预测(前向)
- 计算误差
- 反向传播, 每个神经元的贡献误差(逆向)
- 使用梯度调整参数
4 激活函数
常见的四个激活函数及导数
激活函数的作用: 引入非线性
基本的激活函数:
- step function(阶跃函数)
- logistic function
- hyperbolic tengent function
- rectifield linear unit(ReLU)
激活函数的选择:
激活函数的选择
CHAPTER 11: DNN
深度神经网络面临的关键
问题:
- 梯度消失/爆炸
- 训练慢
- 过拟合
1 梯度消失/爆炸
现象:
- 训练过程中梯度不稳定, 容易过大或过小
- 每一层的训练速度不一致
原因分析:
- 输出的方差大于输入的方差 -> BP训练过程中, 梯度逐渐减小 -> 低层出现梯度消失, 无法训练
1.1 初始化方法
在初始化权值阶段, 使输出的方差和输入的方差相同.
初始化方法
Logistic for Xavier, ReLU for He(Xavier前面乘以了sqrt(2)
).
1.2 非饱和激活函数
1.2.1 ReLU
优点:
- 正值无饱和点
- 计算快速
缺点:
- dying ReLU(只输出0)
变体:
- leaky ReLU, RReLU(Random, 随机参数值), PReLU(Parameter, 参数也作为模型计算的一部分)
1.2.2 ELU
优点:
- 平均输出趋近于0
- 当权值和为负的时候, 梯度不为0
- 平滑可导(计算梯度)
缺点:
- 计算略慢
1.3 批量归一化
训练过程中, 在输入到激活函数前, 对输入进行标准化(均值为0, 方差为1)
缺点: 训练和预测的复杂度都增加
1.4 梯度修剪
如果梯度过大, 对梯度进行修剪, 控制梯度爆炸
1.5 重用低层网络
- 迁移学习
- 更少的训练数据
- 训练的成本更低
2 训练时间慢
加快训练的方法:
- 有效的权值初始化策略(He)
- 有效的激活函数(ELU)
- 批量归一化(总的来说是加快速度的)
- 网络重用
- 更快的最优化方法(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 训练稀疏模型
- 零值化较小权值
- L1_norm
- FTRL
2.3 学习率计划
前面学习率高, 后面降低学习率
3 过拟合
使用规则化避免过拟合:
- 提前结束(early stopping, 额外的验证集)
- 正则化(L1_norm, L2_norm, 将权重和加入到损失函数中)
- 随机失活(dropout, 除输出层的任何神经元)
- 参数最大规则化(Max-norm Regularization, 每个神经元输入的最大参数和)
- 数据增强(data augmentation, 移动, 旋转, 缩放, 翻转, 修剪)