深度学习:手写反向传播算法(BackPropagation)

简介: 深度学习:手写反向传播算法(BackPropagation)

深度学习:手写反向传播算法(BackPropagation)

前置知识回顾

损失函数:交叉熵
优化方法:SGD与GD
网络结构:多层感知机是如何运作的
链式法则:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/e6b8800a13a34fa58efca5a7ed395122.jpeg)

前向传播

首先定义一个简单的三层全连接神经网络,其中为了方便运算,我们省略了激活函数与偏置系数b,网络结构如图所示:

                                         ![请添加图片描述](https://ucc.alicdn.com/images/user-upload-01/e6b1d5a8895744b3ae907ea6c7cb0f51.jpeg)

下面我们开始前向计算: 请添加图片描述
请添加图片描述

1.在这里我们发现,其中计算的结果也就是隐藏层神经元的数值z1与z2,那么不难看出,我们把这次计算的输出当作下次计算的输入,就可以计算出z3与z4,这样逐层传播,就是上述网络的前想传播过程。
2.当我们得到网络的结果矩阵z3与z4,下面我们要通过代价函数计算损失
为了方便运算,我们采用均方误差(MSE)来计算损失计算过程如下:
在这里插入图片描述

其中y假设为真实值。
上述过程就是前向计算的过程。

反向传播

计算完代价函数,我们就需要更新我们的参数,之前我们学习的梯度梯度下降法只能更新一层神经网络的参数,而在多层网络中,我们需要用到链式法则的知识来得到其他层参数的偏导数,就可以逐层更新参数。具体过程如下:
我们从后往前更新参数:
首先计算损失函数对第二层网络参数的偏导数
$$\begin{vmatrix} \dfrac{\partial l_1}{\partial w_5} & \dfrac{\partial l_{1}}{\partial w_7} \\ \dfrac{\partial l_{2}}{\partial w_6} & \dfrac{\partial l_{2}}{\partial w_8} \end{vmatrix}=\begin{vmatrix}
\dfrac{\partial l_{1}}{\partial z_{3}}\dfrac{\partial z_3,}{\partial w_5} & \dfrac{\partial l_{4}}{\partial z_{3}}\dfrac{\partial z_{3}}{\partial w_7} \
\dfrac{\partial l_{2}}{\partial z_{4}}\dfrac{\partial z_4}{\partial W_6} & \dfrac{\partial l_{2}}{\partial z_{4}}\dfrac{\partial z_4}{\partial W_{8}}
\end{vmatrix}$$
计算偏导数后,我们可以通过梯度下降法更新参数(这里假设a为学习率):

$$ \begin{vmatrix} w_{5}-a\dfrac{ \partial l_{1}}{\partial w_5} & w_{7}-a\dfrac{\partial l_1}{\partial w_1}, \\ w_{6}-a\dfrac{\partial l_{2}}{\partial w_6} & w_{8}-a\dfrac{\partial l_{2}}{\partial w_8} \end{vmatrix}=\begin{vmatrix} w_{5*} & w_{7*}\\ w_{6*}& w_{8*} \end{vmatrix} $$

接着,我们就继续向前跟新,这里损失函数对参数的偏导数为:
$$ \dfrac{\partial l_{1}}{\partial w_{1}}=\dfrac{\partial l_{1}}{\partial z_{1}}\dfrac{\partial z_{1}}{\partial w_1}=\dfrac{\partial l_{1}}{\partial z_{3}}\dfrac{\partial z_3}{\partial z_{1}}\dfrac{\partial z_{1}}{\partial w_{1}} $$
有了偏导数,我们就可以重复上述操作,直至更新完所有参数。

代码实现

import torch.nn as nn
import torch.nn.functional as F

x = torch.tensor([2.0,2.0],requires_grad=True)
class model(nn.Module):
    def __init__(self,x):
        super(model, self).__init__()
        self.x = x
        self.fc1 = nn.Linear(2, 2)
        self.fc2 = nn.Linear(2, 2)
    def forward(self):
        x = self.fc1(self.x)
        x = self.fc2(x)
        return x
    
    
x = model(x).forward() 
x = x.sum().backward()
目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习中的优化算法及其应用
【10月更文挑战第8天】 本文将探讨深度学习中常用的优化算法,包括梯度下降法、Adam和RMSProp等,介绍这些算法的基本原理与应用场景。通过实例分析,帮助读者更好地理解和应用这些优化算法,提高深度学习模型的训练效率与性能。
154 63
|
17天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
64 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
17天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
55 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
17天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
62 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
74 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 数据采集 算法
如何在一夜之间成为模型微调大师?——从零开始的深度学习修炼之旅,让你的算法功力飙升!
【10月更文挑战第5天】在机器学习领域,预训练模型具有强大的泛化能力,但直接使用可能效果不佳,尤其在特定任务上。此时,模型微调显得尤为重要。本文通过图像分类任务,详细介绍如何利用PyTorch对ResNet-50模型进行微调,包括环境搭建、数据预处理、模型加载与训练等步骤,并提供完整Python代码。通过调整超参数和采用早停策略等技巧,可进一步优化模型性能。适合初学者快速上手模型微调。
103 8
|
2月前
|
机器学习/深度学习 JSON 搜索推荐
深度学习的协同过滤的推荐算法-毕设神器
深度学习的协同过滤的推荐算法-毕设神器
48 4
|
2月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
63 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
2月前
|
机器学习/深度学习 算法 决策智能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
【机器学习】揭秘深度学习优化算法:加速训练与提升性能
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
98 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台