Python 全栈体系【四阶】(十七)

第五章 深度学习

请添加图片描述

一、基本理论

3. 深度神经网络训练法则

3.1 损失函数
3.1.1 什么是损失函数?

损失函数(Loss Function),也有称之为代价函数(Cost Function),用来度量预测值和实际值之间的差异

3.1.2 损失函数的作用

度量决策函数 f ( x ) f(x) f(x) 和实际值之间的差异。

作为模型性能参考。损失函数值越小,说明预测输出和实际结果(也称期望输出)之间的差值就越小,也就说明我们构建的模型越好。学习的过程,就是不断通过训练数据进行预测,不断调整预测输出与实际输出差异,使得损失值最小的过程。

3.1.3 常用损失函数

均方误差(Mean square error)损失函数。均方误差是回归问题常用的损失函数,它是预测值与目标值之间差值的平方和,其公式和图像如下所示:

请添加图片描述

  • 为什么使用误差的平方
    • 曲线的最低点是可导的
    • 越接近最低点,曲线的坡度逐渐放缓,有助于通过当前的梯度来判断接近最低点的程度(是否逐渐减少步长,以免错过最低点)

在这里插入图片描述
交叉熵(Cross Entropy)。交叉熵是 Shannon 信息论中一个重要概念,主要用于度量两个概率分布间的差异性信息,在机器学习中用来作为分类问题的损失函数。假设有两个概率分布, t k t_k tk y k y_k yk,其交叉熵函数公式及图形如下所示:
请添加图片描述

3.2 梯度下降
3.2.1 什么是梯度

梯度(gradient)是一个向量(矢量,有方向),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大。损失函数沿梯度相反方向收敛最快(即能最快找到极值点)。当梯度向量为零(或接近于零),说明损失函数到达一个极小值点,模型准确度达到一个极大值点。

请添加图片描述

3.2.2 梯度下降

通过损失函数,我们将“寻找最优参数”问题,转换为了“寻找损失函数最小值”问题。寻找步骤:
(1)损失是否足够小?如果不是,计算损失函数的梯度。
(2)按梯度的反方向走一小步,以缩小损失。
(3)循环到(1)。
这种按照负梯度不停地调整函数权值的过程就叫作**“梯度下降法”**。通过这样的方法,改变每个神经元与其他神经元的连接权重及自身的偏置,让损失函数的值下降得更快,进而将值收敛到损失函数的某个极小值。

3.2.3 导数与偏导数

导数的定义

  • 所谓导数,就是用来分析函数“变化率”的一种度量。其公式为:
    在这里插入图片描述

导数的含义:反映变化的剧烈程度(变化率)
请添加图片描述
偏导数

  • “偏导”的英文本意是“partial derivatives“(表示局部导数)。对于多维变量函数而言,当求某个变量的导数时,就是把其他变量视为常量,然后对整个函数求其导数(相比于全部变量,这里只求一个变量,即为“局部”)。例如有函数:
    请添加图片描述
3.2.4 学习率

学习率是梯度下降过程中,在梯度值前面的系数,用来控制调整的步幅大小。
请添加图片描述

3.2.5 梯度递减训练法则

神经网络中的权值参数是非常多的,因此针对损失函数 E 的权值向量的梯度如以下公式所示:
在这里插入图片描述
在这里插入图片描述
表示损失函数 E 的梯度,它本身也是一个向量,它的多个维度分别由损失函数 E 对多个权值参数 w i w_i wi求偏导所得。当梯度被解释为权值空间中的一个向量时,它就确定了 E 陡峭上升的方向,那么梯度递减的训练法则就如下公式所示:
请添加图片描述

3.2.6 梯度下降算法
3.2.6.1 批量梯度下降

批量梯度下降法(Batch Gradient Descent,BGD)是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新。

优点:

  • 一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
  • 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD 一定能够得到全局最优。

缺点:

  • 当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。
3.2.6.2 随机梯度下降

随机梯度下降法(Stochastic Gradient Descent,SGD)每次迭代使用一个样本来对参数进行更新,使得训练速度加快。

优点:

  • 由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。

缺点:

  • 准确度下降。由于即使在目标函数为强凸函数的情况下,SGD 仍旧无法做到线性收敛。
  • 可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
  • 不易于并行实现。
3.2.6.3 小批量梯度下降

小批量梯度下降(Mini-Batch Gradient Descent, MBGD)是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代使用指定个(batch_size)样本来对参数进行更新。

优点:

  • 通过矩阵运算,每次在一个 batch 上优化神经网络参数并不会比单个数据慢太多。
  • 每次使用一个 batch 可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。

缺点:

  • batch_size 的不当选择可能会带来一些问题。
3.2.7 几种梯度下降算法收敛比较

批量梯度下降稳健地向着最低点前进的

随机梯度下降震荡明显,但总体上向最低点逼近

小批量梯度下降位于两者之间

在这里插入图片描述

3.3 反向传播算法
3.3.1 什么是正向传播网络

前一层的输出作为后一层的输入的逻辑结构,每一层神经元仅与下一层的神经元全连接,通过增加神经网络的层数虽然可为其提供更大的灵活性,让网络具有更强的表征能力,也就是说,能解决的问题更多,但随之而来的数量庞大的网络参数的训练,一直是制约多层神经网络发展的一个重要瓶颈

3.3.2 什么是反向传播

反向传播(Backpropagation algorithm)全称“误差反向传播”,是在深度神经网络中,根据输出层输出值,来反向调整隐藏层权重的一种方法。

3.3.3 为什么需要反向传播

为什么不直接使用梯度下降而使用反向传播方式更新权重呢?

梯度下降应用于有明确求导函数的情况,或者可以求出误差的情况(比如线性回归),我们可以把它看做没有隐藏层的网络。但对于多个隐藏层的神经网络,输出层可以直接求出误差来更新参数,但隐藏层的误差是不存在的,因此不能对它直接应用梯度下降,而是先将误差反向传播至隐藏层,然后再应用梯度下降。

3.3.4 反向传播算法极简史

1974 年,哈佛大学沃伯斯博士在他的博士论文中,首次提出了通过误差的反向传播来训练人工神经网络,以解决神经网络数量庞大的参数训练问题。但是,沃伯斯的工作并没有得到足够的重视,因为当时神经网络正陷入低潮,可谓“生不逢时”。

1986 年,由杰弗里·辛顿(Geoffrey Hinton)和大卫·鲁姆哈特(David Rumelhart)等人在著名学术期刊 Nature(自然)上发表了论文“借助误差反向传播算法的学习表征(Learning Representations by Back-propagating errors)”,系统而简洁地阐述了反向传播算法在神经网络模型上的应用。反向传播算法非常好使,它直接把纠错的运算量降低到只和神经元数目本身成正比的程度。

后来,沃伯斯得到了 IEEE(电气电子工程师学会)神经网络分会的先驱奖;Geoffrey Hinton 与 Yoshua Bengio、Yann LeCun(合称“深度学习三巨头”)共同获得了 2018 年的图灵奖。

3.3.5 图解反向传播

问题:Tom 在超市买了 2 个苹果,每个 10 元,消费税 10%,请计算应该支付的金额
请添加图片描述
问题:Tom 在超市买了 2 个苹果,每个 10 元,消费税 10%,请计算苹果价格上涨会在多大程度上影响支付金额(即求“支付金额关于苹果的价格的导数”)。设苹果的价格为 x,支付金额为 L,则相当于求 ∂ L ∂ x \frac{\partial L}{\partial x} xL。这个导数的值表示当苹果的价格稍微上涨时,支付金额会增加多少。

请添加图片描述
请添加图片描述
请添加图片描述
苹果价格的导数为 2.2,苹果个数导数为 11,消费税导数为 20,可以解释为:苹果价格、苹果个数或消费税增加相同的值,分别对支付金额产生 2.2 倍、11 倍、20 倍的影响。
请添加图片描述

3.3.6 反向传播计算

考虑函数 y = f(x) , 输出为 E,反向传播的计算顺序是,将信号 E 乘以节点的局部导数(偏导数),传递给前面的节点,这样可以高效地求出导数的值
请添加图片描述
加法节点反向传播计算
请添加图片描述
乘法节点反向传播计算
请添加图片描述

3.3.7 链式求导法则

请添加图片描述
请添加图片描述

3.3.8 案例 1:反向传播计算示例

问题:苹果、橙子价格和个数以及税率如下图所示,利用反向传播算法,在方框处计算填入导数
请添加图片描述
请添加图片描述

3.3.9 案例 2:真实反向传播示例

请添加图片描述

3.4 小结

损失函数

  • 用于度量预测值和期望值之间的差异,根据该差异值进行参数调整

梯度下降

  • 用于以最快的速度、最少的步骤快速找到损失函数的极小值

反向传播算法

  • 用于求隐藏层梯度

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

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

相关文章

html5cssjs代码 029 CSS计数器

html5&css&js代码 029 CSS计数器 一、代码二、解释 该HTML代码定义了一个网页的结构和样式。在头部,通过CSS样式定义了body和h1-h2元素的样式。body元素的样式包括文本居中、计数器重置、字体颜色和背景颜色。h2元素的样式使用了CSS计数器来自动在标题前添加…

RIDE控制台中文显示为乱码问题解决方案【版本1.7.4.1】

1、方法: 将 C:\Users\user_name\AppData\Roaming\Python\Python37\site-packages\robotide\contrib\testrunner\testrunnerplugin.py文件中的第80行修改,改为utf-8 2、修改代码位置: 3、效果: 4、参考文章 试了前面的方法没有…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书,你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…

【C语言】结构体内存对齐问题

1.结构体内存对齐 我们已经基本掌握了结构体的使用了。那我们现在必须得知道结构体在内存中是如何存储的?内存是如何分配的?所以我们得知道如何计算结构体的大小?这就引出了我们今天所要探讨的内容:结构体内存对齐。 1.1 对齐规…

【Redis】Redis常见原理和数据结构

Redis 什么是redis redis是一款基于内存的k-v数据结构的非关系型数据库,读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 redis的数据类型 string:字符串 缓存对象,分布式ID,token,se…

1236 - 二分查找

代码 #include<bits/stdc.h> using namespace std; int a[1100000]; int main() {int n,x,l,r,p,mid,i;cin>>n;for(i1;i<n;i)cin>>a[i];cin>>x;l1;rn;p-1;while(l<r){mid(rl)/2;if(a[mid]x){pmid;break;}else if(x<a[mid]) rmid-1;else if(x…

微软聘请了谷歌DeepMind的联合创始人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

​HTTP与HTTPS:网络通信的安全卫士

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…

【高并发服务器 01】—— 基础知识回顾

接下来四周时间&#xff0c;我将会做一个高并发服务器相关的项目。 前置知识&#xff1a;操作系统系统编程、网络编程、基础的数据结构、C语言。 开发环境&#xff1a;VMware虚拟机&#xff1a;Ubuntu 20.04.6 LTS、vscode 今天先回顾一些基础知识。 1.文件与IO 标准IO&#…

Windows下hydra(海德拉/九头蛇)暴力猜解RDP的简单渗透实践

attscker machine&#xff1a;windows10 靶机&#xff1a;windoes server 2003 环境&#xff1a;网络可达 && mstsc开启 hydra字典&#xff1a; 123456 123admin admin123 123Com&#xff08;正确密码&#xff09; 进入hydra目录&#xff0c;字典与hydar.exe同一目录…

MySQL分组查询与子查询 + MySQL表的联结操作

目录 1 MySQL分组查询与子查询 1.1 数据分组查询 1.2 过滤分组 1.3 分组结果排序 1.4 select语句中子句的执行顺序 1.5 子查询 2 MySQL表的联结操作 2.1 关系表 2.2 表联结 2.3 笛卡尔积 2.4 内部联结 2.5 外联结 2.6 自联结 2.7 组合查询 1 MySQL分组查询与子查询…

Python 解析json文件 使用Plotly绘制地理散点图

目录 0、任务说明 1、解析json文件 2、使用Plotly绘制地理散点图 2.1 函数scatter_geo介绍 2.2 官方示例 3、根据json文件数据&#xff0c;准备绘制地理散点图的‘数据结构’ 4、完整代码及运行效果 0、任务说明 json文件中存放了关于地震的地理信息。 使用plotly模块…

Java柠檬班Java全栈自动化课程

Java柠檬班Java全栈自动化课程旨在教授学员Java编程技能与全栈开发知识&#xff0c;包括自动化测试、前端开发和后端开发。学员将学习如何构建完整的应用程序&#xff0c;并掌握自动化测试框架&#xff0c;为职业发展打下坚实基础。 课程大小&#xff1a;14G 课程下载&#x…

流畅的 Python 第二版(GPT 重译)(四)

第二部分&#xff1a;函数作为对象 第七章&#xff1a;函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响&#xff0c;无论人们说什么或想什么。我更熟悉命令式语言&#xff0c;如 C 和 Algol 68&#xff0c;尽管我将函数作为一等对象&#xff0c;但我并不认为 Py…

爬虫基础:Web网页基础

爬虫基础&#xff1a;Web网页基础 前言Web网页基础网页的组成网页的结构节点树及节点间的关系选择器 前言 用浏览器访问不同的网站时&#xff0c;呈现的页面各不相同&#xff0c;你有没有想过为何会这样呢&#xff1f;了解一下网页的组成、结构和节点等内容。了解这些内容有助于…

挖掘网络宝藏:利用Scala和Fetch库下载Facebook网页内容

介绍 在数据驱动的世界里&#xff0c;网络爬虫技术是获取和分析网络信息的重要工具。本文将探讨如何使用Scala语言和Fetch库来下载Facebook网页内容。我们还将讨论如何通过代理IP技术绕过网络限制&#xff0c;以爬虫代理服务为例。 技术分析 Scala是一种多范式编程语言&…

用pdf2docx将PDF转换成word文档

pdf2docx是一个Python模块&#xff0c;可以将PDF文件转换为docx格式的Word文档。 pdf2docx模块基于Python的pdfminer和python-docx库开发&#xff0c;可以在Windows、Linux和Mac系统上运行。它可以从PDF文件中提取文本和图片&#xff0c;并将其转换成可编辑的Word文档&#xf…

分布式游戏服务器

1、概念介绍 分布式游戏服务器是一种专门为在线游戏设计的大型系统架构。这种架构通过将游戏服务器分散部署到多台计算机&#xff08;节点&#xff09;上&#xff0c;实现了数据的分散存储和计算任务的并行处理。每个节点都负责处理一部分游戏逻辑和玩家请求&#xff0c;通过高…

DM-达梦数据库实时主备搭建

dm实时主备说明 将主库产生的 Redo日志传输到备库&#xff0c;备库接收并重演Redo日志&#xff0c;从而实现备库与主库的数据同步。 一、环境准备 1.1、配置环境准备 首先搭建实时主备&#xff0c;要规划好机器的&#xff0c;我准备两台机器服务器 主服务器 mast…

监控系统prometheus+grafana+发送告警信息

1、基础环境准备两台或更多的主机 2、关闭selinux vi /etc/selinux/config&#xff0c;修改SELINUX的值为disabled 3、关闭防火墙 systemctl disable firewalld systemctl stop firewalld 4、prometheus官网下载 https://prometheus.io/download/ 5、grafana官网下载 https…