AI大模型原理科普(深度好文)

目录

认识AI大模型家族

AI是什么?

机器学习是什么?

机器学习有哪些分支?

什么是强化学习?

深度学习属于哪一类学习?

生成式AI和深度学习是什么关系?

大语言模型是什么?

所有大语言模型都是生成式AI?

大语言模型LLM (large language model)到底是个啥?

大模型LLM的“大”是什么含义?

LLM核心技术到底是什么?

为什么Transformer模型能一统江湖?

Transformer的自注意力机制是干什么的?

Transformer背后的黑科技是什么?

Transformer演变了哪些成功的模型?

Transformer在CV计算机视觉上,为什么大放异彩?


    今天,我们突然发现,AI可以帮忙生成文字、图片、音频和视频等等内容了,而且让人难以分清背后的创作者到底是人类还是AI。这些AI生成的内容被叫做AIGC,它是AI generated content,即AI生成内容的简写。像ChatGPT生成的文章、GitHub Copilot生成的代码、Midjourney生成的图片等,都属于AIGC。而当AIGC这个词在国内火爆的同时,海外更流行的是另外一个词Generative AI,即生成式AI。从字面上来看,生成式AI,这之间的关系很好理解,生成式AI所生成的内容就是AIGC。所以,ChatGPT、GitHub Copilot、Midjourney等都属于生成式AI。由此可见,AIGC和生成式AI的概念都是很容易理解。因为AI这个词,在国内比生成式AI更加流行,很多语境下AIGC也被用于指代生成式AI。

AIGC主要有两种类型:一种是基于模板的自动化生成,另一种是基于深度学习技术的自动化生成。

首先,基于模板的自动化生成是一种较为简单的AIGC方法。其基本原理是先设计一个模板,然后填充模板中的空白部分以生成内容。这种方法的优点是生成的内容结构清晰、逻辑严谨,但缺点是生成的内容形式单一、难以与其他文章区分开来。

其次,基于深度学习技术的自动化生成则更加灵活,可以根据需求自由生成不同风格、不同主题的内容。与基于模板的自动化生成相比,基于深度学习技术的自动化生成能够更好地满足用户的需求,但也存在着一些问题,例如生成的内容质量和可信度难以保证,需要经过人工编辑和审核。

AIGC将走过三个发展阶段:第一个阶段是“助手阶段”,AIGC用来辅助人类进行内容生产;第二个阶段是“协作阶段”,AIGC以虚实并存的虚拟人形态出现,形成人机共生的局面;第三个阶段是“原创阶段”,AIGC将独立完成内容创作。

认识AI大模型家族

生成式AI、监督学习、无监督学习、强化学习、深度学习、大语言模型、Transformer等,这些算法之间又是什么关系呢?

其实,这些AI知识点,如何了解原理,可以一言以蔽之,先通过一张图,感性认识它们之间的关系。

AI是什么?

人工智能(Artificial Intelligence),英文缩写为AI。是计算机科学的一个分支学科,旨在让计算机系统去模拟人类的智能,从而解决问题和完成任务。早在1956年,AI就被确立为了一个学科领域,在此后数十年间经历过多轮低谷与繁荣。AI是新一轮科技革命和产业变革的重要驱动力量,是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是智能学科重要的组成部分,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能是十分广泛的科学,包括机器人、语言识别、图像识别、自然语言处理、专家系统、机器学习,计算机视觉等。 AI发展经历了很多举足轻重的关键里程碑,例如:从1943年的神经网络诞生,到2024年的Sora风靡全球,经历了81年的心路历程。

机器学习是什么?

机器学习是AI的一个子集,它的核心在于不需要人类做显示编程,而是让计算机通过算法自行学习和改进,去识别模式,做出预测和决策。比如,如果我们通过代码告诉电脑,图片里有红色说明是玫瑰,图片里有橙色说明是向日葵,程序对花种类的判断就是通过人类直接明确编写逻辑达成的,不属于机器学习。举例:如果我的电脑,有大量玫瑰和向日葵的图片,让电脑自行识别模式,总结规律,从而能对没见过的图片进行预测和判断,这种就是机器学习

机器学习有哪些分支?

机器学习有多个分支,包括监督学习、无监督学习、强化学习。在监督学习里,机器学习算法会接受有标签的训练数据,标签就是期望的输出值,所以每个训练数据点都既包括输入特征,也包括期望的输出值。算法的目标:是学习输入和输出之间的映射关系,从而在给定新的输入特征后,能够准确预测出相应的输出值。监督学习任务包括分类和回归,分类数据划分为不同的类别。举例:拿一堆猫和狗的照片,和照片对应的猫狗标签进行训练,然后让模型根据没见过的照片预测是猫还是狗,这就属于分类。举例:拿一些房子特征的数据,比如面积、卧室数、是否带阳台等和相应的房价作为标签进行训练。回归是让模型根据没见过的房子的特征预测房价是什么数值,这就属于回归。无监督学习,和监督学习不同,主要是学习的数据是没有标签的,所以算法的任务是自主发现数据里的规律。无监督学习任务包括聚类,就是把数据进行分组,举例:拿一堆新闻文章,让模型根据主题或内容的特征,自动把相似文章进行组织

什么是强化学习?

强化学习,是让模型在环境里采取行动,获得结果反馈,从反馈里学习,从而能在给力情况下采取最佳行动来最大化奖励或是最小化损失。举例:和训练小狗类似,刚开始的时候,小狗会随心所欲做出很多动作,但随着和训犬师的互动,小伙会发现某些动作能够获得零食,某些动作没有流失,某些动作甚至会遭受惩罚。通过观察动作和奖惩之间的联系,小狗的行为会逐渐接近训犬师的期望。强化学习可以应用在很多任务上,举例:让模型下围棋时,获得不同行动导致的奖励或损失反馈,从而在一局游戏里优化策略,学习如何采取行动达到高分。

深度学习属于哪一类学习?

深度学习属于机器学习中的特殊类,深度学习是机器学习的一个分支,核心在于:使用人工神经网络模仿人脑处理信息的方式,通过层次化的方法提取和表示数据的特征,专注于非结构化数据处理神经网络,是有许多基本的计算和储存单元组成,这些单元被称为神经元。这些神经元通过层层连接来处理数据,并且深度学习模型通常有很多层,因此称为深度。举例:要用计算机识别小猫的照片。在深度学习中,数据首先被传递到一个输入层,就像人类的眼睛看到图片一样。然后数据通过多个隐藏层,每一层都会对数据进行一些复杂的数学运算,来帮助计算机理解图片中的特征,例如小猫的耳朵、眼睛等等。最后计算机会输出一个答案,表明这是否是一张小猫的图片。神经网络可以用于监督学习、无监督学习、强化学习,所以深度学习不属于他们的子集。

总之,深度学习是机器学习的一个特定领域,它利用人工神经网络模型进行学习和训练。深度学习模型由多个层次(称为神经网络的层)组成,每一层都会对输入数据进行变换和表示。这些网络层通过一系列的非线性转换将输入数据映射到输出结果。深度学习模型的核心是深度神经网络(Deep Neural Network,DNN),它可以通过大量的标记数据进行训练,从而实现高度准确的预测和分类任务。

    这里必须提一下,卷积神经网络(CNN)是深度学习的杰出代表作,革命性提升了AI模型在江湖上的多年霸主地位,卷积神经网络作为深度学习中的一种重要网络结构,具有自动提取特征和高效分类的能力。随着深度学习技术的发展,CNN在计算机视觉、自然语言处理、语音识别等领域取得了显著的成果。详解参见:深入浅出图解CNN-卷积神经网络-CSDN博客

生成式AI和深度学习是什么关系?

其是深度学习的一种应用,它利用神经网络来识别现有的模式和结构,学习生成新的内容,内容形式可以是文本、图片、音频。而大语言模型也叫LLM (large language model),也是深度学习的一种应用,专门用于进行自然语言处理任务。

生成式AI的原理主要基于深度学习技术和神经网络。其基本原理是,通过训练模型来学习从输入到输出的映射关系。这种映射关系通常由一组权重和偏置参数来定义,这些参数是通过优化损失函数来获得的。通过调整这些参数,模型可以逐渐改进其预测和生成结果的能力

生成式AI的神经网络通常采用前馈神经网络(Feedforward Neural Network)或循环神经网络(Recurrent Neural Network)。在前馈神经网络中,信息从输入层逐层传递到输出层,每个神经元只与前一层的神经元相连。而在循环神经网络中,信息在同一个网络中循环传递,每个神经元可以与自身的多个输出相连。这两种网络结构都可以用于生成式AI,但它们的应用场景有所不同。

生成式AI的优点在于,它可以高效地生成大量有意义的内容,比如文章、图像、音频等。此外,它还可以根据用户的个性化需求,生成符合用户兴趣和需求的内容。但是,生成式AI也存在一些缺点,比如它可能会出现语法错误、语义错误等问题,而且它生成的内容可能缺乏创新性和独特性。

2024年2月16日,OpenAI发布了“文生视频”(text-to-video)的大模型工具,Sora(利用自然语言描述,生成视频)这个消息一经发出,全球社交主流媒体平台以及整个世界都再次被OpenAI震撼了。AI视频的高度一下子被Sora拉高了,要知道Runway Pika等文生视频工具,都还在突破几秒内的连贯性,而Sora已经可以直接生成长达60s的一镜到底视频,要知道目前Sora还没有正式发布,就已经能达到这个效果。

大语言模型是什么?

大语言模型里面的大字说明模型的参数量非常大,可能有数十亿甚至到万亿个,而且训练过程中也需要海量文本数据集,所以能更好的理解自然语言以及生成高质量的文本。大语言模型的例子有非常多,比如国外的GPT、LLaMA,国内的ERNIE、ChatGLM等,可以进行文本的理解和生成。举例:以GPT3这个模型为例子,它会根据输入Prompt提示词提示词Prompt,简单来说,就是让告诉Chatgpt它需要做什么,类似程序员编程。但不同之处在于,你只需要输入纯文本,ChatGPT会尽可能地理解你的意思,并完成你提出的任务。)以及前面生成过的词,通过概率计算逐步生成下一个词或TokenToken"(标记),是指将输入文本分解为更小的单位,例如单词、字母或字符。在自然语言处理中,将文本分解为标记有助于模型理解语义和语法结构。当一个Prompt被发送给GPT时,它会被分解成多个Token,这个过程被称为Tokenier。一般情况下,对于英文单词,四个字符表示一个标记Token。对于ChatGPT3.5来说,它最开始支持的Token最大值是4096)来输出文本序列。

所有大语言模型都是生成式AI?

不是所有的生成式AI都是大语言模型,而所有的大语言模型是否都是生成式AI,这也存在些许争议。生成图像的扩散模型(如:Sora)就不是大语言模型,它并不输出文本。因为,有些大元模型由于其架构特点不适合进行文本生成。举例:谷歌的BERT就是一个例子,它的参数量和训练数据很大,属于大语言模型。应用方面,BERT理解上下文的能力很强,因此被谷歌用在搜索上,用来提高搜索排名和信息摘录的准确性。它也被用于情感分析、文本分类等任务。但同时其不擅长文本生成。特别是连贯的常文本生成,所以,普遍认为此类模型不属于生成式AI的范畴。

大语言模型LLM (large language model)到底是个啥?

2022年10月30日,OpenAI发布ChatGPT,一跃成为当下最快达到100万用户的线上产品,也带动大语言模型成为了当下热点,更多AI聊天助手,如雨后春笋一般出现在大家的视野里。那大语言模型干什么了?大语言模型,也叫LLM ,是用于做自然语言相关任务的深度学习模型,可以模型一些文本内容输入,它能返回相应的输出,完成的具体任务可以是生成、分类、总结、改写等。大语言模型首先需要通过大量文本进行无监督学习。举例:以GPT3为例,它的训练数据有多个互联网文本语料库,覆盖线上书籍、新闻文章、科学论文、维基百科、社交媒体帖子等等。接受海量的训练文本数据,模型能更多了解单词与上下文之间的关系,从而更好地理解文本的含义,并形成更准确的预测。

大模型LLM的“大”是什么含义?

大模型的大,指的不仅仅是训练数据巨大,而是参数数量巨大。参数是模型内部的变量,可以理解为是模型在训练过程中学到的知识。参数决定了模型如何对输入数据做出反应,从而决定模型的行为。在过去的语言模型研究中发现,用更多的数据和算力来训练具有更多参数的模型,很多时候能带来更好的模型表现。这就需要AI学习。举例:做蛋糕,一是只允许AI调整面粉、糖蛋的量;二是可允许AI调整面粉、糖蛋、奶油、牛奶、苏打粉、可可粉的量,以及烤箱的时长和温度。因为后者由于可以调整的变量更多,更能让AI模仿做出更好吃的蛋糕。随着餐数的增加,它甚至有能力做出别的品类,创造一些全新的食品。所以,如今语言模型的参数数量可能是曾经的数万倍甚至数百万倍。以Open AI的第一个大模型GPT1为例,它有1.17亿个参数,到了GPT2,参数有15亿个参数,而这GPT3参数又增长到了1750亿个。这样,大模型不像小模型那样局限于单项或某几项任务,而是具有更加广泛的能力。比如在这之前,我们可能要训练单独的模型,分别去做总结、分类、提取等等任务,但现在一个大模型就可以搞定这一切。像GPT Cloud、文心一言、通义千问等AI聊天助手,都是基于大语言模型的应用。

LLM核心技术到底是什么?

大语言模型公众认知,其技术发展里程碑,其实要回溯到2017年6月,谷歌团队发表论文《Attention is all you need》,提出了transformer架构,至此,自然语言处理的发展方向被革命性的颠覆了。随后,出现了一系列基于transformer架构的模型,2018年OpenAI发布GPT1.0,谷歌发布BERT,2019年OpenAI发布了GPT2.0,百度发布ERNIE1.0等。所以,大语言模型的发展早就如火如荼了。

为什么Transformer模型能一统江湖?

GPT直接向公众开放,而且能让用户在网页上用对话的方式进行交互体验,很流畅丝滑,大众的目光才被GPT吸引过去,全称是Generative Pre-trained Transformer生成式预训练,Transformer是其中的关键。所以,要了解大语言模型,必须搞懂Transformer。在Transformer架构被提出之前,语言模型的主流架构主要是循环神经网络RNN,其按照顺序逐字处理每一步,输出取决于先前的隐藏状态和当前的输入,要等上一个步骤完成后,才能进行当前的计算。因此,无法完成并行计算,训练效率低,而且RNN不擅长处理长序列,因为难以捕捉到长距离依赖性的语义关系。接下来,为了捕捉到长距离依赖性,也出现了RNN的改良版本,就是LSTM长短期记忆网络,但是这也并没有解决传统并行计算的问题,而且在处理非常长的序列时也依然受到限制。最后,Transformer腾空出世了,他有能力学习输入序列里所有词的相关性和上下文,不会受到短时记忆的影响能做到这一点的关键,在于Transformer的自注意力机制。也正如论文标题所说,Attention is all you need,注意力就是你所需要的一切。

Transformer的自注意力机制是干什么的?

简单来说,Transformer在处理每个词的时候,不仅会注意这个词本身以及它附近的词,还会去注意输入序列里所有其他的词,然后其余每个词不一样的注意力权重。权重是模型在训练过程中通过大量文本逐渐学习到,因此,Transformer有能力知道当前这个词和其他词之间的相关性有多强,然后去专注于输入里真正重要的部分。即使两个词的位置隔得很远,Transform依然可以捕获他们之间的依赖关系,举例:

给出一个句子,使用一些关键词animal和street来描述it到底指代什么?

题目写出了一些关键词(如animal,street)作为提示其中这些给出的关键词就可以看作是key, 而整个的文本信息就相当于是query,脑子里浮现的答案信息value,默认是street。

第一次看到这段文本后脑子里基本上浮现的信息就只有提示这些信息,此时,key与value = street基本是相同的

第二次进行深入理解后,脑子里想起来的东西原来越多,对query这一个句子,提取关键信息tired进行关联,这就是注意力作用的过程, 通过这个过程,我们最终脑子里的value发生了变化,变成了animal。

总结一下, 使用一般注意力机制,是使用不同于给定文本的关键词表示它。 而自注意力机制,需要用给定文本自身来表达自己,也就是说你需要从给定文本中抽取关键词来表述它,相当于对文本自身的一次特征提取

Transformer背后的黑科技是什么?

Transformer目标是:是通过预测出现概率最高的下一个词,来实现文本生成的,这种效果有点像搜索引擎的自动补全。每当我们输入一个新的字或词,输入框就开始预测后面的文本,概率越高的排在越上面。但模型具体到底是如何得到各个词出现的概率呢?

有两个核心部分组成,编码器Encoder和解码器Decoder。举例:做中文翻英语的任务,给编码器输入一句英语,解码器返回对应的法语。“我是一个学生”的翻译如何工作的?

第一步:转换为计算机可以计算的向量Token。中文的每个字,被理解为是文本的一个基本单位,翻译成不同的token。是指将输入文本分解为更小的单位,例如单词、字母或字符。在自然语言处理中,将文本分解为标记有助于模型理解语义和语法结构。当一个Prompt被发送给GPT时,它会被分解成多个Token,这个过程被称为Tokenier。短单词可能每个词是一个token,长单词可能被拆成多个token。每个token会被用一个整数数字表示,这个数字被叫做token ID。这是因为,计算机内部是无法储存文字的,任何字符最终都得用数字来表示。有了数字表示的输入文本后,再把它传入嵌入层。如下是官网提供的Tokenization示意图。

第二步:Embedding嵌入层。其作用是让每个token都用向量表示,向量可以被简单的看为一串数字,举例:假设把向量长度简化为1-521,实际中向量长度可以非常长。为什么要用一串数字表示token?重要原因是,一串数字能表达的含义是大于一个数字的,能包含更多语法、语义信息等等。这就好比对人的画像,如果只有男人和女人这两个属性,太少维度的描述,需要增加籍贯,身高,爱好和专业等维度,才能更好的刻画人的特征。多个数字就是多个特征,我们就可以进行更多维度的表示特征。嵌入层的向量里面包含了词汇之间语法、语义等关系。向量长度到底可以多长呢?在transformer 论文里,向量长度是512,GPT3里设置为12288,可以想象能包含多少信息。

第三步:位置编码。Transformer的一项关键机制是位置编码。在语言里,顺序很重要,即使句子里包含的字都是一样的,但顺序不一样也能导致意思大相迳庭。这是为什么自然语言处理领域会用序列这个词,因为它表示一系列按照特定顺序排序的元素。前面提到,RNN和人类阅读文本一样,对输入序列同样是按顺序依次处理,这就造成了训练速度的瓶颈,因为只能串行,没办法并行,也就是没法同时去学习所有信息。Transformer把词输入给神经网络前,除了会先对词进行嵌入转换成向量,也就是把词用一串数字表示,它会把每个词在句子中的位置也各用一串数字表示,添加到输入序列的表示中,然后把这个结果给神经网络,模型既可以理解每个词的意义,又能够捕获词在句子中的位置。从而,理解不同词之间的顺序关系。借助位置编码,可以不按顺序输入给Transformer模型,可以同时处理输入序列里的所有位置,而不需要像RNN那样依次处理。那么,在计算时每个输出都可以独立的计算,不需要等待其他位置的计算,结果这大大提高了训练速度。训练速度一快,训练出巨大的模型也不是这么难了。位置编码,就是把表示各个词在文本里顺序的向量和上一步得到词向量相加,然后把得到的结果传给编码器。这样做的意义是,模型既可以理解每个词的意义,又能够捕捉词在句子中的位置,从而理解不同词之间的顺序关系。

第四步:编码器。它的主要任务是把输入转换成一种更抽象的表示形式,这个表示形式也是向量表示的一串数字,里面既保留了输入文本的词汇信息和顺序关系,也捕捉了语法语义上的关键特征。捕捉关键特征的核心是编码器的自注意力机制。模型在处理每个词的时候,不仅会关注这个词本身和它附近的词,还会关注序列中所有其他词。正如transformer论文标题所说,自注意力机制通过计算每对词之间的相关性,来决定注意力权重。实际上执行中,Transformer使用了多头注意力机制,也就是编码器不只有一个注意力机制模块,每个头都有他自己的注意力权重,用来关注文本里不同特征或方面,比如有的关注动词,有的关注修饰词,有的关注情感,有的关注病理实体等等。而且他们之间可以做并行运算,也就是计算进展上互不影响。举例:我们想测试部门中谁的关系最近,先对部门中的每个成员进行个体画像,再总结关系最近的人是谁。这个可以分组进行,第一组(第一个头)就是按照个人信息进行关联,第二组(第二个头)按照大家的项目经验关联;第三组(第三个头)按照个人职业规划进行关联;通过多组并行打分操作,可以很快发现个体之间的关系。每个自注意力头的权重,都是模型在之前的训练过程中,通过大量文本里逐渐学习和调整的。在多头注意力机制后面,还有一个前馈神经网络,它会对输出进行进一步增强表达能力。

第五步:解码器。它是大语言模型生成一个个词的关键。通过前面的编码器,我们有了输入序列里各个token的抽象表示,可以把它传给解码器。解码器还会先接收一个特殊值,这个值表示输出序列的开头。这样做的原因是,解码器不仅会把来自编码器的输入序列的抽象表示作为输入,还会把之前已经生成的,来保持输出的连贯性和上下文相关性。刚开始,还没有任何已生成的文本,所以把表示开头的特殊值先作为输入。具体的生成过程仍然是要经过多个步骤。首先和编码器一样,文本要经过我们已经了解过的嵌入层和位置编码,然后被输入进多头自注意力层,但它和编码器里的多头自注意力层却不一样。当编码器在处理各个词的时候,他会关注输入序列里所有其他词,但解码器中自注意力机制只会关注这个词和它前面的其他词,后面的词要被遮住而不去关注。这样做是为了确保解码器生成文本时遵循正确的时间顺序,不能先让他偷看后面的词,在预测下一个词时,只是用前面的词作为上下文。这种类型的多头注意力机制被叫做带掩码的多头注意力机制。另外的一个注意力机制,会捕捉编码器的输出和解码器即将生成的输出之间的对应关系,从而将原始输入序列的信息融合到输出序列的生成过程中。解码器里的前馈神经网络作用和编码器里的类似,也是通过额外的计算,来增强模型的表达能力。最后,和编码器一样,解码器同样是多个堆叠到一起的,这可以增加模型的性能,有助于处理复杂的输入输出关系。解码器的最后阶段,包含了一个线性和一个softmax层,他们加一块的作用是,把解码器输出的表示转化为词汇表的概率分布,这个词汇表的概率分布代表下一个次被生成token的概率,一般来说,模型会选择概率最高的token作为下一个输出。因此,解码器就是预测下一个输出的token,就像GPT的功能类似。

Transformer演变了哪些成功的模型?

第一个是仅编码器模型,也叫自编码器模型;比如BERT,让模型猜文本里被遮出的词是什么情感分析,让模型判断文本情感是积极还是消极。目标是:理解语言的任务。

第二个是仅解码器模型,也叫自回归模型;如GPT2,GPT3,,通过预测下一个词来预测文本生成。目标:文本生成。

第三个是编码器和解码器模型,也叫序列到序列模型;比如T5,BART,一个序列转换为另外一个序列,目标:翻译,总结。

总之,各个模块总结如下:

注意力层:使用多头注意力(Multi-Head Attention)机制整合上下文语义,它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构,从而更好地解决文本的长程依赖。
位置感知前馈层(Position-wise FFN):通过全连接层对输入文本序列中的每个单词表示进行更复杂的变换。
残差连接:对应图中的Add 部分。它是一条分别作用在上述两个子层当中的直连通路,被用于连接它们的输入与输出。从而使得信息流动更加高效,有利于模型的优化。
层归一化:对应图中的Norm 部分。作用于上述两个子层的输出表示序列中,对表示序列进行层归一化操作,同样起到稳定优化的作用。

Transformer在CV计算机视觉上,为什么大放异彩?

请参见博客:

Swin Transformer 最强CV大模型的图解(一文全面解析)_swin大模型-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java】HashMap 源码阅读

HashMap 源码阅读 HashMap 简介 HashMap 主要用来存放键值对,实现了基于哈希表的 Map 接口,非线程安全。 HashMap 可以存放 null 的 key 和 null 值,但 null 作为 key 只能有一个,null 作为 value 可以有多个。 HashMap 有两个…

BFS广度优先搜索

import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入您…

业务逻辑漏洞(靶场) fiddler

目录 fiddler简介: 业务逻辑漏洞: fiddler下载 靶场: 实验一 ​编辑实验二(ps 更改实验url会变,fiddler没抓到东西看看代理改没改) 实验三 实验四 fiddler简介: 一款网络抓包工具&#…

内部类、泛型、常用API

内部类 内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类) 如果一个类定义在另一个类的内部,这个类就是内部类。 场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设…

20240403-算法复习打卡day43||● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II class Solution { public:int lastStoneWeightII(vector<int>& stones) {vector<int> dp(15001, 0);int sum 0;for (int i 0; i < stones.size(); i) sum stones[i];int target sum / 2;for (int i 0; i < stones.siz…

智慧城市中的物联网革命——青创智通

工业物联网解决方案-工业IOT-青创智通 得益于物联网 (IoT)的变革力量&#xff0c;智慧城市的概念正在迅速成为现实。物联网正在从根本上改变城市的运作方式&#xff0c;为城市居民带来更高的效率、可持续性和生活质量。在本文中&#xff0c;我们将探讨物联网在智慧城市中的作用…

49 样式迁移【李沐动手学深度学习v2课程笔记】

1. 样式迁移&#xff08;Style Transfer) 计算机视觉的应用之一&#xff0c;将样式图片中的样式&#xff08;比如油画风格等&#xff09;迁移到内容图片&#xff08;比如实拍的图片&#xff09;上&#xff0c;得到合成图片 可以理解成为一个滤镜&#xff0c;但相对于滤镜来讲…

基于SSM框架JAVA仓库管理系统源代码Mysql数据库(可当毕设,实训项目,设计大赛)

仓库管理系统实现的功能包括店铺管理&#xff0c;员工管理&#xff0c;部门管理&#xff0c;商品管理&#xff0c;权限管理&#xff0c;入库管理&#xff0c;出库管理&#xff0c;盘点管理&#xff0c;统计管理等功能。该项目采用了Mysql数据库&#xff0c;Java语言&#xff0c…

Hibernate多事务同时调用update(T t) ,字段被覆盖问题

前言 今天现网有个订单卡单了&#xff0c;经过排查发现没有任何异常日志&#xff0c;根据日志定位发现本应该更新的一个状态&#xff0c;也sql肯定执行了(使用了Hibernate的ORM框架)&#xff0c;但是数据库里面的状态没有更新。大概逻辑如下 String hql from orderInfo where…

大模型训练:如何解决GPU万卡互联挑战?

如何解决GPU万卡互联的挑战 近日&#xff0c;字节跳动携手北京大学研究团队发布重磅论文&#xff0c;揭示了一项革命性技术&#xff1a;将大型语言模型训练扩展至超10,000块GPU的生产系统。此系统不仅解决了万卡集群训练大模型时的效率和稳定性难题&#xff0c;更标志着人工智能…

用dbms_shared_pool.purge清除执行计划

1.Oracle 11g如何清除share pool中某条SQL的执行计划 以前在Oracle 10g数据库上,如果遇到绑定窥探导致执行计划慢的情况,想要清除某条SQL的执行计划,让它硬解析,找了很久都没有找到直接操作share pool的方法&#xff08;总不能alter system flush shared_pool&#xff09;,只能…

rocketmq和rabbitmq总是分不清?

1. 官方解答 摘自百度搜索&#xff1a; 2. 通俗易懂的回答

【Gem5】获取构建教程

gem5-tutorial-hpca-2023 1 介绍 1.1 Gem5是什么1.2 Gem5可以用来做什么1.3 获取并构建gem5 gem5-tutorial-hpca-2023 打开网址&#xff1a; github 创建教程代码空空间 “Code” -> “Codespaces” -> “Create Codespace on master” GitHub Codespaces 是一个由…

最坏情况为线性时间的第k大元素

在统计和数据分析中&#xff0c;我们经常会遇到求最大值、最小值、中位数、四分位数、Top K等类似需求&#xff0c;其实它们都属于顺序统计量&#xff0c;本文将对顺序统计量的定义和求解算法进行介绍&#xff0c;重点介绍如何在最差时间复杂度也是线性的情况下求解第k大元素。…

在Debian 12系统上安装Docker

Docker 在 Debian 12 上的安装 安装验证测试更多信息引言 在现代的开发环境中,容器技术发挥着至关重要的作用。Docker 提供了快速、可靠和易于使用的容器化解决方案,使开发人员和 DevOps 专业人士能够以轻松的方式将应用程序从一个环境部署到另一个环境。 Docker 的安装过程在…

实用运维工具(转载)

1、查看进程占用带宽情况-Nethogs Nethogs 是一个终端下的网络流量监控工具可以直观的显示每个进程占用的带宽。 下载&#xff1a;http://sourceforge.net/projects/nethogs/files/nethogs/0.8/nethogs-0.8.0.tar.gz/download [rootlocalhost ~]#yum -y install libpcap-deve…

C语言—每日选择题—Day68

第一题 1、运行以下C语言代码&#xff0c;输出的结果是&#xff08;&#xff09; #include <stdio.h> int main() {char *str[3] {"stra", "strb", "strc"};char *p str[0];int i 0;while(i < 3){printf("%s ",p);i;} retur…

在win10上虚拟一个LoongOS系统(类似虚拟机)作为开发环境

文章目录 1.安装1.1.下载这三个东西1.2.安装好qemu。1.3.创建一个启动脚本startup_mate.bat&#xff0c;然后把三部分东西放到一起1.4.然后双击startup.bat就可以启动了。 2.文件的传输2.1.使能虚拟机系统的ssh2.2.连接ssh 3.Qt相关安装Qt安装opencv 1.安装 注意&#xff0c;一…

ClickHouse--17--argMin() 和argMax()函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 argMin() 和argMax()函数业务场景使用案例1.准备表和数据&#xff1a;业务场景一&#xff1a;查看salary 最高和最小的user业务场景二&#xff1a;根据更新时间获取…

再也不怕面试官问 OOM了,一次生产环境 Metaspace OOM 排查流程实操!

问题背景 小奎公司的运维同时今天反映核心业务一个服务目前 CPU 的使用率、堆内存、非堆内存的使用率有点高。刚反映没有过多久该服务就直接 OOM 了&#xff0c;以下是生产监控平台监控信息。 CPU 使用率监控 堆内存和非堆内存使用率 OOM 产生的日志报错信息 问题分析 根…