深度学习标量、向量、矩阵与张量(三)
1. 定位导航线性代数是深度学习最核心的数学工具——没有之一。神经网络的前向传播本质上就是矩阵乘法加非线性激活反向传播本质上就是链式法则在矩阵/向量上的应用PCA、SVD、特征分解等工具贯穿从数据预处理到模型分析的全过程。本篇是最基础的一篇建立符号体系和直觉。如果你已经熟悉线性代数可以快速扫过符号约定后跳到下一篇。2. 核心问题深度学习处理的数据千差万别——数字、图片、文本、音频、视频。但在数学上它们都必须被统一表达为数的数组然后才能被计算。这些数的数组从简单到复杂对应四种数学对象理解它们的定义、符号约定和操作方式是一切后续内容的前提。3. 直觉解释可以用容器的比喻来理解这四种对象对象比喻现实例子标量一个杯子里的水温度 36.5°C、学习率 0.001向量一排杯子一个学生的3门成绩 [88, 92, 76]矩阵一个架子上的多排杯子全班30个学生的3门成绩30×3 的表格张量多个架子堆叠一张 RGB 彩色图片高×宽×3通道深度学习中一张 224×224 的彩色图片就是一个形状为 (224, 224, 3) 的三阶张量一个 batch 的 32 张图片就是形状为 (32, 224, 224, 3) 的四阶张量。4. 严格定义4.1 标量Scalar—— 0 阶张量标量就是一个单独的数。用斜体小写字母表示并明确其类型实数标量s∈Rs \in \mathbb{R}s∈R如令sss表示一条线的斜率自然数标量n∈Nn \in \mathbb{N}n∈N如令nnn表示元素的数目在深度学习中标量常见于学习率、正则化系数、损失值、单个神经元的输出值。4.2 向量Vector—— 1 阶张量向量是一列有序排列的数。用粗体小写字母表示如x\mathbf{x}x。通过索引访问元素x\mathbf{x}x的第iii个元素写作xix_ixi斜体、不加粗。如果每个元素都属于实数集R\mathbb{R}R且共有nnn个元素则x∈Rn\mathbf{x} \in \mathbb{R}^nx∈Rn。显式写出来就是一个列向量x [x₁, x₂, ..., xₙ]ᵀ两种理解方式代数视角一列数几何视角空间中的一个点每个元素是不同坐标轴上的坐标索引技巧xS\mathbf{x}_SxS表示取集合SSS中索引对应的元素。例如S{1,3,6}S \{1,3,6\}S{1,3,6}则xS\mathbf{x}_SxS取出第 1、3、6 个元素x−1\mathbf{x}_{-1}x−1表示除第 1 个元素外的所有元素x−S\mathbf{x}_{-S}x−S表示除SSS中索引外的所有元素在深度学习中向量常见于一个样本的特征向量、网络某一层的输出、梯度向量、偏置项。4.3 矩阵Matrix—— 2 阶张量矩阵是二维数组每个元素由两个索引确定。用粗体大写字母表示如A\mathbf{A}A。A∈Rm×n\mathbf{A} \in \mathbb{R}^{m \times n}A∈Rm×n表示mmm行nnn列的实数矩阵Ai,jA_{i,j}Ai,j表示第iii行、第jjj列的元素斜体、不加粗Ai,:\mathbf{A}_{i,:}Ai,:表示第iii行一个行向量A:,j\mathbf{A}_{:,j}A:,j表示第jjj列一个列向量在深度学习中矩阵常见于权重矩阵W\mathbf{W}W、设计矩阵每行一个样本、灰度图像。4.4 张量Tensor—— N 阶当坐标超过两维时就进入了张量的领域。张量就是任意维度的数组。用特殊字体A\textsf{A}A表示实际代码中就是多维数组坐标为(i,j,k)(i, j, k)(i,j,k)的元素记作Ai,j,k\textsf{A}_{i,j,k}Ai,j,k在深度学习中张量无处不在阶数形状示例含义0()标量如损失值1(512,)向量如某层的输出2(30, 512)矩阵如一个 batch 的特征3(224, 224, 3)一张 RGB 图片4(32, 224, 224, 3)一个 batch 的图片5(16, 30, 512)一个 batch 的序列数据batch × 时间步 × 特征5. 三种基本操作5.1 转置Transpose转置是以主对角线左上到右下为轴的镜像(A⊤)i,jAj,i(\mathbf{A}^\top)_{i,j} A_{j,i}(A⊤)i,jAj,i直觉行列互换。一个m×nm \times nm×n的矩阵转置后变为n×mn \times mn×m。特殊情况向量的转置列向量 → 行向量。常用于定义行向量x[x1,x2,x3]⊤\mathbf{x} [x_1, x_2, x_3]^\topx[x1,x2,x3]⊤标量的转置等于自身aa⊤a a^\topaa⊤5.2 矩阵加法两个形状相同的矩阵对应位置元素相加CAB ⟹ Ci,jAi,jBi,j\mathbf{C} \mathbf{A} \mathbf{B} \implies C_{i,j} A_{i,j} B_{i,j}CAB⟹Ci,jAi,jBi,j标量与矩阵的运算逐元素Da⋅Bc ⟹ Di,ja⋅Bi,jc\mathbf{D} a \cdot \mathbf{B} c \implies D_{i,j} a \cdot B_{i,j} cDa⋅Bc⟹Di,ja⋅Bi,jc5.3 广播Broadcasting深度学习中有一个非常规但极其常用的操作矩阵和向量相加。CAb ⟹ Ci,jAi,jbj\mathbf{C} \mathbf{A} \mathbf{b} \implies C_{i,j} A_{i,j} b_jCAb⟹Ci,jAi,jbj向量b\mathbf{b}b被隐式地复制到矩阵的每一行——不需要显式创建一个将b\mathbf{b}b重复mmm次的矩阵。这种隐式复制的机制叫做广播broadcasting。这在神经网络中极其常见。一个全连接层的前向传播就是yWxb\mathbf{y} \mathbf{W}\mathbf{x} \mathbf{b}yWxb其中b\mathbf{b}b就是通过广播加到每个样本的输出上。6. 关键对比维度对象符号约定元素访问深度学习中的典型角色0标量斜体小写sss直接使用学习率、损失值1向量粗体小写x\mathbf{x}xxix_ixi特征、偏置、梯度2矩阵粗体大写A\mathbf{A}AAi,jA_{i,j}Ai,j权重、灰度图、数据批次≥3张量特殊字体A\textsf{A}AAi,j,k\textsf{A}_{i,j,k}Ai,j,k彩色图、视频、batch数据7. 常见误区误区一“向量默认是行向量”在深度学习的数学约定中向量默认是列向量。行向量需要显式写成x⊤\mathbf{x}^\topx⊤。很多初学者被 Python 的一维数组误导——NumPy 的np.array([1,2,3])既不是行向量也不是列向量它是一个没有行列概念的一维数组。要明确区分需要用reshape(-1,1)或reshape(1,-1)。误区二“张量 高维矩阵”严格来说张量是一个更广义的数学概念涉及坐标变换下的不变性但在深度学习的语境中张量基本等同于多维数组。PyTorch 的核心数据结构就叫torch.TensorTensorFlow 也以此命名。误区三“广播是自动且安全的”广播虽然方便但也是 bug 的温床。例如形状为 (3,1) 的矩阵和形状为 (1,4) 的矩阵相加会广播成 (3,4) 的结果——这可能不是你想要的。始终检查张量形状是调试的第一步。8. 代码实践importnumpyasnp# 标量learning_rate0.001loss2.345# 向量注意numpy一维数组没有行列之分xnp.array([1.0,2.0,3.0])# shape: (3,)x_colx.reshape(-1,1)# shape: (3, 1) — 列向量x_rowx.reshape(1,-1)# shape: (1, 3) — 行向量# 矩阵Wnp.random.randn(4,3)# shape: (4, 3)print(fW 的形状:{W.shape})print(fW 的转置形状:{W.T.shape})# (3, 4)print(fW[0,:] 第0行:{W[0,:]})# 一个行向量print(fW[:,0] 第0列:{W[:,0]})# 一个列向量# 张量 — 一张 RGB 图片imagenp.random.randint(0,256,size(224,224,3))# 三阶张量print(f一张图片:{image.shape})# (224, 224, 3)# 一个 batch 的图片batchnp.random.randint(0,256,size(32,224,224,3))# 四阶张量print(f一个batch:{batch.shape})# (32, 224, 224, 3)# 广播示例Anp.array([[1,2,3],[4,5,6]])# shape: (2, 3)bnp.array([10,20,30])# shape: (3,)CAb# 广播b 被复制到 A 的每一行print(f广播结果:\n{C})# [[11 22 33]# [14 25 36]]# 神经网络中的典型操作y Wx bWnp.random.randn(4,3)# 权重矩阵xnp.random.randn(3)# 输入向量bnp.random.randn(4)# 偏置向量yW xb# 前向传播print(f输出 y 的形状:{y.shape})# (4,)9. 现代延伸概念现代发展张量作为基础数据结构PyTorch 的torch.Tensor和 TensorFlow 的tf.Tensor就是多维数组的工程实现支持 GPU 加速和自动微分广播机制NumPy 的广播规则被 PyTorch/TensorFlow 完整继承是所有框架的核心特性高阶张量Transformer 中的注意力权重是 4 阶张量 (batch, heads, seq_len, seq_len)视频理解模型处理 5 阶张量 (batch, time, height, width, channels)张量分解张量分解CP 分解、Tucker 分解被用于模型压缩——将大型权重张量分解为多个小张量的乘积
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2455376.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!