数值稳定性、模型初始化和激活函数

一、数值稳定性:神经网络很深的时候数据非常容易不稳定

1、神经网络梯度

        h^(t-1)是t-1层的输出,也就是t层的输入,y是需要优化的目标函数,向量关于向量的倒数是一个矩阵。

2、问题:梯度爆炸、梯度消失

(1)梯度爆炸例子:MLP

当使用ReLu作为激活函数

a、值超出值域(infinity) ,对于16位浮点数尤为严重(数值区间6e-5-6e4) 
b、对学习率敏感,如果学习率太大->大参数值->更大的梯度,如果学习率太小>训练无进展,我们可能需要在训练过程不断调整学习率

(2)梯度消失

a、梯度值变成0 ,对16位浮点数尤为严重
b、训练没有进展,不管如何选择学习率
c、对于底部层尤为严重,仅仅顶部层训练的较好,无法让神经网络更深

3、总结

(1)当数值过大或者过小时会导致数值问题
(2)常发生在深度模型中,因为其会对n个数累乘

二、模型初始化和激活函数

1、模型初始化权重及选取激活函数让训练更加稳定

2、在上一部分知道梯度消失及梯度爆炸,为使梯度在合理的范围内,有方法

(1)将乘法变为加法

ResNet在很多层的情况下,加入加法,从乘法变成加法;

LSTM是长短时记忆网络,能够有效地解决梯度消失和梯度爆炸的问题(不知道具体的,大概后面学)

(2)归一化、梯度剪裁

    归一化,比如将所有梯度归一化为均值为0,方差为1。梯度剪裁,比如大于n的梯度直接变成n,小于m的全部变成m

3、将每一层的输出和梯度都看成随机变量,使每一层权重为均值为0,方差为常数、

4、权重初始化

(1)训练开始的时候更容易有数值不稳定:远离最优解的地方损失函数表面可能很复杂,最优解附近表面会比较平

(2)使用N(0,0.01)来初始可能对小网络没问题,不能保证深度神经网络

(3)在合理值区间里随机初始参数

5、例子:MLP

(1)正向方差推导

                        Var(x)=E(x^2)-E(x)^2,这里E(x)=0(把E^2变成了Var[])

最终由于等式可得

(2)反向均值和方差(最后一步不是很清楚,方差等于方差怎么得来的)

6、Xavier初始

关于这里的正态分布。pytorch的normal函数里面传参是标准差,数学上的正态分布写的是方差,这里按normal函数来的。

7、在线性激活函数下,必得激活函数y=x(一般情况下激活函数不使用线性)

反向同理

8、常用激活函数

对sigmoid进行调整,从绿线到蓝线。调整是为了正向和反向的传播,输入和输出的x都是正态分布

8、合理的权重初始化和激活函数的选取可以提高数值稳定性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值