P18 PyTorch 感知机的梯度推导

前言

这里面简单介绍一下单层感知机和多层感知机的模型

参考:

https://www.bilibili.com/video/BV17e4y1q7NG?p=41


一 单层感知机模型

输入

: k 代表网络层数,i 代表输入节点的编号

前向传播

: 权重系数

k: 层数

i: 前一层输入节点编号

j: 当前层输出节点编号

这里: k=1, j =0

损失函数

t: 标签值

Backward: 反向传播更新梯度

# -*- coding: utf-8 -*-
"""
Created on Fri Feb 17 16:56:58 2023

@author: chengxf2
"""

import torch
import torch.nn.functional as F

def forward(w,x):
    print("w 的梯度",w.grad)
    if w.grad is not None: 
        w.grad.data.zero_()
        print("\n 初始化的w ",w)

    a = torch.matmul(x,w.T)
    o= torch.sigmoid(a)
    
    loss = F.mse_loss(o, target)
    print("\n loss ",loss)
    return loss

def  backward(loss, w):
    
    loss.backward()
    print("\n 权重系数 ",w.data, "\n 权重系数梯度 ",w.grad,"\n 权限系数梯度", w.grad.data)
    

    
target = torch.ones(1,1) 
x = torch.randn(1,3)
w = torch.randn(1,3, requires_grad=True)
 
loss = forward(w,x)
backward(loss,w)

权重系数,以及权重系数的梯度,都是放在data 里面


二 多层感知机

2.1 模型

从上面可以看出梯度消失,梯度弥散的原因

当经过多个这样的神经元梯度就会消失了

2.2 矩阵推导

另一种更普遍的方式利用矩阵方式推导

输入

Forward:

损失函数

利用迹和梯度的关系

所以

利用链式求导法则

(点乘 对应 multiply)

所以


# -*- coding: utf-8 -*-
"""
Created on Mon Feb 13 21:28:26 2023

@author: cxf
"""

import torch
import torch.nn.functional as F


def matGrad(z,o,x):
    print("\n o",o)
    a = torch.multiply(o, 1.0-o)
    print("\n a ",a)
    
    b = torch.multiply(a,z)
    
    c = torch.matmul(b,x.T)
    print("\n out \n",c/2.0)

def grad():
    
    x = torch.randn(3,1)
    w = torch.randn(4,3,requires_grad=True)
    a = torch.matmul(w, x)
    o = torch.sigmoid(a)
    
    t = torch.ones(4,1)
    
    loss = F.mse_loss(o, t)
    
    z = o-t
    matGrad(z,o,x)
    loss.backward()
    
    print("\n w grad \n ",w.grad)
    
    

if __name__ == "__main__":
    
    grad()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值