【NLP 31、预训练模型的发展过程】
人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢?
只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗?
人脑只是相当于一个大型、驳杂的处理器,所以即使我们再重走一次曾经的路,结果也不会改变
—— 25.2.16
LLM(Large Language model),大语言模型出现在ChatGPT之后出现,在此之前出现的模型我们称之为预训练模型,如:GPT3
大模型的“大”主要体现在参数量级之上,如Bert模型参数量仅有0.1B,而前段时间推出的DeepSeek模型参数量达到了671B,二者参数量的区别达到上千倍
一、ELMo
ELMo发表在Bert之前,提出了预训练思想,其训练方式依旧是由前文预测后文的自回归语言模型
其与现在主流的预训练模型的区别是在于其当时使用LSTM作为其模型主体结构
建议的下游任务使用方式:【将ELMo向量与词向量拼接输入下游模型】
将预训练好的ELMo(LSTM预训练模型),将其权重冻结(保持模型权重不进行更新),然后将权重冻结与正常的词向量拼接起来,送入一个RNN语言模型
二、GPT
GPT模型也出现在Bert模型之前,启用了Transformer作为核心编码器
开始使用特有token连接不同的句子
Start:开始符token
Delim:分隔符token
Extract:结束符token
将句子分割后送入Transformer进行编码,编码后线性层进行分类预测
GPT语言模型采取单向方式:
即:由前n个字预测下一个字
在语言模型预训练的基础上,增加了有监督任务训练:
GPT:通过下游任务准确率的对比,明确指出预训练的是有效的,transformer是好用的
三、Bert
MASK LM MLM任务:给一个长的序列,中间一个词mask掉,模型把mask处理后的序列传入Transformer,最后由线性层将这个mask的词预测出来(周围词预测中间词)
Next Sentence Predict NSP任务:输入两句话,中间用一个分隔符隔开,用【cls】token向量判段两句话是否是上下文关系
Bert:证明了MLM预训练强于单向训练(LTR left to right)任务
现在发现,生成式任务更适合用LTR任务做预训练
四、预训练模型的发展过程
① ELMo:经过预训练步骤,我们可以对预测获得一定程度提升,可把预训练作为一种预测效果提升的手段
② GPT:提升效果很明显,预训练是有效的,Transformer是好用的
③ Bert:预训练是模型不可或缺的组成部分
五、国内公司跟进预训练工作
1.Ernie-baidu
Mask随机token ——> Mask某一特定实体或词组
验证得到:在一系列中文数据集(非生成式任务)上效果强于BERT
可以以完形填空的方式完成知识问答
这种做法在本质上相当于在预训练中加入了先验知识(提前告知哪些词是词组),可以更好的学习该语言
但是这也意味着对未知语言可能会无法使用该策略
2.Ernie- Tsinghua
引入知识图谱,将实体信息融合到预训练任务中
将知识图谱中训练到的一些图谱表示的向量与BERT向量进行一个组合,再通过Transformer,然后做一些特定的预测
Ernie:强调了额外知识的重要性
六、GPT2
继续使用单向语言模型:
继续使用transformer模型结构(小改:归一化层的位置进行调整)
模型改进在于:Bigger model(模型结构不变,模型参数增多)、more data(数据量增多)
文本生成能力可圈可点
提出思想:NLP任务不应该有通过下游任务微调的环节
强调zero-shot(不需要做下游任务的微调)
任何一个任务,都可以看作生成式任务来做,我们将输入和任务一同送入模型,然后让模型直接输出任务结果
例:做一个英法翻译任务,输入一句话再输入一个专门的task token(代表目标是转为法语),然后我们通过生成式任务(目标为模型直接输出法语),直接转换为法语
以如今的视角来看,task token接近于提示词的作用
GPT2:大规模语言模型可以在不做有监督训练的情况下,完成许多任务
七、UNILM
UNIfied pre-trained Language Model,使用不同的Mask
使用Bert的模型结构,同时进行Mask LM,单向LM,和seq2seq训练
使得预训练后模型可以更好的应用在生成式任务上,如:机器翻译和机器摘要等
UNILM:依靠 mask 控制哪些词参与 context embedding 的计算
Mask的部分将允许参与attention计算的元素设为0,将不允许参与attention计算的元素设置为负无穷,其他部分不变,计算自注意力分数
UNILM:解决了原生BERT在生成式任务上的短板,只需要更改Mask方式
八、Transformer - XL & XLNet
Transformer-XL 和 XLNet 都是自然语言处理领域中基于 Transformer 架构的重要模型,希望解决Transformer的长度限制问题(输入文本长度受最大位置编码影响)
1.循环机制 Recurrence Mechanism
Transformer-XL:是一种对Transformer模型的变化,将RNN的思想【tanh(Ux + Wh)】引入Transformer中,解决超长序列的问题
XLNet:是以Transformer-XL为结构的模型
记忆前面字预测的输出结果,加入到当前字的预测结果中去,在Transformer中,将前一段文本的隐向量与后一段文本向量拼接之后计算attention
公式:
2.相对位置编码 Relative Positional Encodings
① 绝对位置编码
BERT模型采用的编码是绝对位置编码,因为其对于一段文本中的所有位置都进行固定
公式:
E:word embedding U:position embedding Wq、Wk:Transformer模型中的参数q和参数k
② 相对位置编码
将两个位置的绝对编码Ui、Uj换成了两个位置的差值Ri-j(不可训练的正弦编码矩阵),避免了输入文本长度受最大位置编码影响的现象
公式:
Ri-j:不可训练的正弦编码矩阵(non-trainable sinusoid encoding matrix),序列中的每个位置都有唯一的编码向量。高频分量(对应较小维度)可捕捉局部细节,低频分量(对应较大维度)能捕捉全局信息。对于任意两个位置m和n,该编码能表示它们之间的相对位置关系。
公式:
u, v :可训练的参数trainable
3.训练XLNet的预训练目标
① 自回归语言模型预训练
AR语言模型:auto regressive language model 【GPT】
特点:单向预测下一个字
缺点:缺少双向信息
② 自编码语言模型预训练
AE语言模型:auto encoding language model 【BERT】
特点:双向信息输入,预测中间某个mask的字
缺点:引入了[mask],但在实际任务中不存在,预训练与使用过程不一致,效果可能有缺
③ XLNet语言模型预训练
AR语言模型与AE语言模型融合 Permutation Language Model
首先打乱输入的句子顺序,之后进行单向预测
特点:不需要添加Mask token,并且含有双向句子信息
Transformer - XL & XLNet:修改预训练目标,同时修改模型结构,带来一定的效果提升
九、Roberta
Robustly optimized BERT approach
模型结构不变,训练方式调整:
① 更多的数据,更大的batch size,更久的训练
② 去掉next sentence prediction 前后句上下文关系的预测
③ 使用更长的样本
④ 动态改变mask位置:在多轮训练中,改变mask所在的位置,可以更好的利用语料
Roberta:挖掘旧的方法的潜力,有时比创新还要有效(模型结构不变,训练方式调整)
能够最大限度的发挥一种算法的能力,是算法工程师能力的体现
十、SpanBert
模型结构不变,对Bert训练目标改动:
① 去掉了NSP(next sentence prediction)任务
② 随机mask几个连续的token
③ 新的预训练任务SBO(Span Boundary Objective):连续mask一个片段,三个参数(片段的首尾和词在mask片段中的位置编码)
1.SBO任务
Xs-1:代表mask片段之前的第一个token的Embedding
Xe+1:代表mask片段之后的第一个token的Embedding
Pi-s+1:代表目标token的Position Embedding
SBO预测层:将三个向量拼接起来,过线性层、激活层、归一化层,最终得到预测值
2.Mask片段长度采样分布
Mask指定实体或名词短语,效果不如mask随机片段
NSP作用不大,不如不加,不如SBO
SpanBert:大模型+更多的数据不是唯一出路,改变训练目标也有很大影响
十一、ALBERT
试图解决Bert模型过大的问题
想办法减少参数量
1. Factorized embedding parameterization
Embedding层的参数因式分解
Bert模型参数量大小:词表大小 × 隐单元个数
ALBERT:将词嵌入矩阵的维度 V × H 分解为两个矩阵 V × E 和 E × H,其中 V 是词汇表大小,H 是隐藏层维度,E 是一个较小的中间维度。这样可以在不损失模型表达能力的情况下,显著减少词嵌入参数的数量。
2. Cross-layer parameter sharing
跨层参数共享,有多种共享方式:
① 只共享attention部分
参数:q、k、v、o
② 只共享feed-forward部分
两个线性层 + 一个激活层
③ 全部共享
参数量降为:1/12
3.更换预训练目标
论文认为NSP任务过于简单,用SOP(Sentence order prediction)任务替代NSP任务
SOP任务:输入两句话,预测两句话的前后顺序关系,同样是二分类任务
例:
[CLS] 你好啊bert [SEP] 好久不见 [SEP] ——> Positive
[CLS] 好久不见 [SEP]你好啊bert [SEP] ——> Negative
数据采样方式:给出前后连续两句话,有50%的概率交换两句话的位置,让模型判断位置顺序是否颠倒
4.局限性
① 虽然目的在于缩减参数,但缩减参数并没有带来正向的效果,模型效果依然是参数越大越好
② 虽然缩减了参数,但是前向计算速度没有提升(总参数量下降,训练速度有提升,预测速度没有很大提升)
ALBERT:工程角度讲价值不大,但是证明了参数量并非模型能力的绝对衡量标准
十二、DistillBert 模型蒸馏技术
DistillBert:蒸馏版Bert
传统的模型蒸馏技术:小的模型正常进行预训练过程(hard prediction),计算完成后与真实标签用交叉熵损失函数计算loss(student loss),超大模型会输出下一个字在词表大小上的概率分布,然后以 小模型当前输出的概率分布(soft prediction)与超大模型输出的概率分布(soft labels)之间,两者较为接近 作为一个新的训练目标,以KL散度作为损失函数计算loss(distillation loss),然后把student loss 和 distillation loss相加一起训练,一定程度上包含了Teacher model的信息
小模型从大模型输出的概率分布进行学习:对一个问题,由大模型本身进行回答构造任务的X 和 Y,然后让小模型对大模型构造的数据进行学习,然后用小模型输出 与 通过大模型得到的Y值,计算loss,再计算 小模型输出与大模型输出的概率分布之间的loss,同时计算这两者,这在如今也被称为模型蒸馏技术,也属于数据增强范畴
我们希望这个蒸馏后的小的模型能够较为接近这个超大模型的效果
Teacher model:效果较好的超大模型【老师模型】
Student(distilled) model:蒸馏后的较小模型【学生模型】
优点:包含的信息量更大,包含的概率分布更加平滑(下一个字的概率分布不应该是一个非0即1的形式)
损失函数 —— KL散度
KL散度是一种衡量两个概率分布(也可简单理解为向量)之间差异的算法。经常作为神经网络的loss函数使用。
与交叉熵计算过程实际非常接近,但交叉熵通常要求target是one-hot形式。
计算步骤:
① 计算比值:P(x) / Q(x)。
② 取对数:对每个比值取自然对数。
③ 加权求和:用真实分布 P(x) 作为权重,对所有事件求和。
④ 当P与Q的概率分布完全一致时,损失值loss最低
示例:Teacher model:P = [0.2, 0.4, 0.4] Student(distilled) model:Q = [0.4, 0.2, 0.4]
公式:
老师模型的概率分布 × log(老师模型的概率分布 / 学生模型的概率分布)
KL(P, Q) = 0.2 * log(0.2 / 0.4) + 0.4 * log(0.4 / 0.2) + 0.4 * log(0.4 / 0.4) = 0.1386294361
KL散度与交叉熵的关系
交叉熵H(P,Q)与KL散度的关系为:
十三、T5
Text-to-Text Transfer Transformer:Encoder - Decoder架构
生成式任务上,only - decoder结构效果相对更强一些
Seq2seq方法,理论上可以解决一切NLP问题【一切NLP问题都可以转化为生成式问题】
分类问题:文本 -> 标签
命名实体识别:文本 -> 实体
摘要、翻译:文本 -> 文本
回归问题:文本 -> 0.1(字符串)
预训练任务设计 text corruption
预训练任务目标与Bert类似,Bert模型运用mask方式进行训练,T5模型训练原理与Mask类似,把中间的一部分内容Mask掉,用token替代被mask的文本,输出时再用token预测回被mask的文本作为训练目标
从如今的视角来看,生成式任务更适合应用从左往右由前文预测后文的自回归结构
T5:我们有希望将NLP中的所有任务都当作一个生成式任务来做,迈向NLP的大一统
十四、GPT3
提高模型参数量:1750 亿参数量,是GPT-2的116倍
模型结构与GPT-2相同
继续使用单向自回归语言模型预训练
研究表示:不需要 Pre-training+ fine-tune【预训练 + 下游任务微调】的学习方式,而应该注重 Pre-training + Zero-, One-, Few-shot【预训练 + 零样本 / 单样本 / 小样本】的学习方式
理由:
① fine-tune需要的数据,经常是缺失的
② fine-tune会涉及对模型进行改造,使其变复杂,并失去泛化性
③ 人类学习做新任务并不需要很多样本
1. Zero-shot(零样本学习)
- 定义:模型无需目标类别的训练样本,直接通过语义描述或属性推理完成任务。
- 实现原理:
- 依赖预训练阶段学到的跨模态关联(如CLIP通过文本描述匹配图像)。
- 利用任务描述的Prompt直接引导模型生成答案(如“Let's think step by step”)。
- 典型应用:图像分类(未见类别)、文本生成(新领域指令)。
2. One-shot(单样本学习)
- 定义:仅需一个目标类别的示例即可适应新任务。
- 实现原理:
- 元学习:在预训练基础上,通过少量参数调整(如Adapter模块)快速适应新样本。
- 示例引导:在Prompt中提供1个示例,模型模仿其模式生成结果(如模仿写作风格)。
- 典型应用:员工刷脸打卡(新员工仅需一张照片)、罕见病诊断。
3. Few-shot(小样本学习)
- 定义:利用少量样本(通常2-5个)提升 模型在特定任务上的性能。
- 实现原理:
- 指令微调:通过多样化任务数据(如问答对、推理步骤)调整模型参数,增强泛化能力。
- 动态示例选择:使用BM25等算法从池中选择与当前输入最相关的示例。
- 典型应用:多分类任务(如5-way-5-shot)、复杂推理(需多步CoT提示)
GPT3:人工智能的目标:像人一样的学习能力
十五、从“续写”到“回答”
Bert:输入文字——>经过Bert(用前文预测后文)——>添加线性层—— >然后作一个微调进行分类
使用bert类模型(通用模型)微调,需要一个随机初始化的线性层(成为一个专用的模型),这为使用带来了不便
LLM:模型永远生成文本,用文本描述各种各种任务的答案,解释给出答案
训练方式统一,推理方式统一(永远是一个固定的模型,以文字方式回答任何问题)
十六、InstructGPT
1.InstructGPT 的核心技术:人类反馈强化学习(RLHF)
InstructGPT 的核心创新在于将 人类反馈强化学习(Reinforcement Learning from Human Feedback, RLHF)引入语言模型训练,解决了传统模型生成内容:偏离用户意图、存在偏见或有害信息的问题。
2.训练流程 ① Pretraining训练
前文预测后文,自回归语言模型
需要大量的训练数据
知识主要在Pretrain阶段注入
3.训练流程 ② 监督微调(Supervised Fine-Tuning, SFT)训练
使用人工标注的高质量指令-响应数据对 GPT-3 进行微调,使模型初步具备遵循指令的能力。数据包括用户提示(如“解释登月”)和人工编写的理想回答。
与Pretraining类似,输入变成一问一答的形式,输入的问题与答案之间用一个分隔符<sep>隔开,由分隔符<sep>开始,预测答案的第一个字,由预测出的答案的第一个字再去预测答案的第二个字,循环这个过程,直到预测到终止符<eos>为止,将这段预测的文本作为这个问题的答案
只计算圈内部分的loss值,当给出一定数量的问答对数据进行训练,这个模型就变成了由“续写”到“回答”的模型
SFT的mask:问题全部可见,对于答案输出后面的字只能看到前面的字,给一定量的数据让模型理解我们希望生成类似的回复
mask形状:
4.训练流程 ③ 奖励模型训练(Reward Modeling, RM)
模型生成多个候选响应,人工标注员对结果排序(如质量从高到低),训练一个奖励模型以量化响应质量。这一步将人类偏好转化为可计算的奖励信号。
5.训练流程 ④ 强化学习微调(Reinforcement Learning, RL)
基于奖励模型的反馈,通过近端策略优化(PPO)算法调整语言模型参数,使生成内容更贴近人类偏好。这一阶段让模型实现“智能对齐”,显著提升输出的安全性和有用性。
6.与 GPT-3 的关键差异
维度 | GPT-3 | InstructGPT |
---|---|---|
设计目标 | 预测互联网文本的统计模式 | 理解并执行用户指令,生成对齐内容 |
训练方法 | 无监督预训练 + 零样本/小样本学习 | RLHF 三阶段训练,结合人类反馈 |
输出质量 | 可能偏离指令、包含偏见或错误 | 更精准、安全、符合人类价值观 |
参数量效率 | 依赖大规模参数(175B) | 仅 1.3B 参数即可超越 GPT-3 表现 |
7.应用场景与优势
① 精准指令执行
自动客服:生成符合用户需求的答案,减少歧义。
代码生成:根据指令编写代码片段或优化现有代码。
文档生成:按指令输出结构化报告、合同等。
② 安全性与无害性
通过人类反馈过滤有害内容,减少种族歧视、性别偏见等风险。
③ 任务泛化能力
在复杂指令(如多步骤推理)中表现优于传统模型,例如数学运算、逻辑分析。
8.技术突破与影响
① 对齐性优化
InstructGPT 首次系统性解决了语言模型与人类意图的“对齐鸿沟”,为后续 ChatGPT 的对话形态奠定了基础。
② 小模型高效性
1.3B 参数的 InstructGPT 在人类评估中击败 175B 的 GPT-3,证明对齐技术可降低模型规模依赖。
③ 行业范式革新
RLHF 成为大模型训练的核心范式,尽管后续研究尝试替代方法(如 DPO),但其效果仍未被超越。
9.未来挑战
标注成本高:依赖人工标注反馈,规模化应用受限。
泛化边界:对超出训练分布的指令可能失效。
多模态扩展:如何将 RLHF 应用于图像、视频等多模态生成仍需探索。
相关文章:
【NLP 31、预训练模型的发展过程】
人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢? 只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗? 人脑只是相当于一个大型、驳杂的处理器&#…...
【计算机网络】传输层TCP协议
传输层 - layer4 - TCP协议 传输层:位于ISO模型的第四层 ——>L4 tcp协议意为传输控制协议(Transmission Control Protocol) 提供端到端的连接 端口号范围:0-65535 (2^16次方) 一个应用程序(服务)会占用…...
vscode settings(二):文件资源管理器编辑功能主题快捷键
参考资料 Visual Studio Code权威指南 by 韩骏 一. 文件资源管理器 1.1 文件资源管理器隐藏文件夹 默认情况下,Visual Studio Code会在文件资源管理器中隐藏一些文件夹(如.git文件夹)。可以通过files.exclude来配置要被隐藏的文件和文件…...
halcon机器视觉深度学习对象检测,物体检测
目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本, 然后训练模型,导出模型文件 这个是模型 mod…...
go 反射 interface{} 判断类型 获取值 设置值 指针才可以设置值
内容包括 1. 用interface{}接收值 2. 判断interface{}的类型 switch 3. 打印interface{}的类型 4. 通过字符串对结构体,interface{}等进行设置值、获取值处理 示例代码 package mainimport ("fmt""log""reflect" )type Student…...
单臂路由
单臂路由(Router on a Stick)是一种网络配置方式,主要用于在单个物理接口上实现多个VLAN之间的路由。它通常用于交换机与路由器之间的连接,适用于VLAN间通信需求较小的情况。 工作原理 VLAN划分:交换机上配置多个VLAN…...
SpringBoot【实用篇】- 测试
文章目录 目标: 1.加载测试专用属性3.Web环境模拟测试2.加载测试专用配置4.数据层测试回滚5.测试用例数据设定 目标: 加载测试专用属性加载测试专用配置Web环境模拟测试数据层测试回滚测试用例数据设定 1.加载测试专用属性 我们在前面讲配置高级的…...
NutUI内网离线部署
文章目录 官网拉取源代码到本地仓库修改源代码打包构建nginx反向代理部署访问内网离线地址 在网上找了一圈没有写NutUI内网离线部署的文档,花了1天时间研究下,终于解决了。 对于有在内网离线使用的小伙伴就可以参考使用了 如果还是不会联系UP主:QQ:10927…...
【深度学习】Adam和AdamW优化器有什么区别,以及为什么Adam会被自适应学习率影响
Adam 和 AdamW 的主要区别在于 权重衰减(Weight Decay) 的实现方式,具体如下: 1. 权重衰减(Weight Decay)处理方式 Adam:采用 L2 正则化,通过在梯度更新时手动添加 weight_decay 项…...
Pytorch的F.cross_entropy交叉熵函数
参考笔记:pytorch的F.cross_entropy交叉熵函数和标签平滑函数_怎么给crossentropyloss添加标签平滑-CSDN博客 先来讲下基本的交叉熵cross_entropy,官网如下:torch.nn.functional.cross_entropy — PyTorch 1.12 documentation torch.nn.fun…...
一文讲解Redis为什么读写性能高以及I/O复用相关知识点
Redis为什么读写性能高呢? Redis 的速度⾮常快,单机的 Redis 就可以⽀撑每秒十几万的并发,性能是 MySQL 的⼏⼗倍。原因主要有⼏点: ①、基于内存的数据存储,Redis 将数据存储在内存当中,使得数据的读写操…...
[特殊字符] Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南
🚀 Elasticsearch 双剑合璧:HTTP API 与 Java API 实战整合指南 一、HTTP API 定义与用途 Elasticsearch 的 HTTP API 是基于 RESTful 接口设计的核心交互方式,支持通过 URL 和 JSON 数据直接操作索引、文档、集群等资源。适用于快速调试、…...
某手sig3-ios算法 Chomper黑盒调用
Chomper-iOS界的Unidbg 最近在学习中发现一个Chomper框架,Chomper 是一个模拟执行iOS可执行文件的框架,类似于安卓端大名鼎鼎的Unidbg。 这篇文章使用Chomper模拟执行某手的sig3算法,初步熟悉该框架。这里只熟悉模拟执行步骤以及一些常见的…...
蓝桥杯之阶段考核
📖 Day 7:阶段考核 - 蓝桥杯官方模拟赛(限时 4 小时) 📖 一、如何高效完成模拟赛? 模拟赛是一种接近真实竞赛的训练方式。要高效完成模拟赛,需要掌握以下策略: 1. 赛前准备 ✅ 环…...
DeepSeek掘金——VSCode 接入DeepSeek V3大模型,附使用说明
VSCode 接入DeepSeek V3大模型,附使用说明 由于近期 DeepSeek 使用人数激增,服务器压力较大,官网已 暂停充值入口 ,且接口响应也开始不稳定,建议使用第三方部署的 DeepSeek,如 硅基流动 或者使用其他模型/插件,如 豆包免费AI插件 MarsCode、阿里免费AI插件 TONGYI Lin…...
华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)
文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下: 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件(Firmware࿰…...
红帽7基于kickstart搭建PXE环境
Kickstart 文件是一种配置文件,用于定义 Linux 系统安装过程中的各种参数,如分区、网络配置、软件包选择等。system-config-kickstart 提供了一个图形界面,方便用户快速生成这些配置文件。 用户可以通过图形界面进行系统安装的详细配置&…...
【Python爬虫(58)】从0到1:Scrapy实战爬取大型新闻网站
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
DeepSeek使用从入门到精通
1. DeepSeek概述 - DeepSeek是国产大模型,提供网页版和App版。因其强大功能,遭受网络攻击,但国内用户可直接使用。 2. 入门技巧 - 忘掉复杂提示词:用简洁明了的需求指令,AI能自我思考并生成优质内容 - 明确需求&#…...
【分布式数据一致性算法】Gossip协议详解
在分布式系统中,多个节点同时提供服务时,数据一致性是核心挑战。在多个节点中,若其中一个节点的数据发生了修改,其他节点的数据都要进行同步。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时…...
一、初始爬虫
1.爬虫的相关概念 1.1 什么是爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地爬取互联网信息的程序。 原则上,只要是浏览器…...
C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢? 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...
ipad连接电脑断断续续,不断弹窗的解决办法
因为ipad air 屏幕摔坏,换了一个内外屏,想用爱思检验一下屏幕真伪, 连接电脑时,断断续续,连上几秒钟然后就断开,然后又连上 然后又断开,不断地弹出信任的弹窗。 刚开始以为是数据线问题&#x…...
dockerfile构建haproxy
1. 结构目录 [rootlocalhost ~]# tree haproxy/ haproxy/ ├── dockerfile └── files├── haproxy-2.5.0.tar.gz├── haproxy.cfg├── install.sh└── start.sh1 directory, 5 files [rootlocalhost ~]# [rootlocalhost ~]# cd haproxy/ [rootlocalhost haproxy]…...
创建第一个 Maven 项目(一)
一、引言 在 Java 开发的广袤天地中,Maven 宛如一位全能的管家,发挥着举足轻重的作用。它是一个基于项目对象模型(POM)的项目管理和构建自动化工具,极大地简化了 Java 项目的开发流程。 Maven 的核心优势之一在于其强…...
深度学习pytorch之19种优化算法(optimizer)解析
提示:有谬误请指正 摘要 本博客详细介绍了多种常见的深度学习优化算法,包括经典的LBFGS 、Rprop 、Adagrad、RMSprop 、Adadelta 、ASGD 、Adamax、Adam、AdamW、NAdam、RAdam以及SparseAdam等,通过对这些算法的公式和参数说明进行详细解析…...
C#贪心算法
贪心算法:生活与代码中的 “最优选择大师” 在生活里,我们常常面临各种选择,都希望能做出最有利的决策。比如在超市大促销时,面对琳琅满目的商品,你总想用有限的预算买到价值最高的东西。贪心算法,就像是一…...
SSH无密登录配置
SSH无密登录配置 1、在用户目录下创建.ssh目录 mkdir /home/atguigu/.ssh2、在.ssh目录下生成ssh秘钥(需要切换到Hadoop集群使用的用户,再运行命令) ssh-keygen -t rsa然后敲(三个回车),就会生成两个文件…...
Rust并发编程实践:10分钟入门系统级编程
目录 学前一问:Rust为何而出现? 摘要 引言 正文解析: 一、Rust中的并发编程基础 1.1 线程 1.2 协程 二、Rust并发编程的高级特性 2.1 通道 2.2 原子操作 2.3 锁 三、实例展示:优化并发编程性能 1. 并行计算 2. 异步…...
Linux 命令大全完整版(06)
2. 系统设置命令 pwunconv 功能说明:关闭用户的投影密码。语法:pwunconv补充说明:执行 pwunconv 指令可以关闭用户投影密码,它会把密码从 shadow 文件内,重回存到 passwd 文件里。 rdate(receive date) 功能说明&a…...
VSCode 中设置 Git 忽略仅因时间戳修改导致的文件变更【使用deepseek生成的一篇文章】
在 VSCode 中设置 Git 忽略仅因时间戳修改导致的文件变更,可通过以下步骤实现: 确认是否为纯时间戳修改 首先确认文件的修改是否仅涉及时间戳,使用终端运行: git diff -- <file>若输出为空但 Git 仍提示修改,可…...
echarts找不到了?echarts社区最新地址
前言:在之前使用echarts的时候,还可以通过上边的导航栏找到echarts社区,但是如今的echarts变更之后,就找不到echarts社区了。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 如今…...
Git-速查
Git 安装 Git 之后,你可以… 配置全局用户信息(推荐) 全局设置,创建本地仓库时默认分支名称为 main(你需要什么名称就该什么名称)【推荐配置为 main 】 git config --global init.defaultBranch main全…...
AxiosError: Network Error
不知怎么的,项目还在开发阶段,之前还好好的,玩儿了两天再一打开发现页面无法显示数据了,报错如下: 我以为是后端出问题了,但是后端控制台无报错,又用postman测试了一下,可以获取到数…...
ImGui 学习笔记(三)—— 隐藏主窗口窗口关闭检测
ImGui 的主窗口是平台窗口,默认是可见的,这会影响视觉效果。那么怎么隐藏 ImGui 的主窗口呢? 这很简单,但是需要针对后端做一些修改。 本文仅介绍在 glfwopengl3 和 win32dx11 两种实现上如何修改。 在 win32dx11 实现上&#…...
周末总结(2024/02/22)
工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…...
SOME/IP--协议英文原文讲解11
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.6 Er…...
Spring Boot 概要(官网文档解读)
Spring Boot 概述 Spring Boot 是一个高效构建 Spring 生产级应用的脚手架工具,它简化了基于 Spring 框架的开发过程。 Spring Boot 也是一个“构件组装门户”,何为构件组装门户呢?所谓的“构件组装门户”指的是一个对外提供的Web平台&#x…...
图像处理篇---图像处理中常见参数
文章目录 前言一、分贝(dB)的原理1.公式 二、峰值信噪比(PSNR, Peak Signal-to-Noise Ratio)1.用途2.公式3.示例 三、信噪比(SNR, Signal-to-Noise Ratio)1.用途2.公式3.示例 四、动态范围(Dyna…...
Win11更新系统c盘爆满处理
1.打开磁盘管理 2.右击c盘选择属性,进行磁盘管理,选择详细信息。 3.选择以前安装的文件删除即可释放c盘空间。...
C++关键字之mutable
1.介绍 在C中,mutable是一个关键字,用于修饰类的成员变量。它的主要作用是允许在常量成员函数或常量对象中修改被标记为mutable的成员变量。通常情况下,常量成员函数不能修改类的成员变量,但有些情况下,某些成员变量的…...
vue3 采用xlsx库实现本地上传excel文件,前端解析为Json数据
需求:本地上传excel 文件,但需要对excel 文件的内容进行解析,然后展示出来 1. 安装依赖 首先,确保安装了 xlsx 库: bash复制 npm install xlsx 2. 创建 Vue 组件 创建一个 Vue 组件(如 ExcelUpload.v…...
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解
【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…...
易语言模拟真人鼠标轨迹算法 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
PHP旅游门票预订系统小程序源码
🌍 旅游门票预订系统:一站式畅游新体验,开启您的梦幻旅程 🌟 一款基于ThinkPHPUniapp精心雕琢的旅游门票预订系统,正翘首以待,为您揭开便捷、高效、全面的旅游预订新篇章!它超越了传统预订平台…...
侯捷 C++ 课程学习笔记:内存管理的每一层面
目录 一、C 应用程序的内存管理架构 二、C 内存原语 三、内存管理的实际应用 四、学习心得 一、C 应用程序的内存管理架构 C 应用程序的内存管理架构可以分为多个层次,从应用程序到操作系统 API,每一层都提供了不同的内存管理功能。 架构图…...
Python开发Django面试题及参考答案
目录 Django 的请求生命周期是怎样的? Django 的 MTV 架构中的各个组件分别是什么? Django 的 URL 路由是如何工作的? Django 的视图函数和视图类有什么区别? Django 的模板系统是如何渲染 HTML 的? Django 的 ORM 是如何工作的? Django 的中间件是什么?它的作用是…...
前端js进阶,ES6语法,包详细
进阶ES6 作用域的概念加深对js理解 let、const申明的变量,在花括号中会生成块作用域,而var就不会生成块作用域 作用域链本质上就是底层的变量查找机制 作用域链查找的规则是:优先查找当前作用域先把的变量,再依次逐级找父级作用域直到全局…...
【三十四周】文献阅读:DeepPose: 通过深度神经网络实现人类姿态估计
目录 摘要AbstractDeepPose: 通过深度神经网络实现人类姿态估计研究背景创新点方法论归一化网络结构级联细化流程 代码实践局限性实验结果总结 摘要 人体姿态估计旨在通过图像定位人体关节,是计算机视觉领域的核心问题之一。传统方法多基于局部检测与图模型&#x…...
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南
将 Vue 项目打包后部署到 Spring Boot 项目中的全面指南 在现代 Web 开发中,前后端分离架构已经成为主流。然而,在某些场景下,我们可能需要将前端项目(如 Vue)与后端项目(如 Spring Boot)集成部…...