梯度消失,梯度爆炸的一些问题/Batch Normalization

1.梯度消失

梯度消失:梯度太小,无法进行参数的更新,梯度小到数据类型无法表示出现NAN

梯度爆炸:梯度太大,大到数据类型无法表示,出现NAN

假设我们有四层极简神经网络:每层只有一个神经元

获取的w1的梯度有:

获取的w1的梯度有

 假设我们使用sigmoid激活函数,即f为sigmoid函数,sigmoid的导数如下图

 假设每层都获取sigmoid导函数的最大值1/4,那么在反向传播时,

 当权重初始过小或使用易饱和神经元(sigmoid,tanh)sigmoid在y=0,1处梯度接近0,而无法更新参数,神经网络在反向传播时也会呈指数倍缩小,产生“消失”现象

2.梯度爆炸

假设X2= 2, W1 = W2 = W3 = 2

当初始权重过大时,梯度神经网络在反向传播时也会呈指数倍放大,产生“爆炸“现象

3.解决梯度消失或者梯度爆炸的经验

(1)替换易训练神经元

(2)改进梯度优化算法:使用Adam等算法

(3)使用batch normalization

   以上为最普通的用法

4.nn.Sequential

nn.Sequential是一个有序的容器,其中传入的是构造器类(各种用来处理input的类),最终input会被Sequential中的构造器依次执行

例如:

layer = nn.Sequential(
            nn.Linear(input_dim, n_hidden_1),
            nn.ReLU(True), # inplace=False 是否对输入进行就地修改,默认为False
            nn.Linear(n_hidden_1, n_hidden_2),
            nn.ReLU(True),
            nn.Linear(n_hidden_2, output_dim)
            )# 最后一层不需要添加激活函数

可以直接调用layer(x),得到输出

x的被执行顺序就是Sequential中定义的顺序:

1.被隐层1执行,形状变为[batch_size, n_hidden_1]

2.被relu执行,形状不变

3.被隐层2执行,形状变为[batch_size, n_hidden_2]

4.被relu执行,形状不变

5.被最后一层执行,形状变为[batch_size, output_dim]

5.nn.BatchNorm1d

batch normalization 翻译成中文就是批规范化,即在每个batch训练的过程中,对参数进行归一化的处理,从而达到加快训练速度的效果

以sigmoid激活函数为例,在反向传播的过程中,在值为0,1的时候,梯度接近0,导致参数被更新的幅度很小,训练速度很慢。但是如果对数据进行归一化之后,就会尽可能地把数据拉到0-1的范围,从而让参数的更新幅度变大,提高训练的速度

BatchNorm一般会放到激活函数之后,即对输入进行激活处理后再进入batchnorm

nn.BatchNorm1d(参数) 这里的参数是最后一层输出的参数  如上文中第一个relu后接的batchnorm 参数应该为(n_hidden_1) 第二个relu后面的batch norm 应为n_hidden_2  即nn.BatchNorm1d(n_hidden_2)

6.nn.Dropout

dropout的作用 :

1.增加模型的稳定性

2.可以解决过拟合的问题(增加模型的泛化能力)

3.可以理解为训练后的模型是多个模型组合之后的结果,类似随机森林

这里插入随机森林中讲过的


如何训练每一个base learner

其中一个最简单的方式 :随机采样训练每一个子树 bootstrap :从训练数据集中采样固定个数个样本 每次采样batchsize个样本组成Dbs 用采样出来的子集去训练 学习得到一个baselearner 一直重复t次 然后采用多数投票的方式 融合起来 ---------图中的63.8% 是指用于训练的数据 而其余未被用到的数据称为out of bag 袋外数据 一定程度上也可以增加模型的泛化能力 相当于dropout

另一种 feature bagging :不采样数据 采样特征 一共收集到N个feature 对于每个base learner 用采样出来的feature训练base learning  然后bagging起来


dropout一般用在batch norm之后

至此一些基础概念 基础代码基本梳理复习完毕 之后开始项目实战操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyttonkeepgoing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值