1、首先声明一下图中的变量,
- 最左侧灰色小球一列:
表示一个样本(当然还可能有其他样本,例如
等);每个样本有
个维度,表示
个特征,分别是
,也是感知机的输入层,是第0层。
- 中间的红色层:
第1层,是隐藏层。权重的上标都是1,表示这些权重都是第1层的权重。权重的下标有两个值,表示是上一层的哪个神经元和当前层哪个神经元之间的权重连接,例如
,表示该权重是上一层下标为2的神经元(显然是
)与当前层(即第1层)下标为0的神经元(显然是
)之间的权重连接。由于第1层只有一个神经元(即下标为0 的神经元),所以所有权重下标的第二个值都是0,表示这些权重都是连向第0个神经元的。
,表示第1层的第0个神经元。这个神经元的值是上一层所有神经元与第1层下标的第二个值为0的权重对应相乘并求和的结果。简单地说就是,图中的权重与第0层所有值对应相乘并求和的结果。
,是
经过sigmoid后的值。
- 最右边的黑色t:
表示真实标签值
- 紫色的E:
表示损失函数,计算与
之间的损失。
2、前向过程
3、反向传播过程
,(6)
其中,(6)中的值都是已知的,或者在前向传播中已计算过了,因此,导数求出。
import torch
import torch.nn.functional as F
x = torch.randn(1, 10)
w = torch.randn(1, 10, requires_grad=True)
y = torch.sigmoid(x @ w.t())
loss = F.mse_loss(y, torch.ones_like(y))
loss.backward()
w.grad
# ===========================
tensor([[ 7.6938e-03, 1.7396e-03, 3.2303e-03, -4.8457e-03, -4.2745e-05,
-6.3924e-03, 1.3029e-03, 7.1305e-03, -3.3778e-03, 3.6352e-04]])














网友评论