梯度,GD梯度下降,SGD随机梯度下降

news2024/11/14 21:26:13

前言

羊了,但是依旧生龙活虎。补补之前落下的SGD算法,这个在深度学习中应用广泛。

梯度(Gradient)

方向导数

在梯度之前,非常重要一个概念:方向导数,这里 u u u n n n维向量,代表一个方向,通过极限的方式定义函数 f f f在方向 u u u上的导数,或者说增长率:

在这里插入图片描述
u u u是标准(正交)单位向量 i i i时(坐标轴方向),方向导数退化为偏导数: ∇ u f ( x ) = f i ′ ( x ) = ∂ f ( x ) ∂ x i \nabla_uf(x)=f_i'(x)=\frac{\partial f(x)}{\partial x_i} uf(x)=fi(x)=xif(x)

任意一个方向导数可以用单位向量的线性组合表示:
在这里插入图片描述
证明:
在这里插入图片描述
这是一个构造性证明,而且由于 f i ′ ( x ) f_i'(x) fi(x)之间线性无关, u i u_i ui应是唯一的。中间用到的高维链式求导法则,其实一定程度上隐含了这种分解性,换而言之,利用偏导的分解性推导出更为一般的方向导数的分解性质

梯度定义

在这里插入图片描述
梯度就是函数对所有单位向量求偏导构成的向量(方向),代表函数 f f f在定义空间 R n R^n Rn中的“增长率”。利用方向导数的定义,以及前面的定理,得 ∇ u f ( x ) = ∇ f ( x ) ⋅ u = ∣ ∣ ∇ f ( x ) ∣ ∣ ∣ u ∣ ∣ c o s α \nabla_uf(x)=\nabla f(x)\cdot u=||\nabla f(x)|||u||cos\alpha uf(x)=f(x)u=∣∣∇f(x)∣∣∣u∣∣cosα
α \alpha α ∇ u f ( x ) \nabla_uf(x) uf(x) u u u的夹角。
不妨设 u u u是单位向量,化简得到方向导数和梯度之间的关系:
∇ u f ( x ) = ∣ ∣ ∇ f ( x ) ∣ ∣ c o s α \nabla_uf(x)=||\nabla f(x)||cos\alpha uf(x)=∣∣∇f(x)∣∣cosα
u = ∇ f ( x ) u=\nabla f(x) u=f(x)时, α = 0 \alpha=0 α=0,得到了最大的方向导数,这意味着,梯度是函数变化最剧烈的方向,是定义在空间 R n R^n Rn中的“增长率”。

梯度下降算法(Gradient Desent Algorithm)

算法思想
如果多元函数 J ( θ ) J(\theta) J(θ)在点 θ \theta θ的邻域内可微,则 θ \theta θ梯度反方向变化, J ( θ ) J(\theta) J(θ)下降得最快。可以通过梯度下降找到函数的局部最小点。

在这里插入图片描述
这里, θ \theta θ通常随机初始化, α \alpha α是学习率。通常的收敛准则为梯度大小小于预定义阈值(这通常意味着已经收敛到一个较平缓的的区域——极值点处)或者达到设置的最大迭代轮数。

在这里插入图片描述

如何计算梯度?
其实,和算偏导一样,只不过逐一对每个变量效率太低了,因而归纳一类变量的特征,进行求导,也就是向量求导、矩阵求导。

eg.线性回归函数:
在这里插入图片描述
学习率
每次迭代朝梯度反方向的移动步长。
学习率越大,收敛越快,但过大会导致无法收敛,可能达到目标只需要一小步,迈大步怎么也无法到达目标;
学习率过小,收敛速度过大,影响模型效率;
因此调一个合适的学习率参数很必要。
在这里插入图片描述

随机梯度下降算法(Stochastic Gradient Descent)

GD在训练集过于庞大时,会产生巨大的计算成本!
在这里插入图片描述
如较为简单的线性回归,梯度计算量和训练集大小 m m m是线性关系。巨额的计算只为移动一小步,这似乎是很不划算的,因此有了随机梯度下降。SGD中参数仅依据一个训练样本进行更新,而不是整个数据集!更新 m m m次!而随机,是指更新选择的样本顺序在每轮迭代中是随机生成。
在这里插入图片描述

SGD在深度学习中的应用

SGD在神经网络中担任优化器的角色,The Optimizer,实际上几乎所有深度学习的优化算法属于SGD一族,遵循以下运作模式:
在这里插入图片描述

batch & epoch

每轮迭代使用的训练样本称为一个批处理,batch;完整使用一遍训练集称为一个epoch,通常epoch大小代表一个sample会进入网络的次数。

learning rate & batch size

SGD的两个重要参数,它们之间的相互作用是微妙的。但实际上多数情况下,我们不需要调参。Adam是一种具有自适应学习率的SGD算法,无需任何参数调优,可以“自调优”。

以上是在Kaggle平台的深度学习入门课程的第三讲部分内容(Stochastic Gradient Descent),并为深入进行讨论,下面是基于Keras的简单神经网络实现以及训练:

构建网络:

from tensorflow import keras
from tensorflow.keras import layers

model = keras.Sequential([
    layers.Dense(512, activation='relu', input_shape=[11]),
    layers.Dense(512, activation='relu'),
    layers.Dense(512, activation='relu'),
    layers.Dense(1),
])

设置Optimizer和loss function:

model.compile(
    optimizer='adam',
    loss='mae',
)

训练:

history = model.fit(
    X_train, y_train,
    validation_data=(X_valid, y_valid),
    batch_size=256,
    epochs=10,
)

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

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

相关文章

EMNLP 22:Bi-Directional Iterative Prompt-Tuning for Event Argument Extraction

总结 文中的前向和后向的思想可以借鉴下。 但总的来看,似乎是通过前向和后向来做的ensemble操作,虽然是在一个模型下,但同时前向和后向概率保证,可能能够使得预测更准确。 任务形式:event argument extraction (EAE)…

Java 读取resources下的文件+读取resource文件/路径

Java 读取resources下的文件 文档来源 三种实现方式 pom.xml <!-- commons-io io的工具包 --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency>…

SSM之Spring(二)

目录 2.3 基于注解管理bean 2.3.1 标记与扫描 2.3.2 基于注解的自动装配 三&#xff1a;AOP 3.1 场景模拟 3.1.1 声明接口 3.1.2 创建实现类 3.1.3 创建带日志功能的实现类 3.1.4 提出问题 3.2 代理模式 3.2.1 概念 3.2.2 静态代理 3.2.3 动态代理 3.2.4 测试 3.3 AO…

ElasticSearch笔记

ELASTICSEARCH笔记 1、安装elastic search dokcer中安装elastic search &#xff08;1&#xff09;下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2&#xff08;2&#xff09;配置 mkdir -p /mydata/elasticsearch/config 创建目…

Hex程序烧写到单片机

一、创建一个Keil代码工程 1、在电脑F盘&#xff08;哪个盘可以随意选择&#xff09;上创建项目工程文件夹Template 2、在Template文件中&#xff0c;创建一个main.c文件 3、进入keil主页面&#xff0c;工具栏project---->New uVision project---->选则第一步的工程文…

【数据结构】时间与空间复杂度

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、算法效率1.1 如何衡量一个算…

【华为上机真题 2022】太阳能板的最大面积

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

ArcGIS基础实验操作100例--实验27细分栅格

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验27 细分栅格 目录 一、实验背景 二、实验数据 三、实验步骤 方法一&#xff1a;使用…

oneblog博客系统 让你的博客实现图片显示的功能

背景 \ 闲来无事&#xff0c;希望捣腾捣腾计算机&#xff0c;玩一玩网络&#xff0c;自己搭一个博客系统。那么在家搭建一个自己的服务器&#xff0c;并且让别人通过你的博客系统与你交流。多么神奇的事情。 在搭建博客系统的过程中&#xff0c;你需要在后台写好文章。但是在上…

网赚不要当苦力,流量变现才是王道

事实上&#xff0c;大多数互联网从业者脑子里只想到一件事。无脑搬砖一个月挣一万多元。不可否认&#xff0c;有这样的副业&#xff0c;但也需要前提条件。你需要在早期阶段努力工作&#xff0c;然后才能分批赚钱。这是两个概念&#xff0c;一开始就听话。 我从来不建议你做那…

leetcode 155. 最小栈-java题解

题目所属分类 辅助栈 或者一个栈 原题链接 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部…

关于gets()与scanf()输入字符串与\0,\n,空格之间的问题

我们都知道输入字符串的话&#xff0c;用gets()函数与scanf()加%s的话都是可以的。同时&#xff0c;一个字符串的结尾默认有一个\0也是老生常谈。 空格 gets() 1. 当gets()碰到空格时就把它当成一个普通的字符来看&#xff0c;没有任何特殊之处可言。 scanf() 1. 如果再输入…

【自学Python】Python特点

Python特点 Python特点教程 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&#xff0c;相比其他语言经常使用英文关键字&#xff0c;其他语言的一些标点符号&#xff0c;它具有比其他语言更有特色语法结构。 Py…

计算机组成原理实验——一、ALU实验

一、实验目的 1.掌握ALU模块的组成和接口&#xff0c;理解ALU的功 能。 2.通过编程调用ALU模块计算斐波那契数。 3.掌握Verilog中多模块编程方法和实现。 二、实验内容 用 Verilog 设计一个算术运算单元 ALU&#xff0c;采 用纯组合逻辑设计&#xff0c;32bit 宽。 利用该 …

2022(终)最后一篇博客—继承和多态

目录 文章目录 一、继承 1.1为什么要继承 1.2继承概念 1.3继承的语法 1.4成员访问 1.5方法访问 1.6初始化代码块 1.7继承方式 二、多态 1.1多态的概念 1.2多态实现条件 1.3动态绑定与静态绑定 1.4向上转型与向下转型 1.5多态的优缺点 1.6需要注意的地方&#x…

【王道操作系统】1.1.2 操作系统的特征(并发、共享、虚拟、异步)

操作系统的特征(并发、共享、虚拟、异步) 文章目录操作系统的特征(并发、共享、虚拟、异步)1.操作系统特征&#xff1a;并发2.操作系统特征&#xff1a;共享3.操作系统特征&#xff1a;虚拟4.操作系统特征&#xff1a;异步操作系统是一种系统软件&#xff0c;但与其它系统软件和…

NXP的mfgtool镜像烧写工具是如何对EMMC进行分区的

本来是想在IMX6ULL板卡上实现u-boot中显示开机logo的功能的&#xff0c;过程中就牵扯出了这几个问题。大概的缘由是修改了u-boot后&#xff0c;想在系统中直接对EMMC中u-boot进行更新&#xff0c;就不用通过SD卡或USB重新烧写了&#xff1b;在更新的时候&#xff0c;又需要知道…

猿如意程序代码生成实践与测试

ChatGPT中国区申请无法直接注册与使用&#xff1b; 使用csdn提供的猿如意效率工具箱提供的chatGPU功能实现智能程序编写实验&#xff1a; 先安装&#xff1a; csdn猿如意下载地址 选择其中的ChatGPT菜单 在右侧窗口中的输入框&#xff0c;可输入问题内容。 &#xff08;1&a…

〖产品思维训练白宝书 - 产品思维认知篇⑥〗- 职场人面临困惑与迷茫应该如何破局?

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Leetcode:459. 重复的子字符串(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 移动匹配法&#xff1a; 原理思路&#xff1a; 利用kmp法&#xff1a; 原理思路&#xff1a; 暴力法&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给定一个非空的字符串 s &#xff0c;检查是否可以…