神经网络中的嵌入是一种将离散的、高维数据(如单词、类别或 ID)表示为连续的、低维向量的方法。 这些向量通过将语义相似的项在向量空间中放置得更近,来捕获原始数据点之间有意义的关系。 例如,在自然语言处理 (NLP) 中,“猫”这个词可能表示为 300 维向量,而“狗”表示为附近的另一个向量,反映了它们相似的含义。 嵌入是在训练期间学习的,允许模型发现未明确定义的模式,这使得它们对于语言建模、推荐系统或处理分类特征等任务至关重要。
嵌入是通过训练神经网络将输入数据映射到密集向量表示来创建的。 在训练期间,模型会调整这些向量以最小化损失函数,例如从上下文预测目标词(如 Word2Vec 中)或在推荐中对用户-项目交互进行分类。 例如,在电影推荐系统中,每个用户和电影都可以分配一个嵌入。 该模型学习将用户和他们互动的电影在嵌入空间中放置得更近。 嵌入的维度(例如,50、100、300)是一个超参数:较小的维度可能会丢失细微差别,但会降低计算成本,而较大的维度会捕获更多细节,但存在过度拟合的风险。 嵌入通常是随机初始化的,并通过反向传播进行细化。
实际上,嵌入是作为查找表实现的。 在 PyTorch 或 TensorFlow 等框架中,嵌入层是一个矩阵,其中每一行对应于唯一的输入标识符。 例如,一个包含 10,000 个单词的词汇表,每个单词具有 300 维的嵌入,将使用一个 10,000x300 的矩阵。 在训练期间,当输入单词“apple”(ID 42)传递时,该层检索矩阵的第 42 行作为其向量。 开发人员必须处理词汇表外的项目(例如,通过哈希或默认向量),并决定是使用预训练的嵌入(如 NLP 的 GloVe)还是从头开始训练它们。 与 one-hot 编码相比,嵌入降低了计算复杂度——特别是对于大型词汇表——并且通过在类似输入之间共享学习到的模式,使模型能够更好地泛化。