深度学习——数值稳定性+模型初始化+激活函数(笔记)

一.数值稳定性:随着网络的层数的增加,数值可能变得不稳定

1.神经网络的梯度

①有d层的神经网络:

(t表示层)

y是损失函数也是目标函数,从第一层一直到d层。

②计算损失函数l关于参数的梯度,Wt的梯度(链式求导法则)

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第1张图片

2.数值稳定性的两个问题:

①梯度爆炸

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第2张图片

② 梯度消失

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第3张图片

3【举例梯度爆炸】MLP(多层感知机)

第t层隐藏层的计算,省略偏移

 

 进行求导

从t层到d-1层的链式求导

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第4张图片

 ①梯度爆炸:

使用ReLu作为激活函数

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第5张图片

 

 所以 d-t很大代表层数多,W大于1,值很大,梯度爆炸。

【梯度爆炸的问题】

①值超出值域

②对学习率敏感:学习率太大,大的参数,梯度更大了。学习率太小,小的参数乘梯度,优化不起作用了。

4.【举例梯度消失】

使用sigmoi作为激活函数

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第6张图片

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第7张图片 

 输入的值大一些,梯度就接近于0.

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第8张图片

 【梯度消失的问题】

①梯度值为0,训练没有进展

②底层层更严重。只有顶部训练的好。

【总结】

1.数值过大或者过小会导致数值问题

2.深度模型,对n个模型累乘

 


 二,让训练更加稳定【梯度不能太小和太大】

1.让训练更加稳定

①目标:让梯度值在合理的范围内[1e-6,1e3]

②将乘法变加法:ResNet,LSTM

③归一化:梯度归一化,梯度裁剪

合理的权重初始和激活函数(对梯度的影响)

验证:

2.让每层的方差是一个常数

①将每层的输出和梯度看作随机变量

让输出和梯度的均值和方差保持一致。

也就是说最后一层跟第一层的均值和方差差不多

如:第t层 均值为0,方差是常数。不管正向还是反向。

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第9张图片

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第10张图片

3.权重初始化

①在合理区间随机初始参数

②训练开始的时候容易数值不稳定。远离最优解的地方损失函数表面很复杂。最优解附近表面比较平

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第11张图片

 

 ③小网络可以初始权重深度学习——数值稳定性+模型初始化+激活函数(笔记)_第12张图片,不能保证深度神经网络。

4.【例子:MLP】

 均值:平均值,方差:数据的离散程度

假设

权重是独立的同分布(第t层的第i行第j列)。

那么均值等于0方差是一个常数

当前层的输入和权重是独立的

 ②假设没有激活函数

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第13张图片

 正向方差: 展开:每项的平方+交叉项

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第14张图片

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第15张图片

 

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第16张图片

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第17张图片

 

 5.Xavier初始

①难以满足(不能控制的,除非输入等于输出)

②Xavier使得(vt是t层权重的方差,nt-1输入维度,nt输出维度)

(知道当前层输入和输出的大小,就能找到当前层方差的大小)

Ⅰ正态分布深度学习——数值稳定性+模型初始化+激活函数(笔记)_第18张图片。权重初始的时候均值0,方差是输入输出维度确定的

 Ⅱ均分分布深度学习——数值稳定性+模型初始化+激活函数(笔记)_第19张图片

 6.假设有线性的激活函数

 均值:

 

 所以找激活函数类似于f(x)= x

 方差:

 深度学习——数值稳定性+模型初始化+激活函数(笔记)_第20张图片

7.检查常用的激活函数 f(x)= x

深度学习——数值稳定性+模型初始化+激活函数(笔记)_第21张图片

 

[总结]:

提升数值稳定性:

①合理的权重初始值②激活函数的选取,类似y=x

 

你可能感兴趣的:(深度学习,人工智能)