【深度学习 | 反向传播】释放反向传播的力量: 让训练神经网络变得简单

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

反向传播算法

反向传播算法是一种用于训练神经网络的常用优化算法。它通过计算损失函数对每个参数的梯度,然后根据这些梯度更新参数值,以使得神经网络能够逐步调整和改进其预测结果。

下面是一个详细解释反向传播算法的步骤:

  1. 前向传播:从输入开始,通过神经网络进行前向传播。每个节点都会将输入加权求和,并应用非线性激活函数(如ReLU、Sigmoid等),生成输出。

  2. 定义损失函数:选择合适的损失函数来衡量模型预测与实际标签之间的差异。例如,在分类问题中可以使用交叉熵损失或均方误差损失。

  3. 反向传播:从输出层开始,计算每个节点对于最终预测结果的贡献程度,并将该信息沿着网络进行反向传播(在最后一层输出开始,以计算损失函数)。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bzEcrRdT-1691847459841)(classical algorithm.assets/image-20230812141415318.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1Af45cB-1691847459842)(classical algorithm.assets/image-20230812142623880.png)]

    这里我们以三个全连接神经元为例。 整体导数通过链式法则链接,公式如下:
    ∂ C 0 ∂ w ( L ) = ∂ z ( L ) ∂ w ( L ) ∂ a ( L ) ∂ z ( L ) ∂ C 0 ∂ a ( L ) \frac{\partial C_{0}}{\partial w^{(L)}}=\frac{\partial z^{(L)}}{\partial w^{(L)}} \frac{\partial a^{(L)}}{\partial z^{(L)}} \frac{\partial C_{0}}{\partial a^{(L)}} w(L)C0=w(L)z(L)z(L)a(L)a(L)C0
    这是损失函数与最后一个神经元 W W W参数的偏导数(偏置 b i a s bias bias同样样),其中我们可以看到“一同激活的神经元联系在一起”,上一个神经元的激活值就是下一个神经元的导数
    C 0 = ( a ( L ) − y ) 2 z ( L ) = w ( L ) a ( L − 1 ) + b ( L ) a ( L ) = σ ( z ( L ) ) ∂ C 0 ∂ a ( L ) = 2 ( a ( L ) − y ) ∂ a ( L ) ∂ z ( L ) = σ ′ ( z ( L ) ) ∂ z ( L ) ∂ w ( L ) = a ( L − 1 ) ∂ C 0 ∂ w ( L ) = 2 ( a ( L ) − y ) ∗ σ ′ ( z ( L ) ) ∗ a ( L − 1 ) \begin{array}{rlrl} C_{0} & =\left(a^{(L)}-y\right)^{2} \\ z^{(L)} & =w^{(L)} a^{(L-1)}+b^{(L)} \\ a^{(L)} & =\sigma\left(z^{(L)}\right) \\ \frac{\partial C_0}{\partial a^{(L)}} & =2\left(a^{(L)}-y\right) & \\ \frac{\partial a^{(L)}}{\partial z^{(L)}} & =\sigma^{\prime}\left(z^{(L)}\right) \\ \frac{\partial z^{(L)}}{\partial w^{(L)}} & =a^{(L-1)} & \\ \frac{\partial C_{0}}{\partial w^{(L)}} & = 2\left(a^{(L)}-y\right) * \sigma^{\prime}\left(z^{(L)}\right) * a^{(L-1)} \end{array} C0z(L)a(L)a(L)C0z(L)a(L)w(L)z(L)w(L)C0=(a(L)y)2=w(L)a(L1)+b(L)=σ(z(L))=2(a(L)y)=σ(z(L))=a(L1)=2(a(L)y)σ(z(L))a(L1)
    再反向一个神经元,公式如下:
    ∂ a ( L − 1 ) ∂ z ( L − 1 ) = σ ′ ( z ( L ) ) ∂ z ( L − 1 ) ∂ w ( L − 1 ) = a ( L − 2 ) ∂ C 0 ∂ w ( L ) = σ ′ ( z ( L ) ) ∗ a ( L − 2 ) \begin{array}{rlrl} \frac{\partial a^{(L-1)}}{\partial z^{(L-1)}} & =\sigma^{\prime}\left(z^{(L)}\right) \\ \frac{\partial z^{(L-1)}}{\partial w^{(L-1)}} & =a^{(L-2)} & \\ \frac{\partial C_{0}}{\partial w^{(L)}} & = \sigma^{\prime}\left(z^{(L)}\right) * a^{(L-2)} \end{array} z(L1)a(L1)w(L1)z(L1)w(L)C0=σ(z(L))=a(L2)=σ(z(L))a(L2)
    此时该神经元的梯度就是上一个神经元的激活值与该神经元输入与激活输出的局部梯度相乘,一直反向传播到最开始的神经元就可以得到最早期的神经元输出。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b87ffXCM-1691847459843)(classical algorithm.assets/image-20230812151645267.png)]

    这是三个单个神经元的过程,我们把他推广到多个神经元全连接:(其实只不过多了很多下标,整体流程是一致的,参数是矩阵形式,损失函数同时由多个神经元共同影响累加,整体以层为单位累加求和)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JXVf4tKZ-1691847459843)(classical algorithm.assets/image-20230812160056339.png)]

    我们精炼成两个关键步骤:

    • 计算局部梯度:针对每个节点,计算其相对于加权输入和输出之间关系(即激活函数)的偏导数(参数)
    • 链式规则:利用链式规则(也称为复合函数求导法则),将局部梯度(激活函数梯度)乘以上游节点对该节点的贡献(加权输入梯度),以计算上游节点的梯度。(参数 w w w与激活输出的梯度)
  4. 计算参数梯度:根据反向传播过程中计算得到的梯度信息,对每个参数进行偏导数计算。这可以通过将网络中各层的局部梯度与输入值(或前一层输出)相乘来实现。

  5. 更新参数:使用优化器(如随机梯度下降)根据参数的负梯度方向和学习率大小来更新模型中的权重和偏置项。

通过迭代执行以上步骤,不断调整神经网络的参数,使其能够更好地拟合训练数据,并在测试数据上表现出良好泛化能力。到这里,你就弄懂神经网络重要的部分,反向传播,以下图片有两种数学公式形式表示损失函数的导数,一个三个导函数的累积,一个是MSE的求导

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYy5oXSh-1691847459844)(classical algorithm.assets/image-20230812161006209.png)]

如果你希望进一步了解反向传播算法及其相关细节,推荐以下资源:

  1. 视频教程: Backpropagation in Neural Networks (https://www.youtube.com/watch?v=Ilg3gGewQ5U) 3Blue1Brown !!
  2. 博客文章: A Gentle Introduction to Backpropagation (LSTM) (https://machinelearningmastery.com/gentle-introduction-backpropagation/)
  3. 课程笔记: CS231n Convolutional Neural Networks for Visual Recognition (http://cs231n.github.io/optimization-2/)

我们可以思考以下,如果在LSTM中等特殊改进神经单元,反向传播又是如何运行的呢?

答案是一样的: 我们的输出是 细胞状态的正切激活 * 输入数据和隐藏状态拼接的激活函数, 由此根据每一个时间步链式求导每一个权重矩阵,在每一个矩阵中再次通过累加求和导数,以此类推得到梯度,通过偏导求和得到整体矩阵,参数更新)

下一章我们将会讲解梯度消失和爆炸,通过了解反向传播,我们可以更加清楚其原理
在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/87453.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云服务器搭建WordPress建站教程基于Windows系统

本教程是使用阿里云服务器镜像系统选择的是Windows操作系统,手动安装WordPress博客网站全过程。本教程介绍如何在Windows操作系统的ECS实例上搭建WordPress网站。 目录 准备工作 搭建WordPress网站 解析WordPress网站域名 准备工作 创建Windows操作系统的ECS实…

BGP协议综合知识(打破水平分割--联邦、反射规则)

反射规则:不优路由不能被传递,自然也不能被反射; RR从一个EBGP邻居处学习到的路由,可以传输给客户端、非客户端,已经本地的其他EBGP邻居;RR从一个客户端学习到的路由,可以传递给本地其他的客户…

通讯协议037——全网独有的OPC HDA知识一之聚合(六)实际时间最小值

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

7.3 详解NiN模型--首次使用多层感知机(1x1卷积核)替换掉全连接层的模型

一.前提知识 多层感知机:由一个输入层,一个或多个隐藏层和一个输出层组成。(至少有一个隐藏层,即至少3层) 全连接层:是MLP的一种特殊情况,每个节点都与前一层的所有节点连接,全连接…

分布式数据库的HTAP能统一OLTP和 OLAP吗?

OLAP和OLTP通过ETL衔接。为提升OLAP性能,需在ETL过程进行大量预计算,包括: 数据结构调整业务逻辑处理 好处:可控制OLAP的访问延迟,提升用户体验。但因为要避免抽取数据影响OLTP系统,须在日终的交易低谷期…

java Spring Boot yml多环境配置

我们项目 线上和线下 环境配置不是特别一样 例如 运行的URL 数据库地址 数据库的账号密码 这些经常是不一样的 如果每次上线钱改 也不是特别方便 甚至可能忘记 那么 进入我们代码中 所谓的多环境 就是在不同的环境下配置不同的值 终端还是在application配置文件中 多环境的话…

Add-in Express for Microsoft Office and Delphi Crack

Add-in Express for Microsoft Office and Delphi Crack 适用于Microsoft Office和Delphi VCL的Add-in Express使您能够在几次点击中为Microsoft Office开发专业插件。它生成基于COM的项目,这些项目包含Microsoft Office外接程序或智能标记的所有必要功能&#xff0…

Vue——webpack

webpack 一、Install1.全局安装2.局部安装 二、总结1.打包2.定义脚本3.配置文件定义(webpack.config.js)4.项目重新加载依赖5.webpack打包Css6.style-loader 一、Install 1.全局安装 npm install webpack webpack-cli -g2.局部安装 以项目为单位,一个项…

【STM32】简介

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星T…

音视频 vs2017配置FFmpeg

vs2017 ffmpeg4.2.1 一、首先我把FFmpeg整理了一下&#xff0c;放在C盘 二、新建空项目 三、添加main.cpp&#xff0c;将bin文件夹下dll文件拷贝到cpp目录下 #include<stdio.h> #include<iostream>extern "C" { #include "libavcodec/avcodec.h&…

类与对象(加深)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 6.const成员 7.取地址及const取地址操作符重载 1.类的6个默认成员函数 如果…

Linux常见面试题,应对面试分享

操作系统基础 1.cpu占⽤率太⾼了怎么办? 排查思路是什么&#xff0c;怎么定位这个问题&#xff0c;处理流程 其他程序: 1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程 2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程 3.询问开发或者⽼⼤,是什么业务在使⽤这个进程…

【Windows API】获取卷标、卷名

1、卷->卷标 使用FindFirstVolume()和FindNextVolume()函数体系&#xff0c;枚举系统所有卷&#xff08;Volume&#xff09;的例子&#xff0c;然后获取卷标、卷类型。这个方式可以枚举出没有驱动器号&#xff08;卷标&#xff09;的卷。 int TestMode1() {HANDLE hVolume…

科技云报道:一波未平一波又起?AI大模型再出邪恶攻击工具

AI大模型的快速向前奔跑&#xff0c;让我们见识到了AI的无限可能&#xff0c;但也展示了AI在虚假信息、深度伪造和网络攻击方面的潜在威胁。 据安全分析平台Netenrich报道&#xff0c;近日&#xff0c;一款名为FraudGPT的AI工具近期在暗网上流通&#xff0c;并被犯罪分子用于编…

毅哥铡特:修改后的Bellmanford最短路径路由动画演示

修改背景&#xff1a;毅哥铡特自带的《routing_bellmanford.cpp》&#xff0c;按路由跳数进行更新路由表&#xff0c;但是&#xff0c;卫星互联网的卫星路由器节点&#xff0c;可能需要考虑传播传输时延&#xff0c;对应的&#xff0c;可能需要按照两个网络节点的距离来更新路由…

Node.js |(四)HTTP协议 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;HTTP概念&#x1f4da;窥探HTTP报文&#x1f4da;请求报文的组成&#x1f407;HTTP请求行&#x1f407;HTTP请求头&#x1f407;HTTP的请求体 &#x1f4da;响应报文…

Linux信号介绍

一、信号处理函数的注册 signal()使用&#xff1a; 1 #include<stdio.h>2 #include <signal.h>3 4 void handler(int signum)5 {6 switch(signum){7 case 2:8 printf("signum %d\n",signum);9 …

Multipass虚拟机设置局域网固定IP同时实现快速openshell的链接

本文只介绍在windows下实现的过程&#xff0c;Ubuntu采用22.04 安装multipass后&#xff0c;在卓面右下角Open shell 就可以链接默认实例Primary&#xff0c;当然如果你有多个虚拟机&#xff0c;可以针对不同内容单独建立终端的链接&#xff0c;而本文仅仅用Primary来说明。 …

GO学习之 微框架(Gin)

GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…

《大型网站技术架构》第二篇 架构-高可用

高可用在公司中的重要性 对公司而言&#xff0c;可用性关系网站的生死存亡。对个人而言&#xff0c;可用性关系到自己的绩效升迁。 工程师对架构做了许多优化、对代码做了很多重构&#xff0c;对性能、扩展性、伸缩性做了很多改善&#xff0c;但别人未必能直观地感受到&#…