自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(411)
  • 收藏
  • 关注

原创 [阅读笔记29][AgentStudio]A Toolkit for Building General Virtual Agents

这里是AgentStudio和传统环境的对比,传统环境基本都是任务特定的,比如基于web的会提供HTML或可访问性树这样的观察,同时动作也是切换标签页这样与任务高度相关的。作者提到目前agent开发主要有两个阻碍,一个是缺乏软件基础,另一个是缺乏在真实世界场景中进行评估。针对这两个阻碍,作者涉及了一个开发工具包,包括环境设置、数据收集、agent评估等,并且观察空间和动作空间是高度通用的,并不是针对于某个特定任务。这篇论文是24年3月提交的,提出了一个用于agent开发的全流程工具包。

2024-04-20 20:51:53 304

原创 [阅读笔记28][Pix2Act]From Pixels to UI Actions: Learning to Follow Instructions via Graphical User Inter

对于一个节点s0,设从该节点到根节点的路径为s0->a0->s1->a1->root,其中s0、s1和root表示节点,a0和a1表示连边,那s0位置处的反向传播就是要更新a0和a1的Q和U值,对应论文中的Q(root, a1)、Q(s1, a0)、U(root, a1)和U(s1, a0),根据Q和U的公式我们知道必须记录下来每条边上Q的累加和以及累加了多少次,这样才能计算出来Q这个均值。这样做可以鼓励更简洁的操作。接下来是动作空间,这篇论文的动作空间也是比较简单通用的,基本就是人类可能执行的动作。

2024-04-20 20:50:02 714

原创 [阅读笔记27][Pix2Struct]Screenshot Parsing as Pretraining for Visual Language Understanding

最后是结果展示,左上方是对于输入图像处理方式的实验,Variable即作者本篇中提到的方法,Padded就是不改变图像原始长宽比,但是填充至要求的分辨率,这种方法不会扭曲图像,但会牺牲有效分辨率,Stretched是把图像拉伸至要求的分辨率,这种方法会扭曲图像上的文本信息,不利于后续的训练。下方表格是微调所使用的数据集以及任务描述。这种预训练策略集成了另外几个预训练策略,预测截图上未遮挡的部分类似于OCR,预测被遮挡的部分类似完形填空,预测图像标签的alt_text属性类似图像转caption的过程。

2024-04-20 20:47:38 323

原创 [阅读笔记26][VisualWebArena]EVALUATING MULTIMODAL AGENTS ON REALISTIC VISUAL WEB TASKS

动作空间和WebArena类似,这里解释了一下为什么用元素id要优于二维坐标,主要是因为这能让模型专注于高级的推理,而不是低级的控制,毕竟很多模型没有经过专门的训练。这篇论文是24年1月发表的,和WebArena的作者来自于同一个CMU的课题组,提出了一个融合视觉信息的benchmark,可以评估多模态agent性能。视觉难度是根据所需要的视觉处理复杂度来定的,像识别颜色、形状、目标检测这种算简单,语义理解、短文本的ocr算中等,多图像输入、长文本ocr输入困难。右图显示了不同难度的任务占比。

2024-04-20 20:45:47 372

原创 [阅读笔记25][WebArena]A Realistic Web Environment for Building Autonomous Agents

具体可以参照下面的表,对于第一类指令信息查找类的,根据具体指令不同又分为三类,第一种就是答案必须精确匹配的,第二种是答案必须包含某些字段的,第三种是答案可以模糊匹配的,这里使用GPT-4来判断两个答案语义上是否相同。左图是对比之前已有的一些基准,WebArena是在可交互的现实环境下实现的,并且包含了多样的人类在日常生活中可能遇到的任务,另外还设计了评估指标来评估任务执行的功能正确性。这些指令可以分为三类,第一类是信息查找类任务,第二类是网站导航类,第三类是具体操作类任务,涉及增删改网页内容或者一些设置。

2024-04-20 20:43:44 431

原创 [阅读笔记24][WorkArena]How Capable are Web Agents at Solving Common Knowledge Work Tasks?

第二点是设计了一个用于开发和评估web agent的环境,可以兼容之前的benchmark,并提供了更丰富的多模态观察以及更广泛的操作,最后它还支持对话式交互。这29个任务可以分为以下5类,基于列表的有12个,基于表单的任务有5个,知识库有1个信息检索任务,服务目录有9个任务,需要浏览产品目录,并订购给定规格的产品,最后是2个基于菜单的任务。第三个是丰富的观察空间,包括聊天内容、当前打开的页面、最后一次操作的错误信息、还有一个页面的多模态视图:它的DOM快照,它的可访问性树或AXTree,一张网页截图。

2024-04-20 20:41:31 365

原创 [阅读笔记23][JAM]JOINTLY TRAINING LARGE AUTOREGRESSIVE MULTIMODAL MODELS

使用共享的输入输出投影层,并且最后添加了一个线性层,将两个模型最终输出拼接起来输入进线性层,然后线性层的输出维度是单个模型输出的维度,实现了降维。这篇论文的第二个贡献点就是图文交错的指令微调,与以往的仅使用图像文本对来微调不同,这种微调方式得到的模型可以实现输出交错的图像和文本,图像与文本强相关,可以增强文本的可理解性。它所提出的JAM结构系统地融合了现有的文本模型和图像生成模型。这是一个定性对比,与当前最相关的GILL模型进行对比,GILL也可以生成文本和图像的交错输出,但是生成的文本比较简略。

2024-04-20 20:39:50 689

原创 [阅读笔记22][CM3Leon]Scaling Autoregressive Multi-Modal Models: Pretraining and Instruction Tuning

这点是必要的,因为输出的时候图像向量和文本向量混合在一起了,必须确定哪段是文本向量,哪段是图像向量,文本使用文本的detokenizer,图像使用图像的detokenizer,这是由二者使用不同的tokenizer所决定的。有了<break>token后模型输出的输入文本还是图像就明确了,首先第一个向量是明确的,假如是文本,那就用文本的detokenizer,如果遇到了<break>就可以切换为图像的detokenizer,之后的向量都是图像向量。下图是生成的图像示例。

2024-04-20 20:36:29 306

原创 [阅读笔记21][RA-CM3]Retrieval-Augmented Multimodal Language Modeling

作者沿用了CM3作为生成器,然后输入的时候之前检索到的文档作为上下文拼接起来一起输入,然后损失函数分两部分,一部分是当前样本的,还有一部分是检索出来的文档的,文档那部分有个系数可以调,论文里说一般取0.1。下图是整体的流程,对于一个给定的caption,要生成它对应的图像,可以先使用多模态检索器从外部存储中检索出若干相似的图文对,然后把这些图文对和一开始的caption输入生成器中,由生成器生成预测出来的图像。相关性指的是检索结果要和输入序列相关,不然检索出来的信息是没有用的。

2024-04-20 20:28:42 479

原创 [阅读笔记20][BTX]Branch-Train-MiX: Mixing Expert LLMs into a Mixture-of-Experts LLM

现有的融合多个专家模型的方法有Branch-Train-Merge和Mixture-of-Experts,前者BTM各专家模型在不进行任何同步的情况下并行训练,大大提升了训练时的吞吐量,但是缺乏一个统一的模型,导致没法进行后续的SFT和RLHF,这两步是对齐LLM的重要步骤。这篇论文提出的BTX就是融合了BTM和MoE的优点,弥补了二者的缺点,具体来说,BTX的各个专家模型可以异步的独立训练,大大提高了模型训练时的数据吞吐量,另外BTX是一个统一的模型,所以之后可以对其进行微调。

2024-04-20 20:26:28 429

原创 [阅读笔记19][TPD]ENHANCING STUDENT LANGUAGE MODEL REASONING VIA PRINCIPLE DISCOVERY AND GUIDANCE

具体操作很简单,选取的示例来自于之前的错误集,按照错误集中违反原理条数来排序,取违例条数最多的那几个示例,然后让教师模型生成正确回答,把这几个示例添加到prompt中,并且prompt中的解决问题的指令也基于原理列表进行了修正,最后的prompt就是上面这张图展示的样子。要注意之前从训练集抽样的示例仍然存在。生成原理分三步,第一步作者从训练集中采样了几个问题和回答,然后交给教师模型,让教师模型总结解决此类问题的指令以及添加了一个示例,这个示例来自于之前抽样的那批问答,下图显示了教师模型生成的指令。

2024-04-20 20:23:58 442

原创 [阅读笔记18][CITING]LARGE LANGUAGE MODELS CREATE CURRICULUM FOR INSTRUCTION TUNING

这里展示了这篇论文的一些细节,这部分内容还是挺重要的。作者在这篇论文中提出了课程指令微调,大体流程如下图所示,教师模型给出一个问题,让学生模型回答一下,这时候学生回答大概率不够准确,这时候把学生的回答以及评价该问题的标准输入给教师模型,让教师模型给出一个修改后的回答,然后让学生根据修改过的回答进行微调,持续这个过程若干轮就能得到一个不错的学生模型。作者的灵感来自于导师帮学生修改论文这个场景,学生把写好的论文发给导师,导师把修改版返回去,然后学生可以比较原版和修改版之间的差异,以此来提升自己的写作水平。

2024-04-20 20:15:59 493 1

原创 [阅读笔记17][Impossible-T5]Impossible Distillation for Paraphrasing and Summarization: How to Make High-

最后是结果展示,下面是在三个涉及一般领域和专业领域benchmark上的评估结果,可以看到在相同大小的模型中iBLEU和B-iB指标都达到了最优,BLEU和R-L指标作者认为不靠谱,因为简单把句子copy一份就能达到特别高的得分。第四步是自蒸馏,转述器产生大量句子对,再经过过滤得到训练数据,然后再去微调小模型。作者提出了这篇论文一个理论基础,也就是转述的邻近性,意思是一个句子和它的转述句子倾向于集中在邻近的子空间中,就像下图展示的一样,在LM的分布图上意思差不多的句子会聚集在一起。

2024-04-20 20:12:58 241

原创 [阅读笔记16][Orca-2]Teaching Small Language Models How to Reason

所以针对不同的任务应该使用不同的系统消息(推理策略),这也是作者希望Orca-2做到的,能根据手头的问题选择最有效的解决策略。第三次使用“解释你的答案”的系统消息,解释的过程是对的,但是答案是错的。下图是Orca-2在各种benchmark上的表现,包括语言理解、常识推理、多步推理、数据问题等,可以看到Orca-2超过了所有同等规模的模型,并且接近(有时超过)了比它大5-10倍的模型。训练用的数据集分为三部分,包括FLAN-v2的训练集、Orca-1收集的600万条数据、Orca-2新增的81万条数据。

2024-04-20 20:09:17 670

原创 [阅读笔记15][Orca]Progressive Learning from Complex Explanation Traces of GPT-4

也就是渐进式学习的过程,学生首先从简单的例子中学习,然后再接触更难的例子,这时候从一个更优秀的老师那里得到改进过的推理步骤和逐步的解释。目前利用大模型输出来训练小模型的研究都是在模仿,它们倾向于学习大模型的风格而不是它们的推理过程,这导致这些小模型的质量不高。最后是模型的结果展示,左边是在某些考试上的得分,可以看到已经很接近ChatGPT了,右边是某些考试的平均得分,可以看到Orca明显优于同等规模的vicuna,同时表现接近了更大规模的模型。接下来是微软的Orca这篇论文,23年6月挂到了arxiv上。

2024-04-15 12:25:53 507

原创 [阅读笔记14][3S]Let‘s Synthesize Step by Step: Iterative Dataset Synthesis with Large Language Models by

这里右图显示了剩下几步的伪代码,R为迭代轮数,人类标注的真实世界的数据叫做gold data,将gold data划分为验证集和测试集,每次迭代都需要用目前已有的数据训练小模型,然后用验证集验证小模型,分类失败的数据会交给LLM,让它再生成类似的数据并加入到训练数据中。作者提出的方法分为四个步骤,第一步是先生成种子数据,第二步是用种子数据训练小模型,第三步是把验证集中小模型分类错误的数据给LLM让其生成类似的数据,然后添加到训练数据集中,第四步就是重复第二步和第三步,直到小模型性能收敛。

2024-04-15 12:23:27 236

原创 [阅读笔记13][EdgeSAM]Prompt-In-the-Loop Distillation for On-Device Deployment of SAM

作者设计这个模块是考虑到下面左图这种情况,由于SA-1B数据集是多粒度分割的,所以对于一个单独的点prompt很难确定它的输出粒度,但是通过框prompt就很容易确定分割粒度了。第三阶段可有可无,是专门用来训练RPN模块的,这里是冻结除了RPN之外的所有模块,然后在某些特定数据集上训练(例如COCO),目的是捕捉这些数据集上的粒度先验知识。这篇论文使用方法分为三部分,第一部分是只对图像编码器的知识蒸馏,第二部分是循环prompt蒸馏,第三部分是可选的粒度先验模块。

2024-04-15 12:19:34 495

原创 [阅读笔记12][LLaVA-1.5]Improved Baselines with Visual Instruction Tuning

第一点是prompt明确短回答的格式,由于instructBlip无法在短格式vqa和长格式vqa中取得平衡,作者分析了两点原因,首先是它的prompt太模糊了,没有明确表明输出的格式是什么样的。作者提出的解决方案就是在需要简短回答的场景下,将明确需要短回答的要求拼在问题后面,然后再去微调LLM。作者对原始的llava进行了四个很小的改进,之后就刷了11个数据集的sota。作者使用了336x336的图像,使LLM能更清楚的看到图像细节。LLM使用13b的vicuna,相比7b版本也有很大提升。

2024-04-15 12:16:46 275

原创 [阅读笔记11][LLaVA]Visual Instruction Tuning

所以作者根据这个结果得出来的结论是,类似cot的这种先给出推理的策略可以提升收敛性,但是对模型最终性能提升较小。这里展示了如何生成数据集,作者把coco数据集上每张图片的五个caption以及bounding box的信息输入给模型,然后要求gpt自问自答,问题有三种类型,第一种就是对话,询问一些图像的基本信息,比如有几个物体,物体颜色,位置关系等等。预训练数据集使用的是过滤后的CC3M数据集,这个数据集也是图文匹配的,也是借助gpt转为问答数据集,使用的问题是简要描述一下这张图片,然后让gpt生成回答。

2024-04-15 12:14:47 372

原创 [阅读笔记10][instructBLIP]Towards General-purpose Vision-Language Models with Instruction Tuning

具体而言,像OKVQA这种开放式文本生成的数据集,提升采样概率,对于A-OKVQA这种以选择题为主的数据集降低采样概率。这里的实验类似谷歌FLAN中的实验,以BLIP2为基础,测试了BLIP2+多任务学习和BLIP2+指令微调的结果,显然指令微调的zero-shot效果要更好。instructBLIP这篇论文也是ALBEF,BLIP,BLIP2团队的工作,之前几篇的一作变成通讯和共一了,于23年9月发表。一共使用了26个公开数据集,涉及11项任务,其中标黄色的为微调数据集,其余为测试数据集。

2024-04-15 12:11:32 148 1

原创 [阅读笔记9][BLIP-2]Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Langua

但这样做文本特征和图像特征之间存在着巨大的gap,所以作者又训练一个小的transformer作为两个大模型之间的桥梁,从而填平两个大模型之间的gap。在做ITG任务时,Q-former架构不允许文本特征直接与图像特征交互,但是又需要图像的监督信号来预测下一个token,因为文本特征只与query有交互,所以这时候会迫使query去提取图像中与文本有关的视觉特征。和BLIP一样,这里的自注意力是同一个模块,query和文本同时输入进去,然后根据不同的任务设置不同的掩码。

2024-04-15 12:09:09 276

原创 [阅读笔记8][BLIP]Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and

图中绿色的是干净的数据,红色的是有噪声的数据。如果不看最右边那个解码器,把中间的文本编码器挪到这里,那其实和ALBEF就是一样的了,ALBEF是把Bert切成两半,做了一个串行结构,这里因为用了共享参数的自注意力,所以可以做成并行结构。这里是这篇文章的第二个创作动机,作者说网上爬下来的图文对噪声很大,用这样的数据训练模型肯定效果不好,他提出了一个方法过滤掉有噪声的数据。有了判别器就可以对一开始有噪声的数据和刚生成的数据进行一波滤除,得到干净的数据,与原始数据拼起来作为新数据集去预训练一个新的BLIP。

2024-04-15 12:06:49 568

原创 [阅读笔记7][ALBEF]Align before Fuse: Vision and Language Representation Learning with Momentum Distillat

但如果只是这样做的话这个模型效果并不好,假如batchsize为64,那么图文匹配上的就是64对,匹配不上的有64*64-64对,首先正负样本数量不均衡,然后就是这里的负样本都是easy negatives,在另一篇论文中有提到,easy negatives就是很明显不匹配的样本,比如这里的狗和飞机,放在多模态领域就是把飞机这张图片转成文字:这是一架飞机。动量蒸馏主要是针对刚才看到的最后一类负样本,它们和正样本非常接近,已经可以作为正样本了,但却被打上了负样本的标签。利用这个损失就完成了两个模态的对齐。

2024-04-15 12:03:47 308

原创 [阅读笔记6][CLIP]Learning Transferable Visual Models From Natural Language Supervision

数据集是openai自己收集的包含4亿对图文匹配的数据集,模型有resnet版和vit版,但不管哪个都需要上百张v100训练十几天。这种方法不同于moco之类的对比学习方法,像moco这样的单模态特征提取器再厉害,对图像特征提取的再好,也需要根据具体任务来微调。最后是clip的结果展示,左图是zero-shot对比有监督的resnet50,即使是zero-shot也在大部分数据集上取得优势。这篇论文也借鉴了对比学习的思想,借助图文匹配信息来训练图像和文本编码器,使图像特征和文本特征处于同一特征空间。

2024-04-15 11:57:37 194

原创 [阅读笔记5][MoCo]Momentum Contrast for Unsupervised Visual Representation Learning

InstDisc模型是一个编码器,它把所有负样本都提前运算得到128维特征向量,并保存在内存中,这样每次可以抽样拿出来很多负样本向量,不受batch大小限制了,不过它的特征一致性就很差了。最后是本篇论文提出的模型,它有两个编码器,但只有一个参与梯度更新,另一个是动量编码器,不参与梯度更新,需要手动更新参数。字典要大,当然最好情况下是对每个负样本计算相似性,但由于负样本个数太多,无论是从时间上还是内存上考虑,全部计算一遍都不现实,所以只能进行采样,字典越大存储的负样本越多采样效果越接近理想情况。

2024-04-15 11:55:40 567

原创 [阅读笔记4][ViT]AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE

在这篇论文发表之前,就有很多把transformer引入CV领域的工作了,但是它们的效果都不如传统卷积好,作者认为是他们用于训练的数据不够大。它证明了完全不用卷积也可以很好地提取图像特征。它的结构也很简单,只需要对图片进行截patch处理,之后的结构就和Bert类似。这是整个模型的流程,不需要进行什么特殊处理,就像在文本上处理一样。得到的结果也和作者说的一样,如果数据量比较小,那么transformer是不如卷积的,但是数据量大了以后transformer基本就比卷积效果好了。

2024-04-15 11:53:25 167

原创 [阅读笔记3][instructGPT]Training language models to follow instructions with human feedback

第二项是一个惩罚项,打分模型是用SFT的回答训练得到的,但现在要打分的是强化学习模型的回答,虽然一开始强化学习模型用SFT来初始化,但之后随着微调,强化学习生成的回答会偏离SFT,这可能导致打分模型的打分没那么准确。第三项是GPT3预训练的目标,这是因为模型在与人类对齐过程中会产生对齐税,也就是使模型在传统NLP任务上性能下降了,所以把GPT3预训练的目标拿过来能够在一定程度上缓解在传统任务上退化的情况。将问题输入SFT给出回答,回答由RM打分,根据打分继续微调SFT,最后微调过的SFT就是PPO模型。

2024-04-15 11:50:44 355

原创 [阅读笔记2][FLAN]FINETUNED LANGUAGE MODELS ARE ZERO-SHOT LEARNERS

为了测试模型的zero-shot能力,他这里定义了一下没见过的任务,他认为只有任务类中所有数据集都没见过,那这个任务才算是没见过的任务。最后一个消融是考虑指令格式的作用,因为性能提升也可能单纯因为进行了微调,扩大了参与训练的语料。第二个消融是考虑模型大小,对于大模型指令微调才有性能提升的作用,对于小模型反而性能变差了,对于这点可能的解释是对小模型微调会挤占参数空间,造成预训练的通用知识遗忘。左图解释了指令微调,就是把输入转化为指令的格式,然后再去不相关的任务上做微调,最后却能提升没见过任务的性能。

2024-04-15 11:43:57 231

原创 [阅读笔记1][GPT-3]Language Models are Few-Shot Learners

最后是模型的结果,左边的图可以看到模型越大损失越小,并且要想损失线性的下降需要模型规模指数级增大。右边的图是在lambada数据集上的结果,这里one-shot不如zero-shot结果,作者给出的解释是只给一个示例的话,模型还没有充分学习到这种交互方式,可能认为给的不是一个任务示例,而是一句普通的文本,从而干扰了正常的推理。以Bert为代表的预训练-微调范式存在一些问题,首先就是数据集,对于每个细分任务都需要带标注的数据集来微调,这个代价是很大的。可以看到大模型和few-shot带来的提升都是巨大的。

2024-04-15 11:34:51 610

原创 动态规划相关题目总结

设dp[i][j]表示将串1的前i位变为串2前j位所需最少操作数,状态转移就是考虑最后一次执行的是什么操作,如果最后一次是删除,那就对应dp[i][j] = dp[i-1][j]+1,如果最后一次是添加,那就对应dp[i][j] = dp[i][j-1]+1,如果最后一次是修改,那就是dp[i][j] = dp[i-1][j-1]+1,当然如果本身第i位和第j位就相等,那dp[i][j] = dp[i-1][j-1],这四种情况取最小值。第二种做法利用二分查找,时间复杂度为O(nlogn)。

2024-02-19 21:58:58 1013

原创 数组相关题目总结

正解的话需要先了解怎么求第k小数,如果有两个升序数组,可以比较它们第k/2个元素大小,如果nums1[k/2] < nums2[k/2],那么nums1[0~k/2]一定都不可能是第k小数,因为此时如果把两数组归并起来那nums1[0~k/2]都排在nums2[k/2]前面,都达不到第k小的位置。比较经典的题目了,按左端点排序,然后遍历一遍区间,维护出当前合并区间的最右端点,如果某个新区间左端点大于当前的最右端点,那就没法合并了,反之可以合并进去。一开始想的是dp+区间和,过了以后发现还有更简单的方法。

2024-02-17 22:25:45 917

原创 字符串相关题目总结

可以开两个栈,第一个栈存储字符串,第二个栈存储重复次数,然后遍历原字符串,遇到数字直接丢进数字栈,遇到字符串直接丢进字符串栈,然后遇到左括号也需要丢进字符串栈,如果遇到右括号就要开始运算了,字符串栈不断弹栈直到弹出左括号,这些字符串可以拼接为一个长字符串,然后这个长字符串重复次数就是数字栈的栈顶,若干次拼接后得到一个更长的字符串,接下来把该串再次入字符串栈。挺经典的题目,写法也很多种,最简单的做法直接O(n^2)枚举子串,再遍历子串看是否回文,整体复杂度O(n^3)。

2024-02-15 14:44:16 443

原创 栈和队列相关题目总结

如果没有括号,那一个数字的正负完全由前面的符号确定,但有了括号就还需要考虑一点,如果括号前是负号那展开括号后其中的所有符号都会取反,所以就需要一个栈来维护括号前的符号,遇到左括号就把前面符号入栈,遇到右括号就出栈,然后再维护一个变量neg_num记录栈中负号个数。这两个栈同步进行push和pop操作,push的时候正常栈正常push,辅助栈push的是当前最小值和待入栈值中的最小的那个,这样就维护了当前栈中最小值,由于pop的时候也是同步进行pop的,所以辅助栈的栈顶永远都是正常栈中的最小值。

2024-02-14 20:12:24 1007

原创 请求https网站报错

开始还以为是代理又出了问题,后来经过查阅各种资料了解到这是因为Python2.7.9之后的版本在调用urllib.urlopen时会先验证一下https网站的SSL证书,而目标网站使用的是自签名的证书,就会导致这个错误。解决方法是在发送请求时添加参数verify = False,可能这样做不太安全,所以每次发送请求时控制台都会给我们一个warning,建议我们开启SSL验证。最近在做爬虫项目时遇到的一个报错,说是SSL证书验证失败。

2024-02-14 17:14:58 420

原创 树相关题目总结

两棵树是否对称有两个条件,首先两个根上的值需要相同,其次就是树1的左子树要和树2的右子树对称,树1的右子树要和树2的左子树对称。这道题的子结构就出来了,递归的话就很好写了。迭代法的话需要一个队列,类似bfs的思想,不过现在是在两棵树上同时bfs,结点都放在一个队列里,每次入队出队都是两棵树一起,所以两棵树的对应结点会在队列中相邻,然后看一下这相邻的两结点值是否相同,如果出现了不同那就return false,入队的时候树1入左儿子,紧接着树2要入右儿子,树1入右儿子,紧接着树2要入左儿子。

2024-02-05 03:04:42 900

原创 链表相关题目总结

两种方法,第一种方法是先统计出两链表各自长度,设两个指针,让那个长的链表指针先前进到和短的链表相同的位置,也就是如果链表a长度为5,链表b长度为7,那就先让b指针前进两步,然后a指针和b指针同步前进,返回第一个相同的位置。两种方法,一种是迭代法,一种是递归法。这题思路本身不难想,观察一下其实可以转化为两个链表的合并,将偶数位置的元素单独摘出来形成一个新链表,然后和剩下元素构成的链表进行合并就好了,但是实现起来出了个bug卡了我好久,主要还是指针操作的顺序没有思考好,写代码前要先在脑海里过一遍,不要想当然。

2024-01-26 11:33:28 973

原创 Python中关于Requests的一些问题

2、Requests 模块传参有四种方式:params、data,、JSON 和 files。之前一直用data传参,直到最近遇到一次请求不断返回参数错误,后来发现要和Content-Type字段对应上,如果Content-Type设置为json格式的话那传参也最好用json。1、请求头中字段Content-Length的设置必须是精确的长度,如果设置得过大就会等待数据,一直无响应直到超时,如果设置得过小请求会被截断,而且下一个请求解析出现错乱。

2023-02-21 11:06:35 610 3

原创 [思维][打表]Money Game 2022年ICPC杭州站D

首先可以打一个表来找找规律,通过打表可以发现在若干轮迭代后,最终整个数组都趋于稳定,每个数字都不再变化,并且满足a[1] = 2*a[2] = 2*a[3] = ...... = 2*a[n]这个规律,同时操作不会改变数组加和,设sum为数组元素加和,最终就是a[1] = sum/(n+1)*2,a[2] = a[3] = ...... = a[n] = sum/(n+1)。

2023-01-11 21:06:42 964

原创 [trie树]Master of Both 2022年ICPC杭州站K

两字符串比较大小需要看第一个不同的字符,对于任意两字符串可以找到它们第一个不同的字符,设它们为x和y,那么可以用一个二维数组记录一下,令rel[x][y]++,这里的rel[i][j]就表示由i和j大小决定的字符串的对数,如果在某个询问中i的字典序大于j的字典序,因为在记录的时候又是按照i所在字符串出现在j所在字符串之前,那么逆序对个数就可以加上rel[i][j],最终扫描一遍rel数组就能够得到答案。给出n个字符串,以及q次询问,每次询问给出一个字母之间的大小顺序,问在该顺序下这n个字符串的逆序对个数。

2023-01-11 20:55:58 1011 1

原创 [并查集]Number of Groups Codeforces1691E

现在考虑两种不同的颜色,同样是将所有线段2n个点进行排序,然后扫描这些点,遇到右端点就将对应线段删除,遇到左端点就将对应线段加入集合,同时看一下集合中不同颜色的线段,让当前这条线段和不同颜色的所有线段进行连边,不过只保留右端点最长的那条线段,其余线段全部移除,因为多余的线段都被移除了,所以复杂度还是O(n)的,不会进行太多次连边。给出若干个红色或蓝色的线段,每条线段都有一个左端点和右端点,若两线段存在交集且颜色不用,则这两线段属于同一集合,问最终有多少个不同集合。

2023-01-11 11:49:40 547

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除