标签:loss nabla frac O01 10 torch 感知机 讲解 单层
下图为一个简单的单层感知机模型
左侧为输入层,对于所有输入x,上标0表示第0层(即输入层),下标0~N表示有N+1个元素。对于中间的权重wij,i表示上一层的节点编号,j表示下一层的节点编号。后面紧跟着的分别是求和∑,以及σ函数。后面的E代表Error或者Loss,将输出值与t(target)进行对比
接下来我们推导一下单层感知机梯度公式
首先我们定义E(Loss)=21(O01−t)2,这里额外的21是为了方便抵消掉求导后的参数2,该值的设立不会改变结果的单调性,所以有没有都无所谓,但是为了方便,这里还是加上了
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲
\frac{\nabl…
因为∇x∇σ(x)=σ∗(1−σ)∇x∇x
所以
KaTeX parse error: No such environment: align* at position 8:
\begin{̲a̲l̲i̲g̲n̲*̲}̲
(O^1_0 - t)\…
因此,∇wj0∇E=(O01−t)O01(1−O01)xj0
由该结果可看出,Loss关于权重w的梯度仅与输出节点O01和输入节点的x有关
import torch
import torch.nn.functional as F
x = torch.randn(1, 10) # dim=2,len=10, x为[1,10]的tensor
w = torch.randn(1, 10, requires_grad=True) # w为[1,10]的tensor
o = torch.sigmoid(x@w.t()) # o为[1,1]的tensor
# [1,10]*[1,10]T => [1,10]*[10,1] => [1,1]
print("o:",o)
loss = F.mse_loss(input=o, target=torch.ones(1, 1))
# 将shapa为[1,1]的计算结果与全为1的[1,1]矩阵进行mse计算
print('loss:', loss)
print('loss shape:', loss.shape) # 得到的loss为标量
loss.backward()
print('w.grad:', w.grad)
数学家是我理想
博客专家
发布了167 篇原创文章 · 获赞 162 · 访问量 12万+
私信
关注
标签:loss,nabla,frac,O01,10,torch,感知机,讲解,单层 来源: https://blog.csdn.net/qq_37236745/article/details/103956028
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。