向量知识

转载于:
http://www.cnblogs.com/mytudousi/archive/2011/10/24/2223052.html


看到向量和矩阵在三维开发中的重要性,我就发现当时在上学的时候学的线性代数是多么重要。高中的时候似乎也学了一点向量。要知道那么重要的话,就不混学分了。再说谁知道现在我会对三维感兴趣,去搞三维呢。

向量和矩阵是三维里面很重要很基础的数据知识。在数学家眼里,向量是一个数字列表,在程序员眼里,向量就是一个数组,而在几何意义上,向量就是一个有方向的值。在理解上,我们通过数字列表和数组可能不太好理解,但通过几何图形,就可能清晰很多。我觉得应该绝大部分人都学过线性代数,只是还能记得多少呗了。

标量

标量是我们日常用的最多的,它是对我们平常所用的数字技术的称谓。例如我们买的菜多少斤,房子多少平。但这些例子不好和向量比较。速度和速率是我们经常拿来比较向量和标量的例子。记得我们高中时候做得物理题吗?是不是那些出题的老师经常拿速度和速率忽悠我们,引我们上当?速度,我们可以说我们正以每小时60千米的速度行驶,而速率就是我们以每小时60千米的速度向东行驶。是的,速率就是在速度的基础上加了个方向。同样向量也是在标量的基础上加了个方向。

向量

我们先从简单的二维向量说起。二维向量就是在二维平面上的一个线段箭头。线段存储了向量的长度,箭头指明了向量的方向。那向量存在什么地方?很遗憾,向量是没有位置信息的,它只有大小和方向。这听起来是不是很不可思议?举个例子就明白了,还是汽车行驶的例子。汽车正以每小时60千米的速度向东行驶,你需要问每小时60千米向东在什么位置吗?你要问了,别人要么认为你是一个哲学家,在思考一个正常人不敢想象的哲学问题,要么你可能被认为是精神出了问题。就向,我们要实现共产主义,这似乎也是一个哲学问题。

这样大家应该明白向量是一个什么东西了。三维向量就是由三个值组成,可以表示物体在三维世界中的位移或方向等。但向量的维数是不定的,但到四维的时候,我就没有办法通过几何来表示了,似乎在脑子里也很难想象,现实的空间范围已经不够用了。就想小孩子算算术,无法用自己的十个手指表示了。再往上时,就得需要从数学上理解了,于是出现了很多的数学公式。

向量的长度

这个很多人应该都明白,直角三角形,勾股定理就算出来了,算是比较简单好理解的。即使在三维范围内,也是一样。向量大小是一个非负的标量。

二三维向量的长度公式

标量与向量的乘法

标量与向量的乘法非常直接,把标量和向量里面的值分别相乘即可,得到的结果是一个向量。

N维向量与标量相乘公式

在三维情况下,相乘的公式如下:

三维向量与标量相乘公式

标量和向量相乘的几何意义。标量和向量相乘相当于改变向量的长度。例如要把向量长度加倍,应该乘以2,如果向量长度要缩短一半,需要乘以0.5。当标量小于0时,向量的方向会指向反方向。例如向量的长度要缩短一半,方向反向,需要乘以-0.5。

标准化向量

有时候,我们只关心方向,而不关心向量的大小。例如在设置摄像机头方向时,只需要设置摄像头顶朝向时,只需要设置头顶的方向就可以了,不需要知道其大小。还有水面的反射,折射等,也只需要知道方向即可。标准化向量也叫单位向量,也有时被称为法线。单位向量可以从名字上看出来,就是长度为1的向量。要标准化某个向量,只需要用该向量除以其长度即可。零向量是不允许标准化的,这会导致除以0,在数学上无意义。在几何学上来说,零向量本身就没有方向,所以其也不存在单位向量这么一说。标准化公式如下:

向量标准化代数公式

在几何学上,二维单位向量就是以原点为圆心,以1为半径画得圆,从原点指向画得圆的边线的向量都是单位向量。在三维上,就是以原点为圆心,以1为半径生成的球,从原点到球面的向量为单位向量。再次强调,向量只有方向和大小,没有位置。

二维单位向量

向量的加法和减法

即使最复杂的向量加法和减法也可以拆成两个向量相加的组合。不过对于向量的加减法,我记得似乎在高中时就学过,我对它的几何意义记得很还很清楚。所以,我觉得从几何上带图像的东西来解释某种知识还是很有好处的。而且我也觉得,数学真的很神奇,把代数和几何能够那么融洽的关联到了一起。

首先,如果两个向量的维数不一致,是不能进行加减运算的。下图为向量加法公式:

向量相加代数公式

即使最复杂的向量加法和减法也可以拆成两个向量相加的组合。为什么这么说?其实a-b=a+(-b)=a+(-1b),首先把b和标量-1相乘,然后再和向量a相加。向量相减公式如下:

向量相减代数公式

以上都是一些干巴巴的数学公式,我在高中刚学这个东西的时候就很不明白,算这个东西到底哟偶什么用。随后我们就学了几何,在几何里面用到了向量,我才发现数学很神奇。

下面就介绍一下,我觉得数学神奇四个阶段。

第一个阶段我上小学的时候,那时候计数已经学到了N位数,虽然读起来很费劲,我觉得数学不就是加减乘除吗?数字又能无限大,似乎用这些知识所有的问题都能解决。后来学了分数和方程,三分之一竟然除不尽。哪有这样的数,这样的数存在有意义吗?然后就是方程带给我的震撼,可以设置那么多位置的数,按照已知的规则组成方程,算算就出来了,要是用以前的算术怎么都算不出来。

第二次是上初中学抛物线,那时候觉得一个那样的方程能生成那么漂亮的线,而且还是抛物的,呵呵。线上的点都能满足这个公式。就是因为我的抛物线学的好,初中时成绩一下上来了。不过现在都忘得差不多了。

第三次就是高中时,把代数和几何结合起来了。我上高中时(01-03),代数和几何时两门课,两个老师交。代数讲的好像是数组啥的,我觉得这玩意公式,有什么用?后来学到几何了,一下子和代数讲得知识关联起来了。很神奇。

最后一次,就是高中是接触了一点,大学时才学得微积分。终于似乎有些理解无限逼近,却总也到不了是什么情况。也很神奇。我觉得微积分不仅交给你了他本身的知识,可能也回影响你的思维方式和世界观。以前我老给自己较劲,老是想宇宙的边缘到底在哪里?现在知道就是你老想到,永远也到不到的地方。那到底是哪里?这关我鸟事…

好了,瞎扯完了,继续了…

在几何上,a+b是什么情况呢?首先先平移b向量,把向量b的头平移到a向量的尾巴上。然后从a向量的头向b向量的尾巴画一个向量,头是a的头,尾是平移后向量b的尾。新画得这个向量就是a+b的结果。这个新的向量用代数表示就是上面的公式结果。恩,真的很神奇…

向量相加几何表示

一个点到另一个点得向量

点表示一个位置,如果把位置从一个点移动到另一个点怎么移动?我们还是以比较简答的二维为例来解释。A点得坐标是ax,ay,B点的坐标是bx,by。从A点到B点其实就是B-A。如果我们把A点得值看成是原点到A点得向量呢?就是向量A,值就是[ax,ay],向量B,值就是[bx,by]。从位置A到位置B所移动的向量就是向量B-向量A。这个从几何图形上很容易看出。况且我们在高中应该都学过这些知识。得到值是从A点到B点的向量,要知道向量是有方向的。如果有人说两点之间的向量,那么这个说法本身就是错的。

向量点乘

向量点乘又称向量内积。一说内积我想大家可能会熟悉一些。我记得上学时好像有这么个概念。但具体是干嘛的,就不知道了。下图为向量点乘的代数公式:

向量点乘公式

可见,我们得到的结果是一个标量,但得到的这个标量值代表什么意思呢?

有了代数公式,就要有几何解释。我觉得代数整理那么多公式就是为几何服务的。如果没有几何意义,估计代数上也就不会由这个公式了。点乘结果描述了两个向量的相似程度,得到的结果越大,两个向量就越相近。点乘的结果和向量的夹角有关系。

点乘结果和向量夹角之间的关系

在实际应用中,我们可以通过点乘来求两个向量之间的夹角。下图为公式推导:

两向量夹角公式推导过程

下图为点乘结果符号与角度的关系统计表:

两向量点乘结果符号与角度之间的关系

向量点乘结果的符号和向量的大小没有关系,只和两向量的角度有关系。当两个向量垂直时,两向量点乘结果为0。零向量和任何向量点乘都为0,在几何上我们可以认为零向量和任何向量都垂直。

写到这儿,我已经十分确定,点乘,也就是内积,是在高中是学的。^_^

向量投影

记得我们在高中的时候学物理,用一个绳子拉着小车前进。力作用于绳子是与水平面成30度夹角,力为N牛顿,问小车的加速度是多少。这时我们在计算的时候,就需要分解这个力在水平方向上的分量和垂直方向上的分量。如果说水平方向向前为向量A的话,拉力为向量B,分解到水平方向上的向量为C,那么我们就可以说C是向量B在向量A上的投影。这下就明白多了吧。下图为一个示意图:

向量投影示意图

向量差乘

这个东西…似乎在我记忆里面,高中时也学过。那时候不叫叉乘,好像叫叉积。叉乘只针对三维向量,什么原因,从他们的作用就可以看出来了。在三维中,两个向量就可以确定一个面。有人会问,不是三个点就能确定一个面吗?两个向量可有四个点。那就让我们再说一遍,向量是没有位置的,只有方向和大小,如果你把一个向量的起点和终点关联到一起,不就成三个点了,这三个点形成的面,就是这两个向量形成的面。叉乘是干嘛的呢?叉乘就是求这个面的垂直向量的。

叉乘代数公式

叉乘几何意义示意图

叉乘在实际中,最重要的作用就是创建垂直于平面、三角形、多边形的向量。


转载于:
向量知识库(Vector Knowledge Base)是一种将文本、图像、音频等非结构化数据转换为**向量表示**(即数值型的高维数组),并以这些向量为基础进行存储、检索和推理的知识管理系统。它是现代人工智能,尤其是自然语言处理(NLP)、大模型(LLM)和检索增强生成(RAG, Retrieval-Augmented Generation)系统中的核心技术之一。 --- ### 一、核心概念解释 #### 1. **什么是向量?** 在数学中,向量是具有方向和大小的量。在机器学习中,一个“向量”通常指一个由浮点数构成的数组,例如: ```python [0.23, -0.45, 0.89, ..., 0.11] # 长度为768或1536等 ``` 这种向量被称为**嵌入向量(Embedding Vector)**,它代表了某个语义内容(如一句话、一段文档)在高维空间中的位置。 #### 2. **向量是如何生成的?** 使用预训练的语言模型(如 BERT、Sentence-BERT、OpenAI 的 text-embedding-ada-002)将文本映射成向量: ```python from sentence_transformers import SentenceTransformer # 加载预训练模型 model = SentenceTransformer('all-MiniLM-L6-v2') # 将句子编码为向量 sentences = ["人工智能很强大", "机器学习是AI的一部分"] embeddings = model.encode(sentences) print(embeddings.shape) # 输出: (2, 384) -> 2个句子,每个是384维向量 ``` > 上述代码使用 `sentence-transformers` 库将中文句子转化为固定长度的语义向量。 #### 3. **向量知识库的工作流程** 1. **数据准备**:收集知识源(如 FAQ、文档、数据库记录) 2. **向量化(Embedding)**:用模型把每条文本转为向量 3. **存储向量 + 原始文本**:存入专门的**向量数据库** 4. **查询时也转为向量**,然后通过**相似度搜索**找到最相关的知识条目 --- ### 二、向量数据库(Vector Database) 向量知识库依赖高效的向量数据库来实现快速近似最近邻搜索(ANN, Approximate Nearest Neighbor)。常见的向量数据库包括: - **Pinecone** - **Weaviate** - **Milvus / Zilliz** - **Qdrant** - **Chroma**(轻量级,适合本地开发) #### 示例:使用 Chroma 构建简单的向量知识库 ```python import chromadb from sentence_transformers import SentenceTransformer # 初始化模型和客户端 model = SentenceTransformer('all-MiniLM-L6-v2') client = chromadb.Client() collection = client.create_collection("knowledge_base") # 知识数据 docs = [ "苹果是一种水果,富含维生素C。", "特斯拉是一家电动汽车公司,由埃隆·马斯克领导。", "Python 是一种广泛使用的编程语言,适合数据分析和AI。", ] ids = ["doc1", "doc2", "doc3"] metadatas = [{"type": "fruit"}, {"type": "company"}, {"type": "language"}] # 向量化 embeddings = model.encode(docs).tolist() # 存入向量数据库 collection.add( embeddings=embeddings, documents=docs, metadatas=metadatas, ids=ids ) # 查询示例 query = "什么水果含有维生素C?" query_embedding = model.encode([query]).tolist() results = collection.query( query_embeddings=query_embedding, n_results=2 ) print("最相关的结果:", results['documents'][0]) ``` 输出可能为: ``` 最相关的结果: ['苹果是一种水果,富含维生素C。'] ``` --- ### 三、关键技术点 | 技术 | 说明 | |------|------| | **语义相似性** | 向量之间的距离(如余弦相似度)反映语义接近程度,比关键词匹配更智能 | | **ANN 搜索** | 近似最近邻算法(如 HNSW、IVF)加速大规模向量检索 | | **元数据过滤** | 可结合标签、类别等结构化信息缩小搜索范围 | | **可扩展性** | 支持动态增删改查,适用于实时更新的知识系统 | --- ### 四、应用场景 1. **智能客服问答系统**:用户提问 → 检索最相似的问题答案 2. **RAG(检索增强生成)**:LLM 先从知识库查资料,再生成回答,避免幻觉 3. **推荐系统**:基于用户行为向量推荐相似内容 4. **去重与聚类**:相似文本自动归类 --- ### 总结 向量知识库的本质是: > **“把知识变成数字(向量),让计算机能‘感知’语义,并高效查找”** 相比传统关键词检索(如全文搜索 Elasticsearch),它能理解“同义表达”,比如: - 用户问:“马斯克的汽车公司?” - 能匹配到:“特斯拉是埃隆·马斯克创办的电动车企业。” 这就是语义理解的力量。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值