正交初始化(orthogonal initialize)

正交初始化:

用以解决深度网络下的梯度消失、梯度爆炸问题,在RNN中经常使用的参数初始化方法。

https://blog.csdn.net/shenxiaolu1984/article/details/71508892

实现代码:

def orthogonal(shape):

    flat_shape = (shape[0], np.prod(shape[1:]))

    a = np.random.normal(0.0, 1.0, flat_shape)

    u, _, v = np.linalg.svd(a, full_matrices=False)

    q = u if u.shape == flat_shape else v

    return q.reshape(shape)

 

SVD分解:

奇异值分解是一个适用于任意矩阵的分解方法,奇异值分解可以理解为将一个比较复杂的矩阵用更小更简单的3个子矩阵的相乘来表示,这3个小矩阵描述了大矩阵重要的特性。

分解形式:A=U\Sigma V^T

其中若A \in R^{m\times n}, 则U\in R^{m\times m}\Sigma \in R^{m\times n}V \in R^{n\times n}

分解式的含义可以理解为:矩阵A的作用是将一个向量从V这组正交基向量的空间旋转到U这组正交基向量的空间,并且按照\Sigma在各个方向上做了缩放,缩放倍数就是奇异值。

SVD解法:首先求方阵AA^T的特征值,AA^T v_i = \lambda_i v_i,其中\lambda_i为特征值,v_i为特征向量也就是上面的V^T

而奇异值为\sigma_i = \sqrt{\lambda_i},而左奇异量U为u_i=\frac{1}{\sigma_i}Av_i

SVD分解:1.降维;2.隐性语义分析;3.推荐系统

参考:https://www.cnblogs.com/lzllovesyl/p/5243370.html

numpy.linalg.svd

正交初始化(orthogonal initialize)_第1张图片

 

 

 

你可能感兴趣的:(deeplearning)