当前位置: 首页 > news >正文

推荐系统(二十四):Embedding层的参数是如何在模型训练过程中学习的?

近来有不少读者私信我关于嵌入层(Embedding层)参数在模型训练过程中如何学习的问题。虽然之前已经在不少文章介绍过 Embedding,但是为了读者更好地理解,笔者将通过本文详细解读嵌入层(Embedding Layer)的参数如何更新的,尤其是在反向传播过程中,为什么输入层的参数会被更新,而通常反向传播更新的是神经网络的权重参数,而不是输入数据,很多读者可能会混淆输入数据和嵌入层的权重参数。

一、嵌入层参数更新的本质机制解析

嵌入层(Embedding Layer)的参数更新逻辑与传统神经网络层的参数更新有本质区别,核心在于嵌入层的权重矩阵本身就是模型参数,而非输入数据的静态特征。以下从技术原理和实现细节两个层面详细说明:

1.参数定位:权重矩阵是模型的一部分

  • 权重矩阵的角色
    嵌入层的核心是一个可学习的权重矩阵,以商品类目为例,类目对应的 embedding 矩阵形状为 (类目词汇表大小, 嵌入维度)。例如,当类目词汇表包含 1000 个类目且嵌入维度为 300 时,该矩阵为 1000×300 的可训练参数。
    关键区别:输入数据是离散的索引(如类目ID=5),而嵌入层的权重矩阵是模型的一部分,与全连接层的权重性质完全相同。

  • 查表操作的实质
    前向传播时,输入索引(如[2,5])通过查表操作(类似weight[[2,5]])提取对应行向量。此过程看似是“输入处理”,但查表操作本身包含参数访问,因此反向传播时梯度会传递到权重矩阵。

2.反向传播的梯度流动路径

  • 梯度计算示例
    假设输入索引为 i,嵌入向量为 E[i],后续网络层对损失函数的梯度为 dL/dE[i]。通过链式法则:梯度 dL/dE[i] 直接作用于权重矩阵的第 i 行;优化器根据梯度更新矩阵中所有被使用的行向量。读者可能还是有疑惑:Embedding 向量本身不是神经网络的参数,怎么通过梯度更新呢?这里可以简单理解为——原始 embedding 向量为 [1,1,1,1,1,…], 即全 1 向量,而在反向传播中更新的 embedding 向量是一个权重向量 [w1,w2,w3,w4,…],如此一来,在反向传播中不断更新的 embedding 向量 [w1,w2,w3,w4,…] 最终就是真正的 embedding 向量,而虚拟的 [1,1,1,1,1,…] 全为 1,没有存在的必要,当然本身就不存在。所以,实际(embedding 参数) [w1,w2,w3,w4,…]本身就是模型参数的一部分,与原始的输入(比如类目code、索引)是无关的。

  • 参数更新范围
    与全连接层不同,嵌入层仅更新被实际使用的行向量。例如,若某批次仅使用索引 2 和 5,则只更新矩阵的第 2 行和第 5 行,未使用的行(如索引3)梯度为 0。这种稀疏更新特性使其适合处理大规模词表。

3.与“输入数据不更新”原则的兼容性

  • 输入数据与参数的分离
    输入数据:始终是固定的离散索引(如商品类目ID=5),训练过程中不会被修改;
    参数矩阵:根据输入数据的选择性索引,动态更新对应行向量;

  • 类比说明
    将嵌入层类比为“可学习的字典”:字典内容(权重矩阵)由模型拥有,训练目标是优化字典中的词义解释
    输入数据(索引)只是查询字典的钥匙,钥匙本身不改变。

4.PyTorch实现验证

通过代码可直观地观察参数更新过程:

import torch
import torch.nn as nn# 初始化嵌入层(类目词表大小=5,嵌入维度=3)
embedding = nn.Embedding(5, 3)
print("初始权重矩阵:\n", embedding.weight.data)# 模拟训练步骤
optimizer = torch.optim.SGD(embedding.parameters(), lr=0.1)
input_indices = torch.LongTensor([2])  # 选择索引2# 前向传播
output = embedding(input_indices)
loss = output.sum()  # 假设损失函数为输出求和
loss.backward()# 更新参数前查看梯度
print("更新前梯度:\n", embedding.weight.grad)
optimizer.step()# 更新后查看权重变化(仅索引2的行被更新)
print("更新后权重矩阵:\n", embedding.weight.data)

输出:

初始权重矩阵:tensor([[ 0.6638, -1.2098,  0.4363],[ 0.3482,  0.8564, -0.1783],[ 1.2376, -0.5921,  0.9815],  # ← 索引2的初始值[-0.1156,  0.3279,  0.8942],[-0.4392,  0.6653,  0.2191]])更新前梯度:tensor([[0., 0., 0.],[0., 0., 0.],[1., 1., 1.],  # ← 仅索引2的梯度非零[0., 0., 0.],[0., 0., 0.]])更新后权重矩阵:tensor([[ 0.6638, -1.2098,  0.4363],[ 0.3482,  0.8564, -0.1783],[ 1.1376, -0.6921,  0.8815],  # ← 索引2的行值改变(lr=0.1)[-0.1156,  0.3279,  0.8942],[-0.4392,  0.6653,  0.2191]])

5.与全连接层的对比在这里插入图片描述


二、如何计算模型参数量

以 Wide&Deep 模型为例,推荐系统参数量计算需分别分析其 Wide 部分(线性模型)和 Deep 部分(深度神经网络)的结构特征。以下是具体计算方法及实现要点:

1.Wide 部分参数量计算

Wide 部分采用广义线性模型,核心参数由特征交叉项和偏置项构成:
Params wide = ( d w i d e + 1 ) \text{Params}_{\text{wide}} = (d_{wide} + 1) Paramswide=(dwide+1)

  • 特征交叉项:若输入特征维度为 d(包含原始特征和交叉特征),则权重向量维度为 d。
  • 偏置项:1 个标量参数。
  • 示例:若使用用户性别(2 种取值)与商品类别(10 种取值)的交叉特征,则交叉维度为 2×10=20,总参数量为 20+1=21。

2.Deep 部分参数量计算

Deep 部分由嵌入层(Embedding)和全连接层(Dense Layer)构成,计算需分模块:

2.1 嵌入层(Embedding Layer)

Embedding 层的参数量计算公式如下:
Params embed = ∑ i = 1 k ( vocab_size i × e i ) \text{Params}_{\text{embed}} = \sum_{i=1}^k (\text{vocab\_size}_i \times e_i) Paramsembed=i=1k(vocab_sizei×ei)

其中,k 为类别特征数量,vocab_size_i 为第 i 个特征的词表大小,e_i 为对应嵌入维度。

2.2 全连接层参数(DNN Layer)

L 为隐藏层数,n_l 为第 l 层神经元数,n_l − 1 为上一层输出维度。例如,输入维度为100,隐藏层为 100→64→32,则参数量为:
Params dnn = ∑ l = 1 L ( n l − 1 × n l + n l ) = ( 100 × 64 + 64 ) + ( 64 × 32 + 32 ) (实例展开) \begin{aligned} \text{Params}_{\text{dnn}} &= \sum_{l=1}^L (n_{l-1} \times n_l + n_l) \\ &= (100 \times 64 + 64) + (64 \times 32 + 32) \quad \text{(实例展开)} \end{aligned} Paramsdnn=l=1L(nl1×nl+nl)=(100×64+64)+(64×32+32)(实例展开)

2.3 联合输出层参数

联合输出层将 Wide 和 Deep 的输出拼接后通过 Sigmoid 函数:
Params out = ( d w i d e + d d e e p ) ∗ 1 + 1 \text{Params}_{\text{out}} = (d_{wide} + d_{deep})*1+1 Paramsout=(dwide+ddeep)1+1

d_deep 为 Deep 部分最后一层输出维度,+1 为偏置项.

2.4 总参数量

总参数量为三部分之和:
T o t a l P a r a m s = P a r a m s w i d e + P a r a m s e m b e d + P a r a m s d n n + P a r a m s o u t p u t \text Total Params=Params_{wide} + Params_{embed} + Params_{dnn} + Params_{output} TotalParams=Paramswide+Paramsembed+Paramsdnn+Paramsoutput

相关文章:

推荐系统(二十四):Embedding层的参数是如何在模型训练过程中学习的?

近来有不少读者私信我关于嵌入层(Embedding层)参数在模型训练过程中如何学习的问题。虽然之前已经在不少文章介绍过 Embedding,但是为了读者更好地理解,笔者将通过本文详细解读嵌入层(Embedding Layer)的参…...

【Ubuntu】关于系统分区、挂载点、安装位置的一些基本信息

在ubuntu22及以前的版本中,最好是手动配置分区及其挂载点,通常我们会配置成3/4个分区: 引导区,交换区,根挂载点,home挂载点(有时根挂载点和home合二为一) 配置各种环境所占用的内存 …...

概率dp总结

概率 DP 用于解决概率问题与期望问题,建议先对 概率 & 期望 的内容有一定了解。一般情况下,解决概率问题需要顺序循环,而解决期望问题使用逆序循环,如果定义的状态转移方程存在后效性问题,还需要用到 高斯消元 来优…...

深入解析:RocketMQ、RabbitMQ和Kafka的区别与使用场景

互联网大厂Java求职者面试:RocketMQ、RabbitMQ和Kafka的深入解析 故事场景:严肃且专业的面试官与架构师程序员马架构 在一家知名的互联网大厂,Java求职者正在接受一场严格的面试。面试官是一位经验丰富的技术专家,他将通过多轮提…...

探秘Transformer系列之(30)--- 投机解码

探秘Transformer系列之(30)— 投机解码 文章目录 探秘Transformer系列之(30)--- 投机解码0x00 概述0x01 背景1.1 问题1.2 自回归解码 0x02 定义 & 历史2.1 投机解码2.2 发展历史 0x03 Blockwise Parallel Decoding3.1 动机3.2…...

【CSS】层叠,优先级与继承(三):超详细继承知识点

目录 继承一、什么是继承?2.1 祖先元素2.2 默认继承/默认不继承 二、可继承属性2.1 字体相关属性2.2 文本相关属性2.3 列表相关属性 三、不可继承属性3.1 盒模型相关属性3.2 背景相关属性 四、属性初始值4.1 根元素4.2 属性的初始值4.3 得出结论 五、强制继承5.1 in…...

SpringBoot中6种自定义starter开发方法

在SpringBoot生态中,starter是一种特殊的依赖,它能够自动装配相关组件,简化项目配置。 自定义starter的核心价值在于: • 封装复杂的配置逻辑,实现开箱即用 • 统一技术组件的使用规范,避免"轮子"泛滥 • 提高开发效率,减少重复代码 方法一:基础配置类方式 …...

时间自动填写——电子表格公式的遗憾(DeepSeek)

now()/today()缘源来,人肉值粘胜无依。用函数抓取系统时间,人肉CTRLC“永葆青春”——直接时间数据存储。 笔记模板由python脚本于2025-04-23 23:21:44创建,本篇笔记适合想要研究电子表格日期自动填写的coder翻阅。 【学习的细节是欢悦的历程…...

AUTODL关闭了程序内存依然占满怎么办

AutoDL帮助文档 关闭了程序,使用nvidia-smi查看,内存任然爆满: 执行 ps -ef | grep train | awk {print $2} | xargs kill -9...

Spark集群搭建之Yarn模式

1.把spark安装包复制到你存放安装包的目录下,例如我的是/opt/software cd /opt/software,进入到你存放安装包的目录 然后tar -zxvf 你的spark安装包的完整名字 -C /opt/module,进行解压。例如我的spark完整名字是spark-3.1.1-bin-hadoop3.2.…...

CSS-跟随图片变化的背景色

CSS-跟随图片变化的背景色 获取图片的主要颜色并用于背景渐变需要安装依赖 colorthief获取图片的主要颜色. 并丢给背景注意 getPalette并不是个异步方法 import styles from ./styles.less; import React, { useState } from react; import Colortheif from colorthief;cons…...

一,开发环境安装

环境安装选择的版本如下 Python3.7 Anaconda5.3.1 CUDA 10.0 Pycharm Anaconda安装:下载地址 CUDA 10.0安装,包下载地址...

局部最小实验--用最小成本确保方向正确

### **将「局部最小实验」融入「简单、专注、本分」认知框架的实践方案** 你的核心认知框架是 **「简单、专注、本分」**,而 **「局部最小实验」**(MVP思维)本质上是一种 **低成本验证、快速迭代** 的方法论。二者看似矛盾(简单…...

【网络应用程序设计】实验三:网络聊天室

个人博客:https://alive0103.github.io/ 代码在GitHub:https://github.com/Alive0103/XDU-CS-lab 能点个Star就更好了,欢迎来逛逛哇~❣ 主播写的刚够满足基本功能,多有不足,仅供参考,还请提PR指正&#xff…...

【泊松过程和指数分布】

泊松过程的均值函数与方差函数计算 1. 泊松过程的定义 泊松过程是一个计数过程 { N ( t ) , t ≥ 0 } \{N(t), t \geq 0\} {N(t),t≥0},满足以下条件: 独立增量:在不相交时间段内事件发生次数相互独立;平稳增量:在时…...

leetcode-排序

排序 面试题 01.01. 判定字符是否唯一 题目 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s "leetcode" 输出: false 示例 2&#xff1a; 输入: s "abc" 输出: true限制&#xff1a; 0 < len(s) &…...

Axure中继器表格:实现复杂交互设计的利器

在产品原型设计领域&#xff0c;Axure凭借其强大的元件库和交互功能&#xff0c;成为设计师们手中的得力工具。其中&#xff0c;中继器元件在表格设计方面展现出了独特的优势&#xff0c;结合动态面板等元件&#xff0c;能够打造出功能丰富、交互体验良好的表格原型。本文将深入…...

容器内部无法访问宿主机服务的原因及解决方法

容器内部无法访问宿主机服务的原因及解决方法 问题原因 当你在Docker容器内部尝试访问宿主机上的服务(如192.168.130.148:8000)时失败,通常有以下几种原因: 网络隔离:Docker容器默认使用自己的网络命名空间,与宿主机网络隔离IP地址误解:容器内看到的宿主机IP与外部网络不…...

IMU---MPU6050

一、芯片概述 1. 基本定位 型号&#xff1a;MPU6050&#xff0c;InvenSense&#xff08;现TDK&#xff09;推出的全球首款6轴MEMS运动传感器&#xff0c;集成3轴加速度计、3轴陀螺仪&#xff0c;内置温度传感器&#xff08;非6轴核心功能&#xff09;。定位&#xff1a;低成本…...

提高Spring Boot开发效率的实践

Spring Boot开发效率的重要性 Spring Boot 作为一个开源的 Java 框架,旨在简化新 Spring 应用和微服务的创建与开发 1。其核心特性,如自动配置、约定优于配置以及内嵌服务器,极大地降低了开发门槛,使得开发者可以更专注于业务逻辑的实现 1。在现代应用开发领域,Spring Bo…...

Spring Boot的优点:赋能现代Java开发的利器

Spring Boot 是基于 Spring 框架的快速开发框架&#xff0c;自 2014 年发布以来&#xff0c;凭借其简洁性、灵活性和强大的生态系统&#xff0c;成为 Java 后端开发的首选工具。尤其在 2025 年&#xff0c;随着微服务、云原生和 DevOps 的普及&#xff0c;Spring Boot 的优势更…...

Python内置函数---breakpoint()

用于在代码执行过程中动态设置断点&#xff0c;暂停程序并进入调试模式。 1. 基本语法与功能 breakpoint(*args, kwargs) - 参数&#xff1a;接受任意数量的位置参数和关键字参数&#xff0c;但通常无需传递&#xff08;默认调用pdb.set_trace()&#xff09;。 - 功能&#x…...

2.RabbitMQ - 入门

RabbitMQ 入门 文章目录 RabbitMQ 入门一、快速入门1.1 介绍1.2 创建项目1.3 简单入门 二、Work模型三、交换机3.1 Fanout3.2 Direct3.3 Topic 四、声明队列和交换机4.1 配置文件4.2 注解 五、消息转换器 一、快速入门 1.1 介绍 官方的API较为麻烦&#xff0c;我们使用官方推…...

智能配送机器人控制系统设计

标题:智能配送机器人控制系统设计 内容:1.摘要 随着物流行业的快速发展&#xff0c;智能配送机器人的需求日益增长。本文的目的是设计一套高效、稳定的智能配送机器人控制系统。方法上&#xff0c;采用了先进的传感器技术、定位算法和路径规划策略&#xff0c;确保机器人能准确…...

2025.04.23华为机考第一题-100分

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 星空探索者 问题描述 LYA是一位天文学爱好者,她拍摄了一张星空照片并将其数字化为二维亮度图。在这张图像中,每个像素点的值代表该位置的亮度。现在,LYA想要寻找特定亮度的星…...

MCP 基于 TypeScript 的完整示例,包含stdio、sse多种用法和调试,对于构建自己的API工具链很有用

typescript-mcp-demo 这是一个基于 Model Context Protocol (MCP) 的 TypeScript 示例项目&#xff0c;展示了如何创建一个简单的 MCP 服务器&#xff0c;包含基本的工具&#xff08;tools&#xff09;和资源&#xff08;resources&#xff09;功能。 官网&#xff1a;https:…...

【计算机视觉】CV项目实战- SORT 多目标跟踪算法

SORT 多目标跟踪算法&#xff1a;从原理到实战的完整指南 一、SORT算法核心解析1.1 算法架构1.2 关键技术组件 二、实战环境搭建2.1 基础环境配置2.2 数据准备 三、核心功能实战3.1 基础跟踪演示3.2 自定义检测器集成3.3 性能评估 四、高级应用与优化4.1 针对遮挡场景的改进4.2…...

常用第三方库精讲:cached_network_image图片加载优化

常用第三方库精讲&#xff1a;cached_network_image图片加载优化 在Flutter应用开发中&#xff0c;图片加载是一个非常重要的环节。合理的图片加载策略不仅能提升用户体验&#xff0c;还能优化应用性能。本文将深入讲解cached_network_image库的使用&#xff0c;以及如何通过它…...

xcode 16 遇到contains bitcode

问题 "id" : "xxx-xxx-xxx","status" : "409","code" : "STATE_ERROR.VALIDATION_ERROR","title" : "Validation failed","detail" : "Invalid Executable. The executable …...

MySQL数据库精研之旅第十期:打造高效联合查询的实战宝典(一)

专栏&#xff1a;MySQL数据库成长记 个人主页&#xff1a;手握风云 目录 一、简介 1.1. 为什么要使用联合查询 1.2. 多表联合查询时的计算 1.3. 示例 二、内连接 2.1. 语法 2.2. 示例 三、外连接 4.1. 语法 4.2. 示例 一、简介 1.1. 为什么要使用联合查询 一次查询需…...

Sentinel源码—9.限流算法的实现对比二

大纲 1.漏桶算法的实现对比 (1)普通思路的漏桶算法实现 (2)节省线程的漏桶算法实现 (3)Sentinel中的漏桶算法实现 (4)Sentinel中的漏桶算法与普通漏桶算法的区别 (5)Sentinel中的漏桶算法存在的问题 2.令牌桶算法的实现对比 (1)普通思路的令牌桶算法实现 (2)节省线程的…...

单片机外设模块汇总与介绍

一、基础外设 GPIO&#xff08;通用输入输出&#xff09; 功能&#xff1a;数字信号输入/输出&#xff0c;支持推挽、开漏模式。 应用&#xff1a;控制LED、按键检测、数字传感器接口。 配置要点&#xff1a; 输入模式&#xff1a;上拉/下拉电阻配置 输出模式&#xff1a;…...

git lfs下载大文件限额

起因是用 model.load_state_dict(torch.load())加载pt权重文件时&#xff0c;出现错误&#xff1a;_pickle.UnpicklingError: invalid load key, ‘v’. GPT告诉我&#xff1a;你的 pt 文件不是权重文件&#xff0c;而是模型整体保存&#xff08;或根本不是 PyTorch 文件&#…...

第4天:Linux开发环境搭建

&#x1f9f0; 第4天&#xff1a;Linux开发环境搭建 一、GCC 编译器 &#x1f4cc; 1. 什么是 GCC&#xff1f; GCC&#xff08;GNU Compiler Collection&#xff09;是 GNU 工程开发的编译器集合&#xff0c;主要支持 C、C、Fortran 等语言的编译&#xff0c;是 Linux 系统中…...

“在中国,为中国” 英飞凌汽车业务正式发布中国本土化战略

3月28日&#xff0c;以“夯实电动化&#xff0c;推进智能化&#xff0c;实现高质量发展”为主题的2025中国电动汽车百人会论坛在北京举办。众多中外机构与行业上下游嘉宾就全球及中国汽车电动化的发展现状、面临的挑战与机遇&#xff0c;以及在技术创新、市场布局、供应链协同等…...

【AI应用】免费代码仓构建定制版本的ComfyUI应用镜像

免费代码仓构建定制版本的ComfyUI应用镜像 1 创建代码仓1.1 注册登陆1.2 创建代码仓1.5 安装中文语言包1.4 拉取ComfyUI官方代码2 配置参数和预装插件2.1 保留插件和模型的版本控制2.2 克隆插件到代码仓2.2.1 下载插件2.2.2 把插件设置本仓库的子模块管理3 定制Docker镜像3.1 创…...

新市场环境下新能源汽车电流传感技术发展前瞻

新能源革命重构产业格局 在全球碳中和战略驱动下&#xff0c;新能源汽车产业正经历结构性变革。国际清洁交通委员会&#xff08;ICCT&#xff09;最新报告显示&#xff0c;2023年全球新能源汽车渗透率突破18%&#xff0c;中国市场以42%的市占率持续领跑。这种产业变革正沿着&q…...

ctfhub-RCE

关于管道操作符 windows&#xff1a; 1. “|”&#xff1a;直接执行后面的语句。 2. “||”&#xff1a;如果前面的语句执行失败&#xff0c;则执行后面的语句&#xff0c;前面的语句只能为假才行。 3. “&”&#xff1a;两条命令都执行&#xff0c;如果前面的语句为假则直…...

SSE(Server-Sent Events)技术详解:轻量级实时通信的全能方案

一、实时通信技术演进与SSE定位 1.1 主流实时通信技术对比 #mermaid-svg-1VQcZqAOmMoxosiW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1VQcZqAOmMoxosiW .error-icon{fill:#552222;}#mermaid-svg-1VQcZqAOmMox…...

QT项目----电子相册(4)

文章目录 前言一、右侧区域PicShow1.创建PicShow2.创建PicButton3.效果图qss 4.设置动画QGraphicsOpacityEffectQPropertyAnimation 5.双击左侧图片目录 右侧显示图片解决缩放时卡顿的问题 二、删除相册实现思路代码实现 总结 前言 提示&#xff1a;这里可以添加本文要记录的大…...

Sentinel源码—9.限流算法的实现对比一

大纲 1.漏桶算法的实现对比 (1)普通思路的漏桶算法实现 (2)节省线程的漏桶算法实现 (3)Sentinel中的漏桶算法实现 (4)Sentinel中的漏桶算法与普通漏桶算法的区别 (5)Sentinel中的漏桶算法存在的问题 2.令牌桶算法的实现对比 (1)普通思路的令牌桶算法实现 (2)节省线程的…...

46. 全排列

题目 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#xff1a…...

UML 顺序图:电子图书馆管理系统的交互之道

目录 一、初识 UML 顺序图 二、电子图书馆管理系统顺序图解析 &#xff08;一&#xff09;借阅流程 &#xff08;二&#xff09;归还流程 三、顺序图绘画 四、顺序图的优势与价值 五、总结 UML 顺序图是描绘系统组件交互的有力工具。顺序图直观展示消息传递顺序与对象协…...

前端渲染pdf文件解决方案-pdf.js

目录 一、前言 二、简介 1、pdf.js介绍 2、插件版本参数 三、通过viewer.html实现预览&#xff08;推荐&#xff09; 1、介绍 2、部署 【1】下载插件包 【2】客户端方式 【3】服务端方式&#xff08;待验证&#xff09; 3、使用方法 【1】预览PDF文件 【2】外部搜索…...

接口测试和功能测试详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要分为两个部分&#xff1a; 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者…...

LeetCode热题100--283.移动零--简单

1.题目 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0]…...

CoT 数据集如何让大模型学会「一步一步思考」?

目前&#xff0c;大模型的回答路径基本遵循input-output的方式&#xff0c;在面对复杂任务时表现不佳。反之&#xff0c;人类会遵循一套有条理的思维流程&#xff0c;逐步推理得出正确答案。这种差异促使人们深入思考&#xff1a;如何才能让大模型“智能涌现”&#xff0c;学会…...

量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体)

总章数字免疫系统的解剖学革命 在2024年某国家级数字政务平台的安全审计中&#xff0c;传统前端架构暴露出的信任链断裂问题&#xff0c;导致公民隐私数据以每秒23TB的速度在暗网流通。当我们用PET扫描技术观察现代Web应用的微观结构&#xff0c;发现94.7%的安全威胁源自组件间…...

配置 Nginx 的 HTTPS

证书文件 文件名 作用 来源 example.com.key 服务器的私钥&#xff0c;用于加密和解密数据。 本地生成 -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAqp5c... -----END RSA PRIVATE KEY----- example.com.csr 证书签名请求文件&#xff0c;包含公钥和申请者信息&…...

FPGA开发流程初识

FPGA 的开发流程可知&#xff0c;在 FPGA 开发的过程中会产生很多不同功能的文件&#xff0c;为了方便随时查找到对应文件&#xff0c;所以在开始开发设计之前&#xff0c;我们第一个需要考虑的问题是工程内部各种文件的管理。如 果不进行文件分类&#xff0c;而是将所有文件…...