干货 | 赵亚雄:大模型、AI经济和AI基础设施

news2024/11/24 17:09:45

f114b3989fd9fef71f4f717bbb9f6125.png

35400c0e49fe3561be76415b886f9f0d.png

大家好,我是算想未来的创始人CEO赵亚雄。今天非常高兴到母校来做简短的分享。我们最近会几乎是被ChatGPT、OpenAI等等话题各类的信息轮番轰炸。我希望借助这个机会,把自己这一段时间来思考的有关AI基础设施还有AGI再到大模型等内容,从相对抽象的概念到与大家关系密切的、具体到各个层面的部分内容串联起来。整个的脉络会沿着一个相对宏观,然后再具体到计算机科学、计算机产业、软件产业的发展角度来描述有关联性的事件和事件背后的因果关系,以及一些思考的框架和方式。

95d3591ecb82c0385d9b467d0a45f26d.png

我们首先从智能的定义开始。无论是从牛津的词典还是维基百科、百度百科,它们对智能的定义基本都是围绕在“获取和运用知识”的过程。如果放到一个现实的场景里面,如下面图里所示的放风筝的场景,我们把一个五岁的小朋友作为一个观察的主体,我们会看到,他在发生一系列事件之后,可以根据之前的人生经历看到的具体的事物来对这件事情产生非常多的反应。比如,首先他会意识到自己要用腿来把线压住,因为风比较大,他用自己的手是不一定能很好地控制住风筝的这条线。他很容易感到要用自己身体更大的力气,或者是身体的重量来控制这个线。但是他对“风筝需要用线不停地抓住”这件事情没有潜意识的惯性的认知。所以即便他在一开始意识到风筝需要用腿去压着,他之后也可能会忘记,让风筝飞走了。

f1f072898a284809b391f922f98c191f.png

但飞走的时候,他会有一个反馈,他会说“之后还是由妈妈来拿”。因为他发现自己还不能很好地控制风筝线。之后我们又问他,现在风筝已经挂到了大树上面,你应该怎样才能把它弄下来?他就会提到很多我们认为很普通的一些反应。比如,他说要找超人、要找消防队员去摇晃大树,或者把家里的梯子带过来。这里很明显是把大脑之前的各类记忆运用到一个新的场景。从人工的角度去模拟这样的行为,是现在人工智能研究的一个核心。但是,这里实际上会有两种方式的人工智能的研究路径:一种路径尝试理解智能背后的更底层的、更具有结构化特性的,更容易理解的逻辑或者理论;另外一种方式直接让某种人造的计算过程或者是软件或硬件形成一个整体的过程,表现出人的行为。像python语言中的duck typing类似的观念来描述,这个人如果说话像人,行为模式像人,他也有人利用知识和周围的环境来完成复杂任务的行为表现能力,那它就是一个人工智能。

5c5680ca70b3314f8fc0c037495f429e.png

回到ChatGPT,它为什么会被认为是一个划时代的人工智能突破呢?其实就体现在我们刚才看到的人的例子上。实际上,它是把一种内在的概念在不同的任务场景下自动进行泛化。比如这里的情绪分析sentiment analysis,没有做任何的训练,只是通过输入相应的前缀文字就可以获得想要的输出。

从语言模型训练的过程来看,它实际上并没有对语句进行sentiment analysis,只是对下一个单词的出现概率进行猜测。这跟我们所理解的看到一段话或者看到一个句子之后,在头脑中能形成对句子的情绪反应的思维过程完全不相干。但是我们仅仅是用这样的一种方式,最后也可以达到我们预期中的效果。那另外一种能力是通过特定的提示语去引导这个大模型,让它可以把我们所谓的思考过程延续下去。下面这个例子就是在第一次给出错误的问题答案之后,我们再给它做提示,最后把正确的答案给出来。这个过程是以往任何人工智能所不具备的。我们也看到即便是我们现在对人的智能理解已经如此深的情况下,泛化和思维链条这两种能力同样给人难以想象的震撼。我们看到在这个大模型的基础上,做相应的这个应用开发的框架,比如这里的longchain和Auto-GPT。我们看到它在Github star上面有快速的增长,这跟ChatGPT这么快能拥有全球两亿用户也有关系。

607b69214bf88fe8ed77ab82d70cfd8c.png

这里是Auto GPT的一个工作场景的演示,它以ChatGPT作为框架和相当于操盘手的角色,来链接各类工具。再通过本身的思维链条,还有泛化能力可以在这里通过一个关键词在Google去查询Auto GPT这个项目本身。查到了之后,它通过自己的泛化能力,可以去解释这个返回的html或者json格式文件。那它读取文件之后,用自己的语言生成能力去生成一段别的代码来解读json里面的内容。接下来的内容解释出来之后,它就可以在里面抽取关键的信息。

bd9f56f024d324f69c8fd4bd64992c60.png

这样一个重大的成果,为什么是OpenAI发现而不是别的团队或者公司来实现?从GPT目前主要的核心技术路线——基于Transformer深度神经网络的架构还有它不断增加训练数据及模型的规模这两条技术路线来看,它整个的发展过程从一开始就出现Transformer这样的模式,而Transformer是一种对并行计算非常友好的一种神经网络的架构,通过增加训练数据集和模型大小,能快速呈现出它模型本身能力的快速提升,可以沿着这条道路持续去深化工作。

43c7a8b7fd2ecb6a353dcb1095e274c6.png

我们如果把DeepMind作为OpenAI主要竞争对手,实际上这两个公司采用了两种完全不同的路线,DeepMind一开始做AlphaGo,重新把AI的能力介绍进这个社会公众的视野里,这是它已经完成的划时代的事情。但是当时给人的震撼远远不及我们现在的GPT,原因就是AlphaGo的这种能力只局限在对抗式、全局信息的游戏模式当中,比如各种棋类,还有各种纸牌类双方互为对手这样的游戏当中。那它直接导致的后果就是所有人对无人驾驶突然就充满了很大的信心。ChatGPT也一样,它的出现也让很多人对AI本身以通用人工智能作为指向的目标也充满了信心。这两个公司它最后选择的路径是完全不同的。DeepMind选择了AI for science这样的一个路径。那OpenAI实际上它选择的是AGI,dota2这样的一个多人竞技游戏来追逐它的AGI的方向。但是很快他意识到这种方式虽然可以取得非常好的效果。它的问题在于即便不断进行训练,在后期,如果持续扩展进行训练它计算量的需求和整体的技术体系会变得更加复杂。

所以OpenAI的AI路线通过dota2这个游戏就会面临很大的技术难度。所以之后要进行技术调整。调整过程就是我们后面看到的一系列在GPT语言方向的技术路线。回归到Google这样的场景,因为除了DeepMind的Google,还有别的人工智能研究团队。这样的问题就在于大公司的发展策略是要把资源分散在各个有前景的方向上。在这个过程里面所集中的资源实际上并不像我们从外面看到的一样是一个Google整体在跟踪一个AI的方向,而是Google里面一个一个很小的一个团队在追逐某个方向。而且不同的团队,由于在分工上必须有相对的独立性,也导致他们在追逐某一项目标时实际上会存在相互撤走的情况。即便现在我们看到人工智能的风头被OpenAI和微软这些公司占据,但我们在整个技术发展中,还是会有更多更新的成果出来。

我们已经看到了大模型具备接近人类智能的能力。把它放到具体的生活当中,会看到大模型已经开启了AI经济的序幕。往未来发展,它的商业模式会呈现一个更加难以预测的一种状态。我们一开始在做移动互联网,可以在短短时间内普及手机支付,还有大量以快递小哥还有网约车为代表的共享经济,能把整个社会的经济面貌基本上完全格式化。这在前两年是难以预测的。我们只能看到我们现在的一些发展情况。

回到我们一开始谈到的这个longchain和Auto GPT的技术架构。他们是用大语言模型作为一个核心的智能调度的角色。换句话说,大语言模型把整个AI应用置于大语言模型本身的框架里面。大语言模型本身具有泛化能力,还有思维链条的推理能力。让它具有了一个替代人类角色的能力。现在大部分的自动化都是以人在其中作为关键的决策任务,其他一些由软件或者人完成的工作,现在可以通过GPT本身具有的泛化能力和推理能力所演化出来的一种规划能力把原来很多需要手动来完成的工作通过这个方式实现自动化。

13fd1ae348f5b161bdb759712dbb3494.png

另外一个最核心的区别是,我们以前相对接近人工智能的能力需要大量的计算机硬件和软件支持。回到现在的大模型,虽然它是大模型,但是实际上它的计算规模是远远小于以前非大模型的软件。最典型的例子就是Google search,它后面有成千上万台服务器随时在应答。

背后的大数据处理会涉及到几十万、上百万台的服务器每天在做大量的离线处理。回到GPT模型,虽然也是一个大模型,现在的硬件可以很轻松集成在各类其他应用里。虽然是大模型,实际上是小软件。把数据和知识通过人工智能这种方式浓缩到了一个小的体量里面。

21092ac901404cf4dce8116bfb7a99c2.png

虽然我们认为大模型会不断往更大规模去发展。但是通过我们在算法上的研究,实际上可以快速缩减大模型的体积,让它更容易被集中在其他的应用里。我们看到在Facebook的LLaMA这个模型发布,其训练好的参数权重不小心被泄露了出来。因为大家以前都没有把类似大模型的参数发布过,都是跟着OpenAI这种闭源的方式来做,所以它在不小心泄露之后讲只能将错就错。把它的模型放出来之后,马上会有其他的团队,在这个模型的基础上通过以前很多的机器学习、人工智能的方式把它小型化。这个小型化的过程效果是非常显著的。我们看到它从一个1750亿的模型可以迅速的降到一半,就是650亿或者是降到70亿。它的效果实际上是可以维持在90%以上,当然这个90%是本身是由GPT-4它本身的评分来做的。虽然大模型现在的训练成本很高,还是处于闭源的状态,但实际上我们看到,用开源的方式来做这种类似的工作,比较容易接近业界顶级公司做出来的效果。

701b6467949de9d064095fd0f828409d.png

我们也看到有很多已经成名的创业者或者企业家,还有其他一些相对新锐的团队要做自己的大模型。所以他们面临的很多技术问题都可以上图作为分析框架。大模型如果做出来,它涉及到的上下游企业链可以分成数据、还有算力、模型、应用,再最后再到消费者、企业、用户。从应用端来说,我们已经看到大模型还有最近一段时间出现的人工智能都在快速改变我们的消费生活和生产的方式。关于模型部分,很典型的是我们要有行业定制的大模型。这并不是一种技术上的考虑,我认为它更多的是一种安全和价值观的考虑。如果用行业定制的大模型,会大大降低大模型的泛化和推理能力,在某些情况下导致的不可控的行为的后果。另外像价值观,这种价值观只有在缩小了它的应用场景之后,才会有一个更明确的定义,这也是跟安全类似的一个概念。所以我们在做大模型的时候,如果一味强调真的要做一个通用的大模型,这条路走下去就会变成非常容易由这种非技术因素导致的商业上的失败。放在国内环境下,如果模型做得非常通用,实际上没有技术手段可以解决这些敏感性的信息管控,就没办法真正走向商业化的应用。数据这一部分很明显,我们的趋势就是逐渐用AI替代人力来完成整个训练。先从定制的训练数据,由大模型来生成,然后再训练其他更小规模的模型。另外,算力的业务是以云计算,还有其他的算力产品为代表。最典型的一个趋势会变成由GPU来作为主力的计算硬件,而不是我们以前所说的CPU还有其他的计算。CPU和GPU最大的区别,在于它们的编程模型是完全不同的。CPU是以线性计算为主,线性是数据和操作是混合在一条线索上执行下去,那GPU更多的是一种大规模的并行计算。它会在大量的数据上面重复同样的计算过程。这两种模式导致两种硬件之上的基础设施和软件会具有完全不同的形态还有生态上下游的表现形式。

420033003c9eac5ee85635577cc20d40.png

我们看到大模型背后基本的逻辑就是依托更多的算力和数据来训练更大的模型,直接反映出来在训练大模型的过程里面所使用到的计算量,可以总结成一个浮点数操作的基本单元。我们把所有模型训练所消耗的这个flops记录下来,可以看到从大概2016年深度学习开始之后,指数增长的周期大概3.4个月到3.6个月。每次翻倍指的是当时这个时间点上最大的深度学习模型训练所需要的Pflops。

2d1fd33e005d6cf84170fe846202fe48.png

由于我们有Alphago和GPT这两个关键性的节点事件,已经基本上可以认为AI的算力需求在快速超越传统的云计算算力需求的发展通道里。典型的需求就意味着我们所有的模型或者人工智能的工作都会很快面临算力资源不足的潜在局限。

ab93bf1e7e109c89c1c1a7ca08e3f2e6.png

我们用这张图来表示算力的基础。算力本身是一个相对抽象的讲法,它背后有一些更具体的技术。现在存储的数据跟之前存储的数据本质上没有特别大的变化,区别是传统的存储所面临的大数据的使用场景跟并行计算的场景存在非常不同的技术诉求。最典型的一点是存储系统必须具有非常强的通信能力,I/O吞吐量,还有延时等等技术指标在大模型或者AI的训练还有推理的场景里提出的要求会比之前大数据更高。还有网络,由于我们必须做大规模的深度学习训练,这带来的网络通讯要求远远高于大数据体系里面的技术要求。另外还有虚拟化的需求。虚拟化实际上是一种对计算机硬件的高效复用,是一种提高使用率的技术方式。

算想未来是一个为中国AI经济而生的IaaS的cloud。我们的愿景使命也是要为中国的AI经济、特别是中国的大模型团队来提供一个媲美Google、OpenAI的AI产品。让我们能够发挥硬件的计算能力,同时能很好地对接上下游资源。包括硬件的资源,还有模型和应用的需求。

0f3e0e97ab767cf5c16b644f492929b3.png

我们也看到现在的基础设施,特别是算力的硬件跟世界一流水平还有比较明显的差距。要做技术讨论,首先要明确顶层需求。这里对GPT及其衍生模型训练大体的逻辑框架进行描述。一开始是一个无监督的预训练,绝大部分的计算都发生在第一阶段。以GPT-3为例,它需要45TB的数据,然后在一个1750亿的大模型上做分布式训练。训练模式非常简单,输入数据里面的语料,以句子的形式把某一些部分的单词遮盖,然后让模型去预测词汇,然后通过训练数据实际的单词来计算误差,之后进行反向传播的训练过程。之后会在模型上做微调fine-tune,fine-tune过程也是监督学习的过程。它需要人工数据标注,按照它所设定的使用场景,由机器生成问题的答案,再通过人工标注来为不同的回答打分。打分之后排序,把这些作为原始的训练数据,再对模型进行进一步训练。这从逻辑上或者是直觉上可以认为是由大量语料所带来的现实环境的世界模型,在这基础上对它进行局部和特定场景的限定优化。总体上消耗时间是比较有限的,但我们可以想象,如果有一种办法把强化学习的过程效率进一步提升的话,能否体现类似于之前大模型训练涌现的泛化能力和思维链条的能力,也是一个挺有意思的猜想。

acac1a8e42350eafa9a3b7a902a9143b.png

回到第一阶段的训练,从一个抽象的概念层次把一个很大的机器学习模型变成一个非常细节的计算流程。最上面的机器学习模型是一种框架式的思考,是一个更高抽象层次上的框架性认识。它内部有一些逻辑上可行的、模拟人脑智能过程的结构。这种结构最后变成具体的GPU的计算,变成了一大堆的矩阵的运算,它会直接去映射到计算节点和设备上。

我们其实最关注的是三个层次:第一阶段的模型到第二阶段的深度学习网络,再到最后计算节点上具体发生的计算,它每个层面如何最高效地映射过去,从而让我们最后可以达到最高效率来处理所有的训练数据的目标。

f6aa038c8a879d35aa248ee87b27363b.png

具体到单机的场景,我们的训练数据是放在硬盘上。要把硬盘读出来变成所谓的01数据啊,硬盘上存储也有一个I/O延时。这些数据也要进入cpu,再到变成逻辑上的minibatch, minibatch是神经网络训练算法里面的机制要求,我们必须有这样的数据划分。然后再到GPU的训练。我们如果做分布式的话,在minibatch的层面上可以把它拆分到不同的GPU硬件上。在GPU硬件上,每一阶段的训练都必须做相应的参数同步。实际上我们要把整个训练过程在不同的硬件上完成之后,把训练的成果进行整合,继续做下一步的工作。这样把一个并行的过程通过中间串行汇聚的步骤可以进行到下一阶段。从而可以在每一步骤运用并行的计算模式来加速它的数据处理的速率。

2bb973f97e3fe8416fe4c02c9501593b.png

我们还会把这个过程扩展到多台服务器上,区别在于我们现在需要一种相对更具有扩展性的同步方式。用参数服务器作例,我们知道参数服务器做的事情跟多卡GPU做同步完成的效果一致,也是要把分别训练的这些实例的参数汇集在一个点,做聚合之后再从算法层面上把聚合之后的数据再分布到所有分散的训练的任务上,让分散的任务可以取得其他节点训练任务的进展。

7d112ece26150f263d65709b8f6f7c14.png

我们把整个调度过程放在一个具体的分布式计算架构里。我认为这是一个非常好的思考整个软件层面的技术问题的框架。最左边是我们如何把机器学习的任务进行拆分,把它拆分成模块化的计算任务。模块化的技术任务存在决策层,也就是图(左一)中的ABC,实际上决定数据向哪个方向流动。后续处理是分布式进行。

具体到计算硬件中间是一个数据中心网络,我们看到图2最上面有Datacenter Network。它类似于总线,通过RDMA的形式把分布式的计算设备通过高效的网络联系起来。RDMA可以做远程的内存访问,同时不需要经过CPU协调。从计算机体系架构的角度,我们现在所有的I/O都是要经过CPU的仲裁。因为GPU的并行计算对数据的吞吐量要求很高,如果放到数据中心的环境下面,所以传统通过CPU做通信的带宽就会变成限制。所以它需要RDMA的方式,让GPU之间可以直接沟通数据。中间这些是所有的计算节点,每个方框都是它的计算节点。每一个计算任务都会被分配在一群机器上。中间部分解决的是要把什么样的数据还有计算任务放在对应的硬件上。在排步确定之后,下一步就是要在硬件上做具体计算任务的调度。这里最关键的是要做到持续同步。我们不希望出现任务和时间启动的不一致。所有在同一阶段要完成的计算任务必须要在规定的时间启动,否则所有并行任务实际用时就变成了最慢任务所消耗的时间。

d72f2066a987297929bad9e8ac9e89a0.png

最后,我们怎么样能依靠优势来实现快速的赶超先进水平。前面提到的整个框架当中,我们现在最差劲的地方就是我们的算力还有上面的基础设施。但是我们的优势可以在其他地方发挥出来。首先,在数据方面,可以很好地保证数据在流通层面有一致的数据交易和流转市场。只有整个市场底层机制畅通,才可以更好地支持上层应用来使用这些数据。另外一点在于我们的应用,因为我们有非常大的消费市场。应用铺开的速度或者迭代的速度,会远比美国这样的市场更快。它基本逻辑就是我们有一个统一的、大的市场,同时市场的密度很高。我们从用户端得到反馈,做出调整的速度会非常快。我们需要更好地来解决价值观匹配的问题。由行业领域的大模型研发的方向来解决价值观匹配的问题。具体的算例我们最关心的是怎样把有限的算力释放出来。我们的后发优势是在于我们已经看到了美国算力发展的成果,就可以跳过他们之前遇到的各类的问题。

57bba82463b00bed45cf7714686c55b7.png

在上面的分析框架上,我们看到像算想未来这样的基础设施供应商,其实是处在非常核心的位置。原因在于它要对接“百花齐放”的硬件场景还有同样的大模型和应用。前面我们提到大模型也必须针对行业,所以每个行业它都会有自己的大模型研发需求。之后随着AI应用快速被社会公众和各类企业接受,它带来的推理业务需求也会更加明显。我们作为一个类似操作系统的存在,实际上可以发挥的价值非常显著,我们知道在通信场景下,一定需要有一个像路由器的中心节点,它的整体技术体系才会有更好的扩展性质。我们作为一个软件的基础设施,也同样扮演了一个类似网络中路由器的角色,站在各色各样的硬件厂商还有各种各样的大模型和AI应用中间来解决,通过把共性的能力和需求做匹配的方式来更好提高两者之间的效率。

cbde6ca152e4599b720a229ba12d609e.png

最后总结一下,我们大模型最大的意义在于它有很强的泛化能力。这种泛化能力是之前从来没有尝试过的研究方向。大家所谓的泛化更多是在同一问题场景下对一些局部的能力进行一些所谓的泛化,我们不需要对底层能力做相应的训练就能做到。比如我们一开始做的机器翻译这样的场景,我们想用一种大模型来处理各种不同语言的翻译。泛化能力体现在在训练时不需要做大量的人工标注的数据就可以来生成足够高效的模型。OpenAI之所以能成功,首先是选择了正确的研究方向,其次是在于团队的执行力以及后续是否有足够的资源支持和匹配。

大模型为什么拉开了AI经济的帷幕呢?原因是它所展现的能力超出了人们以前的想象。大模型之所以成为AI理论研究的划时代创新就是因为它的泛化能力。不管是对社会公众还是专业研究者来说,其震撼效果都是难以想象的。这才让人们对AI整体的想象力又扩展了一个方向。之前只是在围棋上下赢了这个李世石,那大家都认为自动驾驶仿佛近在咫尺。现在公众对人工智能的产品认知也还是处于一种相对狂热或者是虚幻的阶段。但是否我们可以通过基础设施的快速跟进,然后模型和应用端的持续投入,让这个泡沫被刺破时造成的负面影响降到最低。这个就是AI基础设施在其中最根本的价值,它价值的核心就是算力。无论是大模型还是应用,发展都是依托于算力的基础。由于大模型所带来的对人类、对人类社会的思想观念冲击和价值的认知,导致是各国政府在这方面会对相关的技术采用一种更加保守甚至是一种不理性的对抗态度。这就意味着我们在AI基础设施方面的短板有可能在一段时间之内进一步被放大。我们只有发挥自己的优势,才能在关键领域集中资源快速由点到面突破整体AI经济和基础设施的落后局面。

编辑:文婧

校对:林亦霖

73905c7c2c27df1cf618d61d4b53c72f.png

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

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

相关文章

ElasticSearch创建文档以及索引文档的详细流程

当我们发起一个查询请求之后,ES是怎么处理这个请求然后返回数据的呢?今天就来详细说一下。 首先看一下整体结构: 在集群模式下一个索引有多个分片,在上图中有三个节点(一个主节点两个从节点),一个索引被分为两个分片(…

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…

vue3的props和defineProps

文章目录 1. Props 声明1.1 props用字符串数组来声明Blog.vueBlogPost.vue 1.2 props使用对象来声明Blog.vueBlogPost.vue 2. 传递 prop 的细节2.1 Prop 名字格式2.1 静态Prop & 动态 Prop静态prop动态prop示例Blog.vueBlogPost.vue 2.3 传递不同的值类型NumberBooleanArra…

【Java笔试强训 11】

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、选择题 二、编程题 🔥最近公共…

算法记录 | Day46 动态规划

139.单词拆分 思路: 1.确定dp数组以及下标的含义 dp[i] : 字符串长度为i的话,dp[i]为true,表示可以拆分为一个或多个在字典中出现的单词。 2.确定递推公式 如果 s[0: j] 可以拆分为单词(即 dp[j] True)&#xff…

Linux RHCE解题方法

目录 安装和配置Ansible 创建和运行Ansible临时命令 安装软件包 使用RHEL系统角色 使用 Ansible Galaxy 安装角色 创建和使用角色 从 Ansible Galaxy 使用角色 创建和使用逻辑卷 生成主机文件 修改文件内容 创建 Web 内容目录 生成硬件报告 创建密码库 创建用户帐…

C++中stringstream类详解

本文主要介绍 C 编程语言中 stringstream 类的相关知识&#xff0c;同时通过示例代码介绍 stringstream 类的使用方法。 1 概述 <sstream> 定义了三个类&#xff1a;istringstream、ostringstream 和 stringstream&#xff0c;分别用来进行流的输入、输出和输入输出操作…

快速傅里叶变换FFT学习笔记

点值表示法 我们正常表示一个多项式的方式&#xff0c;形如 A ( x ) a 0 a 1 x a 2 x 2 . . . a n x n A(x)a_0a_1xa_2x^2...a_nx^n A(x)a0​a1​xa2​x2...an​xn&#xff0c;这是正常人容易看懂的&#xff0c;但是&#xff0c;我们还有一种表示法。 我们知道&#xf…

java结束当前循环

在 Java中&#xff0c;当我们要结束一个循环时&#xff0c;通常会使用循环变量的实现类来结束&#xff0c;但在实际开发中&#xff0c;我们经常会遇到某个循环结束后需要进行其他的操作的情况。此时&#xff0c;就需要使用循环变量来结束当前循环。 1、创建一个新的类&#xff…

数据结构_双链表、循环链表、静态链表

目录 1. 双链表 1.1 双链表的初始化 1.2 双链表的插入操作 1.3 双链表的删除操作 1.4 双链表的遍历 2. 循环链表 2.1 循环单链表 2.2 循环双链表 3. 静态链表 4. 顺序表和链表的比较 5. 相关练习 1. 双链表 单链表结点中只有一个指向其后继的指针&#xff0c;使得单…

电子电气架构——车辆E/E架构软硬件解耦

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人只有在举棋不定,无从把握的时候才感到疲惫。只有去行动就能获得解放,哪怕做的不好也比无所作为强! 本文主要介绍车辆E/E架构常识,主要涉及内容是行业最…

Python实现LBP纹理提取

1、什么是LBP纹理特征&#xff1f; LBP&#xff08;Local Binary Patterns&#xff0c;局部二值模式&#xff09;是提取局部特征作为判别依据的&#xff0c;一种有效的纹理描述算子&#xff0c;度量和提取图像局部的纹理信息。它具有旋转不变性和灰度不变性等显著的优点&#…

uniapp中使用vuex(解决uniapp无法在data和template中获取vuex数据问题)

uniapp中使用vuex&#xff08;解决uniapp无法在data和template中获取vuex数据问题&#xff09; 1. uniapp中引入vuex2. uniapp中使用vuex3. 解决uniapp无法在data和template中获取vuex数据问题 1. uniapp中引入vuex 1 .在根目录下新建文件夹store,在此目录下新建index.js文件&…

第五章——动态规划3

蒙德里安的梦想 我们在黑框内横着放红框&#xff0c;我们发现当横向小方格摆好之后&#xff0c;纵向小方格只能一次纵向摆好&#xff0c;即纵向小方格只有一种方案&#xff0c;即整个摆放小方格的方案数等于横着摆放小方格的方案数 f[i,j]表示的是现在要在第i列摆&#xff0c;j…

代码随想录Day64(一刷完结)

今天学习单调栈解决最后一道题 84.柱状图中的最大矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,…

C++中的list容器

文章目录 list的介绍list的使用list的构造list iterator的使用list capacitylist元素访问list modifierslist的迭代器失效 list与vector的对比 list的介绍 list是可以在常数范围内的任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代&#xff1b;   …

FFMPEG中的filter使用二

上一篇我们在使用滤镜时是手动创建各种滤镜&#xff0c;然后根据处理链路手动链接不同的过滤器&#xff0c;有助于我们理解滤镜的流程。这一篇我们使用参数形式&#xff0c;让ffmpeg自动帮我们创建和链接过滤器&#xff0c;这样可以减少代码量&#xff0c;同时我们可以先使用参…

学系统集成项目管理工程师(中项)系列15_质量管理

1. 质量&#xff08;Quality&#xff09;的定义 1.1. 反应实体满足主体明确和隐含需求的能力的特性总和 1.2. 明确需求是指在标准、规范、图样、技术要求、合同和其他文件中用户明确提出的要求与需要 1.3. 隐含需求是指用户和社会通过市场调研对实体的期望以及公认的、不必明…

thinkphp路由,请求和响应

文章目录 定义获取路由后面的参数跨域请求请求响应 定义 thinkphp定义路由一般在route路由下的app.php中 下面这是一个简单的路由 Route::rule(admin/login,/app/controller/Admin/login)->middleware(\app\middleware\MyMiddleware::class);该路由表示当访问admin/login时…

人工智能课程笔记(7)强化学习(基本概念 Q学习 深度强化学习 附有大量例题)

文章目录 1.强化学习与深度学习的区别2.强化学习中的基本概念3.强化学习、有监督学习和无监督学习的区别4.强化学习的特点5.离散马尔可夫过程6.马尔可夫奖励过程7.马尔可夫决策过程8.策略学习8.1.策略学习概念8.2.策略评估与贝尔曼方程 9.强化学习的最优策略求解10.基于价值的强…