一 序
本来想找点Java的GRU跑一下。发现资料很少。基本上基于Python的。DeepLearning4J支持LSTM资料也是很少,它还不支持GRU。先学习下Python再看吧。
找点基础的资料补充下。以下为极客时间的基础课内容。
二 矩阵与向量
在线性代数中,由单独的数 a 构成的元素被称为标量(scalar):一个标量 a 可以是整数、实数或复数。如果多个标量 a1,a2,⋯,an 按一定顺序组成一个序列,这样的元素就被称为向量(vector)。显然,向量可以看作标量的扩展。原始的一个数被替代为一组数,从而带来了维度的增加,给定表示索引的下标才能唯一地确定向量中的元素。
每个向量都由若干标量构成,如果将向量的所有标量都替换成相同规格的向量,得到的就是如下的矩阵(matrix)
相对于向量,矩阵同样代表了维度的增加,矩阵中的每个元素需要使用两个索引(而非一个)确定。同理,如果将矩阵中的每个标量元素再替换为向量的话,得到的就是张量(tensor)。直观地理解,张量就是高阶的矩阵。
在计算机存储中,标量占据的是零维数组;向量占据的是一维数组,例如语音信号;矩阵占据的是二维数组,例如灰度图像;张量占据的是三维乃至更高维度的数组,例如 RGB 图像和视频。
再数学中使用范数以及内积来表示向量,范数(norm)是对单个向量大小的度量,描述的是向量自身的性质,其作用是将向量映射为一个非负的数值。通用的 Lp 范数定义如下:
对⼀个给定向量, 范数计算的是向量所有元素绝对值的和,
范数计算的是通常意义上的向量长度.
范数计算的则是向量中最大元素的取值。
内积(inner product)内积(inner product)计算的则是两个向量之间的关系。两个相同维数向量内积的表达式为:
即对应元素乘积的求和。内积能够表示两个向量之间的相对位置,即向量之间的夹角。一种特殊的情况是内积为 0,即 〈x,y〉=0。在二维空间上,这意味着两个向量的夹角为 90 度,即相互垂直。而在高维空间上,这种关系被称为正交(orthogonality)。如果两个向量正交,说明他们线性无关,相互独立,互不影响。
向量的意义:它的元素都是具有相同维数的向量(可以是有限个或无限个), 并且定义了加法和数乘等结构化的运算,这样的集合就被称为线性空间(linear space),定义了内积运算的线性空间则被称为内积空间(inner product space)。在线性空间中,任意一个向量代表的都是 n 维空间中的一个点;反过来, 空间中的任意点也都可以唯一地用一个向量表示。两者相互等效。
在内积空间中,一组两两正交的向量构成这个空间的正交基(orthogonal basis),假若正交基中基向量的 L2 范数都是单位长度 1,这组正交基就是标准正交基(orthonormal basis)。正交基的作用就是给内积空间定义出经纬度。⼀旦描述内积空间的正交基确定了,向量和点之间的对应关系也就随之确定。
线性空间的一个重要特征是能够承载变化。当作为参考系的标准正交基确定后,空间中的点就可以用向量表示。当这个点从一个位置移动到另一个位置时,描述它的向量也会发生改变。点的变化对应着向量的线性变换(linear transformation),而描述对象变化抑或向量变换的数学语言,正是矩阵。
在线性空间中,变化的实现有两种方式:一是点本身的变化,二是参考系的变化。
描述矩阵的⼀对重要参数是特征值(eigenvalue)和特征向量(eigenvector)。对于给定的矩阵 A,假设其特征值为λ,特征向量为 x,则它们之间的关系如下
Ax=λx
矩阵代表了向量的变换,其效果通常是对原始向量同时施加方向变化和尺度变化。矩阵特征值和特征向量的动态意义在于表示了变化的速度和方向。所有分身的运动叠加在⼀起才是矩阵的效果。
求解给定矩阵的特征值和特征向量的过程叫做特征值分解,但能够进行特征值分解的矩阵必须是 n 维方阵。将特征值分解算法推广到所有矩阵之上,就是更加通用的奇异值分解。
要点如下:
- 线性代数的本质在于将具体事物抽象为数学对象,并描述其静态和动态的特性;
- 向量的实质是 n 维线性空间中的静止点;
- 线性变换描述了向量或者作为参考系的坐标系的变化,可以用矩阵表示;
- 矩阵的特征值和特征向量描述了变化的速度与方向。