李沐之数值稳定性+模型初始化和激活函数

目录

1.数值稳定性

1.1梯度爆炸

1.2梯度消失

2.模型初始化和激活函数

2.1让训练更加稳定

3.补充一点导数知识:


1.数值稳定性

李沐之数值稳定性+模型初始化和激活函数_第1张图片

层记为t,这里的y不是预测,还包括了损失函数,y是优化函数,不是预测的结果y。第t层是输出。所有的h都是一些向量,向量关于向量的导数是一个矩阵,所以用了很多次的矩阵乘法,出问题就在这里。

李沐之数值稳定性+模型初始化和激活函数_第2张图片

1.1梯度爆炸

李沐之数值稳定性+模型初始化和激活函数_第3张图片

多层感知机对于 t层的导数是这样子的连乘公式

 h是向量,w也是向量,他们乘起来也是向量。则向量对向量h求导是一个矩阵。(对角矩阵是因为F(X)对X求导是对角矩阵,o(WtHt-1) 对Ht-1求导可以化为 o(WtHt-1)对WtHt-1求导乘上 WtHt-1对Ht-1求导。而 o(WtHt-1)对WtHt-1求导就是F(x)对x求导。 为什么F(X)对X求导是对角矩阵呢,因为X是向量,且激活函数这个F是对X里每个元素的操作,例如【f(x1), f(x2), f(x3)】对【x1,x2,x3】求导运用向量求导公式就是对角矩阵)。

李沐之数值稳定性+模型初始化和激活函数_第4张图片

其次就是公式里的,为什么w^{^{t}}h^{^{t-1}}h^{^{t-1}}求导等于\left (w^{t} \right )^{T},因为这是使用了分母布局,意思是结果的行等于分母的大小,也就是和h的大小相等。

李沐之数值稳定性+模型初始化和激活函数_第5张图片

则对角阵就是由0或1的元素组成的,把这个对角阵和w的转置相乘,结果就是要么把某个w留下来,要么就是把某个w删去了。把w看成行向量的话,就相当于把某一列全部变成0,或者把某一列留下等于原来的值。

d-t很大的意思是网络比较深(假设w全是大于1,且层数比较大的话,多层感知机的导数就会非常大)。

李沐之数值稳定性+模型初始化和激活函数_第6张图片

李沐之数值稳定性+模型初始化和激活函数_第7张图片

如果学习率太大,那么一步就走的比较远,则梯度的变化就会很大。

1.2梯度消失

李沐之数值稳定性+模型初始化和激活函数_第8张图片

对于激活函数,当他的输入稍微大一点的时候,导数就会变成0。对应公式w^{^{i}}h^{^{i-1}}大的话,\sigma ^{'}\left ( w^{^{i}}h^{^{i-1}} \right )就会变得很小或者变成0。

李沐之数值稳定性+模型初始化和激活函数_第9张图片

李沐之数值稳定性+模型初始化和激活函数_第10张图片

神经网络做梯度是从顶部开始的(顶部是靠近输出层),越到下面(底部)梯度会变得越来越小。意味着不管把神经网络加多深,底部的层都跑不动,也就是说跟一个很浅层的神经网络是没有区别的。这就是梯度消失的问题。

李沐之数值稳定性+模型初始化和激活函数_第11张图片

2.模型初始化和激活函数

2.1让训练更加稳定

李沐之数值稳定性+模型初始化和激活函数_第12张图片

李沐之数值稳定性+模型初始化和激活函数_第13张图片

李沐之数值稳定性+模型初始化和激活函数_第14张图片

 李沐之数值稳定性+模型初始化和激活函数_第15张图片

假设权是独立同分布,IID 是指一组随机变量中每个变量的概率分布都相同,且这些随机变量互相独立,这一层的输入(h)也是独立于当前的权重。

在第t层的输出的第i个元素的均值可以看成是w的第i行乘以t-1层的输出,对j进行求和,再拆开(独立性、可加性),因为假设两个均值都为0,所以最后等于0。

李沐之数值稳定性+模型初始化和激活函数_第16张图片

李沐之数值稳定性+模型初始化和激活函数_第17张图片

方差等于平方项的均值减去均值的平方,因为均值为0,所以后一项为0。第二排的公式就是利用了和的平方公式。\left ( a+b+c \right )^{2}=a^{2}+b^{2}+c^{2}+2ab+2ac+2bc,如果是j

因为t层的权重均值假设为0,前一层输出的均值也为0,所以第二项为0。因为方差 = 自变量平方的期望 - 期望的平方,现在期望等于0。假设要使输入的方差等于输出的方差的话,那么n_{t-1}\gamma _{t}=1n_{t-1}是不可以改的,是输入的维度,\gamma _{t}就是初始可以选择的方差。(因为 h^t 是由 t-1 层的 n 个参数 w 运算求得的,而 t-1 层的这些参数之前假设了他们都是服从 方差为 γ 的分布,所以他们相加就成了n_{t-1}\gamma _{t}

接下来看反向的方差:

李沐之数值稳定性+模型初始化和激活函数_第18张图片

李沐之数值稳定性+模型初始化和激活函数_第19张图片

李沐之数值稳定性+模型初始化和激活函数_第20张图片

     要保证每次前向输出的方差是一致的,要保证梯度是一样的,n(t-1)是t层输入的维度,n(t)是t层输出的维度,因此无法同时满足这两个条件。\gamma _{t}是第t层权重的方差,满足 输入的维度加输出的维度除以2等于1。xavier初始化的含义就是权重初始的方差是根据输入和输出的维度来决定的。

(以上的推导都是基于没有激活函数的情况)

李沐之数值稳定性+模型初始化和激活函数_第21张图片

李沐之数值稳定性+模型初始化和激活函数_第22张图片

为什么输出的均值等于\beta,因为是线性变换,输入的均值等于0,则\alpha h_{i}^{'}等于0。因为\beta为常数,所以期望等于自身。因此要使期望等于0,则激活函数一定是一条过原点的直线。激活函数的输入和输出的方差有\alpha ^{2}的关系,也就是激活函数把上一层的输出(也就是这一层的输入)放大\alpha倍的话,方差会放大\alpha ^{2}倍。如果我不想改变输入输出的方差的话,方法就是使\alpha等于1。

李沐之数值稳定性+模型初始化和激活函数_第23张图片

李沐之数值稳定性+模型初始化和激活函数_第24张图片李沐之数值稳定性+模型初始化和激活函数_第25张图片

可以从图中看出,tanh和relu都满足在一定区间斜率为1的情况,我们可以调整sigmoid使其满足条件(图中蓝色)。

总结:使得每一层的输出和每一层的梯度都是均值为0,方差为一个固定数的随机变量,权重初始可以是x维,激活函数用relu或者tanh都没问题,使用sigmoid就要对他进行处理。

3.补充一点导数知识:

李沐之数值稳定性+模型初始化和激活函数_第26张图片

李沐之数值稳定性+模型初始化和激活函数_第27张图片

李沐之数值稳定性+模型初始化和激活函数_第28张图片

当两个都是向量的时候,导数是一个矩阵

李沐之数值稳定性+模型初始化和激活函数_第29张图片

y是标量,x是列向量,关于他们的导数是一个行向量。方向(2,4)就是梯度,它关于等高线是正交的,所以说梯度一定指向等高线某个点变化最大的方向

李沐之数值稳定性+模型初始化和激活函数_第30张图片

李沐之数值稳定性+模型初始化和激活函数_第31张图片

当y是列向量,x是标量,他们的倒数是列向量

李沐之数值稳定性+模型初始化和激活函数_第32张图片

y为向量,x为向量,导数是矩阵。

李沐之数值稳定性+模型初始化和激活函数_第33张图片

李沐之数值稳定性+模型初始化和激活函数_第34张图片

李沐之数值稳定性+模型初始化和激活函数_第35张图片

注意分母布局和分子布局,分母布局是指行数与分母相同,分子布局是指行数与分子相同

李沐之数值稳定性+模型初始化和激活函数_第36张图片

李沐之数值稳定性+模型初始化和激活函数_第37张图片

以上的例子就是分母布局,是一个3*2的矩阵,如果是分子布局,结果就是一个2*3的矩阵,也就是分母布局的转置。

李沐之数值稳定性+模型初始化和激活函数_第38张图片

重要结论:若y是向量,A是矩阵,那么Ay对y求偏导等于A的转置。(以上的例子是分母布局,如果使用分子布局则最后结果为A,就是把原来的结果转置一下。如果各个资料中求导的结果和你想的不一致,就该思考是不是采用了不同的布局形式

李沐之数值稳定性+模型初始化和激活函数_第39张图片

李沐之数值稳定性+模型初始化和激活函数_第40张图片

重要结论:若y(m*1),A(m*m),\frac{\partial yAy}{\partial y}=Ay+A^{_{}^{T}}y,特别的,当A对称(A^{_{}^{T}}=A)时\frac{\partial yAy}{\partial y}=2Ay

你可能感兴趣的:(深度学习,python,机器学习,算法)