浅析反向传播算法

深度学习:完全理解反向传播算法(一) 本文剖析反向传播算法,讲解其中的来龙去脉,其中有很多数学计算推导,强烈建议拿出纸和笔跟着文章一起算算,相信会有收获! 阅读详情

反向传播算法概念

反向传播算法广泛用在机器学习、人工智能等领域,目的在于将各个结点的权值w和偏差值b等参数调节到最优状态(最优状态:使训练数据的平均效果达到最好)。反向传播算法与前向传播算法都是神经网络的经典算法,正如它们的名字一样。反向传播算法是从输出层一直传递到输入层,传递的过程主要做的动作是微调权值和偏差值;前向传播主要确定各层结点的输入与输出,最后计算输出层上所有结点的输出值(实际计算值)以及误差值(误差值:输出目标值与实际计算值之间的距离,具体公式典型的有:求差和欧式距离等)。

反向传播算法细节

神经网络
图片来自 http://blog.youkuaiyun.com/mao_xiao_feng/article/details/53048213

反向传播算法主要涉及到的数学原理是:链式求导,它是该算法的核心和精髓所在,掌握这个方法,就基本上学会了反向传播算法。想要真正掌握这个算法,就需要用代码实现一下了,但是它与神经网络耦合严重,所以需要掌握神经网络细节,有一定的挑战性,但想要成功的你一定可以办到 -_-||

1. 前向传播算法
前向传播主要确定各层结点的输入与输出,最后计算输出层上所有结点的输出值(实际计算值)以及误差值(误差值:输出目标值与实际计算值之间的距离,具体公式典型的有:求差和欧式距离等)。

上图中,从左到右依次是输入层、隐藏层(可以为多层,本例为一层)和输出层。i1和i2是输入层结点,h1和h2是隐藏层结点,o1和o2是输出层结点。前向传播主要确定各结点的值和全局误差(也称全局损失,由全局损失函数确定)和输出层各个结点的误差(局部误差)(也称局部损失,由局部损失函数确定)。各权重和偏差的初始值在图中已经给出,下面是求解过程(该求解过程为一次前向传播过程,对应一个实例的训练过程):

1.1首先,涉及到的变量有下面16个:

i1 = 0.05;h1 = 待求;o1 = 待求;w1 = 0.15;w3 = 0.25;w5 = 0.40;w7 = 0.50;b1 = 0.35
i2 = 0.10;h2 = 待求;o2 = 待求;w2 = 0.20;w4 = 0.30;w6 = 0.45;w8 = 0.55;b2 = 0.60

前向过程主要求出h1、h2、o1和o2的输出值(输出值:激活函数函数值)

激活函数: (懂激活函数可以跳过此处。)把结点的输入值作为自变量的函数,激活函数的函数值为该结点的输出值。激活函数来源于感受器的概念,一个感受器代表一个结点的过滤器,主要目的是矫正结点的值,使之在固定的范围内。比如:0-1。也就是激活函数的值域有固定的范围,比如典型的激活函数:sigmoid函数

y=11+e−x y = 1 1 + e − x
它的值域为(0,1),所以可以保证每个结点的输出值都在0-1之间。

1.2然后计算待求值:

h1计算过程:
h1的输入值neth1

neth1=i1w1+i2w2+b1 n e t h 1 = i 1 w 1 + i 2 w 2 + b 1

h1的输出值 h1
h1=func(neth1) h 1 = f u n c ( n e t h 1 )

(func为激活函数,如果为sigmoid时)
h1=11+e−neth1 h 1 = 1 1 + e − n e t h 1

h2计算过程:
h2的输入值neth2

neth2=i1w3+i2w4+b1 n e t h 2 = i 1 w 3 + i 2 w 4 + b 1

h2的输出值 h2
h2=func(neth2) h 2 = f u n c ( n e t h 2 )

(func为激活函数,如果为sigmoid时)
h1=11+e−neth2 h 1 = 1 1 + e − n e t h 2

o1和o2计算过程类似,这里省略。
1.3最后求全局误差值 E和局部误差值 Ei
局部误差函数(误差函数就是神经网络中的损失函数,误差函数是数学术语,损失函数是机器学习领域术语)的选择有多种,如果是误差平方和,则:
Ei=12(oi−oi目标值)2 E i = 1 2 ( o i − o i 目 标 值 ) 2

全局误差函数
E=∑inEi E = ∑ i n E i

这里的误差函数是神经网络调优的一个参数

2. 反向传播算法
如果神经网络没有反向传播,只有前向传播,则前向传播从第二个实例进入神经网络,开始调节权重值和偏差值。只有前向传播过程的人工神经网络也称为序贯神经网络模型。

反向传播算法完成对权重值和偏差值的调节,主要用到链式求导

z=y z = y
,
y=a+b y = a + b
, 则z对a求导为:
z′(a)=z′(y)y′(a) z ′ ( a ) = z ′ ( y ) y ′ ( a )

具体求解过程(该求解过程为一次反向传播过程,对应一个实例的训练过程):
1输出层到隐藏层
w5

w5=w5−α⋅∂E∂w5 w 5 = w 5 − α ⋅ ∂ E ∂ w 5

∂E∂w5=∂E∂o1⋅∂o1∂neto1⋅∂neto1∂w5 ∂ E ∂ w 5 = ∂ E ∂ o 1 ⋅ ∂ o 1 ∂ n e t o 1 ⋅ ∂ n e t o 1 ∂ w 5

alpha为正数,如:0.5
这里解释一下为什么用减而不用加:偏导值为正数,表示w5与E正相关,也就是w5越大,E越大。所以此时减取一个正数,w5减少了,也就是全局误差E减少了。所以理论意义与物理意义符合逻辑。偏导值为负数时道理一样。全局误差E减少正是我们的目标。

w6

w6=w6−α⋅∂E∂w6 w 6 = w 6 − α ⋅ ∂ E ∂ w 6

∂E∂w6=∂E∂o1⋅∂o1∂neto1⋅∂neto1∂w6 ∂ E ∂ w 6 = ∂ E ∂ o 1 ⋅ ∂ o 1 ∂ n e t o 1 ⋅ ∂ n e t o 1 ∂ w 6

w7

w7=w7−α⋅∂E∂w7 w 7 = w 7 − α ⋅ ∂ E ∂ w 7

∂E∂w7=∂E∂o2⋅∂o2∂neto2⋅∂neto2∂w7 ∂ E ∂ w 7 = ∂ E ∂ o 2 ⋅ ∂ o 2 ∂ n e t o 2 ⋅ ∂ n e t o 2 ∂ w 7

w8

w8=w8−α⋅∂E∂w8 w 8 = w 8 − α ⋅ ∂ E ∂ w 8

∂E∂w8=∂E∂o2⋅∂o2∂neto2⋅∂neto2∂w8 ∂ E ∂ w 8 = ∂ E ∂ o 2 ⋅ ∂ o 2 ∂ n e t o 2 ⋅ ∂ n e t o 2 ∂ w 8

2隐藏层到输入层
w1

w1=w1−α⋅∂E∂w1 w 1 = w 1 − α ⋅ ∂ E ∂ w 1

∂E∂w1=∂E∂h1⋅∂h1∂neth1⋅∂neth1∂w1 ∂ E ∂ w 1 = ∂ E ∂ h 1 ⋅ ∂ h 1 ∂ n e t h 1 ⋅ ∂ n e t h 1 ∂ w 1

∂E∂h1=∂E1∂h1+∂E2∂h1 ∂ E ∂ h 1 = ∂ E 1 ∂ h 1 + ∂ E 2 ∂ h 1

w2

w2=w2−α⋅∂E∂w2 w 2 = w 2 − α ⋅ ∂ E ∂ w 2

∂E∂w2=∂E∂h1⋅∂h1∂neth1⋅∂neth1∂w1 ∂ E ∂ w 2 = ∂ E ∂ h 1 ⋅ ∂ h 1 ∂ n e t h 1 ⋅ ∂ n e t h 1 ∂ w 1

∂E∂h1=∂E1∂h1+∂E2∂h1 ∂ E ∂ h 1 = ∂ E 1 ∂ h 1 + ∂ E 2 ∂ h 1

w3

w3=w3−α⋅∂E∂w3 w 3 = w 3 − α ⋅ ∂ E ∂ w 3

∂E∂w3=∂E∂h2⋅∂h2∂neth2⋅∂neth2∂w3 ∂ E ∂ w 3 = ∂ E ∂ h 2 ⋅ ∂ h 2 ∂ n e t h 2 ⋅ ∂ n e t h 2 ∂ w 3

∂E∂h2=∂E1∂h2+∂E2∂h2 ∂ E ∂ h 2 = ∂ E 1 ∂ h 2 + ∂ E 2 ∂ h 2

w4

w4=w4−α⋅∂E∂w4 w 4 = w 4 − α ⋅ ∂ E ∂ w 4

∂E∂w4=∂E∂h2⋅∂h2∂neth2⋅∂neth2∂w4 ∂ E ∂ w 4 = ∂ E ∂ h 2 ⋅ ∂ h 2 ∂ n e t h 2 ⋅ ∂ n e t h 2 ∂ w 4

∂E∂h2=∂E1∂h2+∂E2∂h2 ∂ E ∂ h 2 = ∂ E 1 ∂ h 2 + ∂ E 2 ∂ h 2

偏差值的计算与此类似,这里省略。

代码细节

java实现

    /**
     * 前馈算法<hr>
     * 默认激活函数tanh,若自定义激活函数则自行修改本函数
     * @param layers 所有神经层
     * @param weights 所有权重值
     * @param bis 所有偏置值
     * @return
     */
    public static Map<Integer, List<List<Neural>>> forward(Layer[] layers, Map<Integer, double[][]> weights, List<Double> bis) {

        Map<Integer, List<List<Neural>>> result = new HashMap<Integer, List<List<Neural>>>();
        List<List<Neural>> inputs = new ArrayList<List<Neural>>();
        List<List<Neural>> outputs = new ArrayList<List<Neural>>();
        result.put(0, inputs);
        result.put(1, outputs);
        for (int i = 0; i < layers.length-1; i++) {
            List<Neural> inputNeurals = new ArrayList<Neural>();
            List<Neural> outputNeurals = new ArrayList<Neural>();
            inputs.add(inputNeurals);
            outputs.add(outputNeurals);
            for (int j = 0; j < layers[i+1].getSize(); j++) {
                inputNeurals.add(new Neural(0));
                outputNeurals.add(new Neural(0));
            }
        }

        for (int i = 0; i < layers.length; i++) {
            if (i == 0) continue;
            for (int j = 0; j < layers[i].getSize(); j++) {

                double sum = 0;
                for (int z = 0; z < layers[i-1].getSize(); z++) {
                    sum += layers[i-1].getNeurals().get(z).getValue() * weights.get(i-1)[z][j];
                }
                sum += bis.get(i-1);
                inputs.get(i-1).get(j).setValue(sum);


                sum = ActivationFunction.tanh(sum);
                layers[i].getNeurals().get(j).setValue(sum);
                outputs.get(i-1).get(j).setValue(sum);
            }
        }

        return result;
    }

代码分析

反向传播算法(backpropagation) 算法简介 百度百科: BP算法(即反向传播算法)适合于多层神经元网络的一种学习算法,它建立在梯度下降法的基础上。BP网络的输入输出关系实质上是一种映射关系:一个n输入m输出的BP神经网络所完成的功能是从n维欧氏空间向m维欧氏空间中一有限域的连续映射,这一映射具有高度非线性。它的信息处理能力来源于简单非线性函数的多次复合,因此具有很强的函数复现能力。这是BP算法得以应用的基础。 ... 阅读详情

相关推荐

反向传播算法(过程及公式推导)

反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法。

Arthur-Chen的专栏 20万+

前向传播算法(Forward propagation)与反向传播算法(Back propagation)

虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解。因此特意先对深度学习中的相关基础概念做一下总结。先看看前向传播算法(Forward propagation)与反向传播算法(Back propagation)。1.前向传播如图所示,这里讲得已经很清楚了,前向传播的思想比较简单。 举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点

bitcarmanlee的博客 14万+

人工智能算法_人工智能算法模型库浅析

一、引言人工智能在近几年出现了突飞猛进的发展,尤其是深度学习的提出以及在多个领域的成功应用,使人工智能成为当前学术界和产业界的研究热点之一。如果把人工智能比作一辆轰鸣的战车,那么算法和模型则扮演着“发动机”的角色。“发动机”的质量在一定程度上直接影响、甚至决定了“战车”最终的效力。从学术角度来看,算法和模型一直以来都是人工智能研究的重点,涌现的大量成果直接推动了人工智能技术的迭代发展。从...

weixin_39611863的博客 2914

“反向传播算法”过程及公式推导(超直观好懂的Backpropagation)

自己学习机器学习,深度学习也有好长一段时间了,一直以来都想写点有价值的技术博客,以达到技术分享及记录自己成长的目的,奈何之前一直拖着,近来算是醒悟,打算以后不定时写一写博客,也算是作为自己不断学习,不断进步的记录。既然是写博客,希望自己的博客以后要做到“准确、生动、简洁、易懂”的水平,做到对自己、对读者负责,希望大家多交流,共同进步! 言归正传,想起当时自己刚入门深度学习的时候,当时对神经网络的“...

aift的专栏 24万+

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流)

本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。

weixin_42699679的博客 471

一文读懂:CAN总线Bus-Off的触发条件与自动恢复机制

本文详细解析CAN总线Bus-Off状态的触发条件与自动恢复机制。根据ISO 11898-1标准,当发送错误计数器(TEC)超过255时节点进入Bus-Off状态,并通过检测128次总线空闲条件实现自动恢复。文章结合实战案例,探讨硬件故障、软件配置及电磁干扰等常见触发场景,并提供快慢恢复策略与调试方法,帮助工程师快速定位并解决CAN网络故障。

rgv234567的博客 361

神经网络算法浅谈

神经网络算法通过构建多层结构,运用前向传播进行预测,通过反向传播进行优化,旨在找到一组最佳的网络参数,使得模型能有效映射输入数据到期望的输出,并具备良好的泛化能力。神经网络是一种模拟人脑神经元工作原理的计算模型,由大量的人工神经元相互连接形成复杂网络结构,用于解决各种机器学习和人工智能问题。

MIT计算认知研究院特聘研究员,DeepMind超对称量子拓扑项目组首席架构师。 857

Android T GPS 定位流程

Gps 定位

好记性不如烂笔头 1355

神经网络三:浅析神经网络backpropagation算法中的代价函数和神经网络的反向传播原理、和ResNet网络的捷径链接误差传播计算

在博客神经网络一:介绍,示例,代码中,Backpropagation Algorithm中用到了代价函数:该代价函数是否是最好的?其有没有自身的局限性?还有其他的代价函数吗,有何特点?本文将针对这些问题进行分析。具体的分析是借鉴麦子学院的相关课程中的内容。 1 代价函数(二次cost) 假设有一个神经网络模型: 该模型很简单,只有一个输入,一个神经元,一个输出。假设输入值x=1, 真实...

yangdeshun888的博客 494

DDS信号发生器设计避坑指南:从AD9834配置到巴特沃斯滤波实战

本文详细解析了基于AD9834芯片的DDS信号发生器设计中的关键技术要点与常见陷阱,涵盖时钟源选择、寄存器配置时序、巴特沃斯滤波器设计等核心内容。针对中高频段信号质量优化,提供了实用的解决方案和代码示例,帮助工程师规避设计误区,提升信号发生器的性能和稳定性。

2y3u4i5o6p的博客 782

Brainstorm简单分析近红外数据(fNIRS)(一)

Brainstorm分析fNIRS数据

weixin_43604817的博客 1352

前向传播和反向传播_深度学习之DNN与反向传播算法总结

深度学习DNN与反向传播算法关键词:深度神经网络算法P1前言在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结。P2反向传播需要解决的问题在了解DNN的反向传播算法前,我们先要知道DNN反向传播算法要解决的问题,也就是说,什么时候我们需要这个反向传播算法? 回...

weixin_39736379的博客 515

常见机械臂模型不用找!Mujoco这儿都有!

高质量的模型集合,franka panda,so-arm100,ur之类的机械臂都有。常见机械臂模型不用找!Mujoco这儿都有!大概346M,网速不行的可以下载zip。

darcsdn 992

深度学习要另起炉灶,彻底抛弃反向传播

原文 【导读】 Hinton在接受 Axios 网站采访时表示,他现在对反向传播算法“深感怀疑”。反向传播算法是我们今天在AI领域所看到的进步的“主力”,包括对照片进行分类的能力、与Siri 对话的能力,等等。Hinton 说:“我的观点是把它(反向传播)全部丢下,重起炉灶。” 科学每经历一次葬礼就前进一步:为了进步,必须要有全新的方法

1038

汽车零部件产线实战:C#上位机+YOLO实现螺栓装配到位视觉检测

本项目基于C#上位机+YOLOv8实现汽车零部件产线螺栓装配到位视觉检测,全程贴合产线实际场景,从硬件选型、安装调试,到模型训练、上位机开发,再到项目联调、优化扩展,均提供手把手实操指导,代码可直接复制使用,规避了工业视觉产线检测的高频踩坑点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1331

Win11 系统下 VisualStudio2022 配置点云库 PCL1.11.1

安装完成之后打开文件夹E:\PCL 1.11.1\3rdParty\OpenNI2双击 并选择路径 (E:\PCL 1.11.1\3rdParty\OpenNI2) 安装即可全部安装完成之后,将pcl-1.11.1-pdb-msvc2019-win64.zip解压后的 .pdb文件拷贝到(E:\PCL 1.11.1\bin)中设置环境变量:到此,环境变量配置完成。

qq_53545309的博客 1126

浅析深度学习mini_batch的BP反传算法

在深度学习中,如果我们已经定义了网络,输入,以及输出,那么接下来就是损失函数,优化策略,以及一般由框架完成的BP反传。这篇博文我们主要探讨一下深度的BP反传算法(以梯度下降为例),尤其是mini_batch的BP反传,目标是如何更新网络的参数:权重和偏置。        首先,我们来看网络中基本参数的一些定义。        使用梯度下降法,一般计算所有样本的损失函数的

何雷 6688

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PyTorch源码浅析(3):NN

THNN是一个用C语言实现的神经网络模块的库,提供的功能非常底层。它实现了许多基础的神经网络模块,包括线性层,卷积层,Sigmoid等各种激活层,一些基本的loss函数,这些API都声明在THNN/generic/THNN.h中。每个模块都实现了前向传导(forward)和后向传导(backward)的功能。THCUNN则是对应模块的CUDA实现。 THNN & THCUNN 我们通过几个例子具体看一下几种模块是怎么实现的。 Tanh 首先从最简单的激活层开始看,以 tanh​ 为代表,代码在THN

Xixoqw的博客 1164

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

浅析BP神经网络

谈起bp神经网络,很多人都非常熟悉,以前我也只是单纯的调包使用,后来由于课程需要,从原理入手,开始慢慢理解bp算法。 1、激活函数 首先谈一谈激活函数。激活函数有很多种,比较常见的有符号函数,ReLU函数,Sigmoid函数,Softmax函数等。实际上激活函数就是模拟大脑神经元的响应,而最简单的单层单个神经元构成的就是感知机。符号函数与ReLU函数在此不多赘述,主要讲一下Sigmo...

qq_41378429的博客 1277

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

BP神经网络的浅析

BP神经网络的浅析

m0_63738740的博客 270

浅析深度机器学习的原理

深度学习是一种模拟人类大脑神经网络模型的机器学习技术,其主要特点是多层神经网络结构。深度学习主要用于处理大型数据集,并尝试从中提取高级抽象特征来进行分类、识别和决策。

1041

卷积神经网络(CNN)之代数浅析

本文试着从代数学的角度对CNN进行一些浅显易懂的解析,希望能为读者带来一些启发。

几何算法、图形图像底层算法与工业视觉系统 2443

rnn按时间展开_浅析循环神经网络(RNN)的反向求导过程

之前通俗写了三篇RNN一点基础知识,忆臻:一文搞懂RNN(循环神经网络)基础篇​zhuanlan.zhihu.com忆臻:循环神经网络(RNN)为什么能够记忆历史信息​zhuanlan.zhihu.com忆臻:浅析循环神经网络RNN的两种应用​zhuanlan.zhihu.com最近让师弟 @徐啸 学一些重要的基础知识,正好也写一下RNN的求导过程,把RNN这个系列完结了。其实本质上来看RNN的反...

weixin_39987313的博客 301

浅析网络梯度弥散与梯度爆炸

浅析网络梯度弥散与梯度爆炸 待续

nini_coded的博客 423

机器学习(十二):深度神经网络浅析

先阐述一些概念性的东西(也是对之前的东西的回顾,记性不好,老忘): 回归问题与分类问题: 回归:计算圆形面积的例子就属于回归问题,即我们的目的是对于一个输入x,预测其输出值y,且这个y值是根据x连续变化的值。 分类:分类问题则是事先给定若干个类别,对于一个输入x,判断其属于哪个类别,即输出一般是离散的 监督学习和无监督学习: 监督学习:通过训练让机器自己找到特征和标签之间的联系(注:也就...

u010824946的专栏 749

【AI基础篇】微积分在AI中的核心作用与应用浅析

其中,微积分扮演着至关重要的角色,它不仅是理解和构建大多数AI算法的理论基础,更是驱动模型学习与优化的核心引擎。从最基础的梯度下降优化,到复杂的生成模型和强化学习策略,微积分的语言无处不在。反向传播正是巧妙地、系统性地应用链式法则,从网络的输出层开始,逐层向后计算梯度,最终得到损失函数对每一层参数的梯度。,直到损失函数收敛。AI模型的训练过程,本质上是在一个由模型参数构成的、极其高维的空间中,寻找一个能使损失函数。梯度下降是AI中最普及的优化算法,其目标是通过迭代更新参数,逐步逼近损失函数的最小值。

EscaRC的博客 930
上一篇: 回归问题实战一
下一篇: 机器学习初识
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值