当前位置: 首页 > news >正文

【深度学习_TensorFlow】梯度下降

写在前面

一直不太理解梯度下降算法是什么意思,今天我们就解开它神秘的面纱


写在中间

线性回归方程


如果要求出一条直线,我们只需知道直线上的两个不重合的点,就可以通过解方程组来求出直线

但是,如果我们选取的这两个点不在直线上,而是存在误差(暂且称作观测误差),这样求出的直线就会和原直线相差很大,我们应该怎样做呢?首先肯定不能只通过两个点,就武断地求出这条直线。

在这里插入图片描述

我们通常尽可能多地使用分布在直线周围的点,也可能不存在一条直线完美的穿过所有采样点。那么,退而求其次,我们希望能找到一条比较“好”的位于采样点中间的直线。那么怎么衡量“好”与“不好”呢?一个很自然的想法就是,求出当前模型的所有采样点上的预测值𝑤𝑥(𝑖) + 𝑏与真实值𝑦(𝑖)之间的差的平方和作为总误差 L \mathcal{L} L,然后搜索一组参数 w ∗ , b ∗ w^{*},b^{*} w,b使得 L \mathcal{L} L最小,对应的直线就是我们要寻找的最优直线。

w ∗ , b ∗ = arg ⁡ min ⁡ w , b 1 n ∑ i = 1 n ( w x ( i ) + b − y ( i ) ) 2 w^*,b^*=\arg\min_{w,b}\frac{1}{n}\sum_{i=1}^{n}\bigl(wx^{(i)}+b-y^{(i)}\bigr)^2 w,b=argminw,bn1i=1n(wx(i)+by(i))2

最后再通过梯度下降法来不断优化参数 w ∗ , b ∗ w^{*},b^{*} w,b

有基础的小伙伴们可能知道求误差的方法其实就是均方误差函数,不懂得可以看这篇文章补充养分《误差函数》 ,我们这篇文章就侧重梯度下降。

梯度下降


函数的梯度定义为函数对各个自变量的偏导数组成的向量。不会的话,翻翻高等数学下册书。

举个例子,对于曲面函数𝑧 = 𝑓(𝑥, 𝑦),函数对自变量𝑥的偏导数记为 ∂ z ∂ x \frac{\partial z}{\partial x} xz,函数对自变量𝑦的偏导数记为 ∂ z ∂ y \frac{\partial z}{\partial y} yz,则梯度∇𝑓为向量 ( ∂ z ∂ x , ∂ z ∂ y ) ({\frac{\partial z}{\partial x}},{\frac{\partial z}{\partial y}}) (xz,yz),梯度的方向总是指向当前位置函数值增速最大的方向,函数曲面越陡峭,梯度的模也越大。

函数在各处的梯度方向∇𝑓总是指向函数值增大的方向,那么梯度的反方向−∇𝑓应指向函数值减少的方向。利用这一性质,我们只需要按照下式来更新参数,,其中𝜂用来缩放梯度向量,一般设置为某较小的值,如 0.01、0.001 等。

x ′ = x − η ⋅ d y d x x'=x-\eta\cdot\frac{\mathrm{d}y}{\mathrm{d}x} x=xηdxdy

结合上面的回归方程,我们就可对误差函数求偏导,以循环的方式更新参数 w , b w,b w,b

w ′ = w − η ∂ L ∂ w b ′ = b − η ∂ L ∂ b \begin{aligned}w'&=w-\eta\frac{\partial\mathcal{L}}{\partial w}\\\\b'&=b-\eta\frac{\partial\mathcal{L}}{\partial b}\end{aligned} wb=wηwL=bηbL

函数实现


计算过程都需要包裹在 with tf.GradientTape() as tape 上下文中,使得前向计算时能够保存计算图信息,方便自动求导操作。通过tape.gradient()函数求得网络参数到梯度信息,结果保存在 grads 列表变量中。

GradientTape()函数

GradientTape(persistent=False, watch_accessed_variables=True)

  • persistent: 布尔值,用来指定新创建的gradient
    tape是否是可持续性的。默认是False,意味着只能够调用一次GradientTape()函数,再次使用会报错

  • watch_accessed_variables:布尔值,表明GradientTape()函数是否会自动追踪任何能被训练的变量。默认是True。要是为False的话,意味着你需要手动去指定你想追踪的那些变量。

tape.watch()函数

tape.watch()用于跟踪指定类型的tensor变量。

  • 由于GradientTape()默认只对tf.Variable类型的变量进行监控。如果需要监控的变量是tensor类型,则需要tape.watch()来监控,否则输出结果将是None

tape.gradient()函数

tape.gradient(target, source)

  • target:求导的因变量

  • source:求导的自变量

import tensorflow as tfw = tf.constant(1.)
x = tf.constant(2.)
y = x * wwith tf.GradientTape() as tape:tape.watch([w])y = x * wgrads = tape.gradient(y, [w])
print(grads)

写在最后

👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!

相关文章:

【深度学习_TensorFlow】梯度下降

写在前面 一直不太理解梯度下降算法是什么意思,今天我们就解开它神秘的面纱 写在中间 线性回归方程 如果要求出一条直线,我们只需知道直线上的两个不重合的点,就可以通过解方程组来求出直线 但是,如果我们选取的这两个点不在直…...

C++使用 auto 自动推断类型

C使用 auto 自动推断类型 在有些情况下, 根据赋给变量的初值, 很容易知道其类型。 例如, 如果将变量的初值设置成了 true,就可推断其类型为 bool。如果您使用的编译器支持 C11 和更高版本,可不显式地指定变量的类型&a…...

【前端面试手撕题】call、bind、new、freeze、浅拷贝

FED11 _call函数 描述 请补全JavaScript代码&#xff0c;要求实现Function.call函数的功能且该新函数命名为"_call"。 <!DOCTYPE html> <html><head><meta charset"UTF-8"><style>/* 填写样式 */</style> </head…...

MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容测评

今天给大家带来了 MacBook Pro 16 M1 Max 升级 macOS Ventura 13.5 兼容 100 挑战赛 的视频&#xff0c;现在充电头再以文章的形式呈现给大家&#xff0c;让大家更清楚、直白的了解这款笔记本在升级系统后的兼容性如何。 MacBook Pro 16 M1 Max 配置了 140W 的 MagSafe 充电口&…...

实现5*5正方形网格x轴和y轴显示对应数值组件封装

实现5*5正方形网格x轴和y轴显示对应数值组件封装 需求&#xff1a;按5*5的正方形网格&#xff0c;根据目标数据的x和y轴值显示对应的文字&#xff0c;实现效果图如下&#xff1a;&#xff08;当前目标数值&#xff1a;x2&#xff0c;y2&#xff09; 代码如下&#xff1a; <…...

基于Matlab实现图像压缩技术(附上完整源码+图像+程序运行说明)

介绍 图像压缩是一种将图像数据压缩以减小文件大小的技术。在数字图像处理中&#xff0c;图像通常以像素阵列的形式表示。对于大型图像文件&#xff0c;传输和存储成本可能很高&#xff0c;因此图像压缩技术变得至关重要。在本文中&#xff0c;我们将介绍一种使用Matlab实现图…...

棒球联盟对于市场发展规划·棒球1号位

棒球联盟对于市场发展规划 1. 棒球联盟市场发展背景分析 在深入探讨棒球联盟市场发展背景之前&#xff0c;我们首先要明确&#xff0c;棒球&#xff0c;作为一种全球流行的体育项目&#xff0c;其在市场上的发展具有相当悠久的历史。棒球文化的起源可以追溯到上个世纪初&#…...

ansible控制主机和受控主机之间免密及提权案例

目录 案例描述 环境准备 案例一--免密远程控制主机 效果展示&#xff1a; 解决方案 1.添加主机 2.通过ssh-key生成密钥对 3.生成ssh-copy-id 4.验证 案例二-----免密普通用户提权 效果展示 解决方案 1.使用普通用户&#xff0c;与案例一 一样&#xff0c;进行发送密钥…...

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…...

Python导出SqlServerl数据字典为excel

sql代码 SELECTtableName D.name ,tableIntroduce isnull(F.value, ),sort A.colorder,fieldName A.name,catogary B.name,bytes A.Length,lengths COLUMNPROPERTY(A.id, A.name, PRECISION),scales isnull(COLUMNPROPERTY(A.id, A.name, Scale), 0),isOrNotNull Cas…...

PB:DDE服务器函数

1、GetCommandDDE() 功 能:得到DDE客户应用发送的命令。 语 法:GetCommandDDE ( string ) 参 数:string:string类型的变量,用于保存DDE客户应用发送的命令。 返回值:Integer。函数执行成功时返回1,发生错误时返回-1。如果string参数的值为NULL, GetCommandDDE()…...

awk经典实战、正则表达式

目录 1.筛选给定时间范围内的日志 2.统计独立IP 案列 需求 代码 运行结果 3.根据某字段去重 案例 运行结果 4.正则表达式 1&#xff09;认识正则 2&#xff09;匹配字符 3&#xff09;匹配次数 4&#xff09;位置锚定&#xff1a;定位出现的位置 5&#xff09;分组…...

Python脚本-时间盲注

BlindBool_get import requests from optparse import OptionParser import threading#存放变量 DBName "" DBTables [] DBColumns [] DBData {} flag You are in #设置重连次数以及将连接改为短连接 #防止因为HTTP连接数过多导致的MAX retries exceeded with …...

面试总结-Redis篇章(十)——Redis哨兵模式、集群脑裂

Redis哨兵模式、集群脑裂 哨兵模式哨兵的作用服务状态监控 Redis集群&#xff08;哨兵模式&#xff09;脑裂解决办法 哨兵模式 为了保证Redis的高可用&#xff0c;Redis提供了哨兵模式 哨兵的作用 服务状态监控 Redis集群&#xff08;哨兵模式&#xff09;脑裂 假设由于网络原…...

el-table那些事

el-table那些事 获取el-table所有勾选的行数据 用于记录工作和日常学习遇到的坑&#xff0c;需求。 vue3element-plusts 获取el-table所有勾选的行数据 1、需要先声明一个ref变量&#xff0c;并赋值给el-table 2、通过el-table提供的getSelectionRows()函数获取选中的"行…...

kubernetes(一)

文章目录 1. k8s架构2. k8s集群搭建 1. k8s架构 2. k8s集群搭建...

计算机网络(6) --- https协议

计算机网络&#xff08;5&#xff09; --- http协议_哈里沃克的博客-CSDN博客http协议https://blog.csdn.net/m0_63488627/article/details/132089130?spm1001.2014.3001.5501 目录 1.HTTPS的出现 1.HTTPS协议介绍 2.补充概念 1.加密 1.解释 2.原因 3.加密方式 对称加…...

(三)Node.js - 模块化

1. Node.js中的模块化 Node.js中根据模块来源不同&#xff0c;将模块分为了3大类&#xff0c;分别是&#xff1a; 内置模块&#xff1a;内置模块由Node.js官方提供的&#xff0c;例如fs、path、http等自定义模块&#xff1a;用户创建的每个.js文件&#xff0c;都是自定义模块…...

502 bad gateway报错

代码在本地运行可以正常访问后端接口&#xff0c;部署服务器报错502。直接检查防火墙状态是否开启&#xff0c;先关闭防火墙试一下。如果是防火墙的原因在打开防火墙&#xff0c;开放需要的端口即可。 1、先查看防火墙状态&#xff1a; systemctl status firewalld2、停止防火…...

Flink学习教程

最近因为用到了Flink&#xff0c;所以博主开了《Flink教程》专栏来记录Flink的学习笔记。 【Apache Flink v1.16 中文文档】 【官网 - Apache Flink v1.3 中文文档】 一、基础 参考链接如下&#xff1a; Flink教程&#xff08;01&#xff09;- Flink知识图谱Flink教程&…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...