首页 百科大全文章正文

自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

百科大全 2025年08月29日 15:28 1 admin
自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

编辑

代码

自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

编辑

从文本中逐层提取抽象语义特征,最终将高维文本信息压缩为低维向量。以下是其具体实现逻辑(以 “文本→低维向量” 的多层神经网络为例):

一、多层神经网络的基础结构

一个处理文本的多层神经网络通常由输入层→多个隐藏层→输出层组成,每一层通过 “线性变换 + 非线性激活” 处理数据,层与层之间通过 “权重矩阵” 传递信息。以 “将文本转化为 512 维向量” 为例,结构大致如下:

plaintext

输入层(文本特征) → 隐藏层1(1024维) → 隐藏层2(768维) → 隐藏层3(512维) → 输出层(512维向量)
自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

  • 输入层:接收文本的原始特征(如词嵌入向量,通常是 768 维 / 词);
  • 隐藏层:逐层压缩维度,同时提取更抽象的语义(如从 “词的表面含义” 到 “句子的逻辑关系”);
  • 输出层:输出最终的低维向量(如 512 维),用于后续向量搜索。

二、核心运算逻辑(逐层拆解)

1.输入层:文本特征的初始化

首先需要将 “离散文本” 转化为 “连续数值” 作为网络输入:

  • 假设输入文本是 “人工智能的发展”,先通过 “词嵌入表” 将每个词转化为词向量(如每个词对应 768 维向量,包含该词的基础语义);
  • 再加入 “位置嵌入”(表示词在句子中的位置,如第 1 个词、第 2 个词),确保网络理解语序的影响;
  • 最终输入层的特征是 “词向量 + 位置嵌入” 的组合(例如,5 个词的句子会形成 5×768 的矩阵)。

2.隐藏层:逐层提取与压缩特征

每一层隐藏层的核心运算都是 “线性变换 + 非线性激活”,以 “从 1024 维压缩到 768 维” 的隐藏层为例:

(1)线性变换(矩阵乘法)

  • 设当前层输入向量为 X(形状为 [N, 1024],N 是文本长度);
  • 层内有一个权重矩阵 W(形状为 [1024, 768],随机初始化后通过训练优化);
  • 线性变换公式:Y = X × W + b(b 是偏置项,形状为 [768],用于微调结果);
  • 输出 Y 的形状为 [N, 768],实现了从 1024 维到 768 维的压缩。

(2)非线性激活(引入语义关联)

线性变换只能学习 “特征的线性组合”,无法捕捉复杂语义(如 “人工智能” 和 “机器学习” 的关联性),因此需要加入非线性激活函数:

  • 常用 ReLU 函数:Y_activated = max(0, Y)(将负数置为 0,保留正数,引入非线性);
  • 作用:让网络能学习 “特征之间的复杂关联”(如 “词 A 出现时,词 B 更可能出现” 的规律)。

(3)多层堆叠的意义

  • 第一层隐藏层:处理 “词与词的表面关联”(如 “人工智能” 常和 “算法” 一起出现);
  • 第二层隐藏层:提取 “短语级语义”(如 “人工智能算法” 作为一个整体的含义);
  • 第三层隐藏层:捕捉 “句子级逻辑”(如 “人工智能的发展” 表达的核心主题);
  • 每一层都在前一层的基础上 “抽象化特征”,最终输出的低维向量能代表文本的核心语义。

3.输出层:生成最终向量

经过多层隐藏层后,需要将 “文本的序列特征”(如 N×512 的矩阵)转化为 “单个向量”(如 512 维):

  • 对序列特征做聚合操作:例如取所有词向量的平均值,或用 “注意力机制” 计算加权平均(让关键信息权重更高);
  • 输出层的向量形状为 [512],即文本的低维语义向量,可直接用于向量搜索中的相似度计算。

三、训练:让网络 “学会” 提取有效特征

多层神经网络的权重矩阵 W 和偏置 b 并非手动设计,而是通过 **“训练”** 从数据中学习得到:

  1. 定义任务
    例如 “句子相似性判断”(输入两个句子,预测它们是否相似),或 “文本分类”(预测文本属于哪个主题)。
  2. 计算损失
    用 “损失函数” 衡量网络输出与真实结果的差距。例如在相似性任务中:
  3. 若两个句子实际相似,但网络输出的向量余弦相似度低 → 损失值大;
  4. 若两个句子实际不相似,但向量相似度高 → 损失值大。
  5. 反向传播优化
    通过 “梯度下降法”,将损失值从输出层反向传递到输入层,逐层调整权重矩阵 W 和偏置 b,最终让网络学会 “输出能反映真实语义的向量”。

四、在向量搜索中的作用

  • 降维:将百万级词表的高维信息压缩到 512 维,解决 “维度灾难”;
  • 语义理解:通过多层非线性变换,让向量不仅包含 “词的出现”,还包含 “语义关联”(如 “猫” 和 “狗” 的向量更接近,因为它们都是宠物);
  • 搜索适配:输出的低维向量可直接用余弦相似度计算相关性,结合向量索引(如 FAISS)实现高效搜索。

总结

多层神经网络通过 “逐层线性变换 + 非线性激活” 实现特征的压缩与抽象,再通过 “训练” 让向量捕捉文本的语义规律。在向量搜索中,它解决了 “高维词表计算慢” 的问题,同时让向量更接近 “人类理解的语义相似性”,是现代向量搜索的核心技术之一。

核心代码

  // 初始化神经网络层显示        function initLayers() {            const inputLayer = document.getElementById('inputLayer');            const hiddenLayer = document.getElementById('hiddenLayer');            const outputLayer = document.getElementById('outputLayer');                        // 创建输入层神经元 (10维)            for (let i = 0; i < 10; i++) {                const neuron = document.createElement('div');                neuron.className = 'neuron';                neuron.textContent = i+1;                inputLayer.appendChild(neuron);            }                        // 创建隐藏层神经元 (6维)            for (let i = 0; i < 6; i++) {                const neuron = document.createElement('div');                neuron.className = 'neuron';                neuron.textContent = i+1;                hiddenLayer.appendChild(neuron);            }                        // 创建输出层神经元 (3维)            for (let i = 0; i < 3; i++) {                const neuron = document.createElement('div');                neuron.className = 'neuron';                neuron.textContent = i+1;                outputLayer.appendChild(neuron);            }        }                // 生成随机权重矩阵 (输入维度 × 输出维度)        function generateWeights(inputDim, outputDim) {            const weights = [];            for (let i = 0; i < inputDim; i++) {                const row = [];                for (let j = 0; j < outputDim; j++) {                    // 生成-0.5到0.5之间的随机权重                    row.push(Math.random() - 0.5);                }                weights.push(row);            }            return weights;        }                // 矩阵乘法 (向量 × 权重矩阵)        function multiplyVectorMatrix(vector, weights) {            const inputDim = vector.length;            const outputDim = weights[0].length;            const result = new Array(outputDim).fill(0);                        for (let j = 0; j < outputDim; j++) {                let sum = 0;                for (let i = 0; i < inputDim; i++) {                    sum += vector[i] * weights[i][j];                }                result[j] = sum;            }                        return result;        }      
自建知识库,向量数据库 (十六)多层神经网络构建——仙盟创梦IDE

阿雪技术观

在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets, hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology

发表评论

泰日号Copyright Your WebSite.Some Rights Reserved. 网站地图 备案号:川ICP备66666666号 Z-BlogPHP强力驱动