PyTorch教程(十一):多输出的感知机以及梯度
上一節中介紹了單層感知機,感知機的輸出節點只有一個,只有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 ?wj0??E?=(O0??t)?O0?(1?O0?)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)xj0E = \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?∑(Oi1??ti?)2當k=i時,才有意義,因此?wjk??E?=(Ok??tk?)?wjk??Ok???wjk??E?=(Ok??tk?)?wjk??σ(xk?)??wjk??E?=(Ok??tk?)σ(xk?)(1?σx(k))?wjk??xk1???wjk??E?=(Ok??tk?)Ok?(1?Ok?)xj0?
PyTorch實現
from torch.nn import functional as Fx = 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]])其實多輸出的感知機已經不能叫做感知機了,因為感知機的定義就是一個單一輸出的。而多輸出的感知機相當于標準全連接層的輸出層。
總結
以上是生活随笔為你收集整理的PyTorch教程(十一):多输出的感知机以及梯度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信8.0.11内测版怎么升级微信8.0
- 下一篇: 冰箱封条发霉怎么清洗