深度学习基础
神经网络的数学基础
神经网络的“齿轮”:张量运算
张量变形
-
第三个重要的张量运算是张量变形(tensor reshaping)。张量变形是指改变张量的行和列,以得到想要的形状。变形后的张量的元素总个数与初始张量相同。
>>> x = np.array([[0., 1.], [2., 3.], [4., 5.]]) >>> print(x.shape) (3, 2) >>> x = x.reshape((6, 1)) >>> x array([[ 0.], [ 1.], [ 2.], [ 3.], [ 4.], [ 5.]]) >>> x = x.reshape((2, 3)) >>> x array([[ 0., 1., 2.], [ 3., 4., 5.]])
-
经常遇到的一种特殊的张量变形是转置(transposition)。对矩阵做转置是指将行和列互换,使 x[i, :] 变为 x[:, i]。
>>> x = np.zeros((300, 20)) # 创建一个形状为 (300, 20) 的零矩阵 >>> x = np.transpose(x) >>> print(x.shape) (20, 300)
张量运算的几何解释
-
对于张量运算所操作的张量,其元素可以被解释为某种几何空间内点的坐标,因此所有的张量运算都有几何解释。
-
通常来说,仿射变换、旋转、缩放等基本的几何操作都可以表示为张量运算。举个例子,要将一个二维向量旋转 theta 角,可以通过与一个2×2矩阵做点积来实现,这个矩阵为 R = [u, v],其中 u 和 v 都是平面向量:u = [cos(theta), sin(theta)],v = [-sin(theta), cos(theta)]。
深度学习的几何解释
-
神经网络完全由一系列张量运算组成,而这些张量运算都只是输入数据的几何变换。 因此,你可以将神经网络解释为高维空间中非常复杂的几何变换,这种变换可以通过许多简单的步骤来实现。
-
机器学习的内容:为复杂的、高度折叠的数据流形找到简洁的表示。
-
深度学习特别擅长这一点:它将复杂的几何变换逐步分解为一长串基本的几何变换,深度网络的每一层都通过变换使数据解开一点点,许多层堆叠在一起,可以实现非常复杂的解开过程。