PyTorch教程(十一):多输出的感知机以及梯度

这篇博客介绍了多层感知机的模型与梯度下降公式,强调了输出层的计算过程。通过实例展示了在PyTorch中如何实现多层感知机的前向传播和反向传播,利用MSE损失函数计算损失并进行反向传播更新权重。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节中介绍了单层感知机,感知机的输出节点只有一个,只有O0O_0O0没有O1O_1O1。对于单层感知机的梯度下降公式如下:
∂E∂wj0=(O0−t)∗O0(1−O0)xj0 \frac {\partial E}{\partial w_{j0}} = (O_0 -t)*O_0(1-O_0)x_j^0 wj0E=(O0t)O0(1O0)xj0
即对参数wj0w_{j0}wj0的梯度。可以看出wj0w_{j0}wj0的梯度跟这一层的输出权值以及xj0x_{j0}xj0有关。

多层感知机模型

在这里插入图片描述
其中xk1x_k^1xk1表示第一层感知机的第k号节点,Ok1O_k^1Ok1表示经过激活函数后的数值,wjk1w_{jk}^1wjk1表示上一层的第j个节点和对应这一层的第k个节点。

多层感知机梯度

E=12∑(Oi1−ti)2当k=i时,才有意义,因此∂E∂wjk=(Ok−tk)∂Ok∂wjk∂E∂wjk=(Ok−tk)∂σ(xk)∂wjk∂E∂wjk=(Ok−tk)σ(xk)(1−σx(k))∂xk1∂wjk∂E∂wjk=(Ok−tk)Ok(1−Ok)xj0 E = \frac {1}{2}\sum(O_i^1 - t_i)^2 \\ 当k=i时,才有意义,因此 \frac {\partial E}{\partial w_{jk}} = (O_k - t_k)\frac {\partial O_k}{\partial w_{jk}} \\ \frac {\partial E}{\partial w_{jk}} = (O_k - t_k)\frac {\partial \sigma(x_k)}{\partial w_{jk}} \\ \frac {\partial E}{\partial w_{jk}} =(O_k - t_k) \sigma (x_k)(1-\sigma x(k)) \frac {\partial x_k^1}{\partial w_{jk}} \\ \frac {\partial E}{\partial w_{jk}} =(O_k - t_k) O_k(1-O_k) x_j^0\\ E=21(Oi1ti)2k=iwjkE=(Oktk)wjkOkwjkE=(Oktk)wjkσ(xk)wjkE=(Oktk)σ(xk)(1σx(k))wjkxk1wjkE=(Oktk)Ok(1Ok)xj0

PyTorch实现

from torch.nn import functional as F

x = torch.randn(1,10)
w = torch.randn(2,10,requires_grad = True)
o = torch.sigmoid(x@w.t())
o.shape # torch.Size([1, 2])
loss = F.mse_loss(torch.ones(1,2),o) # tensor(0.1849, grad_fn=<MseLossBackward>)
loss.backward()
w.grad
# tensor([[ 0.1048,  0.0295,  0.0433,  0.0624,  0.0105, -0.0463,  0.0789, -0.0975,
#         -0.0250, -0.0553],
#        [ 0.1950,  0.0549,  0.0805,  0.1162,  0.0196, -0.0862,  0.1467, -0.1815,
#         -0.0464, -0.1029]])

其实多输出的感知机已经不能叫做感知机了,因为感知机的定义就是一个单一输出的。而多输出的感知机相当于标准全连接层的输出层。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值