【自用】NLP算法面经(5)
一、L1、L2正则化
正则化是机器学习中用于防止过拟合并提高模型泛化能力的技术。当模型过拟合时,它已经很好地学习了训练数据,甚至是训练数据中的噪声,所以可能无法在新的、未见过的数据上表现良好。
比如:

其中,x1和x2为特征,f为拟合模型,w1和w2为模型权重,b为模型偏执。左图拟合模型公式最高阶次为1,即一条直线,对应欠拟合;中间拟合模型公式最高阶次为2,即一条简单的曲线;右图拟合模型公式最高阶次为4甚至更高,即一条复杂的曲线,对应过拟合。
可以看出,欠拟合时模型未有效学习数据中的信息,错分样本很多;过拟合时模型学习过于充分,甚至连包裹在红色类中的两个明显的噪声都被学习了,训练样本不会被错分,但无法保证对没见过的测试样本进行有效划分。所以更希望得到中间的这种模型。
对比中图和右图,容易发现模型阶次越高,分类超平面弯曲越多,高阶项前系数越大,弯曲程度越大,所以减少过拟合其实就是要减少模型的高阶次或弱化高阶项。
1、L1正则化
也称为LASSO正则化,将模型权重系数的绝对值之和添加到损失函数中。它能够将模型中某些权重置0使对应的特征不再发挥作用以达到降低模型复杂度的作用。
假设原本模型的分类损失为标准交叉熵,则加上L1正则化项后如下:

其中,yi和pi是样本xi的真实标签和预测概率,wj为权重系数,λ用来平衡学习和正则化程度。
有了后面这一项,在优化损失时,|wj|会一定程度地减小,从而达到弱化高阶项的作用(其实低阶项也会被弱化,但分类超平面的复杂度主要受高阶项控制)。其实,L1正则化能达到使模型稀疏化的作用,即有些权重被置0。
简化上面的损失函数只有一个权重系数,写作J(w)=L(w)+λ|w|,假设L(w)在w=0时的导数如下:

于是有:

如果λ较大,会使损失函数的导数在w=0的左右两侧异号,则该点极可能是一个极小值点,在优化时,很可能将w优化至0。对于多个w的情况,与之类似,但只是一部分w取0即可达到极小值。部分w置0,则对应的特征不在发挥作用,从而使模型稀疏化。
L1正则化能够通过使模型稀疏化达到降低模型复杂度的作用。这种稀疏化特性使它能够作为一种特征选择策略,适合在高维且特征相关性不强的场景中使用。
2、L2正则化
也称为Ridge正则化,将模型系数的平方值之和添加到损失函数中。与L1正则化不同,L2正则化不会强制系数恰好为0,而是鼓励系数变小。
仍然假设原本模型的分类损失为标准交叉熵,则加上L2正则化项后如下:

同样地,简化上面的损失函数只有一个权重系数,写作J(w)=L(w)+λw²,假设L(w)在w=0时的导数如下:

有:

可见,L2正则项的加入不影响w=0处损失函数的导数,也就不容易在w=0处形成极小值。响应地,w就不容易被优化为0。对于多个w的情况,所有wj都不为0,却又希望损失J(w)小,就会将各个wj优化的很小,也就使高阶项发挥的作用变小,从而降低模型复杂度。
L2正则化能够通过将各项权重系数优化得很小以达到降低模型复杂度的目的。它能够减少单个特征在模型中的作用,避免某个特征主导整个预测方向。L2正则化项是可微的,优化计算效率更高,适合处理低维且特征间具有强相关性的场景。
二、self-attention
class SelfAttention(nn.Module):def __init__(self, hidden_dim):super(SelfAttention, self).__init__()self.query_matrix = nn.Linear(hidden_dim, hidden_dim, bias=False)self.key_matrix = nn.Linear(hidden_dim, hidden_dim, bias=False)self.value_matrix = nn.Linear(hidden_dim, hidden_dim, bias=False)self.dropout = nn.Dropout(0.1)self.scale = torch.sqrt(torch.FloatTensor([hidden_dim])).to(device)def forward(self, x):batch_size, seq_len, hidden_dim = x.size()Q = self.query_matrix(x)K = self.key_matrix(x)V = self.value_matrix(x)scores = torch.matmul(Q, K.transpose(1,2))scaled_scores = scores / self.scaleattn_weights = torch.softmax(scaled_scores, dim=-1)attn_weights = self.dropout(attn_weights)attn_output = torch.matmul(attn_weights, V)return attn_output, attn_weights
三、稳定版softmax
import mathdef softmax(x):max_x = max(x)exp_x = [math.exp(i - max_x) for i in x]sum_exp_x = sum(exp_x)return [i / sum_exp_x for i in exp_x]
四、chatglm3-6b推理
from transformers import AutoTokenizer, AutoModel
import torchmodel_path = "THUDM/chatglm3-6b"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModel.from_pretrained(model_path)model.eval()def chatglm3_inference(query, history=None, max_length=4096, temperature=0.8, top_p=0.9):inputs = tokenizer.build_chat_input(query,history=history,role="user",max_length=max_length,padding="max_length" if len(history) > 0 else "do_not_pad").to(model.device)gen_kwargs = {"max_length": max_length,"do_sample": True,"temperature": temperature,"top_p": top_p,"pad_token_id": tokenizer.eos_token_id}with torch.no_grad():outputs = model.generate(**inputs, **gen_kwargs)response = tokenizer.decode(outputs[0][len(input["input_ids"][0]):],skip_special_token=True,clean_up_tokenization_spaces=True)updated_history = []if history:updated_history.append(history)updated_history.append((query, response))return response, updated_historyif __name__ == '__main__':history = []user_input = "xxx"response, history = chatglm3_inference(user_input, history)
相关文章:
【自用】NLP算法面经(5)
一、L1、L2正则化 正则化是机器学习中用于防止过拟合并提高模型泛化能力的技术。当模型过拟合时,它已经很好地学习了训练数据,甚至是训练数据中的噪声,所以可能无法在新的、未见过的数据上表现良好。 比如: 其中,x1和…...
体育直播视频源格式解析:M3U8 vs FLV
在体育直播领域,视频源的格式选择直接影响着直播的流畅度、画质以及兼容性。目前,M3U8 和 FLV 是两种最为常见的视频流格式,它们各有优劣,适用于不同的场景。本文将从技术原理、优缺点以及应用场景等方面对 M3U8 和 FLV 进行详细解…...
Ubuntu20.04安装并配置Pycharm2020.2.5
一. 下载pycharm 社区版 1. 下载地址: PyCharm: the Python IDE for data science and web developmentThe Python IDE for data science and web development with intelligent code completion, on-the-fly error checking, quick-fixes, and much more.https:/…...
Filter Solutions学习-02 【高级设计】界面介绍
这是高级界面的各种控件的功能。 其中说一下filter type。这不是根据自己想当然决定的,而是根据实际的需要,比如带外衰减的程度,带内波动(平坦)如何,还有群时延等等决定的。比如不要求矩形系数选什么。。 …...
用Python实现交互式数据可视化:从基础图表到动态仪表板
用Python实现交互式数据可视化:从基础图表到动态仪表板 一、项目背景 本文将通过一个完整的Python项目,展示如何使用Plotly和ipywidgets构建从基础统计到动态交互的全栈数据可视化方案。 二、核心功能模块 1. 数据生成与预处理 np.random.seed(100)…...
Java面试黄金宝典5
1. ConcurrentHashMap 和 HashTable 有哪些区别 原理 HashTable:它继承自 Dictionary 类,是 Java 早期提供的线程安全哈希表。其线程安全的实现方式是对每个方法都使用 synchronized 关键字进行同步。例如,在调用 put、get 等方法时ÿ…...
【深度学习与大模型基础】第6章-对角矩阵,对称矩阵,正交矩阵
一、对角矩阵 对角矩阵(Diagonal Matrix)是一种特殊的方阵,其非对角线上的元素均为零,只有对角线上的元素可能非零。具体来说,对于一个 nn的矩阵 A[],如果满足 则 AA 称为对角矩阵。对角矩阵通常表示为&am…...
初识R语言饼状图
目录 基础饼图 标签个性化 边界修改 密度条纹 边框颜色 基础饼图 rm(list ls())# Create Data Prop <- c(3,7,9,1,2) # Make the default Pie Plot P1 <- pie(Prop) dev.off() 标签个性化 P2 <-pie(Prop , labels c("Gr-A","Gr-B","…...
计算机技术系列博客——目录页(持续更新)
1.1 博客目录专栏 1.1.1 博客文章导航 计算机技术系列博客——目录页 1.1.2 网页资源整理 2.1 计算机科学理论 2.2 软件工程技术 2.2.1.1 编程语言 Java Java语言基础 (1) Java基础知识总结01——Java基础篇 (2) Java基础知识总结02——集合框架篇 (3) Java基础知识总结03—…...
HTTP和RPC的区别
RPC和 HTTP是两种常见的通信方式,它们在设计目标、使用场景和技术实现上有显著区别。以下是它们的详细对比: 1. 定义与核心思想 特性RPCHTTPRemote Procedure Call远程过程调用HyperText Transfer Protocol超文本传输协议定义一种协议或框架࿰…...
Spring MVC 拦截器使用
javaweb过滤器和springmvc拦截器: 拦截器的概念 拦截器使用 1/创建拦截器类,类中实现 handler执行前,执行后与渲染视图后的具体实现方法 public class GlobalExceptionHandler implements HandlerInterceptor {// if( ! preHandler()){re…...
汽车机械钥匙升级一键启动的优点
汽车机械钥匙升级一键启动的优点主要包括: 便捷性:一键启动功能的引入极大地提升了用车便捷性。车主无需翻找钥匙,只需在车辆感应范围内轻触启动键,即可轻松发动汽车。 安全性:移动管家专车专用一键启动系统配备了防…...
中小企业如何低成本构建高效专属网络?
对于许多中小企业管理者而言,构建一套安全、灵活且可扩展的专网系统是数字化转型的“必修课”。本文将从实际业务场景出发,拆解企业组网的核心步骤,并提供可落地的实施方案建议,帮助您快速匹配适合自身需求的网络服务商。 一、组网…...
实用工具-Stirling-PDF
windows桌面版参考这个文档 Getting Started | Stirling-PDF 安装包推荐使用迅雷下载,先转存到迅雷网盘在使用迅雷下载速度嘎嘎快。 github:https://github.com/Stirling-Tools/Stirling-PDF Stirling-PDF 是一个强大的、基于 Web 的开源 PDF 处理工具,…...
【C++】 —— 笔试刷题day_6
刷题day_6,继续加油哇! 今天这三道题全是高精度算法 一、大数加法 题目链接:大数加法 题目解析与解题思路 OK,这道题题目描述很简单,就是给我们两个字符串形式的数字,让我们计算这两个数字的和 看题目我…...
pytorch 网络结构可视化Netron安装使用方法(已解决)
首先 要把保存的训练模型 转为onnx格式的文件,然后打开下面的链接,选择刚刚转的onnx文件。 下载 Netron: 您可以访问 Netron 的官方网站 在线使用,或者下载桌面版本。 mnist_cnn_model.onnx 确定后, 2、TensorRT学习…...
QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析(macos)
QEMU 中 x86_cpu_realizefn 到 ept_emulation_fault 的调用流程解析 在 QEMU 的 x86 虚拟化实现中,CPU 的初始化与执行流程涉及多个关键函数,从 CPU 设备的最终初始化(x86_cpu_realizefn)到虚拟机监控程序(HVF&#x…...
第六:go 操作 redis-go
Redis 在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。 Redis介绍 Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外&am…...
【蓝桥杯】每天一题,理解逻辑(4/90)【Leetcode 二进制求和】
题目描述 我们解析一下题目 我们可以理解到两个主要信息 给的是二进制的字符串返回他们的和 我们知道,十进制的加减法需要进位,例如:9716是因为91之后进了一位,二进制也是如此,只不过十进制是逢10进1,二…...
CentOS 7 更换 YUM 源为国内
**CentOS 7 更换 YUM 源为国内源 ** 背景说明 更换 YUM 源可加速软件下载,解决官方源访问慢的问题。国内推荐镜像源:阿里云、清华、网易、中科大。 一、备份原有 YUM 源 # 备份系统默认源(避免操作失误可恢复) sudo cp /etc/yum…...
快速入手-基于Django的mysql配置(三)
Django开发操作数据库更简单,内部提供了ORM框架。比如mysql,旧版本用pymysql对比较多,新的版本采用mysqlclient。 1、安装mysql模块 pip install mysqlclient 2、Django的ORM主要做了两件事 (1)CRUD数据库中的表&am…...
docker部署dify
1.安装docker 参考链接 https://ascendking.blog.csdn.net/article/details/136407383 设置docker源 vim /etc/docker/daemon.json {"registry-mirrors": ["https://docker.registry.cyou", "https://docker-cf.registry.cyou", "http…...
网络安全红蓝对抗实战演练,沉浸式对抗训练场上线!
在网络安全的世界里,没有永恒的盾牌,只有不断磨砺的利剑。近年来,某金融机构因系统漏洞导致千万级用户数据泄露,某制造企业因生产线遭遇勒索攻击被迫停产数日——这些真实案例揭示了一个残酷现实:传统的理论教学已无法…...
舞狮表演(dp)
#include <bits/stdc.h> using namespace std; const int N1e35; int main() {int t;cin>>t;while(t--){int n;cin>>n;int a[N][N];for(int i1;i<n;i){for(int j1;j<n;j){int x;cin>>x;if(x&1) a[i][j]1; // 如果金额是奇数,a[i]…...
【Qt】Qt + Modbus 服务端学习笔记
《Qt Modbus 服务端学习笔记》 1.因为项目的需要,要写一个modbus通信,csdn上感觉有些回答,代码是人工智能生成的,有些细节不对。我这个经过实测,是可以直接用的。 首先要包含Qt 的相关模块 Qt Modbus 模块主要包含以…...
squirrel语言全面介绍
Squirrel 是一种较新的程序设计语言,由意大利人 Alberto Demichelis 开发,其设计目标是成为一个强大的脚本工具,适用于游戏等对大小、内存带宽和实时性有要求的应用程序。以下是对 Squirrel 语言的全面介绍: 语言特性 动态类型&a…...
SpringBoot配置文件加载优先级
目录 示例 配置文件&编写配置类 在Spring Boot项目中,配置属性的优先级是一个重要的概念,它决定了当存在多个配置源时,哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级,从最高到最低: 命令行参数…...
【详细解决】pycharm 终端出现报错:“Failed : 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
昨天在终端一顿操作后突然打开pycharm时就开始报错: 无法将“Failed”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 所在位置 行:1 字符: 1 Failed to act…...
CXL协议之FM(Fabric Management)解释
CXL协议中的FM功能详解 1. FM的核心作用 FM是CXL(Compute Express Link)架构中的核心管理实体,负责协调和管理CXL设备之间的通信、资源分配及拓扑结构。其核心功能包括: 设备发现与枚举:识别CXL拓扑中的设备&#x…...
用Promise实现ajax的自动重试
有时候遇到网络错误,希望可以多试几次,可以利用Promise递归调用实现 以若依系统的登出举例 export function logout() {return request({url: /logout,method: post}) } 修改下原本的登出逻辑,遇到ERR_NETWORK错误,也就是网络问…...
