交叉熵损失函数与参数更新计算实例(节点分类为例)

这篇具有很好参考价值的文章主要介绍了交叉熵损失函数与参数更新计算实例(节点分类为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

交叉熵损失与参数更新

数据准备

对于下面这样一个图网络网络:
交叉熵损失函数与参数更新计算实例(节点分类为例)

假如我们得到了节点i的嵌入表示 z i z_i zi数据如下:
i d , x 0 , x 1 , x 2 , x 3 1 , 0.5 , 0.6 , 0.7 , 0.8 2 , 0.3 , 0.8 , 0.3 , 0.4 3 , 0.7 , 0.9 , 0.6 , 0.9 4 , 0.2 , 0.1 , 0.2 , 0.3 5 , 0.8 , 0.4 , 0.3 , 0.2 id,x_0,x_1,x_2,x_3\\ 1,0.5,0.6,0.7,0.8\\ 2,0.3,0.8,0.3,0.4\\ 3,0.7,0.9,0.6,0.9\\ 4,0.2,0.1,0.2,0.3\\ 5,0.8,0.4,0.3,0.2\\ id,x0,x1,x2,x31,0.5,0.6,0.7,0.82,0.3,0.8,0.3,0.43,0.7,0.9,0.6,0.94,0.2,0.1,0.2,0.35,0.8,0.4,0.3,0.2
为了方便说明,我们来处理一个对节点进行有监督分类的问题。
假设我们要对节点的嵌入表示进行分类
真实的类别如下:
1,3,属于第0类
2,4,属于第1类
5,属于第2类

分类层

我们对每个节点经过一个全连接层,我们随机初始化w0,w1,w2三个4维(嵌入向量维数)的权重向量(结果保留两位有效数字,下同)。
w 0 = [ 0.17 , 0.4 , − 0.14 , 0.51 ] w_0 = [0.17,0.4,-0.14,0.51] w0=[0.17,0.4,0.14,0.51]
w 1 = [ 0.75 , − 0.04 , 0.67 , − 0.18 ] w_1 = [0.75,-0.04,0.67,-0.18] w1=[0.75,0.04,0.67,0.18]
w 2 = [ 0.53 , − 0.04 , 0.4 , 0.77 ] w_2 = [0.53,-0.04,0.4,0.77] w2=[0.53,0.04,0.4,0.77]
b 0 , b 1 , b 2 = 0.05 , − 0.11 , − 0.32 b_0,b_1,b_2 = 0.05,-0.11,-0.32 b0,b1,b2=0.05,0.11,0.32
w i , b i w_i,b_i wi,bi对应将节点向量转化为节点属于i类的过程的一些权重;

于是对节点 z 1 z_1 z1,我们得到:

h 1 = [ z 1 w 0 + b 0 , z 1 w 1 + b 1 , z 1 w 2 + b 2 ] = [ 0.68 , 0.57 , 0.82 ] h_1 = [z_1w_0+b_0,z_1w_1+b_1,z_1w_2+b_2]\\ = [0.68, 0.57, 0.82] h1=[z1w0+b0,z1w1+b1,z1w2+b2]=[0.68,0.57,0.82]

类似地,我们得到
h 2 = [ 0.58 , 0.21 , 0.23 ] h 3 = [ 0.9 , 0.62 , 0.95 ] h 4 = [ 0.25 , 0.12 , 0.09 ] h 5 = [ 0.47 , 0.55 , 0.4 ] h_2 = [0.58, 0.21, 0.23] \\ h_3 = [0.9, 0.62, 0.95] \\ h_4 = [0.25, 0.12, 0.09]\\ h_5 = [0.47, 0.55, 0.4]\\ h2=[0.58,0.21,0.23]h3=[0.9,0.62,0.95]h4=[0.25,0.12,0.09]h5=[0.47,0.55,0.4]

softmax矩阵

softmax函数作为一种归一化函数,可以将一组任意实数转换为一个概率分布,常用于多分类问题,其表达式为:

softmax ( z i ) = e x p ( z i ) ∑ j = 1 K e x p ( z j ) , i = 1 , … , K \text{softmax}(z_i) = \frac{exp(z_i)}{\sum_{j=1}^K exp(z_j)}, \quad i=1,\ldots,K softmax(zi)=j=1Kexp(zj)exp(zi),i=1,,K
K为分类的类别个数,z_i为实际上是向量z的第i个分量,分类问题中,对于向量 z z z而言,softmax的函数值也就是 z z z属于第 i i i类的概率。

在这里,以 h 1 h_1 h1为例,softmax的表达式可以写成:

softmax ( h 1 [ i ] ) = e x p ( h 1 [ i ] ) ∑ j = 1 K e x p ( h 1 [ j ] ) , i = 1 , 2 , 3 \text{softmax}(h_{1}[i]) = \frac{exp(h_1[i])}{\sum_{j=1}^K exp(h_1[j])}, \quad i=1,2,3 softmax(h1[i])=j=1Kexp(h1[j])exp(h1[i]),i=1,2,3
h 1 [ i ] h_1[i] h1[i]表示 h 1 h_1 h1中第i个分量。

于是我们将 h 1 , h 2 , . . . , h 5 h_1,h_2,...,h_5 h1,h2,...,h5每个向量传入softmax函数,得到节点属于各类别的概率分布:

p 1 = [ 0.33 , 0.29 , 0.38 ] p 2 = [ 0.42 , 0.29 , 0.29 ] p 3 = [ 0.36 , 0.27 , 0.37 ] p 4 = [ 0.37 , 0.32 , 0.31 ] p 5 = [ 0.33 , 0.36 , 0.31 ] p_1 = [0.33, 0.29, 0.38]\\ p_2 = [0.42, 0.29, 0.29] \\ p_3 = [0.36, 0.27, 0.37] \\ p_4 = [0.37, 0.32, 0.31] \\ p_5 = [0.33, 0.36, 0.31]\\ p1=[0.33,0.29,0.38]p2=[0.42,0.29,0.29]p3=[0.36,0.27,0.37]p4=[0.37,0.32,0.31]p5=[0.33,0.36,0.31]
于是根据我们上面所提到的, p 1 p_1 p1中最大的是第3列,也就是说,根据我们的结果,节点1属于第2类的概率最大。

交叉熵损失

如是我们可以得出,节点2,4属于第0类,节点5属于第1类,节点1,3属于第2类,这个结果和实际分类相差比较大,所以参数w和b需要重新训练。

为此我们引入交叉熵损失函数:

L = − 1 N ∑ i = 1 , 2 , . . , N l o g e x p ( h i [ s ] ) ∑ q = 0 , 1 , 2 e x p ( h i [ q ] ) L = - \frac{1}{N} \sum_{i = 1,2,..,N} log \frac{exp(h_i[s])}{ \sum_{q = 0,1,2} exp(h_i[q])} L=N1i=1,2,..,Nlogq=0,1,2exp(hi[q])exp(hi[s])

其中N是节点数量5,s表示节点i所属的真实类别。
我们可以看到后面这个分式实质上就是节点i在真实类别s上对应的softmax函数值;所以实际上损失函数的目标,也就是让节点i被分到真实类别的概率最大化。

L = − 1 N ∑ i = 1 , 2 , . . , N l o g ( p i [ s ] ) L = - \frac{1}{N} \sum_{i = 1,2,..,N}log(p_i[s]) L=N1i=1,2,..,Nlog(pi[s])

之前提到的节点的真实的类别如下:
1,3,属于第0类
2,4,属于第1类
5,属于第2类

前面已经计算出了节点对应的softmax函数值 z 1 z_1 z1 z 5 z_5 z5
所以,在这里
L = − 1 5 ( l n ( p 1 [ 0 ] p 2 [ 1 ] p 3 [ 0 ] p 4 [ 1 ] p 5 [ 2 ] ) ) = − 1 / 5 ( l n ( 0.33 × 0.29 × 0.36 × 0.32 × 0.31 ) ) L = -\frac{1}{5}(ln(p_1[0]p_2[1]p_3[0]p_4[1]p_5[2]))\\ = -1/5(ln(0.33×0.29×0.36×0.32×0.31)) L=51(ln(p1[0]p2[1]p3[0]p4[1]p5[2]))=1/5(ln(0.33×0.29×0.36×0.32×0.31))

我们最终求出此次的损失函数值为-1.1358

反向传播更新参数

此时,我们已经求出了损失函数,下面要做的就是将损失函数对参数求梯度然后反向传播了

∂ L ∂ w t = ∂ L ∂ h i ∂ h i ∂ p i ∂ p i ∂ w i \frac{\partial L}{\partial w_t} = \frac{\partial L}{\partial h_i}\frac{\partial h_i}{\partial p_i}\frac{\partial p_i}{\partial w_i} wtL=hiLpihiwipi

具体求导过程请参考此处

最终得出的结果为:

∂ L ∂ w i = ∑ n = 1 N ( p n ( i ) − 1 ) x n \frac{\partial L}{\partial w_i} = \sum_{n = 1}^N(p_n(i)-1)x_n\\ wiL=n=1N(pn(i)1)xn
特别地,对于 b i b_i bi,我们的梯度应当为

∂ L ∂ b i = ∑ n = 1 N ( p n ( i ) − 1 ) \frac{\partial L}{\partial b_i} = \sum_{n = 1}^{N}(p_n(i)-1) biL=n=1N(pn(i)1)

其中p(i)指的是向量 x n x_n xn属于第i类的概率(softmax函数值);N为节点数5.

所以
∂ L ∂ w 0 = ( p 1 [ 0 ] − 1 ) z 1 + ( p 2 [ 0 ] − 1 ) z 2 + . . . + ( p 5 [ 0 ] − 1 ) z 5 \frac{\partial L}{\partial w_0} = (p_1[0]-1)z_1 +(p_2[0]-1)z_2 +...+(p_5[0]-1)z_5 w0L=(p1[0]1)z1+(p2[0]1)z2+...+(p5[0]1)z5

这样的话,最终得到的梯度结果是一个4维的向量
∂ L ∂ w 0 = [ − 1.62 , − 1.77 , − 1.29 , − 1.73 ] \frac{\partial L}{\partial w_0} = [-1.62,-1.77,-1.29,-1.73] w0L=[1.62,1.77,1.29,1.73]

梯度下降法更新参数:
W : = W − α ∂ L ∂ W W := W - \alpha\frac{\partial L}{\partial W} W:=WαWL

w 0 = [ 0.17 , 0.4 , − 0.14 , 0.51 ] w_0 = [0.17,0.4,-0.14,0.51] w0=[0.17,0.4,0.14,0.51],假如我们设定学习率 α = 0.2 \alpha = 0.2 α=0.2

w 0 : = w 0 − 0.2 ∂ L ∂ W = [ 0.49 , 0.75 , 0.12 , 0.86 ] w_0 := w_0 - 0.2 \frac{\partial L}{\partial W}\\ = [0.49,0.75,0.12,0.86] w0:=w00.2WL=[0.49,0.75,0.12,0.86]
对其他参数 w 1 w_1 w1, w 2 w_2 w2也作类似操作。

这样就完成了一轮参数更新。
(此处更新参数的计算加入了自己的理解,如有疏漏敬请指正)文章来源地址https://www.toymoban.com/news/detail-429237.html

到了这里,关于交叉熵损失函数与参数更新计算实例(节点分类为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【深度学习】002-损失函数:MSE、交叉熵、铰链损失函数(Hinge Loss)

    目录 前言 一、均方误差损失函数(The Mean-Squared Loss)       1.1、从线性回归模型导出均方误差函数       1.2、均方误差函数的使用场景       1.3、均方误差函数的一些讨论 2、交叉熵损失函数(The Cross-Entropy Loss)       2.1、从softmax运算到交叉熵       2.2、信息论

    2024年02月05日
    浏览(46)
  • DDPM交叉熵损失函数推导

    K L rm KL K L 散度 由于以下推导需要用到 K L rm KL K L 散度,这里先简单介绍一下。 K L rm KL K L 散度一般用于度量两个概率分布函数之间的“距离”,其定义如下: K L [ P ( X ) ∣ ∣ Q ( X ) ] = ∑ x ∈ X [ P ( x ) log ⁡ P ( x ) Q ( x ) ] = E x ∼ P ( x ) [ log ⁡ P ( x ) Q ( x ) ] KLbig[P(X)||Q(X)

    2024年02月10日
    浏览(39)
  • 损失函数——交叉熵损失(Cross-entropy loss)

    交叉熵损失(Cross-entropy loss) 是深度学习中常用的一种损失函数,通常用于分类问题。它衡量了模型预测结果与实际结果之间的差距,是优化模型参数的关键指标之一。以下是交叉熵损失的详细介绍。 假设我们有一个分类问题,需要将输入数据x分为C个不同的类别。对于每个

    2024年02月02日
    浏览(50)
  • 交叉熵(Cross Entropy)损失函数

    交叉熵(Cross Entropy)损失函数是一种常用的损失函数,广泛应用于分类问题中,尤其是二分类问题和多分类问题。 假设有 N N N 个样本,每个样本有 C C C 个类别, y i ∈ { 0 , 1 } C y_i in {0,1}^C y i ​ ∈ { 0 , 1 } C 表示第 i i i 个样本的真实标签(one-hot编码), y i ^ ∈ [ 0 , 1 ]

    2024年02月09日
    浏览(43)
  • 关于nn.CrossEntropyLoss交叉熵损失中weight和ignore_index参数

    目录 1. 交叉熵损失 CrossEntropyLoss 2. ignore_index 参数 3. weight 参数 4. 例子 CrossEntropyLoss 交叉熵损失可函数以用于分类或者分割任务中,这里主要介绍分割任务 建立如下的数据,pred是预测样本,label是真实标签 分割中,使用交叉熵损失的话,需要保证label的维度比pred维度少1,

    2023年04月17日
    浏览(44)
  • pytorch的CrossEntropyLoss交叉熵损失函数默认是平均值

    pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的,即多个样本输入后获取的是一个均值标量,而不是样本大小的向量。 打印的结果: tensor(0.7075, grad_fn=NllLossBackward0) 以上是对10个样本做的均值的标量 在构造CrossEntropyLoss时候加入  reduction=\\\'n

    2024年02月14日
    浏览(46)
  • pytorch的CrossEntropyLoss交叉熵损失函数默认reduction是平均值

    pytorch中使用nn.CrossEntropyLoss()创建出来的交叉熵损失函数计算损失默认是求平均值的,即多个样本输入后获取的是一个均值标量,而不是样本大小的向量。 打印的结果: tensor(0.7075, grad_fn=NllLossBackward0) 以上是对10个样本做的均值的标量 在构造CrossEntropyLoss时候加入  reduction=\\\'n

    2024年02月14日
    浏览(37)
  • 【深度学习】分类损失函数解析

    在分类任务中,我们通常使用各种损失函数来衡量模型输出与真实标签之间的差异。有时候搞不清楚用什么,下面是几种常见的分类相关损失函数及其 解析,与代码示例 。 二元交叉熵损失(Binary Cross Entropy Loss,BCELoss): torch.nn.BCELoss() 是用于二元分类的损失函数。它将模型

    2024年02月09日
    浏览(52)
  • 分类、回归常用损失函数

    交叉熵损失函数(Cross-entropy loss function) KL散度、交叉熵损失函数、nn.CrossEntropyLoss()_HealthScience的博客-CSDN博客 权重交叉熵损失函数(Weighted cross-entropy loss function) BCEWithLogitsLoss [Pytorch] BCELoss和BCEWithLogitsLoss(Sigmoid-BCELoss合成为一步)_HealthScience的博客-CSDN博客 均方差损失 Mean S

    2024年02月15日
    浏览(39)
  • 深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

    深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测 在物理学中,“熵”被用来表示热力学系统所呈现的无序程度。香农将这一概念引入信息论领域,提出了“信息熵”概念,通过对数函数来测量信息的不确定性。交叉熵(

    2023年04月18日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包