目录
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 总结
- 合理的权重初始值和激活函数的选取可以提升数值稳定性