Category: Math/Linear Algebra/Calculus/Probability Theory/Statistics

  • einsum is all you need-einsum函数在数值计算中的应用示例说明

    在深度学习框架和numpy等数值计算库中,记住不同的矩阵计算,如内积(dot products)、外积(outer products)、矩阵转置(transposes ),矩阵和向量相乘,以及矩阵和矩阵的乘法这些运算的函数名称和参数是容易混淆的一件事情,而爱因斯坦和(einsum)是通过一种领域语言(domain-specific language),用一种优雅的方式去解决这个问题,同时更进一步还可以描述更复杂的tensor的操作。 einsum函数采用如下的格式,einsum(equation,operands),下面为一个模板:result=einsum(“□□,□□□,□□->□□”,arg1,arg2,arg3)。其中□为占位符,表示张量的一个维度,如前面的equation的形式为“□□,□□□,□□->□□”,表示的含义为由三个输入参数,第一个和第三个为矩阵,第二是阶数为3的张量。计算的结果为矩阵。 下面将解释一些使用示例: 其中张量的缩并(tensor contraction)操作是两个多维张量中的分别两个大小相同的维度的内积,具体可以参考链接1中的示例。其中广播操作(broadcast)的实现方式可以参考引文7中的示例说明。 关于示例和相关说明,后面再根据实践会进一步补充更新或进行相关的修正,欢迎读者提出问题意见和建议。 References

  • 线性方程组求解方法简介

    线性方程组的求解可以有不同的方法,下面理解几种以备后续查阅。 1、拉默法则(Cramer’s Rule)是线性代数中一个关于求解线性方程组的定理,其证明过程见参考文献1。 2、高斯消除法求解线性方程组,将方程组转换为增广矩阵,经过一系列的初等行变换得到了行阶梯矩阵(即上三角矩阵)然后自下至上依次求解即可得到原方程的解。正是由于顺序消去法会因为值过小而引入计算误差,为了减少计算过程中舍入误差对方程组求解的影响,因此是否可以选择绝对值尽可能大的主元作为除数。基于这种思想就有了高斯消去法的改进型:部分主元消去法(Gaussian Elimination with Partial Pivoting)。 3、LU分解在实际应用中,LU分解可以通过Doolittle算法来实现,该算法从下至上对矩阵进行初等行变换,将对角线左下方的元素变成零。这些行变换的效果等同于左乘一系列单位下三角矩阵,这些单位下三角矩阵的乘积就是 ( L ) 矩阵。通过这种方式,可以将原始矩阵 ( A ) 表示为 ( L ) 和 ( U ) 的乘积,从而简化求解过程。 4、更多的方法有jacobi迭代法等,具体可以参考引文4,后续有需要再去做更详细的解释说明。 References

  • 几个基本的线代知识点

    这篇文章简要介绍一下线性代数的相关概念知识,如行列式,特征值,特征向量以及特征值分解,SVD分解等。在这里顺便记录一下以便后续查阅。 1、行列式(determinant),矩阵对应一个特定的值,一般记为det(A),余子式(minor)m_{i,j}一般记为当前矩阵去除i行j列后形成的行列式(由此也可以理解为行列式为递归定义),代数余子式(cofactor)需要在m_{i,j}的基础上再乘上一个因子(-1)^{i+j}形成c_{i,j}。同时有伴随矩阵(adjoint matrix)的概念也是基于代数余子式进行定义的。需要注意,行列式只针对于方阵。 基于伴随矩阵就比较容易计算矩阵的逆。如下所示,也可以看出矩阵的逆要求其行列式不为0。 2、特征值特征向量(也是方阵,对于非方阵来说,是不存在特征值的,但是会存在条件数):满足特征方程(characteristic equatation)det(A-lamda I)=0的lambda的值即为矩阵的特征值。实对称矩阵的特征向量相互正交。特征值有其对应的代数重数(Algebraic multiplicity),每个特征值有其对应的几何重数(Geometric multiplicity,即为其对应的线性无关的特征向量的个数)。缺陷特征值(defective eigenvalue)指的是存在这个特征值的几何重数比代数重数要小的特征值。关于代数重数大于等于几何重数的相关证明,可以参考引文的链接。 3、特征值分解和SVD分解,可以参考引文3和引文4,其中特征值分解满足方阵,实对称矩阵的特征向量线性无关且为相互正交,PCA就用到了这个特性,SVD分解可以解决不是方阵的情况,但是可以通过转化为特征值分解的方法去进行求解,具体的方法可以参考引文3。特征值的计算方法可以用QR分解来进行。 References

  • QR分解及用其求矩阵特征值方法简介

    QR分解是一种特殊的矩阵分解,将矩阵A(m,n)分解为标准正交矩阵Q(m,n)和上三角矩阵R(n,n)的乘积,QR分解可以用来求矩阵的特征值等应用。 首先解释一下施密特正交化的方法,施密特正交化将n个线性无关的向量转化为标准正交向量,其转化的步骤是首选选一个向量,然后在计算第二个向量时,将原始的第二个向量可以分解为第一个向量和垂直于第一个向量的两个向量的和。而可以利用在同一个方向上的两个向量的内积之比值即为两个向量长度的比值等特性求出第二个向量(和第一个向量垂直),以此同样的类似方法求得第三个向量,第四个向量等等。从而得出施密特正交法的公式。具体公式可以参考引文。 经过施密特正交化的方法可以得出n个标准正交的列向量,而且原始的每一个列向量都可以表示为这n个标准正交列向量的线性组合,根据施密特正交向量的生成特点,原始的列向量的线性组合的线性因子刚好符合上三角矩阵的形式。 第二种算法为Householder transformation,其依次利用列向量和标准正交基形成镜像对称的特征去找到变换的Q的关系,得出Q的特性(对称正交),具体算法请参考引文链接。 QR分解的一个用处就是用来计算矩阵的特征值,具体的原理不做特别说明,如有兴趣可以参考引文链接。下图说明了怎么用numpy基于QR分解去计算矩阵的特征值。 References

  • 短时傅里叶分析(STFT)简介

    短时傅里叶分析是时频分析中经常用到的技术,由于傅里叶分析存在着时间跨度较宽导致分析结果中的频率特性中缺少了时间信息,甚至不同的信号可能会得出相同的傅里叶分析结果(如左右对称的两个信号,其傅里叶分析结果相同)。下面示例代码是短时傅里叶变换的numpy的逻辑实现,是基于局部(localized time zone)的傅里叶分析得出结果所拼接而成。其中hop_length即为短时傅里叶分析的时间分辨率。 以上图示为短时傅里叶分析的三维可视化结果,也有基于二维的可视化方法,一般称为光谱(声谱)图,如下所示为一段音频的频谱分析结果(Speech spectrogram,频率大小这个维度用颜色来表示)。 上面的声谱图可以有如下的解释: 1、基于梳状图的水平线们为对应的基频; 2、垂直线对应突然的语音信号, 通常是瞬变特征,典型的瞬变语音为辅音;爆破音;塞音; 3、在高频信号部分有较大能量的区域(更亮的颜色),一般对应着摩擦音(fricatives) 后续将继续更新光谱图的更多的分析技巧,如频率包络图等。 References

  • 傅里叶变换

    今天说一说数学上的傅里叶变换,后面可能在做工程应用上会用得到。傅里叶分析的使用场景挺多,有对信号特性进行分析的,有数据压缩方面的应用(如jpeg图像压缩用到了DCT,余弦正交基)。 傅里叶变换是将信号从一维时域信号(二维或三维空间域信号)转换为频域的过程,频域就是频率域,频率是变化快慢的度量,其单位为赫兹(hz)。 傅里叶分析基于三角函数的正交性原理,从直流分量,到基频,倍频之间存在着正交性,从而利用这种性质将函数分解为不同的正交基下面(不同频率)的幅值、相位。 傅里叶变换可以在实数域进行,也可以在复数域进行,相比于实数域,复数域的表达式更简洁,但是理解起来稍微麻烦些(欧拉公式的理解+复数域表示相位和幅值)。具体可以参考引文中的介绍。 基于python语言的傅里叶变换的代码实现有基于numpy的实现,如:Xfft = np.fft.fft(x)(其中x为原始信号信息),具体结果的解释参考引文。 References