【LLM表示基础】Embedding Lookup:神经网络如何“理解“一个词

LLM 中的 vocabulary 和 embedding vector 本文介绍词汇表和嵌入向量 阅读详情

在 NLP 模型中,输入的第一步几乎都是同一个操作—把离散的词语变成连续的向量,这个操作就是 Embedding Lookup。它看起来简单,但理解它的本质,是读懂 Transformer、GPT、BERT 等一切语言模型的前提。

一、从一个最基本的问题出发

​ 神经网络只能处理数值,不能直接处理"apple","banana"这样的文本。那么,怎样把一个词交给神经网络?

​ 最直觉的方案是给每个词分配一个编号(索引),然后通过某种方式,把编号转换成一组浮点数向量——这组向量就是词的 embedding,而"通过索引取出向量"这个动作,就是 Embedding Lookup。

在这里插入图片描述

二、直观理解:Embedding Lookup 在做什么?

​ 假设我们有一个包含 4 个词的词表:

["apple", "banana", "orange", "fruit"]

​ 同时,我们维护一个 embedding 矩阵,每一行对应一个词的向量表示:

索引词embedding 向量 (示例)
0apple[0.1, 0.3, 0.5]
1banana[0.2, 0.4, 0.6]
2orange[0.3, 0.5, 0.7]
3fruit[0.0, 0.1, 0.2]

​ 当模型遇到 "banana" 时,它不关心这个字符串本身,只关心它的索引 111。Embedding Lookup 做的事情就是:拿着索引 1,去矩阵里取第 1 行,返回 [0.2,0.4,0.6][0.2, 0.4, 0.6][0.2,0.4,0.6]。

​ 简单说,embedding lookup 就是用词的索引去查 embedding 表,然后返回对应的向量。你可以把 embedding 矩阵想象成一本"词向量字典"—Embedding Lookup 就是翻到某一页,把对应的向量抄出来。

三、形式化定义

3.1 数学视角

​ 设词表大小为 VVV,embedding 维度为 DDD,则 embedding 矩阵定义为:
E∈RV×D E \in \mathbb{R}^{V \times D} E∈RV×D
​ 对于输入词 wiw_iwi​(索引为 iii),Embedding Lookup 的操作为:
Embedding Lookup(i)=E[i,:]∈RD \text{Embedding Lookup}(i) = E[i,:] \in \mathbb{R}^D Embedding Lookup(i)=E[i,:]∈RD
​ 以上面的例子为例:
E=[0.10.30.50.20.40.60.30.50.70.00.10.2]∈R4×3 E = \begin{bmatrix} 0.1 & 0.3 & 0.5 \\ 0.2 & 0.4 & 0.6 \\ 0.3 & 0.5 & 0.7 \\ 0.0 & 0.1 & 0.2 \end{bmatrix} \in \mathbb{R}^{4 \times 3} E=​0.10.20.30.0​0.30.40.50.1​0.50.60.70.2​​∈R4×3
​ 查找 "banana"(索引 1):
E[1,:]=[0.2,0.4,0.6] E[1,:] = [0.2, 0.4, 0.6] E[1,:]=[0.2,0.4,0.6]
​ 本质上,这就是一次矩阵的行索引操作,没有任何乘法或加法。

​ 虽然前向只是索引,但在反向传播时,梯度会精确回传到被查到的那一行 embedding 向量上,因此 embedding 矩阵可以被逐行高效地学习。

3.2 PyTorch实现

​ 在代码层面,这通常就是一次矩阵索引:

import torch

# 假设词表大小为 4,embedding 维度为 3
embedding_matrix = torch.tensor([
    [0.1, 0.3, 0.5],
    [0.2, 0.4, 0.6],
    [0.3, 0.5, 0.7],
    [0.0, 0.1, 0.2]
])

# 输入词索引
word_index = torch.tensor([1])  # banana
embedding_vector = embedding_matrix[word_index]  

​ 输出即为:

[0.2, 0.4, 0.6]

四、Embedding Lookup 与 One-Hot 编码的关系

4.1 从 One-Hot 到 Embedding

​ 在深度学习早期,更常见的做法是:

  1. 先将词编码为 one-hot 向量

  2. 再通过矩阵乘法映射到低维空间。

    以 "banana" 为例:

Step 1:构造 one-hot 列向量
x=[0100] \mathbf{x} = \begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \end{bmatrix} x=​0100​​
Step 2:计算 E⊤xE^\top \mathbf{x}E⊤x
E⊤x=[0.10.20.30.00.30.40.50.10.50.60.70.2][0100]=[0.20.40.6] E^\top \mathbf{x} = \begin{bmatrix} 0.1 & 0.2 & 0.3 & 0.0 \\ 0.3 & 0.4 & 0.5 & 0.1 \\ 0.5 & 0.6 & 0.7 & 0.2 \end{bmatrix} \begin{bmatrix} 0 \\ 1 \\ 0 \\ 0 \end{bmatrix} = \begin{bmatrix} 0.2 \\ 0.4 \\ 0.6 \end{bmatrix} E⊤x=​0.10.30.5​0.20.40.6​0.30.50.7​0.00.10.2​​​0100​​=​0.20.40.6​​
​ 结果和直接 lookup 完全一致——因为 one-hot 向量中只有一个 1,E⊤xE^\top \mathbf{x}E⊤x 实际上就是从 E⊤E^\topE⊤ 中"选出"对应的一列(等价于 EEE 的对应行)。
在这里插入图片描述

  • 这是线性代数的基本性质:矩阵右乘一个 one-hot 列向量 eie_iei​,结果就是取出该矩阵的第 iii 列。

A,ei=A:,i A , e_i = A_{:,i} A,ei​=A:,i​

所以 $E^\top e_i$ 取出的是 $E^\top$ 的第 $i$ 列,而 $E^\top$ 的第 $i$ 列就是 $E$ 的第$i$ 行——正好就是第 $i$ 个词的 embedding 向量。

4.2 为什么不用 One-Hot?

​ 既然结果等价,为什么要用 Embedding Lookup 替代 one-hot 乘法?看一组对比:

One-Hot + 矩阵乘法Embedding Lookup
空间需构造 VVV 维稀疏向量仅需一个整数索引
计算量O(V×D)O(V \times D)O(V×D)O(1)O(1)O(1)
实际操作大量"乘以 0"的无效计算直接定位目标行

​ 特别地,当词表规模达到 5 万(GloVe)、3 万(BERT WordPiece)甚至 15 万(GPT-2 BPE)时,为每个 token 构造一个数万维的稀疏向量再做矩阵乘法,显然是不可接受的浪费。Embedding Lookup 是对这一过程的等价简化。

五、 PyTorch 中的 nn.Embedding

​ 理解了原理之后,来看实际代码。PyTorch 提供了 nn.Embedding 模块来封装整个 lookup 过程。

5.1 基本用法

import torch
import torch.nn as nn

# 创建 embedding 层:词表大小 10000,向量维度 256
embed = nn.Embedding(num_embeddings=10000, embedding_dim=256)

​ 这行代码在内部创建了一个 shape 为 (10000, 256) 的 embedding 矩阵,每一行对应词表中一个词的 256 维向量。

5.2 input_ids的含义

​ 在 NLP 中,文本需要先经过 分词 + 编码 才能输入模型。假设我们有两个句子:

句子 1: "I love deep learning"  →  分词后  →  ["I", "love", "deep", "learning"]
句子 2: "AI is fun <PAD>"       →  分词后  →  ["AI", "is", "fun", "<PAD>"]

​ 每个词在词表中有一个唯一索引(由 tokenizer 查表得到),于是两个句子变成两行整数:

# 每个数字是该词在词表中的索引,不是词本身
# 一行 = 一个句子,一列 = 一个位置
input_ids = torch.tensor([
    [12, 345, 6789, 0],     # "I"=12, "love"=345, "deep"=6789, "learning"=0
    [42, 7,   999,  3]      # "AI"=42, "is"=7, "fun"=999, "<PAD>"=3
])
# shape: (2, 4) — 2 个句子,每个句子 4 个词

5.3 批量Lookup 过程

​ 把 input_ids 传入 embedding 层,每个整数索引会被替换为对应的 256 维向量:

vectors = embed(input_ids)  # shape: (2, 4, 256)

​ shape 变化:(2, 4) → (2, 4, 256),即 (batch_size, seq_len) → (batch_size, seq_len, embed_dim)。

​ 展开来看,这一步等价于:

# 对 input_ids 中的每个索引,分别去 embedding 矩阵查一行
vectors[0][0] = embed.weight[12]    # "I" 的向量
vectors[0][1] = embed.weight[345]   # "love" 的向量
vectors[0][2] = embed.weight[6789]  # "deep" 的向量
vectors[0][3] = embed.weight[0]     # "learning" 的向量
vectors[1][0] = embed.weight[42]    # "AI" 的向量
# ... 以此类推

​ 本质上就是对每个位置做了一次 Embedding Lookup,只不过 nn.Embedding 帮我们批量完成了。

5.4 其他实用功能

  • 权重自动初始化:embed.weight 是一个 (V, D) 的 nn.Parameter,创建时随机初始化,训练过程中随模型一起更新。

  • padding_idx:可以指定某个索引为填充符号,其向量始终为零向量且不参与梯度更新:

    embed = nn.Embedding(num_embeddings=10000, embedding_dim=256, padding_idx=0)
    # index 0 的向量永远是 [0, 0, ..., 0],且不会被训练更新
    
  • 加载预训练权重:可以用 Word2Vec、GloVe 等预训练向量初始化 embedding 矩阵:

    pretrained_vectors = ...  # shape: (V, D) 的 Tensor
    embed = nn.Embedding.from_pretrained(pretrained_vectors, freeze=False)
    # freeze=False 表示微调时继续更新,freeze=True 则冻结权重
    

六、Embedding Lookup 在哪里被使用?

​ Embedding Lookup 不仅仅用于 word embedding,它几乎出现在所有需要将离散 ID 映射为连续向量的场景中:

场景输入Embedding 矩阵
词嵌入(Word Embedding)词/token 的索引词向量矩阵
位置编码(Positional Embedding)位置索引 0, 1, 2, …位置向量矩阵
Token Type Embedding(BERT)句子类型 0 或 1类型向量矩阵
推荐系统用户/物品 ID用户/物品向量矩阵
图神经网络节点 ID节点特征矩阵

​ 在 BERT 中,一个 token 的输入表示就是三次 Embedding Lookup 的结果之和:
hi=Etoken[ti]+Eposition[i]+Esegment[si] \mathbf{h}_i = E_{\text{token}}[t_i] + E_{\text{position}}[i] + E_{\text{segment}}[s_i] hi​=Etoken​[ti​]+Eposition​[i]+Esegment​[si​]
在这里插入图片描述

​ 可以理解为:“这个词是什么 + 它在第几个位置 + 它属于哪句话”

七、总结

  • Embedding Lookup:用索引从 embedding 表中查找向量

  • 是 NLP、推荐系统、GNN 中最基础也最关键的操作

  • 本质是索引,但梯度可以精确回传

  • 是 One-Hot + 矩阵乘法的高效等价形式

    理解 Embedding Lookup,等于真正迈进了深度学习处理离散符号的世界。

要懂 transformer 大模型(如 LLM)的基本构造 +关键组件(Attention, FFN, embedding 等) 老板问:“为什么这个 7B 模型显存只要 14G,那个 7B 模型要 20G?原理回答:“因为那个模型没用 GQA,KV Cache 太大,或者是词表(Embedding)特别大。客户问:“为什么输入长了之后,速度慢得像蜗牛?原理回答:“因为 Attention 是ON2O(N^2)ON2复杂度,我们需要开启 FlashAttention 来优化 IO。运维问:“怎么把两个 GPU 利用率跑满?原理回答。 阅读详情

相关推荐

CocosCreator 面试题(十七)Cocos creator 固定宽度与固定高度的底层原理是什么?Cocos creator是如何做适配的?

通过固定宽度或固定高度的适配方式,可以使游戏在不同屏幕尺寸上保持一定的一致性,确保游戏中的元素的大小和位置相对稳定。具体选择哪种适配方式取决于你的游戏需求和设计考虑。在 Cocos Creator 中,你可以通过设置「设计分辨率」和使用相对坐标和布局方式来实现固定宽度或固定高度的适配。总之,Cocos Creator 提供了多种适配方式和工具,帮助你在不同屏幕尺寸上保持游戏画面的一致性。在 Cocos Creator 中,固定宽度和固定高度是两种常见的适配方式,用于在不同屏幕尺寸上保持游戏画面的一致性。

w风雨无阻w的专栏 1687

embedding lookup

1.embedding embedding现在在推荐系统、ctr预估系统中的使用无处不在。简单来理解就是,对于各种高维稀疏的特征,工作将单个特征映射成为一个低维稠密向量,将高维稀疏特征由"精确匹配"变成一个在embedding向量上的"模糊匹配",从而提高了算法的性能,将高维稀疏特征的可用性大大提高。 2.lookup embedding lookup本质上是用矩阵的乘法来实现的,可以将其看成一个...

bitcarmanlee的博客 7341

强化学习 之 Actor Critic

简介 Actor Critic是一种结合体算法: (1)Actor 的前生是 Policy Gradients,这能让它毫不费力地在连续动作中选取合适的动作,而 Q-learning 做这件事会瘫痪; (2)Critic 的前生是 Q-learning 或者其他的 以值为基础的学习法,能进行单步更新,而传统的 Policy Gradients 则是回合更新,这降低了学习效率。 算法思想 Actor...

Test_tju的博客 809

embedding_lookup的学习笔记

背景 最近从事做算法平台开发,之前对tensorflow和深度学习有所了解,但是面对全新的在线系统仍然一脸懵逼。。。 其中,对embedding的概念刚开始一直不够清晰,看到关于embedding_lookup的单测也只能根据结果猜测计算过程,经过一顿查阅资料,终于对embedding的原理和使用有所了解,因此记录下来 one_hot编码 首先,了解下什么是one_hot编码,直接举例子如下: 词...

FBeetle的博客 1万+

badusb详细制作教程(两种方式实现远控)

badusb是一种几乎可以突破任何杀毒软件和防火墙的设备,堪称渗透测试利器 文章目录前言一、什么是badusb?二,badusb的优点三,badusb是如何攻击的?badusb原理HID攻击漏洞产生原因三、准备步骤1.设备2,编辑器的安装与设置四,编写代码(重点)第一种: SEToolkit + badusb实现PowerShell注入攻击第二种:Cobalt Strike + badusb 实现PowerShell注入攻击五,烧录六,badusb有多强大攻击场景总结 BadUSB是《黑客军团》中

Ghost_system的博客 1万+

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1254

Tensorflow - 拿捏 tf.nn.embedding_lookup && tf.nn.embedding_lookup_sparse

一.引言 前面提到Wide & Deep中涉及到类别特征的 embedding,文中的 embedding 是由 Embedding 层得到,实际应用场景中,也可以从预训练的模型中加载已知 id 的 embedding,例如可以从矩阵分解获取 user-item 的向量,也可以通过 Word2vec 预训练的到语义的embedding 等等,embedding_lookup 相关函数可以看作是一个字典,给定对应特征的 id,从中获取 id 对应的 embedding 并做后续处理。 二...

BITDDD小栈 2287

Unity开发抖音小游戏存储的几种方法分析

前段时间写小游戏为了省事一直就没有研究抖音小游戏的存储方案,一直使用的是unity中的PlayerPrefs去做的存储,但是后来发现官方会一直提醒让使用抖音sdk中的新文件存储系统,从而降低内存占用。

类人_猿的博客 2533

tensorflow学习笔记--embedding_lookup()用法

embedding_lookup( )相当于在np.array中直接采用下标数组获取数据。需要注意的细节是返回的tensor的dtype和传入的被查询的tensor的dtype保持一致;和ids的dtype无关。

STHSF的地盘 4万+

基于MATLAB的PDT DMR物理层仿真

PDT DMR物理层仿真的目标是评估系统的误码率(Bit Error Rate,BER),以及验证和优化各种调制方案、编码方案和信道模型。下面将介绍如何进行PDT DMR物理层的仿真,并提供相应的MATLAB源代码。通过上述步骤,我们可以进行基于MATLAB的PDT DMR物理层仿真,并评估系统的性能。根据实际需求,我们可以修改仿真参数和添加更复杂的信道模型,以更全面地评估系统性能。最后,我们可以将仿真结果进行可视化和分析。首先,我们需要设置仿真的参数,包括调制方案、编码方案、信道模型和信噪比等。

TechPulseZ的博客 456

YOLOv8性能突破:DySample超轻量动态上采样算子的创新应用与实现【附保姆级代码】

YOLOv8(You Only Look Once Version 8)作为YOLO系列模型的最新版本,延续了高效、准确的目标检测优势。其基础结构包含了骨干网络(Backbone)、检测头(Head)、以及特征融合层(Neck)。在特征融合阶段,YOLOv8需要对不同尺度的特征图进行上采样,以便将低分辨率的特征与高分辨率的特征进行融合。传统的上采样操作多使用插值(如双线性插值)或固定卷积,而这些方法可能无法很好地适应复杂的上下文信息。

一键难忘的博客 3120

TensorFlow-tf.nn.embedding_lookup()函数解析

眼看千遍,不如手动一遍,看了原文再手动整理一遍,代码实际操作一遍,加深理解。相当于高中时做的笔记了。 tf.nn.embedding_lookup的用法主要是选取一个张量里面索引对应的元素 原型: tf.nn.embedding_lookup(params, ids, partition_strategy='mod', name=None, validate_indices=True, m...

2667

数据科学助力大数据领域的航空安全分析

随着航空业的快速发展,航班数量不断增加,航空安全问题日益受到关注。大数据时代的到来,使得航空领域积累了大量的数据,包括飞行数据、维护数据、气象数据等。本文章的目的在于探讨如何运用数据科学的方法和技术,对这些大数据进行分析,以提高航空安全水平。范围涵盖了从数据收集、预处理到数据分析、模型构建和应用的整个流程。本文将按照以下结构进行组织:首先介绍数据科学和航空安全分析的核心概念以及它们之间的联系;接着阐述核心算法原理和具体操作步骤,并使用Python源代码进行详细说明;

软件工程实践的博客 1291

拆解大模型底层原理:LLM 是如何预测下一个词的?

本文深入解析了大语言模型(LLM)预测下一个词的核心原理。首先,文本通过分词器(Tokenizer)被转换为Token ID序列,解决了直接处理词的高复杂度问题。其次,通过嵌入(Embedding)将离散Token映射为高维语义向量,构建词与词之间的几何关系。接着引入位置编码(Positional Encoding)保留词序信息。最关键的是自注意力机制(Self-Attention),通过Q、K、V向量动态计算词间关联,实现上下文理解。最后通过线性投影和Softmax输出概率分布,完成自回归生成。

meilindehuzi_a的博客 548

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大模型训练原理(八)|为什么把一个 Token 变成几千个数字,它反而开始有“意义”了?——Embedding 真正讲透

本文深入解析了NLP模型中Token Embedding的核心机制与重要性。文章首先指出Token ID仅是离散编号而非语义表示,直接输入存在数值关系误导的问题。然后分析了one-hot编码的局限性:无法表达词间关系且维度爆炸。真正的解决方案是Embedding——将Token映射为连续高维向量,这些向量作为可训练参数在预测任务中自动学习语义关联。 关键点包括: Token ID是地址索引,Embedding Matrix存储可学习的向量表示 Embedding通过高维空间编码分布式语义,而非人工设计特征

w1345360200的博客 481

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【第四章:大模型(LLM)】01.Embedding is all you need-(6)从 Word2Vec 到推荐/广告系统,再到大语言模型(LLM)

摘要:本文探讨了Embedding技术在AI发展中的核心作用。从Word2Vec的词向量表示开始,Embedding实现了从离散符号到连续向量的转变,构建了语义空间基础。随后在推荐系统(如淘宝的item2vec)和广告系统(如Wide&Deep模型)中得到广泛应用,解决了高维稀疏特征的处理问题。随着技术演进,Transformer模型(BERT/GPT)实现了动态上下文相关的Embedding表示。最终,Embedding成为连接词向量、推荐系统和大语言模型的统一语义基础,支撑了现代AI的理解、推理

IT古董 909

【AI】Embedding -- 词嵌入

现在我们有了一串数字 [8, 121, 33, …] ,但这串数字本身没有任何意义。数字 8 和数字 121 之间没有任何关联。我们需要将每个数字 ID 转换成一个 高维向量(Vector) ,这个向量能够捕捉到 Token 的 语义信息。至此,词嵌入完成。我们把一串无意义的数字 ID,转换成了一个包含初步语义信息的向量矩阵。

u011808788的博客 803

embedding层的含义与实现

Token 是书架上的书名标签(离散的 ID)。Embedding 层 就是图书馆管理员。Embedding 向量 就是管理员写在小卡片上的内容摘要(稠密向量)。它的意义在于:不让大脑(模型)去翻看每一本实体书(原始数据),而是通过阅读简短的摘要(向量),就能瞬间理解书的核心内容,并快速找到相关的书籍。

weixin_45617478的博客 432

Embedding技术在商业搜索与推荐场景的实践

每天给你送来NLP技术干货!分享嘉宾:苏永浩 58同城 资深算法工程师编辑整理:吴祺尧出品平台:DataFunTalk导读:从C端视角来看,58商业将Embedding作为广告的一种理解方...

zenRRan的博客 819

第二章 Transformer 架构(上):大模型的基石与语义理解机制

在人工智能工程实践,尤其是领域,对底层架构的理解绝非可有可无的理论点缀,而是决定测试深度、问题定位精度与系统性评估能力的关键前提。本章聚焦于当前所有主流大模型赖以构建的统一基础——。该架构自2017年谷歌发布里程碑式论文《》起,便彻底取代了传统的循环神经网络(RNN)与卷积神经网络(CNN),成为自然语言处理(NLP)乃至多模态智能的通用范式。

weixin_44229071的博客 593

深入理解大模型底层:分词器、词向量与词向量矩阵

当你向大模型提问时,文字经历了一场精密的变身:切碎、编号、翻译成向量、注入位置信息,才被模型真正"看见"。本文拆解这条从文本到语义的完整链路。

m0_59235245的博客 227

【Datawhale2607】llm-algo-leetcode task01 PyTorch入门

PyTorch入门指南:张量操作、嵌入层与自动求导 本文是PyTorch的入门教程,重点介绍了三个核心知识点: 张量维度变换:通过einops库实现高效的张量操作,包括维度重排(rearrange)、降维聚合(reduce)和复制广播(repeat)三大核心功能。 嵌入层原理:讲解Embedding层的本质是将离散的token ID转换为连续的稠密向量,通过查表操作实现文本的向量化表示。 自动求导机制:介绍PyTorch的Autograd系统如何通过动态计算图实现自动微分,这是神经网络训练的核心机制。 教程

raulyy7777的博客 251

第3章 输入是如何进入 Transformer 的

important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;Token IDs例: [32, 128]例: [32, 128, 512]例: [1, 128, 512]最终输入例: [32, 128, 512]步骤输入输出作用Tokenizer文字Token ID文字→整数。

AI服务生活 374

从Bigram语言模型入门:理解词嵌入与序列生成的核心原理

语言模型是自然语言处理的基础技术,其核心原理是通过统计或神经网络方法学习词元之间的条件概率分布。Bigram作为最简单的统计语言模型,基于马尔可夫假设实现序列预测,体现了词嵌入(Embedding)和概率计算的基本思想。在工程实践中,这种模型虽然结构简单,但能够直观展示文本生成的完整流程,为理解现代大语言模型(LLM)的工作原理奠定基础。通过字符级词元化和概率分布可视化,开发者可以深入掌握从数据预处理到模型训练的关键环节。Bigram模型在文本自动补全、拼写检查等场景中仍有实用价值,同时也是学习Transf

cunfuxiao7305的博客 476

大模型学习记录之Agent部署

首先,需要明确大模型的概念,通过百度的文心一言的结果,我们得到如下概念:大模型(Large Models) 在人工智能和机器学习领域,特别是深度学习领域,指的是那些具有大量参数、复杂结构和高度计算需求的模型。这些模型通常需要在大规模数据集上进行长时间的训练,以捕捉数据中的复杂模式和关系。大模型的出现和发展,主要得益于计算能力的提升、算法的优化以及大规模数据集的可用性。大模型的特点可以概括为以下几个方面:大模型的发展也带来了一些挑战和争议。一方面,大模型需要消耗大量的计算资源和时间成本,这限制了其在实际应用中

pengxiang1998的博客 1876

DataWhale组队学习笔记--llm-algo-leetcode(一)

本文介绍了PyTorch中三个核心概念的实际应用。首先通过einops库简化张量维度变换,对比了原生permute+reshape与einops.rearrange方法,展示了图像特征序列化这一Transformer经典操作。其次深入剖析嵌入层本质,演示了nn.Embedding与手动索引查表的等价实现,解释了其优于one-hot编码的原因。最后以前向传播和反向传播的射箭类比,生动说明了神经网络训练的核心机制。这些内容为理解大模型底层实现提供了实用指导。

m0_68165821的博客 328
上一篇: 【finetune】Full Fine-tuning vs Frozen Backbone:迁移学习中的参数调优实践
下一篇: 【LLM基础知识】深入理解 Tokenization:大语言模型的第一课
未收敛
博客等级 码龄11年 3303粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值