首页 > 编程语言 >深度学习梯度下降算法,链式法则,反向传播算法

深度学习梯度下降算法,链式法则,反向传播算法

时间:2024-08-15 14:54:18浏览次数:17  
标签:链式法则 tensor 梯度 torch 传播 算法 参数

多层神经网络的学习能力比单层网络强得多。想要训练多层网络,需要更强大的学习算法。误差反向传播算法(Back Propagation)是其中最杰出的代表,它是目前最成功的神经网络学习算法。现实任务使用神经网络时,大多是在使用 BP 算法进行训练,值得指出的是 BP 算法不仅可用于多层前馈神经网络,还可以用于其他类型的神经网络。通常说 BP 网络时,一般是指用 BP 算法训练的多层前馈神经网络。

这就需要了解两个概念: 1. 正向传播 2. 反向传播

梯度下降算法回顾

梯度下降法简单来说就是一种寻找使损失函数最小化的方法。大家在机器学习阶段已经学过该算法,所以我们在这里就简单的回顾下,从数学上的角度来看,梯度的方向是函数增长速度最快的方向,那么梯度的反方向就是函数减少最快的方向,所以有:

其中,η是学习率,如果学习率太小,那么每次训练之后得到的效果都太小,增大训练的时间成本。如果,学习率太大,那就有可能直接跳过最优解,进入无限的训练中。解决的方法就是,学习率也需要随着训练的进行而变化。

在进行模型训练时,有三个基础的概念: 1. Epoch: 使用全部数据对模型进行以此完整训练 2. Batch: 使用训练集中的小部分样本对模型权重进行以此反向传播的参数更新 3. Iteration: 使用一个 Batch 数据对模型进行一次参数更新的过程

实际上,梯度下降的几种方式的根本区别就在于 Batch Size不同,,如下表所示:

注:上表中 Mini-Batch 的 Batch 个数为 N / B + 1 是针对未整除的情况。整除则是 N / B。

假设数据集有 50000 个训练样本,现在选择 Batch Size = 256 对模型进行训练。

每个 Epoch 要训练的图片数量:50000 训练集具有的 Batch 个数:50000/256+1=196 每个 Epoch 具有的 Iteration 个数:196 10个 Epoch 具有的 Iteration 个数:1960

前向和反向传播

利用反向传播算法对神经网络进行训练。该方法与梯度下降算法相结合,对网络中所有权重计算损失函数的梯度,并利用梯度值来更新权值以最小化损失函数。在介绍BP算法前,我们先看下前向传播与链式法则的内容。

前向传播指的是数据输入的神经网络中,逐层向前传输,一直到运算到输出层为止。

在网络的训练过程中经过前向传播后得到的最终结果跟训练样本的真实值总是存在一定误差,这个误差便是损失函数。想要减小这个误差,就用损失函数 ERROR,从后往前,依次求各个参数的偏导,这就是反向传播(Back Propagation)。

链式法则

反向传播算法是利用链式法则进行梯度求解及权重更新的。对于复杂的复合函数,我们将其拆分为一系列的加减乘除或指数,对数,三角函数等初等函数,通过链式法则完成复合函数的求导。为简单起见,这里以一个神经网络中常见的复合函数的例子来说明这个过程. 复合函数

标签:链式法则,tensor,梯度,torch,传播,算法,参数
From: https://blog.csdn.net/DGFfdAf/article/details/141222087

相关文章

  • 代码随想录算法训练营第43天:动态规划part10:子序列问题
    300.最长递增子序列力扣题目链接(opensnewwindow)给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2......
  • 【MATLAB源码-第138期】基于matlab的D2D蜂窝通信仿真,对比启发式算法,最优化算法和随机
    操作环境:MATLAB2022a1、算法描述D2D蜂窝通信介绍D2D蜂窝通信允许在同一蜂窝网络覆盖区域内的终端设备直接相互通信,而无需数据经过基站或网络核心部分转发。这种通信模式具有几个显著优点:首先,它可以显著降低通信延迟,因为数据传输路径更短;其次,由于减少了基站的中转,可以提高......
  • Day30 贪心算法part4
    目录任务452.用最少数量的箭引爆气球思路435.无重叠区间思路763.划分字母区间思路任务452.用最少数量的箭引爆气球有一些球形气球贴在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i]=[xstart,xend]表示水平直径在xstart和xend之间的......
  • 算法中的大O记法
    目的我们常需要描述特定算法相对于n(输入元素的个数)需要做的工作量。在一组未排序的数据中检索,所需的时间与n成正比;如果是对排序数据用二分检索,花费的时间正比于logn。排序时间可能正比于n2或者nlogn。我们需要有一种方式,用它能把这种说法弄得更精确,同时又能排除掉其中的一些......
  • 二分图最大匹配(匈牙利算法)
    二分图最大匹配(匈牙利算法)算法思路寻找增广路即一条以选中边开始,以选中边结束的路,它有一个重要的性质:选中边比未选中边多一.只需要不断贪心的找增广路,直到不存在为止具体实现以dfs(深度优先)为例1.从左部1号开始搜寻增广路2.令当前点编号为x遍历右部与x相连的点3.若当前......
  • NRBO-BP-Adaboost回归 基于牛顿拉夫逊算法优化BP神经网络-Adaboost多变量回归预测(多
    NRBO-BP-Adaboost回归基于牛顿拉夫逊算法优化BP神经网络-Adaboost多变量回归预测(多输入单输出)程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel!需要其他的都可以定制!1️⃣、运行环境要求MATLAB版本为2019b及其以上2️⃣、评价指标包括:R2、MAE、MSE、RPD、RMSE......
  • 冒泡排序算法
    C++实现冒泡排序算法:#include<iostream>usingnamespacestd;voidbubbleSort(intarr[],intn){for(inti=0;i<n-1;i++){for(intj=0;j<n-i-1;j++){if(arr[j]>arr[j+1]){//交换arr[j]和arr[j+1]inttemp=arr[j];arr[j]=arr[j+1];......
  • 【算法模板】计算几何:旋转卡壳求凸包直径
    旋转卡壳算法是一种几何算法,主要用于在二维平面上求解与凸包相关的最优问题。该算法利用凸包顶点的顺序性和对称性,通过模拟两个卡壳(calipers)沿着凸包边界的旋转来寻找最优解。常见的应用包括计算凸包的直径(即最远点对之间的距离)、最小包围矩形(最小面积矩形),以及最小宽度(宽度......
  • 操作系统-进程创建、同步与锁、通信、调度算法-学习笔记
    1.进程的基础概念1.1进程是什么?定义:进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间,拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源(如CPU时间、内存等)并管理任务的执行。进程vs程序:程序:静态的代......
  • [插电式混合动力车辆][交替方向乘子法(ADMM)结合CVX]插电式混合动力车辆的能源管理:基于
     ......