向量的概念:有大小,有方向

向量和矩阵之间有什么关系?当矩阵的行数或列数为 1 时,它可以被视为一个向量。但是向量的定义是有大小和有方向的,一个1行(或者一列)的矩阵,哪来的方向呢?

关键点:

  • 向量的定义:在数学中,向量通常被定义为具有大小(长度)和方向的量。在几何中,向量可以用箭头表示,箭头长度表示大小,箭头指向表示方向。

  • 向量的分量:在线性代数中,向量通常表示为一个有序列表数字,例如在二维空间中向量可以表示为 (x, y),在三维空间中为 (x, y, z)。这些数字称为分量或坐标。

  • 矩阵与向量的关系:矩阵是一个二维数组。当矩阵只有一行时,它被称为行向量;当只有一列时,它被称为列向量。因此,向量可以看作是矩阵的特殊情况。

  • 方向的理解:向量的方向是从其分量中推导出来的。例如,在二维空间中,向量 (3, 4) 的大小是 5(通过勾股定理),方向是相对于坐标轴的角度(例如,与x轴夹角为 arctan(4/3))。同样,对于行向量或列向量,方向是通过其分量在空间中的指向来定义的。

如何计算向量的大小:加强版勾股定理:

在这里插入图片描述

向量的方向:

例如,考虑一个列向量 [1, 2, 3]^T 在三维空间中。它表示从原点指向点 (1,2,3) 的箭头。这个箭头有明确的方向:它在x轴方向有1单位,y轴方向有2单位,z轴方向有3单位。方向可以通过方向余弦或与各轴的角度来计算。

余弦相似度

余弦相似度通过测量两个向量在方向上的差异,来评估它们之间的相似性。它关注的是方向,而不是绝对距离。

公式如下:

在这里插入图片描述

向量的点积,向量的模,向量的范数?

1、向量的点积

  • 向量的点积,也叫数量积或内积,是一种将两个向量映射到一个标量(一个数字)的运算。

  • 对于两个n维向量a和b,点积定义为对应分量的乘积之和。点积的结果是一个标量。
    公式:a · b = a1b1 + a2b2 + … + an*bn

  • 如果 θ 是向量 a 和 b 之间的夹角,那么它们的点积也可以定义为:
    a · b = ||a|| ||b|| cos(θ) 【就是余弦相似度公式的变形而已】

    这里 ||a|| 和 ||b|| 分别表示向量 a 和 b 的模(长度)。

  • 从这个几何定义可以推导出:
    当两个向量方向相同时(θ=0°,cosθ=1),点积最大,为 ||a|| ||b||
    当两个向量垂直时(θ=90°,cosθ=0),点积为 0
    当两个向量方向相反时(θ=180°,cosθ=-1),点积最小,为 -||a|| ||b||

  • 主要用途:投影计算:一个向量在另一个向量方向上的投影长度
    机器学习中的应用:计算特征之间的相关性、神经网络的加权求和等

2、向量的模

向量的模就是向量的长度或大小。计算方法就是加强版勾股定理。

在这里插入图片描述
3、向量的范数:

范数是模的推广。当我们说“模”时,通常特指L2范数(即加长版勾股定理)。 而“范数”是一个更广泛的概念,它可以用不同的方式来度量向量的“大小”或“长度”。

简单来说范数包含了L1范数和L2范数。L1范数:

在这里插入图片描述
范数的主要作用就是正则化,防止过拟合的,这个之前讲过。

文本预处理、向量化,归一化

1、文本预处理
在文本向量化之前,通常需要对文本进行归一化处理,包括:

  • 转换为小写:将文本中的所有字母转换为小写,避免同一单词因大小写不同而被视为两个词。

  • 去除标点符号:移除文本中的标点符号。

  • 去除停用词:移除常见的、对文本意义不大的词(如“的”、“是”、“在”等)。

  • 词干提取(Stemming):将单词还原为词干形式,例如“running”变为“run”。

  • 词形还原(Lemmatization):将单词还原为词典中的基础形式( lemma),例如“better”变为“good”。

2、文本向量化

文本向量化是指将非结构化的文本数据(单词、句子、文档)转换为计算机能够理解和处理的数值向量的过程。由于机器学习模型只能处理数字,而不能直接理解文字,因此文本向量化是构建任何文本AI应用的第一步。

想象一下,如果我们直接给计算机输入"猫"和"狗"这两个词,它无法理解它们的关系。但如果我们把它们转换为向量:

  • “猫” → [0.9, 0.2, 0.1]

  • “狗” → [0.8, 0.3, 0.1]

计算机就能通过计算向量之间的相似度来判断"猫"和"狗"的相似程度远大于"猫"和"汽车"的相似程度。

主要的文本向量化方法

有非常多,这里就介绍一个基于预测的方法(词嵌入):

Word2Vec:通过神经网络学习词的分布式表示,语义相似的词在向量空间中的位置也相近

经典例子:vec(“国王”) - vec(“男人”) + vec(“女人”) ≈ vec(“女王”)

3、归一化

归一化是将数据按比例缩放,使之落入一个特定的区间(通常是[0,1]或[-1,1])

为什么需要归一化?

考虑一个简单的例子:用身高(cm)和体重(kg)来预测健康指数

  • 身高数据范围:150-200

  • 体重数据范围:40-120
    如果不归一化,身高的数值范围远小于体重,模型可能会给体重特征分配过高的权重。

主要的归一化方法

1. 最小-最大归一化

公式:X_normalized = (X - X_min) / (X_max - X_min)

将数据缩放到[0,1]区间

例子:将考试成绩[60, 75, 90, 85]归一化

最小值=60,最大值=90

  • 60 → (60-60)/(90-60) = 0

  • 75 → (75-60)/30 = 0.5

  • 90 → (90-60)/30 = 1

  • 85 → (85-60)/30 ≈ 0.83

  1. Z-score标准化

公式:X_normalized = (X - μ) / σ (μ是均值,σ是标准差)

将数据转换为均值为0,标准差为1的分布

例子:数据[1, 2, 3, 4, 5]

均值μ=3,标准差σ≈1.58

1 → (1-3)/1.58 ≈ -1.26

3 → (3-3)/1.58 = 0

5 → (5-3)/1.58 ≈ 1.26

3. L2归一化(向量单位化)

将向量的每个内容除以其L2范数,使向量的长度为1
在这里插入图片描述

例子:向量[3, 4]

L2范数 = √(3²+4²) = 5

归一化后:[3/5, 4/5] = [0.6, 0.8]

验证:√(0.6²+0.8²) = √(0.36+0.64) = √1 = 1

L2归一化挺好理解哈,就是相当于缩放一个向量,让其保留方向的同时,将它的模缩放成相同大小,也就是1,变成单位向量了

词向量,嵌入矩阵,潜空间

1、词向量

2、嵌入矩阵

通过词嵌入的方式可以得到一个合理的词向量,一大堆这样的词向量拼接成的矩阵,就叫做【嵌入矩阵】

嵌入矩阵是一个别人已经造好的轮子!别人使用 Word2Vec、GloVe 等算法在大规模语料上给你训练好了,你只需要加载使用就行了!

在这里插入图片描述
如何找两个词之间的相关性?

只需要把这两个词,从词向量中拿出来,拿出来这两个词向量之后,计算其余弦相似度,就能得到相关性。

(直接用点积其实也能算出来相似度。)

在这里插入图片描述

这就将两个词汇自然语言之间的联系,转化为了可以用数学公式计算出来的方式!!!

潜空间:有了嵌入矩阵就自动有潜空间了

通过训练(如Word2Vec、GloVe或Transformer),我们学习到一个嵌入矩阵。当所有词都被映射为向量后,它们共同存在于一个向量空间中,这就是我们的词向量潜空间。

原始数据空间(高维稀疏)
原始空间 = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, …] # one-hot编码,10000维

潜空间(低维稠密)
潜空间 = [0.7, 0.2, -0.1, 0.5, 0.3, …] # 300维

从高维稀疏到低维稠密,比如从one-hot编码,到Word2Vec处理过的词向量,这个词向量就是潜空间。现在大模型的潜空间还有归类特性:语义相似的词在向量空间中自动聚集

定义:潜空间是一个低维的、压缩的表示空间,其中数据的重要特征和模式被编码。它捕捉了数据的"本质",去除了噪声和冗余信息。

词向量的维度

词向量的每个维度并不直接对应人类可理解的语义特征(如“性别”、“时态”等)。 虽然早期的一些工作(如Word2Vec)试图解释每个维度的含义,但实际上,由于词向量是通过复杂的非线性模型学习得到的,每个维度可能代表一种混合的特征。

在深度学习中,词向量的每个维度是模型自动学习出来的特征,这些特征通常是人类难以直接解释的。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

RNN 循环神经网络

实现RNN的前置条件:

每个词都可以编码成向量,然后送到神经网络输入端的神经元中了。

定义

RNN(Recurrent Neural Network)是一类用于处理序列数据的神经网络。与普通的前馈神经网络不同,RNN具有循环连接,使得网络能够保持对之前信息的记忆。这意味着RNN能够利用序列中的历史信息来影响当前的输出。

循环神经网络可以理解词和词之间相互顺序的能力。

RNN的前置概念

时间步

时间步指的是序列模型处理一个输入序列时,每一个独立的、按顺序处理的步骤或位置。

你可以把它想象成 时间上的一个“节拍” 或者 序列中的一个“位置”。

想象你在逐词阅读下面这个句子:

“我” → “爱” → “北京” → “天安门”

这个过程可以分为4步:

  • 第1步:你看到 “我”,大脑开始理解。

  • 第2步:你看到 “爱”,大脑结合刚才的“我”,理解为“我爱”。

  • 第3步:你看到 “北京”,大脑结合“我爱”,理解为“我爱北京”。

  • 第4步:你看到 “天安门”,大脑结合“我爱北京”,最终理解整个句子“我爱北京天安门”。

在这个比喻中:

每一个步骤就是一个 时间步。

你阅读的每个词就是在该时间步的 输入。

你大脑中结合了之前所有词的理解就是该时间步的 隐藏状态。

权重矩阵

最简单RNN的应用类比:

输出一句话表达的情感(正面情感、负面情感)

RNN的工作流程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RNN的图例和官方公式

图例1:

在这里插入图片描述

更抽象的画法:

在这里插入图片描述

在这里插入图片描述

在RNN中,每一层的“权重矩阵”都是咋得出来的?

在RNN中,权重矩阵不是通过公式计算出来的,而是通过训练过程学习出来的。

这点和普通的神经网络非常像,普通神经网络的目标就是通过训练学习得到最佳拟合度的w和b。那么RNN同理呀,一样的道理。

权重矩阵的初始值是随机的(也可能全是0),然后通过反向传播和梯度下降算法,让模型自动学习出最优的权重值。可以看下面的步骤,太简单了:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

大吉的总结:隐藏状态和一次RNN的训练流程【重要】

h就是隐藏状态

我们需要把隐藏状态+下一个“时间步”的输入 同时作为一个全新的输入,传递到下一个神经节点里面去。

用大白话解释:如果h是第一个词的隐藏状态,当计算到第二个词的时候,要将第二个词的输入和第一个词的隐藏状态加起来,作为一个全新的输入向量;与此同时原有权重矩阵w也要相应扩展(矩阵相乘必须保证行列相等,所以w也要变),这样就可以算出第二个词的h,以此类推。

最终到最后一个结果,通过输出层,再通过输出层的激活函数,最终算出y hat 这个预测值。

算出完成y hat 这个预测值,然后与实际值y对比,产生损失,然后带入损失函数,梯度下降,反向传播,链式法则这一套,把所有的w权重矩阵都给更新了。

这就完成了一次RNN的训练流程。

在这里插入图片描述

RNN的缺陷:

一:无法捕捉长期依赖

  • 信息会随着时间步的增多而逐渐丢失;
  • 这个很好理解,早先的信息可能会被稀释掉。

关于稀释的解释:

在这里插入图片描述

二:RNN必须顺序处理,无法并行运算。

每个时间步(输入)都依赖上一个时间步的h(结果)

Rnn的编码器-解码器 机制 : seq2seq

https://www.bilibili.com/video/BV16g411L7FG

任务目标

实际应用RNN来机器翻译 : 输入:今天天气很好

输出: Today weather is nice.

编解码器机制的概念

在Transformer出现之前,编码器-解码器架构已经存在,并且通常由循环神经网络(RNN)或其变体(如LSTM、GRU)来实现。

编码器-解码器是一种用于解决序列到序列任务的通用框架。所谓Seq2Seq,就是模型的输入是一个序列,输出是另一个序列。

核心思想:

  • 编码器:将输入序列(如一句英文)压缩成一个包含所有重要信息的、固定维度的上下文向量。

  • 解码器:根据这个上下文向量,逐步生成输出序列(如对应的中文)。

一个简单的比喻:
想象一个懂多国语言的人在做翻译。

编码器 就像他的听和理解过程:他听完整个英文句子,在脑子里理解了其含义(形成了一个“思想”或“语义”)。

上下文向量 就是他脑子里的那个“思想”。

解码器 就像他的表达和输出过程:他根据这个“思想”,用中文词汇和语法规则,重新组织并说出一句意思相同的中文。

编码器

编码器就是上面学的那个玩意,已经学完编码器了。这里着重讲述解码器。

准备工作:编码器已完成
首先,编码器(一个RNN,如LSTM)已经处理了完整的中文输入序列:

输入序列:[“我”, “今天”, “很”, “开心”]

编码器最终【隐藏状态】 h_enc:这是一个浓缩了整个中文句子语义信息的向量,它将成为解码器的初始状态。

解码器的初始输入:在训练和推理的初始时刻,解码器的输入都是起始符号(Start Of Sequence)。

解码器中,初始【隐藏状态】和【初始输入】不是一个东西!

SoftMax激活函数 - 归一化

Softmax层是神经网络中的一种激活函数,它可以将任意实数向量转换为概率分布。 换句话说,它把一组数字变成一组概率,这些概率之和为1。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

解码器的训练流程

训练阶段和推理阶段完全不是一回事;

训练阶段:

Teacher Forcing是一种通过使用真实标签代替预测值来训练序列生成模型的技术,主要用于加速收敛和抑制误差累积。

Teacher Forcing的技术原理
‌1. 核心定义与数学表达‌

在序列生成任务(如机器翻译)中,模型训练时使用真实标签 作为当前步骤输入,而非前一步的预测值

该方法通过切断错误传播路径,显著提升训练的稳定性。‌‌

在这里插入图片描述
在这里插入图片描述
为啥训练时候给真实的结果作为输入?是为了避免“输出一错全错”的情况,方便模型收敛,加快训练,就算有一个错了也没事,后面的对的概率更大。

解码器工作(推理)流程

解码器也是一个RNN,它负责逐词生成英文输出序列。推理过程的核心是自回归生成:解码器使用自己前一步的预测结果作为下一步的输入,逐步构建整个输出序列。

  • 解码器初始状态 (s₀) 的来源
    是的,解码器的初始状态 s₀ 确实来自编码器的隐藏状态。

  • 解码器后续状态 (s₁, s₂, s₃…) 的来源
    s₀ = 基于编码器状态初始化
    s₁, s₂, s₃… = 基于解码器自身的前一状态 + 当前输入计算得出

  • 解码器初始输入的来源:
    一般是一个起始符号 <bos>begin-of-Sequence ;

  • 解码器后续输入的来源:
    上一个词的预测结果(如果你是训练,那就是)

在这里插入图片描述
在这里插入图片描述

编码器的输入,和解码器的输出,可以不等长!!! 所以我们说这个编码器和解码器还可以做问答模型(QA模型)

直到结束标记 <eos>(end of sequence) 时候才会结束。

比如翻译任务:

从概率分布中选择下一个词的方法

接上图的推理过程: 输出y2,是"t’aime"的概率分布,这个y2应该是一个通过softmax激活函数算出来的矩阵,"t’aime"只是概率最大,我最有可能选择 “t’aime” 而已。选择 “t’aime” 的方法都有什么呢?

在这里插入图片描述

在序列生成任务中,解码器会通过softmax激活函数,在每一步会输出一个大小为V(词汇表大小)的概率分布,然后我们根据这个分布选择下一个词。> 选择的方式主要有:

  • 贪婪搜索(Greedy Search)

    • 总是选择概率最高的词
    • ✅ 简单快速
      ❌ 容易陷入局部最优,可能错过更好的全局序列
  • 束搜索(Beam Search)

    • 维护多个候选序列,不是单个词的选择,可以更好兼顾全局上下文
  • 随机采样(Sampling)

最终总结:

解码器的工作流程(推理流程)和训练流程,是两码事。

训练阶段使用Teacher Forcing,即每一步的输入是真实目标序列(ground truth)

RNN的典型应用 文本生成任务:预测一句话的下一个词是什么。

案例:

在这里插入图片描述
在这里插入图片描述
one to many ,指的是一个输入(也可以理解为小部分输入),能够预测出来很大一坨输出。

典型应用2: 文本分类(认猫也算这个应用)

输入一篇文章或是一句话,只输出一个标签,说明这篇文章属于什么类别:

在这里插入图片描述

只有这种 many to many 的任务,会用到编码器-解码器:

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐