ccc-pytorch-感知机算法(3)

文章介绍了感知机的概念,从单一输出感知机开始,详细阐述了误差函数和反向传播的过程,接着扩展到处理多个输出的感知机,并同样解析了其误差和权重更新的计算。最后,文章讨论了多层感知机(MLP)的反向传播算法,展示了如何通过链式法则计算各层权重的梯度。
摘要由CSDN通过智能技术生成

单一输出感知机

image-20230225200515392
内容解释:

  • w 00 1 w^1_{00} w001:输入标号1连接标号0(第一层)
  • x 0 0 x_0^0 x00:第0层的标号为0的值
  • O 1 1 O_1^1 O11:第一层的标号为0的输出值
  • t:真实值
  • σ \sigma σ:激活函数

公式推导:
E = 1 2 ( O 0 1 − t )   \begin{aligned} E=\frac{1}{2}(O_0^1-t)^\ \end{aligned} E=21(O01t) 
添加常数便于求导,不影响单调性
∂ E ∂ w j 0 = ( O 0 − t ) ∂ O 0 ∂ w j 0 = ( O 0 − t ) ∂ σ ( x 0 ) ∂ w j 0 = ( O 0 − t ) O 0 ( 1 − O 0 ) ∂ x 0 1 ∂ w j 0 注: [ σ ( x 0 ) = O 0 ] = ( O 0 − t ) O 0 ( 1 − O 0 ) x j 0 \begin{aligned} \frac{\partial E}{\partial w_{j0}} &=(O_0-t)\frac{\partial O_0}{\partial w_{j0}}\\ &=(O_0-t)\frac{\partial \sigma(x_0)}{\partial w_{j0}}\\ &=(O_0-t) O_0(1- O_0)\frac{\partial x_0^1}{\partial w_{j0}} 注:[\sigma(x_0)=O_0]\\ &=(O_0-t) O_0(1- O_0)x_j^0 \end{aligned} wj0E=(O0t)wj0O0=(O0t)wj0σ(x0)=(O0t)O0(1O0)wj0x01注:[σ(x0)=O0]=(O0t)O0(1O0)xj0
简单实践代码:

x = torch.randn(1,10)
w = torch.randn(1,10,requires_grad=True)
o = torch.sigmoid(x@w.t())
loss = F.mse_loss(torch.ones(1,1),o)
loss.shape
loss.backward()
w.grad

image-20230225203507955

多输出感知机

image-20230225204020850
内容解释:
和单层的一摸一样,只是多了几个输出,注意下标即可
公式推导:
E = 1 2 ∑ ( O i k − t k )   \begin{aligned} E=\frac{1}{2}\sum(O_i^k-t_k)^\ \end{aligned} E=21(Oiktk) 
添加常数便于求导,不影响单调性
∂ E ∂ w j k = ( O k − t k ) ∂ O k ∂ w j k 注: [ 下标对上才有值 ] = ( O k − t k ) ∂ σ ( x k ) ∂ w j k = ( O k − t k ) O k ( 1 − O k ) ∂ x k 1 ∂ w j k = ( O k − t k ) O k ( 1 − O k ) x j 1 \begin{aligned} \frac{\partial E}{\partial w_{jk}} &=(O_k-t_k)\frac{\partial O_k}{\partial w_{jk}}注:[下标对上才有值]\\ &=(O_k-t_k)\frac{\partial \sigma(x_k)}{\partial w_{jk}}\\ &=(O_k-t_k) O_k(1- O_k)\frac{\partial x_k^1}{\partial w_{jk}} \\ &=(O_k-t_k) O_k(1- O_k)x_j^1 \end{aligned} wjkE=(Oktk)wjkOk注:[下标对上才有值]=(Oktk)wjkσ(xk)=(Oktk)Ok(1Ok)wjkxk1=(Oktk)Ok(1Ok)xj1
即只需要输出和对应输入即可计算

简单实践代码:

x = torch.randn(1,10)
w = torch.randn(2,10,requires_grad=True)
o = torch.sigmoid(x@w.t())
loss = F.mse_loss(torch.ones(1,2),o)
loss.shape
loss.backward()
w.grad

image-20230225204805104

MLP反向传播

image-20230225205542551
内容解释:
MLP即Multi-Layer Perceptron,多层感知机
公式推导:
∂ E ∂ W i j = ∂ ∂ W i j 1 2 ∑ k ∈ K ( O k − t k ) 2 = ∑ k ∈ K ( O k − t k ) ∂ ∂ W i j O k = ∑ k ∈ K ( O k − t k ) ∂ ∂ W i j σ ( x k ) = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) ∂ x k ∂ w i j = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) ∂ x k ∂ O j ⋅ ∂ O j ∂ w i j = ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k ∂ O j ∂ w i j = O j ( 1 − O j ) ∂ x j ∂ W i j ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k = O j ( 1 − O j ) O i ∑ k ∈ K ( O k − t k ) O k ( 1 − O k ) W j k 注: [ 层数从左到右为 i , j , k ] \begin{aligned} \frac{\partial E}{\partial W_{ij}} &=\frac{\partial }{\partial W_{ij}}\frac{1}{2}\sum_{k\in K}(O_k-t_k)^2\\ &=\sum_{k\in K}(O_k-t_k)\frac{\partial }{\partial W_{ij}}O_k\\ &=\sum_{k\in K}(O_k-t_k)\frac{\partial }{\partial W_{ij}}\sigma(x_k)\\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)\frac{\partial x_k}{\partial w_{ij}} \\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)\frac{\partial x_k}{\partial O_j}\cdot\frac{\partial O_j}{\partial w_{ij}}\\ &=\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\frac{\partial O_j}{\partial w_{ij}}\\ &=O_j(1-O_j)\frac{\partial x_j}{\partial W_{ij}}\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\\ &=O_j(1-O_j)O_i\sum_{k\in K}(O_k-t_k) O_k(1- O_k)W_{jk}\\ &注:[层数从左到右为 i ,j,k] \end{aligned} WijE=Wij21kK(Oktk)2=kK(Oktk)WijOk=kK(Oktk)Wijσ(xk)=kK(Oktk)Ok(1Ok)wijxk=kK(Oktk)Ok(1Ok)OjxkwijOj=kK(Oktk)Ok(1Ok)WjkwijOj=Oj(1Oj)WijxjkK(Oktk)Ok(1Ok)Wjk=Oj(1Oj)OikK(Oktk)Ok(1Ok)Wjk注:[层数从左到右为ijk]
如果将仅与第k层相关的信息作为一个函数可以写作:
∂ E ∂ W i j = O i O j ( 1 − O j ) ∑ k ∈ K δ k W j k \begin{aligned} \frac{\partial E}{\partial W_{ij}}=O_iO_j(1-O_j)\sum_{k\in K}\delta _kW_{jk} \end{aligned} WijE=OiOj(1Oj)kKδkWjk

所以一个前面层的值依赖后面层的信息,需要倒着计算才行哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值