向量与矩阵
上个章节的神经网络是为了解Transformer或者Mamba做好铺垫,在和后辈交流过程中发现有个障碍,那就是向量和矩阵。其实向量和矩阵的表达方式不是所有人都很习惯。在继续下面的章节之前小编认为有必要将向量、矩阵和神经网络做下补充解释。
向量是具有方向和大小的量,用箭头表示。向量具有下面的性质:
有好事者翻出来内积的几何含义,其实就是两个向量的长度乘以它们的夹角,那么上面代数的表达方式和下面的带有cosθ的表达式一样么。是一样的,推导过程略过一千字。
下图则为矩阵运算,请读者快速温习一下。m*n和n*p的矩阵相乘之后一定是m*p维度的。
神经网络的矩阵表示
先来看一个例子,上图一个简单的神经网络,这套变量的标识方式小编比较认可,上标l代表第几层,下面代表某一层的第几个神经元。w的两个下标mn分别代表第m个输出节点和第n个下游节点的权重。一般用z代表没有经过激活函数的数值,而a(ctivation)代表经过激活函数的输出。
上图是层1到层2的计算公式,可以将这样的运算直接转化为矩阵表示。矩阵表达方式十分简洁清爽,而下图中的w矩阵就是传说中的参数,这些矩阵通过样本训练而得到。
于是到了这里,基本上从较为抽象的角度,将基于神经网络的大模型做了简单的抽象。大模型其实就是多层级深度的神经网络,通过不断地累加参数,不断地优化结构,不断地调整样本,让神经网络的信息编码和激活更加的合理和高效。从另一个侧面来看深度学习,其实也是一种复杂的概率转移矩阵。
损失函数
为了评估每个训练之后,真实值和预测值之间的差异,需要一个函数来评估差异化。这个函数有很多种称呼,比如“误差函数”、“损失函数”、“代价函数”等。代价函数是深度学习的重要组成部分,因为它提供了神经网络在给定任务上执行情况的衡量标准。训练深度学习模型的最终目标是最小化损失函数,这意味着模型能够做出更准确的预测并更好地泛化到新数据。
例如在回归问题中采用的MSE来评估代价函数。
假定在某个批次的数据输入,得到预测数据
[7.6, 8.0, 6.8, 8.9, 7.2, 8.3, 7.0, 8.8, 7.0, 7.6]。
而真实的数据为
[7.8, 8.2, 6.5, 9.1, 7.0, 8.5, 6.9, 8.7, 7.2, 7.8]。
两者其实相当的接近。
采用MSE(Mean squared error loss)的评估模式,MSE=(1/n)*Σ(yi - ŷi)^2。yi为正确值,ŷi为预测值,cost = (1/20) * Σ(yi - ŷi)^2 = 0.045
损失函数一方面指导训练过程,用于计算预测输出与真实输出之间的误差。神经网络使用该误差信号来调整其权重和偏差,以减少损失。这个过程称为反向传播,它允许神经网络从错误中学习并在未来做出更好的预测。另一方面它有助于避免过度拟合,当模型的过度拟合则无法泛化到新数据。通过选择合适的损失函数,可以防止过度拟合并确保模型能够很好地泛化到未见过的数据。最后损失函数的选择会对模型的性能产生重大影响。通过使用相同损失函数比较不同模型的性能,可以确定哪个模型对于给定任务最有效。深度学习的不同类型任务则采用不同的损失(评估)函数。下面展示的这些代价函数将会在LLM背后的基础模型专栏中展开详细的讲解。
-
回归问题一般为均方误差(MSE)、平均绝对误差(MAE)损失、Huber loss和Log-cosh loss。
-
二元分类问题一般为Binary cross-entropy loss二元交叉熵损失、Hinge loss、Focal loss和Dice loss。
-
多类分类问题则为分类交叉熵损失、稀疏分类交叉熵损失、Kullback-Leibler (KL)散度损失和Sparsemax loss。
-
自动编码器问题:均方误差(MSE)损失、二元交叉熵损失和Perceptual loss感知损失。
-
生成对抗网络损失则一般采用Adversarial loss、L1 or L2 loss、Wasserstein loss和Least squares loss。
-
物体检测问题对应的有Intersection over Union (IoU) loss、Focal loss、Smooth L1 loss、GIoU loss。
-
Embedding问题则采用Triplet loss、Contrastive loss、Center loss和Angular loss。