干货 :数据科学家指南:梯度下降与反向传播算法

2024-04-28 11:38

本文主要是介绍干货 :数据科学家指南:梯度下降与反向传播算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Richmond Alake  翻译:陈之炎  校对:zrx

本文约3300字,建议阅读5分钟
本文旨在为数据科学家提供一些基础知识,以理解在训练神经网络时所需调用的底层函数和方法。

d62f0ba5488cd13436d9bb9ac7eb4b60.png

人工神经网络[ANN)是人工智能技术的基础,同时也是机器学习模型的基础。它们模拟人类大脑的学习过程,赋予机器完成特定类人任务的能力。

数据科学家的目标是利用公开数据来解决商业问题。通常,利用机器学习算法来识别模式,用算法模型实现预测。如何为特定的用例选择正确的模型,并适当地调整参数?这需要对问题和底层算法有清晰的理解,即充分理解问题和算法,确保使用正确模型,并正确解释结果。

本文介绍并解释了梯度下降算法和反向传播算法。人工神经网络利用这些算法学习数据集,当神经网络中数据发生变化时,应如何去修正网络参数。

建立直觉

在深入探讨技术细节之前,首先来看看人类如何学习。

人类大脑的学习过程是复杂的,当前的研究工作只涉及到人类学习方式的表像。然而,已知的研究结果对构建模型非常有价值,与机器不同,在做逻辑预测时,人类无需借助大量的数据来解决问题,人们直接从经验和错误中吸取教训。

人类通过突触可塑性的过程来学习,突触可塑性是一个术语,用来描述在获得新的信息后,如何形成和加强新的神经连接。当人类经历新事件时,大脑中的连接会加强,通过训练人工神经网络,计算出预测的错误率,在此基础上来决策是加强或削弱神经元之间的内部连接。

梯度下降

梯度下降算法是一种标准的优化算法,通常,它是机器学习优化算法的首选算法。首先,来剖析一下术语“梯度下降”,以更好地理解它与机器学习算法之间的关系。

梯度是直线或曲线陡峭程度的量化度量,在数学上,它表示一条直线的上升或下降的方向。下降是指向下走的行为。因此,从这个术语的定义可以得出:梯度下降算法是对向下运动程度的量化。

为了训练一个机器学习算法,需要识别网络中的权重和偏差,这将有助于问题的解决。例如,在分类问题中,当查看图像时,需要确定图像是否为猫或狗。为此,必须构建模型,将需求建模为函数,更具体地说,是成本函数。成本函数又称为损失函数,利用成本函数衡量模型的出错程度。成本函数的偏导数影响模型的权重和偏差。

梯度下降是一种算法,用于搜索使成本函数最小化或准确度最优的那些参数。

神经网络中的成本函数、梯度下降和反向传播

神经网络令人印象深刻,同样令人印象深刻的是:在尚未明确告知要检测的特征的情况下,计算程序能够区分图像和图像中的对象。

把神经网络看作是一个接收输入(数据)的函数,并生成一种输出预测,该函数的变量便是神经元的参数或权重。

因此,神经网络的关键任务是以一种近似或最佳的方式来调整数据集的权重和偏差值。

下图描述了一个简单的神经网络,它接收输入(X1、X2、X3、Xn),将这些输入推送给包含权值(W1、W2、W3、Wn)的神经元。输入和权值经过乘法运算,结果由加法器()求和,激活函数调节该层的最终输出。

c47a8402411be185bfec3bea733faf0b.png

图1:作者创建的浅层神经网络图

为了评估神经网络的性能,需要一种机制来量化神经网络预测值和实际数据样本值之间的差异,从而计算出影响神经网络内权重和偏差的修正因子。

成本函数填补了神经网络的预测值与数据样本的实际值之间的误差距离。

ea40dc4a48cfc1366acf3e975e8f281c.png

图2:神经网络内部连接和预测描述

上图描述了一个简单的密集连接神经元的神经网络结构,它对包含数字0-3的图像进行分类。输出层中的每个神经元都对应一个数字,与神经元连接的激活程度越高,神经元输出的概率就越高,该概率为通过前馈网络的数字与被激活的神经元相关联的概率。

当数字 “3”通过网络前馈时,将为 “3”分类的连接(由图中的箭头表示)分配更高的激活,使得输出与数字“3”神经元关联的概率更大。

负责神经元的激活,即偏差、权重和前一层的激活的组件有不少,这些特定的组件经过迭代修正,使得神经网络在特定的数据集上执行最优操作。

利用“均方误差”成本函数,获取神经网络的误差信息,通过网络的权值和偏差,将这些信息后向传播给神经网络进行更新。

神经网络使用的成本函数示例:

• 均方误差

• 分类交叉熵

• 二进制交叉熵

• 对数损失

在讨论完如何通过一种网络预测技术来提高神经网络的性能之后,下文将集中讨论梯度下降、反向传播和成本函数之间的关系。

图3绘制了x和y轴上的成本函数,该成本函数保存函数参数空间内的全部数值。接下来,让我们来看看神经网络是如何通过成本函数可视化来实现学习,曲线为神经网络参数空间内分布不均匀的权重/参数值。

8e1b7a2da4104e5eba26a2185f80438f.png

图3:可视化之后的梯度下降

上图中的蓝色点表示搜索局部最小值时进行的一个步骤(成本函数中求参数值)。模型成本函数的最低点对应于使成本函数最小的权重值的位置。成本函数越小,神经网络的性能越好。因此,可以根据上图中获取到的信息来修改网络的权重。

梯度下降是一种引导在每个步长中选取接近最小值的算法。

  • 局部最小值:成本函数在指定范围内的最小参数值。

  • 全局最小值:成本函数全域内的最小参数值。

梯度下降算法通过计算可微函数的梯度并沿梯度的相反方向移动,搜索使得局部/全局函数最小化的那个值。

反向传播是通过对影响神经元输出的组件(偏差、权重、激活)进行迭代调整,从而使得成本函数变小的机制。在神经网络的架构中,神经元的输入,包括与前一层神经元的所有连接,决定了它的输出。

反向传播所涉及的关键数学公式是导数的计算。反向传播算法计算成本函数相对于权重、偏差和前一层激活的偏导数,以确定哪些值影响成本函数的梯度。

519f966f894903a9f563ccc2df587000.png

图4:误差的向后传播    图片来源:《深度学习》,第三章,3蓝1棕

通过计算梯度,最小化成本函数,得到一个局部最小值。在每次迭代或训练步长中,根据计算出的梯度对网络的权值以及学习率进行更新,它控制着权值的修改因子。在神经网络的训练阶段,每个步长都重复这个过程。理想情况下,目标是在经过一个步长之后,会更加接近局部最小值。

“反向传播”这个名称来自于进程的字面意思,即“误差的反向传播”,梯度的偏导数对误差进行量化。通过网络向后传播误差,利用最后一层(最接近输出层的层)梯度的偏导数来计算第二层到最后一层的梯度。

利用当前层中前一层的梯度的偏导数确定误差在各层中的传播,一直传播到网络中的第一层(与输入层最近的层)。

小结

这只是一个关于梯度下降算法的入门介绍,梯度下降算法还涉及到数学和微积分知识。

虽然诸如TensorFlow、SciKit-Learn、PyTorch等软件包已经将复杂的训练和优化算法进行了抽象,然而,这并未降低数据科学家和ML从业者充分理解这些智能“黑盒子”幕后细节的要求。

想要了解更多与反向传播算法相关的数学知识吗?以下资源供参考:

  • 神经网络:通过反向传播进行训练

  • 反向传播

  • 反向传播算法的工作原理

通过学习英伟达深度学习研究所的各种课程,深入了解深度学习的世界。

作者:Richmond Alake

Richmond Alake是一名机器学习和计算机视觉工程师,他与各种初创公司合作,利用深度学习模型来解决商业应用程序中的计算机视觉任务。他在技术领域深耕五年,为大型企业集团构建应用程序,并将人工智能技术集成到移动应用程序中。他写了100多篇关于人工智能和机器学习主题的文章,浏览量超过100万次。Richmond认为:机器学习在日常问题中会有功能强大的应用。目前,他正主持多个项目,利用机器学习算法和深度学习模型来解决与人体工程学和社会网络有关的问题。

原文标题:

A Data Scientist's Guide to Gradient Descent and Backpropagation Algorithms

原文链接:

https://developer.nvidia.com/blog/a-data-scientists-guide-to-gradient-descent-and-backpropagation-algorithms/

译者简介:陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。

转自: 数据派THU;

END


版权声明:本号内容部分来自互联网,转载请注明原文链接和作者,如有侵权或出处有误请和我们联系。


合作请加QQ:365242293  

数据分析(ID : ecshujufenxi )互联网科技与数据圈自己的微信,也是WeMedia自媒体联盟成员之一,WeMedia联盟覆盖5000万人群。

622d7a51db8fe23bf41f6edf5b3c10c0.png

这篇关于干货 :数据科学家指南:梯度下降与反向传播算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943163

相关文章

Peter算法小课堂—序列切割

讲序列切割之前,先来个铺垫 高手集训 题目描述: 课程表里有连续的n天可以供你选择,每天都有专题课程。其中第i天的专题趣味程度为h[i]。假设你选择了其中连续的若干天,从第l天到第r天。那么, 训练效果 = h[l]*1 + h[l+1]*2 + ... + h[r]*(r-l+1) 随着训练的深入进行,每天的趣味程度会得到更多倍数的效果。 目前有m种训练方案,每种方案由起始时间和

python 各类型数据保存

原文地址:http://www.cnblogs.com/pzxbc/archive/2012/03/18/2404715.html 在实验过程中,我们会有各种类型的数据产生。为了节约时间,提高效率,通常会将数据进行保存,然后再读取。这里提供一种方式能够保存多种类型的数据。 python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作我们能够将程序中运行的对

M-有效算法

在赛场上,脑子就两个字“二分”,一点思路都没,完全不知道二分谁,怎么二分,从哪入手。隐隐约约也知道要变换公式,可惜没坚持这个想法。脑子里全是把k分离出来,赛后看了题解才知道,应该把x分离出来。当时一直想着x相同,怎么确定,其实根本不用考虑这个,只要满足条件的x有交集,就可以了,这也是解题关键。 #include<iostream>using namespace std;const int N

算法实验 二叉树的创建和前序-中序-后序-层次 遍历

对于二叉树的创建我是利用先序遍历的序列进行创建 可以对于树节点的内容我定义为char型变量 '0'为空,即此处的节点不存在 头文件 Tree.h //链式二叉树的头文件#pragma once#include<iostream>#include<queue>using namespace std;class BinaryTreeNode{public:char data;Bin

关于Nginx的反向代理

1 正向代理和反向代理 关于代理,其实我们大家都用过,其中比较常见的就是翻墙软件,也就是正向代理软件。 1.1正向代理 其原理图主要如下所示: 我们可以看到,通过代理,客户端使用Proxy来访问Server服务器,而隐藏了真实的服务器。其实黑客们常常也是这么做来隐藏真实身份。 1.2 反向代理 其原理图如下所示 由上图我们可以看到,当客户端访问某个服务器的时候,他访问的不

VTK图形算法API:vtkSphereSource,球几何数据

大家好,我是先锋,专注于AI领域和编程技术分享,在这里定期分享计算机编程知识,AI应用知识,职场经验; 本系列介绍VTK图像算法API,后续会介绍VTK项目实践应用,关注我,不错过最新内容。 来源: VTK: vtkSphereSource Class Reference vtkSphereSource,派生自vtkPolyDataAlgorithm,是VTK中用于创建球体几何数据的类。

[数据集][图像分类]杂草分类数据集17509张9类别

数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):17509 分类类别数:9 类别名称:["chineseapple","lantana","negatives","parkinsonia","parthenium","prickly_acacia","rubber_vine","siam_weed","snake_weed"] 每个类别图片数: chi

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体,无需光纤、网线等有线介质,在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号,以极高光频率双向发射接收光信号,实现超高速、高安全、高可靠、低延时的无线光通信,光通信技术作为下一代全新信息技术手段,更适用于物流仓储、立库、装载起吊设备、军工、航空航天等多种场景应用需求。 本文

算法学习笔记(二分图染色)

首先我们需要明确什么是二分图:如果无向图 G = ( V , E ) G = (V, E) G=(V,E)的所有点可以分为两个集合 V 1 、 V 2 V_1、V_2 V1​、V2​,所有的边都在 V 1 V_1 V1​和 V 2 V_2 V2​之间,而 V 1 V_1 V1​或 V 2 V_2 V2​的内部没有边,称 G G G是一个二分图。 直接说结论:如果一个图是二分图,那么它一定没有边数

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测(测试集的准度高才代表good fit); 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一:一共1000个数据(分别为900个1和100个0),850个1和50个0预测准确(一共两类),所以准确率为(850+50)/1000=90%,而对于每一类:1的类为850/900的准确率;而对于0的类: