当前位置: 首页 > news >正文

【人工智能发展史】从黎明到曙光01

人工智能的史诗:从黎明到曙光

序曲:晨曦微露

故事的序幕拉开于一个思想激荡的年代,1956年,达特茅斯会议的钟声,如同第一缕晨曦,宣告了"人工智能"纪元的到来。那个夏天,在新罕布什尔州的宁静校园中,来自不同学科的十多位杰出学者汇聚一堂,他们中有数学家约翰·麦卡锡(John McCarthy),有神经科学和信息论专家沃伦·麦卡洛克(Warren McCulloch),还有认知心理学先驱赫伯特·西蒙(Herbert Simon)。

在那场为期八周的头脑风暴中,“人工智能”(Artificial Intelligence)这个术语首次被麦卡锡正式提出,如同一粒种子,埋下了未来的无限可能。会议的目标宏大而明确:探索如何让机器模拟人类的各种智能行为,包括语言的使用、抽象概念的形成和自我提升的能力。那时的先驱者们,心中怀揣着一个大胆的设想:能否赋予机器以"智慧"?但这智慧,并非冰冷的钢铁逻辑,而是一种能够洞察周遭,并作出灵动回应的生命力。

更早些时候,阿兰·图灵(Alan Turing)的深邃目光,早已投向了未来。这位英国数学奇才在1950年发表的《计算机器与智能》论文中提出了著名的"图灵测试",像一道神秘的门扉,等待着能真正推开它的"思考的机器"。他设想了一个简单却深刻的场景:如果一台机器能在对话中让人类无法分辨它是机器还是人类,那么,我们是否可以说,这台机器拥有了某种形式的"思考"能力?

图灵本人经历了第二次世界大战期间破解德国"恩尼格玛"密码的伟大工程,他亲眼见证了机器在处理复杂计算时展现出的惊人能力。然而,他的视野远不止于此。在生命的最后岁月里,他正在研究生物形态学和化学反应的模式,试图理解生命本身的奥秘。这种跨学科的思考方式,成为了早期人工智能研究的鲜明特点。

达特茅斯会议结束后,参与者们带着热情与灵感返回各自的研究机构,开始了人工智能的第一次探索浪潮。在麻省理工学院,马文·明斯基(Marvin Minsky)和他的学生成立了人工智能实验室;在卡内基梅隆大学,艾伦·纽厄尔(Allen Newell)和赫伯特·西蒙开发了"逻辑理论家"程序,能够证明数学定理;在IBM,阿瑟·塞缪尔(Arthur Samuel)创造了能够学习下跳棋的程序,这被视为机器学习的早期范例。

这个时代充满了浪漫主义色彩。研究者们相信,通往人工通用智能的道路或许曲折,但绝非遥不可及。正如西蒙在1957年乐观地预测:"在二十年内,机器将能够做人类能做的任何工作。"尽管这个预测最终被证明过于乐观,但这种激情和探索精神,却成为了人工智能领域最宝贵的遗产之一。

然而,这条探索之路并非一帆风顺。随着研究的深入,人们逐渐意识到,"智能"是一个比最初想象中更加复杂、更加多面的概念。在追寻这一目标的过程中,研究者们很快发现自己站在了一个分岔路口,面临着截然不同的两种途径…

第一章:分岔的路径

在探索智慧的征途上,先驱们很快发现自己面临着一个根本性的选择:究竟应该如何模拟人类的思维?这个问题的答案,引领着勇士们踏上了两条截然不同的路径。

"符文师"的传承(符号主义)

在20世纪60年代至80年代的黄金时期,一派学者,如同古老的符文师,坚信智慧的奥秘隐藏在严谨的符号与逻辑规则之中。他们的理念可以追溯到哲学家莱布尼茨(Gottfried Wilhelm Leibniz)的梦想:创造一种普遍的符号语言,能够表达一切人类知识和推理。在这种理念下,思考被视为符号的操作,智能则是在这些符号上应用逻辑规则的能力。

这一学派的代表人物之一,约翰·麦卡锡,开发了LISP(列表处理语言),这成为了早期人工智能研究的主要编程语言。另一位重要人物,马文·明斯基,则构建了"框架"理论,试图捕捉人类认知中的结构化知识。在斯坦福大学,爱德华·费根鲍姆(Edward Feigenbaum)和约书亚·拉德伯格(Joshua Lederberg)创造了DENDRAL系统,能够分析化学质谱数据并推断分子结构。

这一时期的巅峰之作,莫过于"专家系统"——它们在特定领域展现出令人赞叹的知识与推理能力,仿佛一位无所不知的贤者。比如,MYCIN系统能够诊断血液感染病并推荐抗生素治疗,其准确率甚至超过了一些医学专家。专家系统的核心包含两个部分:一个知识库,储存着领域专家的经验和规则;以及一个推理引擎,能够应用这些规则来解决具体问题。

专家系统的成功,一度让人相信人工智能的巨大突破就在眼前。然而,当世界的复杂性超越了既定的符文,当模糊与不确定性弥漫开来,贤者的光芒也略显黯淡。专家系统面临着几个严峻挑战:首先,知识获取成为瓶颈——将专家头脑中的知识转化为明确的规则,是一个耗时且困难的过程;其次,真实世界充满了模糊性和例外情况,纯粹的符号规则难以应对这种复杂性;最后,专家系统缺乏学习能力,无法像人类那样从经验中不断调整和改进自己的知识结构。

符号主义的局限性,在著名的"框架问题"中表现得尤为明显。这个问题指出,在一个动态变化的环境中,符号系统需要不断更新其对世界的表征,而确定哪些信息需要更新,本身就是一个无法用简单规则完全捕捉的复杂任务。正如哲学家休伯特·德雷福斯(Hubert Dreyfus)在其著作《计算机不能做什么》中所批评的那样,人类的智能远不只是符号操作,还包含着直觉、经验和身体化的认知,这些都难以用符号系统完全表达。

"织网者"的崛起(连接主义)

与符文师们的严谨逻辑相对,另一批探索者,则将目光投向了生命自身——那精妙绝伦的人类大脑。他们渴望模仿神经元之间千丝万缕的连接,织造出一张能够自我学习、不断进化的"智慧之网"。

这一思路的萌芽,可以追溯到1943年,当神经生理学家沃伦·麦卡洛克(Warren McCulloch)和数学家沃尔特·皮兹(Walter Pitts)提出了第一个数学神经元模型。他们描述了一个简化的神经元如何通过"全有或全无"的方式激活,并证明了这样的网络在理论上能够计算任何可以用算法表达的函数。这一洞见,为后来的神经网络研究奠定了理论基础。

1957年,弗兰克·罗森布拉特(Frank Rosenblatt)设计了"感知机",这是最早的人工神经网络之一。感知机由输入单元和一个输出单元组成,能够通过简单的学习规则调整连接权重,从而"学习"分类简单的模式。最初的感知机,便是他们手中稚嫩却充满希望的作品,它已经能够辨认出简单的图案,预示着一条通往全新智能形态的道路。

罗森布拉特对感知机的前景充满热情,甚至预言:"感知机有朝一日将能够意识到自己的存在。"然而,就在这种乐观情绪高涨之际,连接主义的道路却遭遇了第一次重大挫折,这将在下一章中详述。

除了技术层面的差异,符号主义和连接主义还反映了对人类智能本质的不同理解:符号主义者将思维视为高层次的符号操作,类似于人类使用语言和逻辑进行推理的过程;而连接主义者则认为,智能更多地是从低层次的神经活动中涌现出来的现象,不一定需要明确的符号表征。

这两条路径的分歧,不仅仅是技术方法的差异,更是对认知本质的不同哲学观点。在接下来的几十年里,这两种思路时而交织,时而平行发展,共同推动着人工智能领域的进步。然而,正如我们将在后续章节看到的那样,在经历了起伏跌宕之后,连接主义终将迎来属于它的高光时刻。

第二章:迷雾峡谷与灯火重燃

异或之谜与冬天的来临

“织网者"的道路并非坦途。在感知机初露锋芒的同时,一个看似简单的逻辑问题却成为了它难以逾越的障碍。1969年,马文·明斯基和西摩尔·佩珀特(Seymour Papert)在其著作《感知机》中,数学严谨地证明了单层感知机无法解决"异或问题”(XOR Problem)。

异或问题看似简单:当两个输入相同时(都是0或都是1),输出为0;当两个输入不同时(一个是0,一个是1),输出为1。这种非线性可分的问题,对于单层感知机来说却是不可能完成的任务。明斯基和佩珀特的工作,犹如当头一棒,使许多研究者对神经网络的前景产生了怀疑。

这一打击,加上早期对人工智能过于乐观的预期未能实现,以及资金支持的减少,共同导致了第一次"人工智能冬天"的到来。在20世纪70年代至80年代初,神经网络研究陷入低谷,许多研究者转向了其他领域。怀疑的迷雾一度笼罩了这条新兴的路径。

多层感知机:峡谷中的灯火

然而,智慧的火种从未熄灭。一些坚守的研究者,如杰弗里·辛顿(Geoffrey Hinton)、大卫·鲁梅尔哈特(David Rumelhart)和詹姆斯·麦克莱兰(James McClelland),继续在连接主义的道路上探索。他们意识到,异或问题的关键不在于感知机本身的局限,而在于网络结构的复杂性不足。

1986年,鲁梅尔哈特、辛顿和威廉姆斯(Ronald Williams)在《自然》杂志上发表了具有里程碑意义的论文,重新发现并完善了"反向传播"算法。这一算法允许误差信号从输出层"反向传播"到前面的层,从而使多层神经网络的训练成为可能。

通过在网络中构建更复杂的层次,“多层感知机"横空出世,如同在迷雾峡谷中点亮的一盏明灯,驱散了阴霾。多层感知机包含了一个或多个"隐藏层”,这些层位于输入层和输出层之间,能够学习更加复杂的特征表示。人们豁然开朗,原来通过层层递进的抽象与组合,简单的感知也能汇聚成理解复杂世界的洪流。

多层感知机的杰出之处在于,它能够近似任何连续函数,这一特性被称为"通用近似定理"。这意味着,理论上,一个具有足够神经元的单隐层网络,能够以任意精度逼近任何连续函数,包括那些描述复杂模式识别任务的函数。

深度学习的前奏:更强大的织网技法

尽管多层感知机在理论上能够解决复杂问题,但实际应用中仍面临着诸多挑战,如梯度消失问题(当网络层数增加时,误差信号在传播过程中会逐渐减弱)、过拟合(模型在训练数据上表现良好,但泛化能力差)等。这些问题限制了早期神经网络的应用范围。

随着计算能力的提升和新算法的开发,更强大的织网技法不断涌现。其中,卷积神经网络(CNN)的发展尤为引人注目。1989年,杨立昆(Yann LeCun)等人开发了LeNet-5网络,用于手写数字识别。卷积神经网络的设计灵感来自于生物视觉系统,它通过局部连接、权重共享和空间下采样等特性,显著减少了参数数量,使网络更易于训练,更善于识别视觉模式。CNN如同锐利的鹰眼,能够从复杂的图像中提取出关键特征。

随着深度学习热潮的兴起,更多创新的网络结构被提出。2012年,Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton提出的AlexNet在ImageNet图像识别竞赛中取得了突破性成绩,将错误率从26.2%降低到15.3%,标志着深度学习时代的真正开始。

在此后的几年中,残差网络(ResNet)由何恺明(Kaiming He)等人于2015年提出,通过"跳跃连接"解决了深层网络训练困难的问题,使得构建超过100层的网络成为可能。ResNet搭建起更深邃的智慧高塔,让神经网络的能力达到了新的高度。

而2017年,Google的研究人员提出的Transformer架构,则彻底改变了自然语言处理领域。不同于传统的循环神经网络(RNN)或长短期记忆网络(LSTM),Transformer利用"自注意力机制"(Self-Attention)处理序列数据,能够更好地捕捉长距离依赖关系。这一架构的出现,预示着一场更深刻的变革,为后来的GPT、BERT等大型语言模型奠定了基础。

从感知机到Transformer,连接主义的道路虽然曲折,但每一次创新都让人工智能向着更加灵活、更加强大的方向迈进了一步。这些进步,不仅仅是技术上的突破,更是对人类认知本质的深刻探索。正如神经科学家Vernon Mountcastle所言:"大脑皮层的计算原理是通用的。"或许,通过模拟大脑的连接方式,我们正在接近智能的本质。

第三章:铸魂之术

拥有了强大的"智慧之网",如何为其注入真正的灵魂?这便需要精妙的"铸魂之术"——训练算法和优化策略,它们是使神经网络从随机初始化状态成长为智能系统的关键。

真实之镜:损失函数的艺术

每一个学习过程,都始于对当前状态的清晰认知。在神经网络的训练中,“损失函数"扮演着这一关键角色,它如同一面"真实之镜”,忠实地映照出模型的预测与现实之间的差距。

损失函数的设计,本身就是一门艺术。不同的任务需要不同的损失函数:对于分类问题,交叉熵损失(Cross-Entropy Loss)常被采用,它能够有效度量预测分布与真实分布之间的差异;对于回归问题,均方误差(Mean Squared Error)则是常见的选择,直接计算预测值与实际值之间的平方差。

损失函数不仅仅是技术细节,更反映了我们对"好"的模型的定义。例如,在生成模型中,我们可能关注生成样本的多样性,这就需要特殊的损失函数设计;在强化学习中,损失函数则与奖励信号紧密相连,体现了对智能体行为的评价标准。

有时,单一的损失函数难以捕捉问题的所有方面,这时我们需要多目标优化,平衡不同的评价指标。正如古代铸剑师需要平衡刀刃的锋利度与韧性,现代AI研究者也在不断寻找能够平衡多种目标的损失函数设计。

心法口诀:梯度下降的奥秘

有了衡量标准,下一步便是如何引导系统向着更好的方向演化。这便是"梯度下降"算法的核心使命——它引导着网络中的无数参数,在一次次迭代中,向着"完美"不断逼近。

梯度下降的基本原理简单而优雅:沿着损失函数梯度的反方向更新参数,就像一个登山者在迷雾中根据坡度的感觉,一步步向山谷移动。然而,实际应用中,这一过程充满了微妙的变化和策略考量。

最基本的梯度下降使用整个训练集计算梯度,但这在大数据时代显得过于笨重。随机梯度下降(SGD)应运而生,它在每次迭代中只使用一个或一小批数据样本估计梯度,大大加速了训练过程。然而,SGD的路径往往显得摇摆不定,如同在山谷中盲目寻路的旅人。

为了使旅程更加平稳高效,研究者们开发了各种优化技术:动量法(Momentum)引入了"惯性"的概念,使参数更新的方向更加稳定;AdaGrad、RMSProp和Adam等自适应学习率方法,则根据每个参数的历史梯度调整其学习步长,使训练过程更加智能。这些技术,如同古代武术中的不同心法口诀,各有所长,适用于不同的场景。

学习率的选择,也是一门微妙的艺术。太大的学习率可能导致算法跳过最优解,甚至发散;太小的学习率则会使训练过程缓慢无比。学习率调度策略,如学习率衰减、周期性学习率等,进一步丰富了这一领域的可能性。

丝线传递:反向传播的精妙

"反向传播"算法,则像一条无形的丝线,将"真实之镜"的反馈精准地传递到网络的每一个角落,使得整个系统得以高效地学习与进化。它是深度学习能够成功的关键所在。

反向传播的核心思想是链式法则的应用——通过计算损失函数对每个参数的偏导数,从网络的输出层开始,层层向后传递误差信号,直到达到输入层。这一过程的巧妙之处在于,它将一个复杂的全局优化问题,分解为一系列局部的、可解的子问题。

在实现层面,反向传播涉及到前向传播(计算网络输出)和后向传播(计算梯度)两个阶段。这一过程可以通过计算图(Computational Graph)清晰地表示,每个节点代表一个操作,边表示数据流动的方向。自动微分技术,进一步简化了这一过程,让研究者能够专注于模型设计而非梯度计算的细节。

反向传播的计算复杂度与网络的大小成正比,这一特性使得它比简单的数值微分方法更加高效,为大规模深度学习模型的训练铺平了道路。然而,反向传播也面临着挑战,如前面提到的梯度消失和梯度爆炸问题。为了应对这些挑战,研究者开发了批量归一化(Batch Normalization)、残差连接(Residual Connection)等技术,使深层网络的训练更加稳定。

均衡之道:正则化与过拟合

在追求模型性能的过程中,研究者们发现了一个令人困扰的现象:模型可能在训练数据上表现极佳,但在未见过的数据上却表现糟糕。这种现象被称为"过拟合",它如同一个学生仅仅记住了考试答案,而非理解背后的原理。

为了应对这一挑战,"正则化"技术应运而生。它们通过各种方式限制模型的复杂度,鼓励模型学习更加一般化的特征表示。L1正则化(Lasso)和L2正则化(Ridge)通过惩罚大的权重值,使模型更加简洁;Dropout技术则随机"关闭"部分神经元,迫使网络学习更加鲁棒的特征;数据增强(Data Augmentation)通过对训练数据进行变换(如旋转、缩放、翻转等),丰富了训练样本的多样性。

正则化的艺术,在于找到模型复杂度和数据拟合之间的平衡点。太简单的模型可能无法捕捉数据中的复杂模式(欠拟合),而太复杂的模型则可能过度拟合训练数据中的噪声。这种平衡,反映了机器学习中"奥卡姆剃刀"原则的应用——在解释力相当的情况下,更简单的理论往往更可取。

演化之路:超参数优化与架构搜索

除了模型参数本身,神经网络的设计还涉及许多"超参数"——如层数、每层神经元数量、学习率等。这些超参数的选择,往往依赖于研究者的经验和直觉。然而,随着模型复杂度的增加,手动调整超参数变得越来越困难。

自动化的超参数优化方法,如网格搜索(Grid Search)、随机搜索(Random Search)和贝叶斯优化(Bayesian Optimization),使这一过程变得更加系统化。特别是贝叶斯优化,它能够根据先前的评估结果,智能地选择下一组待评估的超参数,大大提高了搜索效率。

更进一步,神经架构搜索(Neural Architecture Search, NAS)技术,甚至能够自动设计神经网络的结构。这种方法通常基于进化算法或强化学习,让模型结构本身在一定规则下进化或学习。例如,谷歌的AutoML项目就使用了强化学习来自动设计神经网络架构,并在多个任务上取得了优于人工设计架构的结果。

这些自动化技术,正在将人工智能研究从"炼金术"向"科学"转变。它们不仅提高了模型性能,还揭示了神经网络设计的一些基本原则,为未来的研究提供了宝贵的洞见。

“铸魂之术"的发展,展现了人工智能研究的两个重要特点:一方面,它深深植根于数学和统计学的基础理论;另一方面,它又充满了实践智慧和经验技巧。正是这种理论与实践的结合,推动了深度学习在近年来取得的惊人进步。正如中国古代哲学所言,“知行合一”,理论的精深与实践的智慧相结合,才能铸就真正的"灵魂”。

书接下回…

相关文章:

【人工智能发展史】从黎明到曙光01

人工智能的史诗:从黎明到曙光 序曲:晨曦微露 故事的序幕拉开于一个思想激荡的年代,1956年,达特茅斯会议的钟声,如同第一缕晨曦,宣告了"人工智能"纪元的到来。那个夏天,在新罕布什尔…...

ollama使用gpu运行大模型

罗列ollma镜像 ollama list拉取ollama镜像源里面的模型: ollama pull qwen2:1.5b下载CudaToolkit https://developer.nvidia.com/cuda-toolkit-archive 我这里选择11.7的万金油版本,从来没出过bug Ollama安装好后,为了让推理跑在GPU上&am…...

Linux电源管理——PSCI初始化流程和多核启动流程

目录 一、PSCI 初始化流程 1、PSCI设备树节点 2、PSCI kernel初始化流程 get_set_conduit_method set_conduit psci_probe 二、CPU PSCI 操作初始化流程 1、CPU 设备树节点 2、 struct cpu_operations 3、kernel 流程 cpu_read_bootcpu_ops smp_init_cpus 三、CPU…...

Linux问题排查-引起服务器带宽使用率高的内鬼

Linux网络流量监控与瓶颈分析全攻略:从基础命令到进程级方案 一、网络带宽查询与实时流量监控 1. 查询主机网络带宽 网卡理论带宽 通过ethtool命令查看网卡最大支持速率,例如: ethtool eth0 # 替换为实际网卡名(如ens33&#x…...

《微服务架构设计模式》笔记

思维导图 1-3章 4-6 章 5-13 章 资料 配套代码仓库:https://github.com/microservices-patterns/ftgo-application 作者网站:https://microservices.io/...

基于JDBC的信息管理系统,那么什么是JDBC呢?

JDBC 即 Java Database Connectivity,是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式,让 Java 程序能够连接到各种不同类型的数据库,并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功能 建立…...

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表 城市keywordcitycode北京beijing131上海shanghai289广州guangzhou257深圳shenzhen340重庆chongqing132天津tianjin332石家庄shijiazhuang150南京nanjing315成都chengdu75沈阳shenyang58杭州hangzhou179武汉wuhan2…...

信息学奥赛一本通 1853:【08NOIP提高组】传纸条 | 洛谷 P1006 [NOIP 2008 提高组] 传纸条

【题目链接】 ybt 1853:【08NOIP提高组】传纸条 洛谷 P1006 [NOIP 2008 提高组] 传纸条 【题目考点】 1. 动态规划:坐标型动态规划 【解题思路】 抽象问题,存在m乘n的网格,每个格子中有一个数值,即同学愿意帮忙的…...

APM32小系统键盘PCB原理图设计详解

APM32小系统键盘PCB原理图设计详解 一、APM32小系统简介 APM32微控制器是国内半导体厂商推出的一款高性能ARM Cortex-M3内核微控制器,与STM32高度兼容,非常适合DIY爱好者用于自制键盘、开发板等电子项目。本文将详细讲解如何基于APM32 CBT6芯片设计一款…...

【Linux我做主】探秘进程与fork

进程和fork 父子进程和forkgithub地址前言1. 进程的标识符PID1.1 查看系统内所有的进程1.2 kill杀掉进程1.3 获取进程的PID1.4 bash与父子进程 2. 创建进程与fork2.1 fork创建子进程2.2 fork困惑的解释0. fork的工作原理1. 为什么给子进程返回0,给父进程返回子进程P…...

学习python day4

1.顺序语句结构 #赋值语句 name张三 age20 a,b,c,droom#字符串分解赋值 print(a,b,c,d) #输入输出也是典型的顺序结构 nameinput(请输入您的姓名:) ageeval(input(请输入您的年龄:)) #使用eval进行转换 print(姓名:,name) print(年龄&#x…...

如何通过外链建设提升Shopify独立站的权重和排名

一、外链质量评估与筛选原则 相关性优先 选择与自身行业、产品或目标用户群体高度相关的网站(如行业论坛、垂直媒体、评测博客)交换外链,避免低相关性垃圾链接导致搜索引擎惩罚。 权威性指标 关注外链来源网站的域名权威(DA…...

高并发内存池|六、page cache的设计

六、page cache的设计 1. page cache的结构 page cache 也是一个哈希桶结构,但它的映射结构与前两个 cache 不同。它的每一个桶是容量从 1 到 128 页大小的内存块,桶中的每个内存块由 SpanList 管理。page cache 的内存由其向系统申请所得,…...

C++线程池实现

C线程池实现 知识点补充为什么要实现线程池线程池的实现过程 知识点补充 在C11中引入了对线程库的支持,接下来我们介绍一下跟线程相关的一些知识点: 线程对象的构造方式 在C11中主要提供的三种线程的构造方式:无参构造、带参构造和调用移动构…...

#Redis缓存篇#(七)分布式缓存

目录 一 单节点Redis 1 单节点的问题 二 分布式缓存 1 Redis持久化 (1 RDB持久化 (2 AOF持久化 2 Redis主从集群 (1 搭建主从架构 (2 主从数据同步原理 3 Redis哨兵 (1 哨兵的作用和原理 (2 搭…...

【VSCode】安装与 ssh 免密登录

【VSCode】安装与 ssh 免密登录 下载SSH 登录设置免密登录关闭远程连接删除ssh连接(慎用!!!删除了建立的连接就没有了!!) 下载 https://code.visualstudio.com/docs/?dvwin64user 选择安装路径…...

【Python解决八皇后问题】回溯算法与优化策略全解析

目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现基础回溯实现位运算优化…...

判断一个元素是否在可视区域

判断元素是否在可视区域的方法 方法一:offsetTop 和 scrollTop 通过计算元素的 offsetTop 和容器的 scrollTop 来判断元素是否位于视口内。这种方法适用于简单的垂直滚动场景。 优点: 实现简单,性能较好。缺点: 不支持复杂的布局结构(如嵌套滚动),无法处理水平方向上的可…...

作物遗传与种质创新利用全国重点实验室-随笔10

作物遗传与种质创新利用全国重点实验室依托于南京农业大学,2022年11月完成国家重点实验室重组工作,由原名称“作物遗传与种质创新国家重点实验室”正式更名为“作物遗传与种质创新利用全国重点实验室”。 实验室面向国家粮食安全和农业高质量发展的重大战…...

分布式电源的配电网无功优化

分布式电源(Distributed Generation, DG)的大规模接入配电网,改变了传统单向潮流模式,导致电压波动、功率因数降低、网损增加等问题,无功优化成为保障配电网安全、经济、高效运行的关键技术。 1. 核心目标 电压稳定性:抑制DG并网点(PCC)及敏感节点的电压越限(如超过5%…...

游戏引擎学习第301天:使用精灵边界进行排序

回顾并为今天的内容做准备 昨天,我们解决了一些关于排序的问题,这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题,但我们提出了一个看起来合理的排序标准。 有两点…...

网络框架二次封装:基于Kotlin的高扩展性网络请求框架完整实现

完整目录结构 1. 架构设计1.1 分层架构1.2 核心组件1.3 接口关系图2. 基础配置实现2.1 NetworkConfig完整代码2.2 CacheConfig完整代码3. 核心网络客户端3.1 SmartHttpClient完整实现3.2 单例管理3.3 服务创建与执行4. DSL请求构建器4.1 NetworkRequest完整实现4.2 生命周期绑…...

高噪声下扩展边缘检测算子对检测边缘的影响

目录 一、常见的边缘检测算子 二、扩展边缘检测算子对检测边缘的影响 三、结论 一、常见的边缘检测算子 Sobel 算子: Prewitt算子;...

Linux 内核音视频架构(V4L2 )介绍

一.概述 Linux 内核中的 V4L2(Video for Linux Two)框架 是用于管理音视频设备(如摄像头、电视调谐器、视频采集卡等)的核心子系统。 它提供了一套统一的接口,使得用户空间应用程序能够方便地访问和控制硬件设备&…...

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能,是任何品牌内容营销策略的重要组成部分。 但是,为了发展您的 YouTube 频道并消除噪音,优化您的视频内容以便可以在搜索结…...

基于STM32的智能台灯_自动亮度_久坐提醒仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

这里写目录标题 1.主要功能2.仿真设计3.程序设计4.设计报告5.下载链接 基于STM32的智能台灯_自动亮度_久坐提醒仿真设计 (Proteus仿真程序设计设计报告讲解视频) 仿真图Proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号&#xff1…...

labview硬件部分——压力测量

0kg的电压需要我们手动输入!在不放东西的时候的电压,先运行一次程序,将其记录后写到程序中的0kg输入按键即可。 整体的程序:...

Mysql索引实战1

对于上面这两种 name>‘a’ 和 name>‘zzz’ 的执行结果,mysql最终是否选择走索引或者一张表涉及多个索引,mysql最终如何选择索引,我们可以用trace工具来一查究竟,开启trace工具会影响mysql性能,所以只能临时分析…...

在实际网络部署中,静态路由的优先级通常高于RIP

是的,在实际网络部署中,静态路由的优先级通常高于RIP,尤其是在中小型网络或对可控性要求高的场景中。以下是关键原因和典型应用场景分析: 1. 为何静态路由比RIP更受青睐? (1) 简单性与可靠性 静态路由: 手…...

Linux系统编程-DAY02

一、标准io 1.写文件 fgets函数中判断有多少行,且判断最后一个是不是终止符 if( buf[strlen(buf) - 1] \n ) 2. wc命令行:字符统计 wc -l 文件名 行数 文件名 3. write 用于操作二进制的文件(文办文件和图片文件也可以…...

【C++ 真题】P5736 【深基7.例2】质数筛

P5736 【深基7.例2】质数筛 题目描述 输入 n n n 个不大于 10 5 10^5 105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。 输入格式 第一行输入一个正整数 n n n,表示整数个数。 第二行输入 n n n 个正…...

自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)

day6 分割源文件(harib03a) 优点 按照处理内容进行分类,如果分得好的话,将来进行修改时,容易找到地方。如果Makefile写得好,只需要编译修改过的文件,就可以提高make的速度。单个源文件都不长。…...

大模型评测与可解释性

随着大模型在各个领域展现出惊人的能力,我们对其性能的评估和对其决策过程的理解变得尤为重要。一个模型即使在基准测试中表现出色,也可能在实际应用中遇到意想不到的问题。同时,由于大模型的复杂性,它们常常被视为“黑箱”,这给其在关键领域的应用带来了挑战。 本章将深…...

【TTS回顾】StyleTTS 深度剖析:TTS+风格迁移

写在前面 这篇博客我们回顾一下StyleTTS,当时的背景是,文本转语音(TTS)技术,早已不再满足于仅仅将文字转化为可听的语音。行业需要的是“真人TTS”,AI 不仅能“说得清楚”,更能“说得生动”、“说得有感情”,甚至能模仿特定人物的说话风格。富有表现力的语音合成,即能…...

GStreamer (四)交叉编译

交叉编译 下载链接库交叉编译1、下载Gstreamer (方式二 ),进入到编译目录2、在gst-build目录下创建交叉编译配置文件cross_file.txt3、修改meson_options.txt中libmount选项为false,否则编译前需要先编译libmount。4、在gst-build…...

电路设计基础

只有当电容两端的电压等于0伏的时候,就是这一点的电压和这一点电压之间没有压差的时候,我门才可以把电容当成是一根导线,如果当我电容比如说它己经充到有一个1伏的电压了,这个时候我们是不可以把电容当成是导线的,所以…...

C语言——函数递归与迭代

(1)递归的例子: 顺序打印一个整数,打印整数的每一位。 例如: input:1234 output:1 2 3 4 input:520 output:5 2 0 我们可能会想到用这种方法:(但是运行之后,我们发现结果是事…...

详解 C# 中基于发布-订阅模式的 Messenger 消息传递机制:Messenger.Default.Send/Register

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...

8 种快速易用的Python Matplotlib数据可视化方法

你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python 的 Matplotlib 库是你数据可视化的最佳伙伴!它简单易用、功能强大,能将枯燥的数字变成引人入胜的图表。无论是学生、数据分析师还是程序员&…...

嵌入式开发学习日志(linux系统编程--文件读写函数(2))Day25

一、linux操作命令 【wc】:指定字符统计; 【file 文件名】:可以查看文件的类型; 二、写入函数【fwrite】————可写入二进制文件 形式: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE…...

离线服务器Python环境配置指南

离线服务器Python环境配置指南:避坑与实战 0. 场景分析:当服务器与世隔绝时 典型困境: 无法访问国际网络(如PyPI、Conda官方源)服务器处于内网隔离环境安全策略限制在线安装 解决方案矩阵: 方法适用场…...

Java线程池调优与实践经验

在Java面试中,线程池调优是一个常见且重要的考察点,尤其是当涉及Spring生态时,ThreadPoolTaskExecutor的使用经验通常会被深入追问。以下是针对该问题的结构化回答,结合原理、实践和调优经验: 1. 线程池调优的核心参数…...

Python 包管理工具核心指令uvx解析

uvx 是 Python 包管理工具 uv 的重要组成部分,主要用于在隔离环境中快速运行 Python 命令行工具或脚本,无需永久安装工具包。以下是其核心功能和使用场景的详细解析: 一、uvx 的定位与核心功能 工具执行器的角色 uvx 是 uv tool run 的别名&a…...

力扣-三数之和

1.题目描述 2.题目链接 LCR 007. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 3.题目代码 import java.util.*; class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);int tempnums.length-1;Set<List<Integer>…...

【AI模型学习】ESM2

文章目录 1. 版本2. 开始2.1 安装2.2 使用预训练模型2.2.1 代码2.2.2 讲解 2.2 结构预测 3. 任务类型总结1. 蛋白质结构预测&#xff08;ESMfold&#xff09;2. 特征嵌入提取&#xff08;esm-extract&#xff09;3. 零镜头变体预测&#xff08;ESM-1v/ESM-2&#xff09;4. 逆向…...

c++11特性——可变参数模板及emplace系列接口

文章目录 可变参数模板基本语法和使用sizeof...运算符 从语法角度理解可变参数模板包扩展通过编译时递归解析参数包直接对解析行为展开 emplace系列接口举例讲解emplace_back的实现 可变参数模板 可变参数模板是c11新特性中极其重要的一节。前文我们提到过&#xff0c;c11中对…...

深入理解 Pre-LayerNorm :让 Transformer 训练更稳

摘要 在超深 Transformer 与大语言模型&#xff08;LLM&#xff09;时代&#xff0c;归一化策略直接决定了模型能否稳定收敛、推理性能能否最大化。把归一化层从 “残差之后” 挪到 “子层之前”&#xff08;Pre-LayerNorm&#xff0c;Pre-LN&#xff09;&#xff0c;再将传统…...

vue3:十三、分类管理-表格--分页功能

一、实现效果 实现分页功能,并且可对分页功能和搜索框功能能动态显示 1、显示分页 2、分页功能和搜索栏隐藏 二、基础搭建 1、官网参考 Pagination 分页 | Element Plus 使用分页的附加功能 2、表格中底部写入分页 (1)样式class 在全局js中写入顶部外边距样式margin-t…...

工商总局可视化模版-Echarts的纯HTML源码

概述 基于ECharts的工商总局数据可视化HTML模版&#xff0c;帮助开发者快速搭建专业级工商广告数据展示平台。这款模版设计规范&#xff0c;功能完善&#xff0c;适合各类工商监管场景使用。 主要内容 本套模版采用现代化设计风格&#xff0c;主要包含以下核心功能模块&…...

8.2 线性变换的矩阵

一、线性变换的矩阵 本节将对每个线性变换 T T T 都指定一个矩阵 A A A. 对于一般的列向量&#xff0c;输入 v \boldsymbol v v 在空间 V R n \pmb{\textrm V}\pmb{\textrm R}^n VRn 中&#xff0c;输出 T ( v ) T(\boldsymbol v) T(v) 在空间 W R m \textrm{\pmb W}\…...