训练深度学习模型的过程

news2024/11/29 8:57:49

深度学习的训练过程是指通过大量的数据来调整神经网络的参数,以使其能够对输入数据进行准确的预测或分类.

训练神经网络的步骤

损失函数(Loss Function)是一个性能指标,反映神经网络生成接近期望值的值的程度。 损失函数直观上就是期望输出与实际输出之间的差异。 机器学习的目标是最小化损失函数。 因此,机器学习的问题就变成了最小化损失函数的问题。

梯度下降和反向传播算法的组合用于训练神经网络,即最小化总损失函数

总体步骤是

  1. 通过网络前向传播数据点得到输出
  2. 使用损失函数计算总误差
  3. 使用反向传播算法计算损失函数相对于每个权重和偏差的梯度
  4. 使用梯度下降更新每一层的权重和偏差
  5. 重复上述步骤以最小化总误差。

因此,一句话我们本质上是通过网络中的连接逐层向后传播总误差,计算每个层中每个权重和偏差对总误差的贡献(梯度),然后使用梯度下降算法进行优化 权重和偏差,并最终最小化神经网络的总误差。

 

  1. 训练数据(Train Data):指用于训练模型的数据集,通常包含输入样本和对应的标签(如果是监督学习任务)。训练数据的质量和数量直接影响模型的性能和泛化能力。

  2. 损失函数(Loss Function):用于衡量模型在训练数据上的预测结果与真实标签之间的差异。损失函数的设计旨在使模型能够尽量减小预测误差,常见的损失函数包括均方误差(Mean Squared Error)、交叉熵(Cross Entropy)等。

  3. 学习算法(Learning Algorithm):指用于更新模型参数以最小化损失函数的算法。在深度学习中,常用的学习算法是梯度下降(Gradient Descent)及其变体,通过计算损失函数对模型参数的梯度,并沿着梯度的反方向更新参数,以逐步降低损失函数的值。

  4. 误差(Error):指模型在训练数据上的预测结果与真实标签之间的差异,通常使用损失函数来度量。

  5. 优化器(Optimizer):在梯度下降算法中,优化器负责根据损失函数的梯度更新模型参数。常见的优化器包括随机梯度下降(Stochastic Gradient Descent,SGD)、Adam、RMSProp等,它们具有不同的优化性能和收敛速度。

前向传递和后向传递 

前向传递(Forward Pass)

前向传递基本上是一组将网络输入转换为输出空间的操作。 在推理阶段,神经网络仅依赖于前向传递。 让我们考虑一个具有 2 个隐藏层的简单神经网络。它尝试将二进制数分类为偶数或奇数, 这里我们假设除了最后一层的神经元之外,每个神经元都使用ReLU激活函数(最后一层使用softmax)。

第一层第一个神经元:

第一层第二个神经元:

将其重写为矩阵形式我们将得到:

反向传播(Backward Pass)

如果我们完成所有计算,我们最终会得到一个输出,这实际上是不正确的(因为 0.56 > 0.44 我们输出 Even 作为结果)。 因此,知道这一点后,我们想要更新神经元权重和偏差,以便得到正确的结果。 这正是反向传播发挥作用的地方。 反向传播是一种计算每个网络变量(神经元权重和偏差)的误差梯度的算法。 这些梯度随后用于优化算法,例如梯度下降,它会相应地更新它们。 权重和偏差更新的过程称为向后传递。

为了开始计算误差梯度,首先,我们必须计算误差(即损失)本身。 我们将使用标准分类损失——交叉熵。 然而,损失函数可以是任何可微分的数学表达式。 回归问题的标准选择是均方根误差 (RMSE)。 交叉熵损失如下所示:

其中 M 是类的数量,p 是网络输出的向量,y 是真实标签的向量。

链式法则(Chain Rule)和偏导数(Partial Derivatives)回顾


因此,我们可以将神经网络的训练过程视为反向传播和梯度下降的组合。 这两种算法可以通过理解链式法则和偏导数来解释。

链式法则


链式法则是计算复合函数导数的公式。 复合函数是由其他函数内部的函数组成的函数。 给定复合函数 f(x) = h(g(x)),f(x) 的导数由链式法则给出:

您还可以将这个想法扩展到两个以上的函数。 例如,对于由三个函数 A、B 和 C 组成的函数 f(x),我们有 f(x) = A(B(C(x)))

链式法则告诉我们该函数的导数等于:

梯度下降(Gradient Descent)和偏导数(Partial Derivatives)


梯度下降是一种迭代优化算法,用于寻找函数的局部最小值或全局最小值。 该算法使用以下步骤进行工作

我们从函数图上的一点开始
我们从该点找到函数下降最快的方向
我们(沿着该方向指示的路径向下)一小步到达新点
直线在特定点的斜率由其导数表示。 然而,由于我们关注两个或多个变量(权重和偏差),因此我们需要考虑偏导数。 因此,梯度是存储多变量函数的偏导数的向量。 它帮助我们计算具有多个自变量的函数在曲线上特定点的斜率。 我们需要考虑偏导数,因为对于复杂(多变量)函数,我们需要确定每个单独变量对整体导数的影响。 考虑两个变量 x 和 z 的函数。 如果我们改变 x,但保持所有其他变量不变,我们就会得到一个偏导数。 如果我们改变 z,但保持 x 不变,我们会得到另一个偏导数。 该组合代表多变量函数的全导数。

因此,整个神经网络的训练可以看作是链式法则和偏导数的结合

整体观


回顾一下,从整体来看——我们有错误的起点,即损失函数。 该图显示了遵循此模式的反向传播错误的过程:
输入 -> 前向调用 -> 损失函数 -> 导数 -> 误差反向传播。 在每个阶段,我们都会得到该阶段权重的增量。 如下图所示,W1 = 3,w2 = 1

其它

如何理解梯度下降法?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件实例分享,洗车店系统管理软件会员卡电子系统教程

软件实例分享,洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…

cool Node后端 中实现中间件的书写

1.需求 在node后端中,想实现一个专门鉴权的文件配置,可以这样来解释 就是 有些接口需要token调用接口,有些接口不需要使用token 调用 这期来详细说明一下 什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理&#xf…

vivado 使用块综合策略

使用块综合策略 概述 AMD Vivado™合成具有许多策略和全局设置,您可以使用这些策略和设置自定义设计的合成方式。此图显示了可用的预定义策略在“合成设置”和“表:Vivado预配置策略”中提供了一个并排的战略设置的比较。您可以使用RTL或中的属性或XDC…

Bitcoin Bridge:治愈还是诅咒?

1. 引言 主要参考: Bitcoin Bridges: Cure or Curse? 2. 为何需关注Bitcoin bridge? 当前的Bitcoin bridge,其所谓bridge,实际是deposit: 在其它链上的BTC情况为: 尽管当前约有43.7万枚BTC在其它链上…

Stable Diffusion主流UI详细介绍

Stable Diffusion目前主流的操作界面有WebUI、ComfyUI以及Fooocus 这里webui和fooocus在人机交互上的逻辑是一样的,fooocus界面更加简洁。 comfyui是在人机交互上是采用流程节点的交互逻辑,和上面略有区别。 界面分别如下: WebUI界面如下 we…

P1990 覆盖墙壁题解

题目 有一个长为N宽为2的墙壁,给你两种砖头:一个长2宽1,另一个是L型覆盖3个单元的砖头。如下图: 0 0 0 00砖头可以旋转,两种砖头可以无限制提供。你的任务是计算用这两种来覆盖N2的墙壁的覆盖方法。例如一个23的墙…

HotCoin Global: 澳洲双牌照持有平台,坚守全球合规之路

前言: 加密交易平台的合规性不仅是相关法规遵守的问题,更是市场透明度和用户公平性的关键。为促使加密市场的交易活动有规范、有秩序地进行,确保加密投资者的资产与交易安全,部分国家明确对加密资产的交易和经营活动进行监督及管…

概率在AI中的应用

更多AI技术入门知识与工具使用请看下面链接: https://student-api.iyincaishijiao.com/t/iNSVmUE8/

Solidworks:剖切模型

剖切模型可以看清模型内部。今天设计了一个模型,试验一下如何剖切。 操作很方便,只需要点击一下零件模型上方的剖切按钮,立即就转入剖切视图。剖切后结果如下。 工程图纸中也可以展示剖面视图,操作方法是点击工程图工具页中的“…

计算机组成原理:存储系统【二】

🌈个人主页:godspeed_lucip 🔥 系列专栏:计算机组成与原理基础 🛰️1 Cache概述🛩️1.1 局部性原理🛫1.1.1 空间局部性🛫1.1.2 时间局部性 🛩️1.2 性能指标&#x1f6eb…

探索IDE的世界:什么是IDE?以及适合新手的IDE推荐

引言 在编程的世界里,集成开发环境(IDE)是我们日常工作的重要工具。无论是初学者还是经验丰富的开发者,一个好的IDE都能极大地提高我们的编程效率。那么,什么是IDE呢?对于新手来说,又应该选择哪…

【C++】内存五大区详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

MySQL表的基础操作

创建表 create table 表名(列名 类型,列名 类型……) 注意 1.在进行表操作之前都必须选中数据库 2.表名,列名等一般不可以与关键字相同,如果确定相同,就必须用反引号引住 3.可以使用comment来增加字段说…

多模态论文串讲·下【论文精读·49】最近使用 transformer encoder 和 decoder 的一些方法

大家好,我们今天就接着上次多模态串讲,来说一说最近使用 transformer encoder 和 decoder 的一些方法。 1 BLIP:Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 我们要过的第一篇论文…

Linux中alarm/setitimer函数(信号函数)

alarm函数 函数原型: unsigned int alarm(unsigned int seconds); 函数描述:设置定时器(闹钟)。在指定seconds后,内核会给当前进程发送 14)SIGALRM信号。进程收到该信号,默认动作终止。每个进程…

Ubuntu下Anaconda+PyCharm搭建PyTorch环境

这里主要介绍在condapytorch都正确安装的前提下,如何通过pycharm建立开发环境; Ubuntu下AnacondaPyCharm搭建PyTorch环境 系统环境:Ubuntu22.04 conda: conda 23.11.0 pycharm:如下 condapytorch的安装教程介绍,请点击这里&…

代码随想录算法训练营29期|day50 任务以及具体任务

第九章 动态规划part07 70. 爬楼梯 (进阶)import java.util.Scanner; class climbStairs{public static void main(String [] args){Scanner sc new Scanner(System.in);int m, n;while (sc.hasNextInt()) {// 从键盘输入参数,中间用空格隔开…

简单工厂模式-Simple Factory Pattern

原文地址:https://jaune162.blog/design-pattern/simple-factory-pattern/ 简介 简单工厂模式是一种非常常用的设计模式,但是并不属于GoF中的23种设计模式。简单设计模式有很多种实现方式。 本文我们就来讨论简单工厂模式的实现方式,以及如何借助Spring实现一个扩展性很好…

寒假作业-day11

1>编程实现二维数组的杨辉三角 2>编程实现二维数组计算每一行的和以及列和 3>编程实现二维数计算第二大值 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<string.h>void yanghui(int n){int arr[n][n];for (int i 0; i <…

分享个CSDN自定义模块模板

在开了会员或升级为博客专家后&#xff0c;才有这个自定义模块的权限 当然这也是为了有很多粉丝的博主更方便的推广一些业务场景展示的橱窗 自定义模块管理 下面就列下我使用的自定义模块相关的代码 <marquee><b><font color"#8A2BE2">不</…