深度学习笔记012数值稳定性、模型初始化、激活函数
数值稳定性
1、常见的两个问题
梯度爆炸:比如1.5的100次方,是4x10^17;
值超出值域:对于16位浮点数尤为严重
对学习率比较敏感:
如果学习率太大,参数值就会大,带来的就是更大的梯度,就容易炸掉;
但是学习率太小,训练就会没有进展,因此在训练过程需要不断的调整学习率(经典炼丹)
梯度消失:比如0.8的100次方,是2x10^-10;
梯度值变成零:对16位浮点数尤为严重
训练没有进展:不管如何选取学习率,因为权重就是学习率乘以梯度,梯度是0,训练不会有进展
对于底层尤为严重:仅仅顶部层训练的较好,无法让神经网络更深(顶部梯度还比较正常,底部梯度趋于零,网络无法在更深层取得进展)
因为浮点数处理常常要求数据在一个合适的范围,所以这两个问题很容易出问题。
如何让训练更加稳定
目标:让梯度值在合理的范围里面,比如【1e-6,1e3】
常见手段:
将乘法变成加法(ResNet、LSTM)
归一化:梯度归一化,梯度裁剪(比如将梯度控制在[-5,5],如果梯度小于-5,则将其设为-5,;如果梯度大于5,则将其设为5)
合理的权重初始和激活函数
让每层的输出和梯度都看做随机变量,让它们的均值和方差(始终)都保持一致。
权重初始化
1、在合理值区间里随机初始参数,而不是完全随机。我们应该能够将最优解限制在某一个区间内。否则,训练开始的时候更容易有数值不稳定的情况,因为远离最优解的地方损失函数表面可能很复杂,而最优解附近的表面会比较平滑。
2、使用N(0,0.01)来初始化可能对小网络没问题,但是不能保证深层次的网络,因为很有可能初始化的值太小或者太大。
独立同分布:https://zhuanlan.zhihu.com/p/134230464
首先,这个W属于R属实没太理解……(喵喵不解)
因为XY符合独立同分布,所以E(XY)=E(X)E(Y)
所以下面的式子没问题。
方差D(X)=E(X^2)-E(X)^2
E[hit]2为0,直接消掉将上式带入展开。
展开之后的交叉项,因为原样本服从独立同分布,所以交叉项可以认为和为0(喵喵不解)
均值可加,所以将E直接挪进去。
这里将E均值换成了Var方差,是因为二者的均值都为0,所以计算方差的时候第二项都为0,那么方差自然就和样本平方的均值相等了,但是……hjt-1的均值=0是什么时候说的?难道说是因为认为只要不是第一层,它都等于0,因为每层都乘以了均值为0的权重矩阵?(喵喵不解)
最终推导出了,想要保持方差不变,需要保证二者之积为1,也就是第t-1层的个数乘以W的方差=1;
反向同理,结论:第t层的个数n乘以W的方差=1.
n t-1和t,前者是t层输入维度,后者是输出维度。
Xavier初始化
上述结论,难以同时满足二者之积为1,因为除非你的输入刚好等于输出,否则无法满足此条件。
方法Xavier取了个折中:
也就是:
可以推导出正态分布和均匀分布:
正态分布公式简单就是标准差,均匀分布的a与方差的关系是:[-a,a],其中分布的方差为a²/3
激活函数的选取
想保证方差不变,意味着激活函数必须是f(x)=x,是一个线性的激活函数
tanh和relu在0点附近,近似f(x)=x;同时,神经网络通常来说权重都是在0点附近的比较小的数,所以这两个函数没什么大问题;
sigmoid不过原点,可以调整,调整好之后基本过原点,也基本可以认为其在0点附近符合正比例函数。(这个调整后的sigmoid常常解决很多问题)
总结一句话:合理的权重初始值和激活函数可以提升数值稳定性;
Q&A
1、inf:数值太大;nan:一般是除以0(梯度消失)了,或者是梯度爆炸。
常用的解决inf和nan的方法:调小学习率、合理地初始化权重、激活函数不要选错
2、代码能力==CPU频率,出活;数学能力==内存大小,出多大的活。
3、硬件会尽可能的把浮点数做小,因为比较高效;这与机器学习的浮点精度需求是矛盾的,我们只能取折中。
4、正态分布符合大数定理,容易推导。
5、把输出特征值规定在均值为0,方差为1的区间内,不会影响模型的可表达性(相当于数值的放缩,相对值不会改变,个人理解),这样做只是为了方便硬件处理。
6、整个深度学习,都是为了让数值更加稳定,但永远没有解决数值稳定性的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律