机器视觉5-全连接神经网络1
- 图像表示
- 多层感知器
- 全连接神经网络
- 一、两层全连接网络表达式
- 二、三层全连接网络表达式
- 三、关于非线性操作的说明
- 四、全连接神经网络的映射原理
- 全连接神经网络的权值
- 一、线性分类器
- 二、两层全连接网络
- 三、总结
- 全连接神经网络线性不可分
- 全连接神经网络绘制与命令
- 一、公式与结构对应
- 二、网络结构
- 三、整体理解
- 激活函数
- 常用的激活函数
- Sigmoid函数
- ReLU(Rectified Linear Unit)函数
- tanh(双曲正切)函数
- Leaky ReLU函数
- 网络结构设计
- 一、隐层数量(深度设计)
- 二、每隐层神经元数量(宽度设计)
- SOFTMAX与交叉熵
- softmax
- 一、整体流程
- 二、各步骤详解
- 交叉熵损失
- 一、熵(Entropy)
- 二、交叉熵(Cross Entropy)
- 三、相对熵(Relative Entropy),也叫KL散度(KL Divergence)
- 一、公式推导关系
- 二、含义和应用上的关系
- 交叉熵对比多类均向量损失
- 一、整体流程
- 二、多类支撑向量机损失
- 三、交叉熵损失
- ***相同分数下两种分类器的损失有什么区别***
- 一、交叉熵损失函数
- 二、多类支撑向量机损失函数
- 三、总结
- 计算图与反向传播
- 计算图
- 反向传播
- 一、前向传播
- 二、反向传播
- 计算图的颗粒度
- 一、操作粒度
- 二、网络结构粒度
图像表示
利用原始像素作为特征展开为列向量。
多层感知器
全连接神经网络
全连接神经网络联合多个变换来实现输入到输出的映射。
这张图片展示了两层和三层全连接网络的表达式,并强调了非线性操作的重要性,具体解释如下:
一、两层全连接网络表达式
- 公式:( f = W 2 max ( 0 , W 1 x + b 1 ) + b 2 f = W_2 \max(0, W_1x + b_1)+b_2 f=W2max(0,W1x+b1)+b2)
- 变量含义:
- ( x x x):表示输入数据,通常是一个向量。例如,在图像分类任务中,( x x x)可以是将图像展平后的像素值向量。
- ( W 1 W_1 W1):是第一层全连接层的权重矩阵,它将输入( x x x)进行线性变换。权重矩阵的维度取决于输入( x x x)的维度和第一层隐藏单元的数量。
- ( b 1 b_1 b1):是第一层全连接层的偏置向量,与( W 1 x W_1x W1x)相加,用于调整线性变换的结果。
- ( max ( 0 , W 1 x + b 1 ) \max(0, W_1x + b_1) max(0,W1x+b1)):这是一个非线性激活函数ReLU(Rectified Linear Unit)的操作,它将( W 1 x + b 1 W_1x + b_1 W1x+b1)中的每个元素与( 0 0 0)进行比较,取较大的值。ReLU函数引入了非线性,使得神经网络能够学习到更复杂的函数关系。如果去掉这个非线性操作,多层全连接网络就会退化成一个简单的线性模型,其表达能力会大大受限。
- ( W 2 W_2 W2):是第二层全连接层的权重矩阵,它将经过ReLU激活后的结果进行线性变换。
- ( b 2 b_2 b2):是第二层全连接层的偏置向量。
- 整体理解:输入( x x x)先经过第一层全连接层的线性变换( W 1 x + b 1 W_1x + b_1 W1x+b1),然后通过ReLU激活函数进行非线性处理,得到的结果再经过第二层全连接层的线性变换( W 2 W_2 W2)和偏置( b 2 b_2 b2),最终得到输出( f f f)。
- 变量含义:
二、三层全连接网络表达式
- 公式:( f = W 3 max ( 0 , W 2 max ( 0 , W 1 x + b 1 ) + b 2 ) f = W_3 \max(0, W_2\max(0, W_1x + b_1)+b_2) f=W3max(0,W2max(0,W1x+b1)+b2))
- 变量含义:与两层全连接网络类似,这里多了一层全连接层。
- ( W 3 W_3 W3):是第三层全连接层的权重矩阵。
- 其他变量( x x x)、( W 1 W_1 W1)、( b 1 b_1 b1)、( W 2 W_2 W2)、( b 2 b_2 b2)的含义与两层全连接网络中的相同。
- 整体理解:输入( x x x)依次经过第一层全连接层的线性变换和ReLU激活、第二层全连接层的线性变换和ReLU激活,最后经过第三层全连接层的线性变换( W 3 W_3 W3),得到输出( f f f)。每一层的线性变换和非线性激活函数的组合使得网络能够逐步学习到更复杂的特征和函数关系。
- 变量含义:与两层全连接网络类似,这里多了一层全连接层。
三、关于非线性操作的说明
- 注意:非线性操作是不可以去掉:这是非常重要的一点。如果去掉非线性激活函数(如ReLU),那么无论有多少层全连接层,整个网络最终都可以简化为一个单一的线性变换。线性模型的表达能力有限,只能学习到线性关系,而现实世界中的很多问题都是非线性的,例如图像中的物体识别、语音识别等。通过引入非线性激活函数,神经网络能够拟合各种复杂的非线性函数,从而提高其对实际问题的建模能力和泛化能力。
四、全连接神经网络的映射原理
- 全连接神经网络级联多个变换来实现输入到输出的映射:全连接神经网络通过一层一层的全连接层,每个全连接层都包含线性变换(权重矩阵与输入向量的乘积加上偏置)和非线性激活函数,将输入数据逐步进行变换和特征提取,最终实现从输入到输出的复杂映射关系。每一层都在前一层的基础上学习更抽象、更高级的特征,使得网络能够处理各种复杂的任务。
综上所述,这张图片展示了全连接神经网络的基本结构和表达式,强调了非线性操作在神经网络中的关键作用,以及全连接神经网络通过级联多个变换来实现输入到输出映射的原理。
全连接神经网络的权值
这张图片主要讲解了线性分类器和两层全连接网络中权重矩阵的概念及作用,具体如下:
一、线性分类器
- 公式:( f ( x , W ) = W x + b f(x,W)=Wx + b f(x,W)=Wx+b)
- 变量含义:
- ( x x x):表示输入的图像向量(例如,这里提到的( x x x)可能是将图像展平为一个( 3072 3072 3072)维的向量)。
- ( W W W):是权重矩阵,图中示例为( 100 × 3072 100\times3072 100×3072)的矩阵。这里的( W W W)可以看作是权值模板,模板的个数由类别个数决定。例如,如果要对( 100 100 100)个类别进行分类,那么就有( 100 100 100)个这样的模板(权重矩阵的行数为( 100 100 100))。每个模板(权重矩阵的每一行)对应一个类别,用于与输入图像向量( x x x)进行线性组合,计算出该图像属于某个类别的得分。
- ( b b b):是偏置向量,用于调整分类器的决策边界。
- 图像示例:下方展示了不同类别的图像示例(plane、car、bird、cat、deer、dog、frog、horse、ship、truck),说明线性分类器是对这些不同类别的图像进行分类。
- 变量含义:
二、两层全连接网络
- 公式:( f = W 2 max ( 0 , W 1 x + b 1 ) + b 2 f = W_2\max(0, W_1x + b_1)+b_2 f=W2max(0,W1x+b1)+b2)
- 变量含义:
- ( x x x):与线性分类器中的输入图像向量类似。
- ( W 1 W_1 W1):是第一层全连接层的权重矩阵,图中示例为( 100 × 100\times 100×)(某个维度)。( W 1 W_1 W1)也可看作模板,模板个数人为指定。这里的( W 1 W_1 W1)用于对输入图像向量( x x x)进行第一次线性变换,并通过ReLU激活函数(( max ( 0 , ⋅ ) \max(0, \cdot) max(0,⋅)))引入非线性。
- ( b 1 b_1 b1):是第一层全连接层的偏置向量。
- ( W 2 W_2 W2):是第二层全连接层的权重矩阵,图中示例为( 10 × 100 10\times100 10×100)。( W 2 W_2 W2)的作用是融合( W 1 W_1 W1)多个模板的匹配结果来实现最终类别打分。它将经过ReLU激活后的结果进行第二次线性变换,并加上偏置( b 2 b_2 b2)得到最终的输出( f f f)。
- ( b 2 b_2 b2):是第二层全连接层的偏置向量。
- 变量含义:
三、总结
图片通过对比线性分类器和两层全连接网络,说明了权重矩阵在不同模型中的作用和意义。在线性分类器中,权重矩阵( W W W)直接与输入图像向量进行线性组合用于分类;在两层全连接网络中,( W 1 W_1 W1)和( W 2 W_2 W2)分别在不同层中进行线性变换,并通过ReLU激活函数引入非线性,最终实现对输入图像的分类。同时强调了权重矩阵可看作模板,以及模板个数的确定方式在不同模型中的差异。
全连接神经网络线性不可分
全连接神经网络绘制与命令
这张图片展示了两层全连接网络的结构和公式,具体解释如下:
一、公式与结构对应
- 公式:( f = W 2 max ( 0 , W 1 x + b 1 ) + b 2 f = W_2\max(0, W_1x + b_1)+b_2 f=W2max(0,W1x+b1)+b2)
- 变量含义:
- ( x x x):表示输入数据,在右侧的网络结构图中对应输入层的节点( x 1 , x 2 , ⋯ , x d x_1, x_2, \cdots, x_d x1,x2,⋯,xd),( d d d)为输入数据的维度。
- ( W 1 W_1 W1):是第一层全连接层的权重矩阵,它将输入( x x x)进行线性变换并通过ReLU激活函数(( max ( 0 , ⋅ ) \max(0, \cdot) max(0,⋅)))引入非线性,得到中间结果( h h h)。在右侧的网络结构图中,( W 1 W_1 W1)表示输入层与隐藏层之间的连接权重。
- ( b 1 b_1 b1):是第一层全连接层的偏置向量,与( W 1 x W_1x W1x)相加后通过ReLU激活函数。
- ( W 2 W_2 W2):是第二层全连接层的权重矩阵,它将隐藏层的结果( h h h)(经过ReLU激活后的结果)进行线性变换,得到最终的输出( f f f)。在右侧的网络结构图中,( W 2 W_2 W2)表示隐藏层与输出层之间的连接权重。
- ( b 2 b_2 b2):是第二层全连接层的偏置向量,与( W 2 h W_2h W2h)相加得到最终输出( f f f)。
- 变量含义:
二、网络结构
- 输入层:由节点( x 1 , x 2 , ⋯ , x d x_1, x_2, \cdots, x_d x1,x2,⋯,xd)组成,接收输入数据( x x x)。
- 隐藏层:包含节点( h 1 , h 2 , ⋯ , h N h_1, h_2, \cdots, h_N h1,h2,⋯,hN),通过( W 1 W_1 W1)和( b 1 b_1 b1)对输入数据进行线性变换和ReLU激活得到隐藏层的输出。隐藏层的存在使得网络能够学习到更复杂的特征和函数关系,增强了网络的表达能力。
隐藏层的一个神经元要跟输入层的每个神经元进行连接。所谓叫全连接神经网络。每一个链接都有一个权值,所有的连接组合起来就形成了一个W1的矩阵。W2的矩阵也是如此。 - 输出层:由节点( f 1 , f 2 , ⋯ , f C f_1, f_2, \cdots, f_C f1,f2,⋯,fC)组成,通过( W 2 W_2 W2)和( b 2 b_2 b2)将隐藏层的结果进行线性变换得到最终的输出( f f f),输出的维度( C C C)通常取决于具体的任务,例如在多分类问题中( C C C)为类别数。
三、整体理解
该图片通过公式和网络结构图直观地展示了两层全连接网络的工作原理。输入数据( x x x)首先经过第一层全连接层(包含( W 1 W_1 W1)和( b 1 b_1 b1))的线性变换和ReLU激活得到隐藏层的表示( h h h),然后隐藏层的表示( h h h)再经过第二层全连接层(包含( W 2 W_2 W2)和( b 2 b_2 b2))的线性变换得到最终的输出( f f f)。这种结构使得网络能够处理复杂的非线性问题,通过训练调整权重矩阵( W 1 W_1 W1)、( W 2 W_2 W2)和偏置向量( b 1 b_1 b1)、( b 2 b_2 b2)来优化网络的性能,使其能够更好地完成特定的任务,如分类、回归等。
激活函数
为什么需要非线性操作?
此时转换的结果还是一个线性关系。如果网络中缺少了激活函数,全连接神经网络将变成一个线性分类器。
常用的激活函数
这张图片展示了四种常见的激活函数及其对应的函数图像,分别是Sigmoid、ReLU、tanh和Leaky ReLU,以下是详细解释:
Sigmoid函数
- 公式:( y = 1 1 + e − x y=\frac{1}{1 + e^{-x}} y=1+e−x1)
- 函数特点:
- Sigmoid函数将输入值( x x x)映射到( ( 0 , 1 ) (0, 1) (0,1))区间内。当( x x x)趋近于负无穷时,( y y y)趋近于( 0 0 0);当( x x x)趋近于正无穷时,( y y y)趋近于( 1 1 1)。
- 函数曲线在中间部分变化较为陡峭,而在两端逐渐趋于平缓。
- 应用场景:
- 常用于二分类问题的输出层,将神经网络的输出转换为概率值,表示样本属于某一类的概率。
- 在早期的神经网络中使用较多,但由于其存在梯度消失问题(当( x x x)的绝对值较大时,梯度接近( 0 0 0),导致反向传播时梯度难以传递),在深层神经网络中逐渐被其他激活函数替代。
- 函数特点:
ReLU(Rectified Linear Unit)函数
- 公式:( y = max ( 0 , x ) y=\max(0, x) y=max(0,x))
- 函数特点:
- 当( x > 0 x > 0 x>0)时,( y = x y = x y=x),函数图像是一条斜率为( 1 1 1)的直线;当( x ≤ 0 x \leq 0 x≤0)时,( y = 0 y = 0 y=0),函数值恒为( 0 0 0)。
- 计算简单,有效缓解了梯度消失问题,因为对于正的输入,梯度恒为( 1 1 1)。
- 应用场景:
- 目前在深度学习中被广泛使用,特别是在卷积神经网络(CNN)等结构中,能够加快训练速度。
- 但是ReLU函数可能会导致神经元“死亡”问题,即当某个神经元在训练过程中一直输出( 0 0 0)时,其对应的参数将无法更新。
- 函数特点:
tanh(双曲正切)函数
- 公式:( y = e x − e − x e x + e − x y=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}} y=ex+e−xex−e−x)
- 函数特点:
- 将输入值( x x x)映射到( ( − 1 , 1 ) (-1, 1) (−1,1))区间内。当( x x x)趋近于负无穷时,( y y y)趋近于( − 1 -1 −1);当( x x x)趋近于正无穷时,( y y y)趋近于( 1 1 1)。
- 函数图像类似于Sigmoid函数,但值域不同,并且函数曲线在( 0 0 0)附近变化更为陡峭。
- 应用场景:
- 在一些需要输出值在( − 1 -1 −1)到( 1 1 1)之间的场景中使用,例如循环神经网络(RNN)的某些部分。
- 同样存在梯度消失问题,但比Sigmoid函数稍好一些。
- 函数特点:
Leaky ReLU函数
- 公式:( y = max ( 0.1 x , x ) y=\max(0.1x, x) y=max(0.1x,x))
- 函数特点:
- 是ReLU函数的改进版本,当( x > 0 x > 0 x>0)时,( y = x y = x y=x),与ReLU相同;当( x ≤ 0 x \leq 0 x≤0)时,( y = 0.1 x y = 0.1x y=0.1x),而不是像ReLU那样直接为( 0 0 0),这样可以避免神经元“死亡”问题。
- 保留了ReLU函数的优点,同时在一定程度上缓解了ReLU的缺点。
- 应用场景:
- 在一些对ReLU函数的“死亡”问题比较敏感的场景中使用,作为ReLU的替代方案,以提高模型的性能和稳定性。
- 函数特点:
这些激活函数在神经网络中起到引入非线性的作用,使得神经网络能够学习到更复杂的函数关系,不同的激活函数具有不同的特点和适用场景,在实际应用中需要根据具体的任务和模型结构进行选择。
网络结构设计
神经网络结构设计的两个问题
- 1.用不用隐层,用一个还是用几个隐层?(深度设计)
- 2.每隐层设置多少个神经元比较合适?(宽度设计)
从图可以看出神经元个数越多,分类界面就可以越复杂。在这个集合上的分类能力就越强。
以下是关于神经网络结构设计中深度(隐层数量)和宽度(每隐层神经元数量)这两个问题的详细解答:
一、隐层数量(深度设计)
- 不用隐层的情况:
- 适用场景:对于一些简单的线性可分问题,如简单的逻辑回归任务,可能不需要隐层,仅使用输入层和输出层的线性模型(如线性分类器)就可以达到较好的效果。例如,根据两个特征判断一个物体是圆形还是方形,且这两个特征与形状有明显的线性关系时,可能不需要隐层。
- 局限性:但对于大多数实际问题,尤其是涉及复杂的模式识别、图像分类、语音识别等任务,数据通常不是线性可分的,仅使用线性模型很难取得令人满意的结果。
- 使用一个隐层的情况:
- 适用场景:可以解决一些非线性问题,能够学习到比线性模型更复杂的函数关系。例如,对一些简单的手写数字识别任务,使用一个隐层的神经网络可能就能够达到一定的准确率。在工业控制中,对一些简单的设备状态监测,根据几个传感器数据判断设备是否正常运行,一个隐层的神经网络可能足以处理这种不太复杂的模式。
- 局限性:对于非常复杂的任务,如高分辨率图像的细分类(区分多种相似的物体)、自然语言处理中的复杂语义理解等,一个隐层的表达能力可能有限,难以学习到足够复杂的特征和模式。
- 使用多个隐层的情况(深度神经网络):
- 适用场景:在图像分类(如ImageNet数据集的分类)、语音识别(如将一段语音转换为文本)、自然语言处理(如机器翻译、文本生成等)等领域,深度神经网络(通常包含多个隐层,如卷积神经网络CNN、循环神经网络RNN及其变种如LSTM、Transformer等)表现出了强大的性能。多个隐层可以逐步地、分层地学习数据的特征,从低级特征(如图像中的边缘、纹理)到高级特征(如物体的形状、语义概念),从而更好地处理复杂的任务。例如,在人脸识别中,浅层可能学习到人脸的轮廓、五官的基本形状等特征,深层则可以学习到更抽象的、能够区分不同人脸的特征。
- 注意事项:然而,增加隐层数量也会带来一些问题,如训练难度增大(可能出现梯度消失或梯度爆炸问题)、计算成本增加、容易过拟合等。因此,需要结合合适的训练方法(如使用更好的优化器、正则化技术等)来应对这些挑战。
二、每隐层神经元数量(宽度设计)
- 较少神经元的情况:
- 适用场景:当输入数据的特征相对简单,或者训练数据量较小的时候,可以设置较少的神经元。这样可以避免模型过于复杂而导致过拟合,同时减少计算量。例如,对于一个只有几个简单特征的二分类小数据集,隐层可能只需要几个到几十个神经元。
- 局限性:如果神经元数量过少,可能导致模型的表达能力不足,无法学习到足够的特征来完成任务,从而出现欠拟合现象,即模型在训练数据和新数据上的性能都较差。
- 较多神经元的情况:
- 适用场景:对于复杂的任务和大规模的数据集,通常需要更多的神经元来增加模型的表达能力,使其能够学习到更丰富、更复杂的特征。例如,在处理高分辨率图像的卷积神经网络中,某些卷积层可能会有数百甚至上千个神经元。在自然语言处理的Transformer模型中,全连接层的神经元数量也较多,以适应大量的文本特征。
- 注意事项:过多的神经元会使模型的参数数量大幅增加,不仅增加了计算成本(训练和推理时间变长),还容易导致过拟合(模型过度学习训练数据中的噪声和细节,而不能很好地泛化到新数据)。为了避免过拟合,可以使用正则化方法(如L1、L2正则化、Dropout等)、增加训练数据量、采用早停策略等。
在实际的神经网络结构设计中,确定隐层数量和每隐层神经元数量往往需要通过实验和经验来进行调整。可以先从简单的结构(如较少的隐层和神经元)开始,逐步增加复杂度,并根据模型在验证集上的性能(如准确率、损失值、过拟合情况等)来选择最合适的结构。此外,还可以参考相关领域的经典模型结构和前人的经验,在此基础上进行微调以适应具体的任务和数据。
SOFTMAX与交叉熵
softmax
这张图片展示了一个图像分类的示例过程,具体解释如下:
一、整体流程
- 从左到右依次展示了图像输入、经过神经网络计算得到分数、对分数进行指数运算、最后进行归一化得到各类别的概率的过程。
二、各步骤详解
- 图像输入:左侧是一张鸟(bird)的图像,这是待分类的对象。
- 神经网络计算分数:通过一个两层全连接网络(公式为( f = W 2 max ( 0 , W 1 x + b 1 ) + b 2 f =W_{2}\max(0, W_{1}x + b_{1})+b_{2} f=W2max(0,W1x+b1)+b2))对图像进行处理,得到三个分数,分别为( 0.6 0.6 0.6)、( − 2.3 -2.3 −2.3)、( 1.9 1.9 1.9)。这里的分数可以理解为神经网络对于该图像属于不同类别的原始预测值(例如,可能分别对应鸟、猫、车这三个类别)。
- 指数运算:对上述得到的分数分别进行指数运算(( e f i e^{f_{i}} efi)),得到( 1.81 1.81 1.81)、( 0.10 0.10 0.10)、( 6.69 6.69 6.69)。指数运算的作用是将分数进行非线性变换,使得较大的分数变得更大,较小的分数变得更小,从而拉开不同类别之间的差距。
- 归一化得到概率:最后对指数运算后的结果进行归一化处理(( t i ∑ j t j \frac{t_{i}}{\sum_{j}t_{j}} ∑jtjti)),得到属于各个类别的概率,分别为( 0.21 0.21 0.21)(bird)、( 0.01 0.01 0.01)(cat)、( 0.78 0.78 0.78)(car)。归一化后的值都在( [ 0 , 1 ] [0, 1] [0,1])区间内,且所有类别的概率之和为( 1 1 1),这样就可以将这些值解释为图像属于各个类别的概率。在这个例子中,根据计算结果,该图像最有可能被分类为“car”,但实际上这是错误的分类,正确的应该是“bird”。
这个示例展示了神经网络在图像分类任务中的基本工作流程,包括通过网络计算原始分数、进行非线性变换以及归一化得到概率的过程,体现了Softmax函数(这里的归一化过程类似于Softmax)在多分类问题中的应用。
交叉熵损失
如何度量现在的分类器输出与预测值之间的距离?
一、熵(Entropy)
- 公式:( H ( p ) = − ∑ x p ( x ) log p ( x ) H(p)=-\sum_{x}p(x)\log p(x) H(p)=−∑xp(x)logp(x))
- 含义:熵是用来度量一个随机变量的不确定性或混乱程度的。对于一个离散的概率分布( p ( x ) p(x) p(x)),熵越大,表示该随机变量的不确定性越大。例如,抛一枚均匀的硬币,正面和反面出现的概率都是( 0.5 0.5 0.5),其熵相对较大;而对于一个确定性的事件(如明天太阳一定升起,其概率为( 1 1 1)),熵为( 0 0 0)。
- 应用场景:在信息论中,熵可以用来衡量信息的含量,熵越大,信息的不确定性越大,包含的信息量也就越大。在机器学习中,例如决策树算法中,可以用熵来衡量数据的纯度,从而选择最佳的分裂节点。
二、交叉熵(Cross Entropy)
- 公式:( H ( p , q ) = − ∑ x p ( x ) log q ( x ) H(p,q)=-\sum_{x}p(x)\log q(x) H(p,q)=−∑xp(x)logq(x))
- 含义:交叉熵用于衡量两个概率分布( p ( x ) p(x) p(x))和( q ( x ) q(x) q(x))之间的差异。其中( p ( x ) p(x) p(x))通常是真实的分布(如数据的真实标签分布),( q ( x ) q(x) q(x))是模型预测的分布。交叉熵越小,表示模型的预测分布( q ( x ) q(x) q(x))越接近真实分布( p ( x ) p(x) p(x))。
- 应用场景:在机器学习中,特别是在分类问题中,交叉熵常被用作损失函数。例如,在神经网络的多分类任务中,使用Softmax函数将网络的输出转换为概率分布( q ( x ) q(x) q(x)),然后与真实的标签分布( p ( x ) p(x) p(x))(通常是one - hot编码)计算交叉熵损失,通过最小化交叉熵损失来训练模型,使得模型的预测结果更接近真实标签。
三、相对熵(Relative Entropy),也叫KL散度(KL Divergence)
- 公式:( K L ( p ∣ ∣ q ) = − ∑ x p ( x ) log q ( x ) p ( x ) KL(p||q)=-\sum_{x}p(x)\log\frac{q(x)}{p(x)} KL(p∣∣q)=−∑xp(x)logp(x)q(x))
- 含义:相对熵(KL散度)也是用来度量两个概率分布( p ( x ) p(x) p(x))和( q ( x ) q(x) q(x))之间的不相似性。它可以看作是交叉熵与熵的差值,即( K L ( p ∣ ∣ q ) = H ( p , q ) − H ( p ) KL(p||q)=H(p,q)-H(p) KL(p∣∣q)=H(p,q)−H(p))。KL散度是非负的,并且当且仅当( p ( x ) = q ( x ) p(x)=q(x) p(x)=q(x))时,( K L ( p ∣ ∣ q ) = 0 KL(p||q)=0 KL(p∣∣q)=0)。
- 应用场景:在机器学习中,KL散度可以用于比较不同模型的输出分布与真实分布的差异,从而选择更好的模型。例如,在变分自编码器(VAE)中,使用KL散度来衡量近似后验分布与真实后验分布的差异,并将其作为损失函数的一部分进行优化。
熵、交叉熵和相对熵(KL散度)之间存在以下关系:
一、公式推导关系
- 由相对熵(KL散度)的公式( K L ( p ∣ ∣ q ) = − ∑ x p ( x ) log q ( x ) p ( x ) KL(p||q)=-\sum_{x}p(x)\log\frac{q(x)}{p(x)} KL(p∣∣q)=−∑xp(x)logp(x)q(x))展开可得:
[
\begin{align*}
KL(p||q)&=-\sum_{x}p(x)\log\frac{q(x)}{p(x)}\
&=-\sum_{x}p(x)(\log q(x)-\log p(x))\
&=-\sum_{x}p(x)\log q(x)+\sum_{x}p(x)\log p(x)\
&=H(p,q)-H§
\end{align*}
]
即相对熵(KL散度)等于交叉熵( H ( p , q ) H(p,q) H(p,q))减去熵( H ( p ) H(p) H(p))。
二、含义和应用上的关系
- 熵是基础度量:熵( H ( p ) H(p) H(p))描述了单个概率分布( p ( x ) p(x) p(x))本身的不确定性或混乱程度,是一个固有属性。
- 交叉熵衡量差异:交叉熵( H ( p , q ) H(p,q) H(p,q))用于衡量两个概率分布( p ( x ) p(x) p(x))(真实分布)和( q ( x ) q(x) q(x))(模型预测分布)之间的差异,但它的数值大小不仅取决于两个分布的差异,还与真实分布( p ( x ) p(x) p(x))本身的熵有关。
- 相对熵专注于差异度量:相对熵(KL散度)( K L ( p ∣ ∣ q ) KL(p||q) KL(p∣∣q))则更纯粹地度量了两个分布( p ( x ) p(x) p(x))和( q ( x ) q(x) q(x))之间的不相似性,排除了真实分布( p ( x ) p(x) p(x))本身熵的影响。当我们只关心两个分布的差异程度时,KL散度是一个更直接的度量指标。
在机器学习中,通常希望模型的预测分布( q ( x ) q(x) q(x))尽可能接近真实分布( p ( x ) p(x) p(x)),此时可以通过最小化交叉熵或相对熵(KL散度)来优化模型。由于相对熵(KL散度)与交叉熵的这种关系,在一些情况下,直接使用交叉熵作为损失函数更方便计算和优化,因为熵( H ( p ) H(p) H(p))是固定的(对于给定的真实分布),最小化交叉熵等价于最小化相对熵(KL散度)。
交叉熵对比多类均向量损失
一、整体流程
- 左侧是一张鸟的图像,经过分类器后得到三个分数( 0.6 0.6 0.6)、( − 2.3 -2.3 −2.3)、( 1.9 1.9 1.9)(用( f f f)表示)。
- 然后分别使用多类支撑向量机损失和交叉熵损失来计算损失值。
二、多类支撑向量机损失
- 公式:( L i = ∑ j ≠ y i max ( 0 , s j − s y i + 1 ) L_{i}=\sum_{j\neq y_{i}}\max(0,s_{j}-s_{y_{i}}+1) Li=∑j=yimax(0,sj−syi+1)),其中( s j s_{j} sj)表示第( j j j)类的分数,( s y i s_{y_{i}} syi)表示正确类别的分数(这里假设鸟对应的分数是( 0.6 0.6 0.6))。
- 计算过程:
- 对于这张鸟的图像,( j j j)分别取除鸟(正确类别)之外的其他类别,即( − 2.3 -2.3 −2.3)和( 1.9 1.9 1.9)对应的类别。
- 计算( max ( − 2.3 − 0.6 + 1 , 0 ) + max ( 1.9 − 0.6 + 1 , 0 ) \max(-2.3 - 0.6 + 1,0)+\max(1.9 - 0.6 + 1,0) max(−2.3−0.6+1,0)+max(1.9−0.6+1,0))
- ( max ( − 2.3 − 0.6 + 1 , 0 ) = max ( − 1.9 , 0 ) = 0 \max(-2.3 - 0.6 + 1,0)=\max(-1.9,0)=0 max(−2.3−0.6+1,0)=max(−1.9,0)=0)
- ( max ( 1.9 − 0.6 + 1 , 0 ) = max ( 2.3 , 0 ) = 2.3 \max(1.9 - 0.6 + 1,0)=\max(2.3,0)=2.3 max(1.9−0.6+1,0)=max(2.3,0)=2.3)
- 所以多类支撑向量机损失( L i = 2.3 L_{i}=2.3 Li=2.3)。
- 含义:多类支撑向量机损失的目的是使正确类别的分数比其他错误类别的分数高出至少( 1 1 1),否则就会产生损失。它通过计算其他类别分数与正确类别分数的差值,并取最大值来衡量分类的好坏。
三、交叉熵损失
- 计算过程:
- 首先对分数( f f f)进行指数运算得到( e f i e^{f_{i}} efi),即( 1.81 1.81 1.81)、( 0.10 0.10 0.10)、( 6.69 6.69 6.69)。
- 然后进行归一化得到概率,分别为( 0.21 0.21 0.21)、( 0.01 0.01 0.01)、( 0.78 0.78 0.78)(假设鸟对应的概率是( 0.21 0.21 0.21))。
- 最后根据交叉熵损失公式( L i = − log ( 0.21 ) L_{i}=-\log(0.21) Li=−log(0.21))计算得到损失值为( 0.92 0.92 0.92)。
- 含义:交叉熵损失用于衡量模型预测的概率分布与真实标签的差异。这里的( − log ( 0.21 ) -\log(0.21) −log(0.21))表示当正确类别的概率为( 0.21 0.21 0.21)时,损失值为( 0.92 0.92 0.92)。概率越接近( 1 1 1)(表示模型对正确类别的预测越有信心),损失值越小;反之,概率越小,损失值越大。
相同分数下两种分类器的损失有什么区别
一、交叉熵损失函数
- 公式特点:通过对分数进行指数运算后归一化得到概率,再取对数的负值来计算损失。该函数更关注模型对正确类别的预测概率,概率越接近( 1 1 1)(即模型对正确类别的预测越有信心),损失值越小;反之,损失值越大。
- 示例分析:
- 对于分数( [ 10 , − 2 , 3 ] [10, -2, 3] [10,−2,3]),经过指数运算和归一化后,正确类别的概率相对较高,所以损失值较小,为( 0.0004 0.0004 0.0004)。
- 对于分数( [ 10 , 9 , 9 ] [10, 9, 9] [10,9,9]),虽然正确类别分数为( 10 10 10),但其他类别分数也较高,导致正确类别的概率相对降低,所以损失值增大为( 0.2395 0.2395 0.2395)。
- 对于分数( [ 10 , − 100 , − 100 ] [10, -100, -100] [10,−100,−100]),其他类别分数极小,使得正确类别的概率非常接近( 1 1 1),因此损失值极小,为( 1.5 × 1 0 − 48 1.5\times10^{-48} 1.5×10−48)。
二、多类支撑向量机损失函数
- 公式特点:主要目的是使正确类别的分数比其他错误类别的分数高出至少( 1 1 1),否则就会产生损失。它通过计算其他类别分数与正确类别分数的差值,并取最大值来衡量分类的好坏。
- 示例分析:
- 在上述三种分数情况( [ 10 , − 2 , 3 ] [10, -2, 3] [10,−2,3])、( [ 10 , 9 , 9 ] [10, 9, 9] [10,9,9])、( [ 10 , − 100 , − 100 ] [10, -100, -100] [10,−100,−100])中,正确类别分数( 10 10 10)都比其他类别分数高出至少( 1 1 1),所以损失值均为( 0 0 0)。这表明在多类支撑向量机损失函数的视角下,模型在这些情况下都正确地对样本进行了分类,且满足了正确类别分数与其他类别分数的差距要求。
三、总结
- 交叉熵损失函数对模型预测的概率分布更为敏感,不仅考虑正确类别与其他类别的分数差异,还考虑了所有类别的相对情况,通过概率来衡量损失。
- 多类支撑向量机损失函数更侧重于正确类别分数与其他类别分数的绝对差值,只要满足正确类别分数比其他类别分数高出至少( 1 1 1)的条件,损失就为( 0 0 0),相对来说对概率分布的细节不那么敏感。在实际应用中,选择哪种损失函数取决于具体的任务和数据特点。例如,当更关注模型对正确类别的置信度时,可能更倾向于使用交叉熵损失;而当主要目标是确保正确类别与其他类别有明显的分数差距时,多类支撑向量机损失可能更合适。
计算图与反向传播
计算图
计算图是一种有向图它用来表达输入输出以及中间变量之间的计算关系。图中的每个节点对应的一种数学运算。
-
计算图不仅可以清晰的表达出计算的每一步的结果与公式,而且可以很快的计算出每一步之间的导数关系。
-
任意复杂的函数,都可以用计算图的形式表示在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算:
a)这个门的输出值
b)其输出值关于输入值的局部梯度。 -
利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,从而得到整个网络的输出对该门单元的每个输入值的梯度。
计算图中常见的门单元
反向传播
以下结合该图详细说明反向传播的原理:
一、前向传播
- 计算过程:
- 根据函数( f ( w , x ) = 1 1 + e − ( w 0 x 0 + w 1 x 1 + w 2 ) f(w,x)=\frac{1}{1 + e^{-(w_0x_0 + w_1x_1 + w_2)}} f(w,x)=1+e−(w0x0+w1x1+w2)1),给定( w 0 = 3 w_0 = 3 w0=3),( x 0 = − 1 x_0=-1 x0=−1),( w 1 = − 2 w_1=-2 w1=−2),( x 1 = − 2 x_1=-2 x1=−2),( w 2 = 1 w_2 = 1 w2=1)。
- 先计算( w 0 x 0 = 3 × ( − 1 ) = − 3 w_0x_0 = 3\times(-1)=-3 w0x0=3×(−1)=−3),( w 1 x 1 = ( − 2 ) × ( − 2 ) = 4 w_1x_1 = (-2)\times(-2)=4 w1x1=(−2)×(−2)=4)。
- 然后( − 3 + 4 + 1 = 2 -3 + 4 + 1 = 2 −3+4+1=2),再经过一系列操作( − 2 -2 −2)(乘以( − 1 -1 −1))、( e − 2 ≈ 0.14 e^{-2}\approx0.14 e−2≈0.14)(指数运算)、( 1 + 0.14 = 1.14 1 + 0.14 = 1.14 1+0.14=1.14)(加( 1 1 1))、( 1 1.14 ≈ 0.88 \frac{1}{1.14}\approx0.88 1.141≈0.88)(取倒数)得到最终输出。
二、反向传播
-
链式求导与梯度计算:
- 从输出端开始,对于( 1 x \frac{1}{x} x1)操作,其导数为( − 1 x 2 -\frac{1}{x^2} −x21),当前输出约为( 0.88 0.88 0.88),则该步的局部梯度为( − 1 0.8 8 2 ≈ − 1.29 -\frac{1}{0.88^2}\approx -1.29 −0.8821≈−1.29)。将此局部梯度与上游传过来的梯度(假设为( 0.1 0.1 0.1))相乘,得到传向下一个节点的梯度为( − 1.29 × 0.1 = − 0.13 -1.29\times0.1=-0.13 −1.29×0.1=−0.13)(图中约为( − 0.10 -0.10 −0.10),可能是简化计算)。
- 对于( + 1 +1 +1)操作,其导数为( 1 1 1),上游梯度为( − 0.10 -0.10 −0.10),则传向下游的梯度仍为( − 0.10 -0.10 −0.10)。
- 对于( e x p exp exp)操作,其导数为( e x e^x ex),当前值为( 0.14 0.14 0.14),则局部梯度为( 0.14 0.14 0.14),与上游梯度( − 0.10 -0.10 −0.10)相乘得( − 0.10 × 0.14 = − 0.014 -0.10\times0.14=-0.014 −0.10×0.14=−0.014)(图中约为( − 0.10 -0.10 −0.10))。
- 对于( ∗ − 1 *-1 ∗−1)操作,其导数为( − 1 -1 −1),上游梯度为( − 0.10 -0.10 −0.10),则传向下游的梯度为( 0.10 0.10 0.10)。
- 对于最后的加法操作,其导数为( 1 1 1),上游梯度为( 0.10 0.10 0.10),则分别向( w 0 x 0 w_0x_0 w0x0)、( w 1 x 1 w_1x_1 w1x1)、( w 2 w_2 w2)分支传递梯度( 0.10 0.10 0.10)。
- 对于( w 0 x 0 w_0x_0 w0x0)分支,( x 0 = − 1 x_0=-1 x0=−1),根据乘法求导( ( u v ) ′ = u ′ v + u v ′ (uv)^\prime = u^\prime v + uv^\prime (uv)′=u′v+uv′),( x 0 x_0 x0)看作常数,则关于( w 0 w_0 w0)的梯度为( 0.10 × ( − 1 ) = − 0.10 0.10\times(-1)=-0.10 0.10×(−1)=−0.10);同理对于( w 1 x 1 w_1x_1 w1x1)分支,( x 1 = − 2 x_1=-2 x1=−2),关于( w 1 w_1 w1)的梯度为( 0.10 × ( − 2 ) = − 0.20 0.10\times(-2)=-0.20 0.10×(−2)=−0.20);对于( w 2 w_2 w2),梯度直接为( 0.10 0.10 0.10)。
-
参数更新:
- 得到关于( w 0 w_0 w0)、( w 1 w_1 w1)、( w 2 w_2 w2)的梯度后,就可以使用梯度下降法等优化算法来更新参数。例如,设学习率为( α \alpha α),则( w 0 = w 0 − α × ( − 0.10 ) w_0 = w_0-\alpha\times(-0.10) w0=w0−α×(−0.10)),( w 1 = w 1 − α × ( − 0.20 ) w_1 = w_1-\alpha\times(-0.20) w1=w1−α×(−0.20)),( w 2 = w 2 − α × 0.10 w_2 = w_2-\alpha\times0.10 w2=w2−α×0.10)。通过不断重复前向传播和反向传播过程,逐步调整参数,使网络的输出更接近真实值,从而降低损失函数的值。
该图通过一个具体的计算图示例,展示了反向传播中如何根据链式法则,从输出端到输入端逐步计算每个操作的梯度,并最终得到关于参数的梯度,用于参数的更新。(梯度消失???)
计算图的颗粒度
计算图的颗粒度可以从以下几个方面来理解:
一、操作粒度
- 细粒度:将计算过程分解为非常小的基本操作,如单个的加法、乘法、指数运算、取对数等。图中展示的计算图就是细粒度的,每个节点代表一个简单的数学运算(如
*
、+
、exp
、1/x
等)。这样的好处是可以清晰地看到每一步的计算和梯度传播过程,便于理解和推导反向传播算法。 - 粗粒度:将多个基本操作组合成一个较大的操作单元。例如,将一个神经网络层(如全连接层,包含了矩阵乘法和偏置加法等操作)作为计算图中的一个节点。在实际的深度学习框架中,为了提高计算效率,通常会采用这种粗粒度的方式来构建计算图,然后由框架自动处理内部的细粒度操作和梯度计算。
二、网络结构粒度
- 模块粒度:可以将整个神经网络的某些部分(如卷积模块、循环模块等)作为计算图中的一个较大的节点。这样在设计和分析复杂的网络结构时,可以从更高的层次来理解网络的功能和数据流,而不必关注每个神经元和权重的具体计算。
- 整体网络粒度:把整个神经网络(包括输入层、多个隐藏层、输出层等)看作一个大的计算图节点。这种粒度主要用于从宏观上考虑网络的输入输出关系、整体的损失函数计算等,而不深入到网络内部的具体计算细节。
计算图的颗粒度选择取决于具体的应用场景和需求。在教学和理论分析中,细粒度的计算图有助于深入理解算法原理;而在实际的工程实现和优化中,粗粒度的计算图更有利于提高计算效率和代码的可维护性。