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

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

多层感知机模型

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

多层感知机梯度

E = 1 2 ∑ ( O i 1 − t i ) 2 当 k = i 时 , 才 有 意 义 , 因 此 ∂ E ∂ w j k = ( O k − t k ) ∂ O k ∂ w j k ∂ E ∂ w j k = ( O k − t k ) ∂ σ ( x k ) ∂ w j k ∂ E ∂ w j k = ( O k − t k ) σ ( x k ) ( 1 − σ x ( k ) ) ∂ x k 1 ∂ w j k ∂ E ∂ w j k = ( O k − t k ) O k ( 1 − O k ) x j 0 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]])

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值