目录
1. 数值稳定性
1.1 神经网络的梯度
1.2 数值稳定性的常见两个问题
1.3 梯度爆炸
1.3.1 MLP的例子
1.3.2 使用ReLU激活函数
1.3.3 产生的问题
1.4 梯度消失
1.4.1 使用sigmoid激活函数
1.4.2 梯度消失的问题
1.5 总结
2. 让训练更稳定
2.1 目标 (ResNet, LSTM相关)
2.2 模型初始化 (W)
2.3 期望与方差 (MLP为例)
2.4 Xavier 初始化
2.5 激活函数 (σ)
2.6 常用激活函数
2.7 总结
1. 数值稳定性
1.1 神经网络的梯度
1.2 数值稳定性的常见两个问题
1.3 梯度爆炸
1.3.1 MLP的例子
- 这是多层感知机第t层的形状
- :第t层隐藏层的输出
- :第t层隐藏层的的输入
- σ激活函数:给神经元引入非线性特性,如ReLU
- diag():对角矩阵
1.3.2 使用ReLU激活函数
- 如果 d-t 很大,说明网络很深,值将会很大,导致梯度爆炸
1.3.3 产生的问题
1.4 梯度消失
1.4.1 使用sigmoid激活函数
- 横坐标是输入,对应的是这里 ↓
- 如果输入很大(比如6),梯度约等于0,模型不动了
1.4.2 梯度消失的问题
1.5 总结
2. 让训练更稳定
2.1 目标 (ResNet, LSTM相关)
李沐老师: “让乘法变加法”
- 常使用 “让乘法变加法” 来训练的模型,包括ResNet, LSTM, CNN
- 原先是用乘法进行线性变换:在深度神经网络中,每一层的输出是前一层输出的加权和,这里的权重(即神经网络中的参数)与输入的元素逐个相乘,然后求和
- 乘法容易导致梯度消失/爆炸(指数效应)
- ResNet的核心:层数很多的时候,使用加法而不是乘法 (来传递信号)
- LSTM:时序就是句子长度,例如把句子按照单词 (一个单词一个时序) 划分成一个一个的时序 (输入)
- 原始的时序神经网络是对每一个时序做乘法,句子太长就会梯度消失/爆炸
- LSTM将乘法变成加法
- 加法出问题的概率远低于乘法
- 归一化:把梯度拉回来,均值为0,方差为1
- 梯度剪裁:比如梯度大于5就强行等于5,小于-5的梯度也变为-5(即设置上限)
合理的权重初始化和激活函数是这里的重点!
2.2 模型初始化 (W)
2.3 期望与方差 (MLP为例)
期望:
- :前一层网络 输出的个数(即前一层神经元的数量)
- :为了让第t层网络的输入和输出的方差相等,在权重初始化时设置的 (方差)
李沐老师:反向和正向一样
2.4 Xavier 初始化
李沐老师:
- Xavier 是常用的权重初始化方法
- Xavier 大致是指在权重初始化时,根据输入和输出的维度设置方差
- Xavier 核心思想是保持每层激活前后数据的方差一致,以避免梯度消失或梯度爆炸问题
2.5 激活函数 (σ)
李沐老师:
- 咱前面的算法都没有激活函数
- 这里假设为线性,是为了方便分析(用2维理解高维度)
2.6 常用激活函数
2.7 总结
- 合理的权重初始值和激活函数的选取可以提升数值稳定性