一文让你理清导数、方向导数、梯度向量之间的关系~

参考文献:

https://arrow.blog.csdn.net/article/details/86583789?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

https://blog.csdn.net/blogshinelee/article/details/102668951?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

https://blog.csdn.net/youhuakongzhi/article/details/80565176

最近在学习自适应滤波器的梯度下降法,发现对里面反复运用的梯度向量的理解并不是很深刻。看了几篇文章,尝试用自己的理解写了一下,在各位大佬的带领下,算是有一些领悟了。
本文从一元函数、多元函数的角度,去阐述其变化率的问题。旨在能够阐述对导数、方向导数、偏导数的理解。

函数是为描述两个或多个变量间变化的关系。以y=f(x)为例,x的变化将引起y的变化,当x变化了变化量Δx时,y变化了变化量Δy。当变化量很小,趋近于零时,称为瞬时变化量dx、dy。
导数描述了函数的变化率,即变化的剧烈程度。

一、 一元函数

一元函数的导数,为切线斜率。切线越陡峭,斜率越大。导数为正,函数随自变量的增大而增大。反之,随之减小。其梯度,即为一元函数的导数。
一元函数的导数与梯度,只有大小,没有方向,是标量。这是由于函数只有一个自变量,y只沿着自变量x坐标轴发生变化。导数越大,函数值随着自变量的变化越剧烈。
本质上,一元函数只涉及到函数值随一个自变量的变化而变化的情况,其导数、偏导、方向导数和梯度均是一个东西。

二、 多元函数

2.1 偏导数

多元函数的偏导数,是将多元函数“视作”一元函数求得的。例如,求解二元函数z=f(x,y)对y的偏导时,会将x视作常数。描述的是函数沿着自变量y坐标轴方向的变化率。

下面从几何层面阐述偏导数的物理意义。二元函数z=f(x,y)对应三维坐标系中的曲面。如下图所示,
在这里插入图片描述
是平面y=C(C为常数)与曲面z=f(x,y)两个面交线的导数(切线斜率),是函数沿着x坐标轴方向上的(方向)导数。
在这里插入图片描述

同理,z对y的偏导数是函数沿着y坐标轴方向的(方向)导数。
在这里插入图片描述

2.2 方向导数

自然而然的,上述z=f(x,y)可以沿x轴方向、y轴方向变化,是不是也可以沿着其它任意直线方向变化呢?答案是肯定的。而衡量函数沿着某一方向变化的快慢的物理量就是方向导数。
在这里插入图片描述

方向导数是,某一方向的垂直平面截线的斜率。而偏导数是,平行于x/y坐标轴的垂直平面的截线斜率。

在这里插入图片描述

如上图所示,在xy平面上,有一点P(a,b),红色的箭头为单位向量u(cosθ,sinθ)。给定了P点与向量u,相当于确定了自变量的初值与前进方向。
对于曲面z=f(x,y)上的点,由点(a,b,f(a,b))沿着单位向量u方向出发,设走了t个单位长度后到达点(a+tcosθ,b+tsinθ,f(a+tcosθ,b+tsinθ))。则,函数z在点(a,b)处,沿θ方向/沿单位向量u方向的方向导数为
在这里插入图片描述

其中, 在这里插入图片描述
为梯度向量,是偏导数组成的向量。由上可知,(1)方向导数是偏导数的线性组合,系数为在这里插入图片描述
。(2)偏导数是沿坐标轴方向的方向导数。

2.3 梯度向量

接上继续推导,函数在点(a,b)处,沿θ方向的方向导数为
在这里插入图片描述

可以直观看出,当方向导数取最大值时,θ=0,方向导数沿梯度方向,值为 。当方向导数取最小值时,θ=pi,方向导数沿负梯度方向,值为 在这里插入图片描述

理解梯度向量,按照向量的方向和大小理解。梯度是由偏导数构成的向量,梯度向量的方向为方向导数取最大值的方向,大小为此时方向导数的大小。
举个例子来理解由偏导数组成的梯度向量的方向是变化率最大的方向。假设函数z=f(x,y),有一个人在曲面上的点P(x=a,y=b,z=c),想要选择一个最抖的方向上山,即要找方向导数最大值对应的方向。由于x,y自变量张成了一个二维平面,他可以选择xy平面上的任意方向。此时,将函数对x求偏导,可得一个值。对y求偏导,可得一个值。最终选择的梯度方向,即 在这里插入图片描述
的方向,是综合考虑了函数沿x方向和沿y方向的变化率的大小,对其进行加权得到的。根据平行四边形准则,若沿x方向的变化率大一些,则最终合成的方向会偏向x方向一些,若沿y方向变化率大,合成方向会偏向y方向一些。若沿x、y方向的变化率一致,则θ正好取45°。
梯度向量的一个重要特征是与等高线垂直。等高线,如其名所示,这条曲线上的函数值是相等的。推导如下:
设z=f(x,y)=C,为一条等高线。对其两边进行全微分,可得
在这里插入图片描述

即,梯度向量在这里插入图片描述
与在曲线上的的微小变化量垂直,可理解为梯度向量垂直于等高线,指向函数上升最快的方向。

最后,总结一下:
(1) 导数都是为了衡量函数的变化快慢的。无论是偏导数、方向导数,均是如此。
(2) 对于多元函数,偏导数是函数沿自变量坐标轴方向的导数/方向导数,方向导数是函数沿某一方向的导数,偏导数的线性组合,系数为在这里插入图片描述
。梯度向量是偏导数组成的向量,其方向是方向导数取得最值的方向,垂直于等高线,指向函数上升最快的方向,大小是方向导数的最大值。

### Milvus 向量数据库入门教程 #### 一、基本概念与功能概述 Milvus 是一款专为处理非结构化数据设计的强大向量数据库,旨在解决复杂语义关系和高维向量数据的相似性检索问题[^1]。相比于传统的关系型数据库,Milvus 提供了更加智能化和高效的检索方式,适用于需要语义理解和多模态处理的应用场景。 #### 二、安装与环境配置 对于初学者来说,推荐使用 **Milvus Lite** 版本进行本地 Python 程序开发。该版本非常适合初次接触 Milvus 的用户,因为它简单易用且无需复杂的部署流程[^2]。而对于更大规模的数据集或生产环境中,则建议考虑 Docker 或 Kubernetes 部署方案。这些高级部署模式不仅提供了更高的灵活性,还保持了 API 的一致性,使得迁移变得轻松便捷。 #### 三、核心操作指南 ##### 创建集合 (Collection) 在开始之前,首先要定义并创建一个新的集合用于存储向量数据: ```python from pymilvus import CollectionSchema, FieldSchema, DataType, connections, utility connections.connect("default") fields = [ FieldSchema(name="id", dtype=DataType.INT64, is_primary=True), FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128) ] schema = CollectionSchema(fields, description="Example collection") collection = Collection(name="example_collection", schema=schema) ``` ##### 插入数据 接着可以往刚刚建立好的集合里插入一些测试数据: ```python import numpy as np data = [ [i for i in range(10)], # id field data [[np.random.rand() * 0.5 for _ in range(128)] for _ in range(10)] # embedding vectors ] mr = collection.insert(data) print(f"Number of entities inserted: {len(mr.primary_keys)}") ``` ##### 构建索引 为了提高查询效率,在实际应用中通常会对特定字段构建索引来加速搜索速度。这里以 HNSW 索引为例展示如何设置参数并创建索引: ```python index_params = { "index_type": "HNSW", "metric_type": "L2", "params": {"M": 16, "efConstruction": 64} } collection.create_index(field_name="embedding", index_params=index_params) ``` ##### 执行搜索 最后一步就是利用已有的索引来进行高效地向量相似度匹配查找: ```python search_param = {"metric_type": "L2", "params": {"ef": 10}} results = collection.search( data=[[0.1]*128], param=search_param, limit=3, expr=None, output_fields=["id"] ) for result in results: print(result) ``` 以上便是关于 Milvus 向量数据库的基础入门指导,涵盖了从安装到执行具体任务所需的各个重要环节[^3][^4].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值