一个「菜鸟」转行AI的成长心得!

(经验分享)2023 年,一个95后Java后端研发攻城狮❤️入行1年工作经验、心得大盘点 作为一名Java后端菜鸟工程师,2024年3-29是我入行1年多的日子,这篇文章记录作为开发人员这1年的学习心得,工作感想,经验总结,欢迎大家查看指正。 阅读详情

本文是一个转行四年的「菜鸟」的成长心得,围绕真实工作场景中,AI算法工程师是如何从头到尾完成一个产品需求的。

这几年基本能碰的都折腾过了,另一方面也走了非常多的弯路。终于感觉到自己有了质的突破。有点像炼气期满筑基,奋斗之路刚刚开始,是有此文。

00 背景

我们先假定已经接到一个明确的需求,假定它是一个比较简单的分类任务,数据和标注都有,而且样本分布也没有极度不均衡。

面对这种情况,以前的我一般都会毫不犹豫地拿出最新的、最有效果的模型往上怼:效果好就直接用,效果不好再说;如果性能不好,就考虑使用压缩、蒸馏等瘦身方法。这种搞法不能说一定有问题,但我觉得至少考虑问题不够全面,也不够细致。

接下来,我们就以此为例讨论完成一个产品需求的全流程。

01 数据准备

在需求清晰的前提下,第一步要做的是拿到数据和标注。有些标注是可以通过日志或埋点记录直接获取到的,而有些则需要组织人工进行标注。如果是组织人工标注,主要需要注意两个方面问题:第一,要让标注人员充分理解 Label 的含义,不能有模棱两可的情况出现;第二,明白标注一定会有错误。对于错误的标注,可以先跑模型然后预测数据集,将标错的样本按置信度排序后,重新标注。这样重复几个来回,错误的标注就会越来越少。

拿到数据后第一件事就是确定数据的分布,如果是均匀的那还好,如果是极度不均衡的那就要准备采样方案。有些任务可能需要在已标注数据的基础上重新构造数据集,这种情况需要准备构造方案。比如句子对模型,我们实际拿到的标注数据可能是句子加某个 Label,同一个 Label 的表示句子相似,不同 Label 表示不相似。

这一步不同的任务或不同的公司可能都不相同,比如有些公司可能没有埋点,甚至日志记录都不完整。还有些公司可能没有标注工具,只能使用 Excel 这种传统的方法。作为一名工程师,如果遇到类似的情况就应该开始考虑如何去构建这些基本组件和服务。

02 数据分析

数据构造完成后首先要做的是熟悉任务的数据。因为有时候数据并不是我们想象中的样子,比如用户的 query、或者 ASR 之后的文本、或者来自于网页的内容,不同的数据有不同的特色。

用户的 query 可能会有错误,这些错误可能往往是音近或形近导致的,也有可能有拼音输入;ASR 之后的文本可能有很多无效的口气词,当然错误是免不了的,可能更多的是发音不准导致的错误;而网页的文本则一般比较规范,不像 ASR 那么口语化,其中的错误往往也是句法、语义层面的。不同的数据会影响后续的处理以及模型的选择,所以熟悉当前任务的数据是第一步要做的。

接下来要分析数据与 Label 之间的关联性。以分类任务为例,数据样本和每个 Label 之间的关联体现在什么层级?是一些字词就能区分,还是需要字词的顺序?还是需要理解整句语义?是不是需要先进行纠错,不纠错会不会对结果产生影响?

只有清楚了这些才有可能选择适合该任务的模型,训练完之后也能够对预期做出检验。比如假设只要单纯地使用字词就可以区分 Label,那 TextCNN 也许就完全足够了;如果句子本身可能有一些无效词,那 TextCNN 的效果也许比 Bert 还好。这也很容易理解,因为 Bert 的预训练是建立在正常文本上的,而且是从整体考虑的,对非正常文本这有时候反而会失效。

所以,熟悉数据、熟悉任务是非常关键的一步。那实际中有什么好的方法吗?这个除了经验外,基本也只能自己去看数据了,而且即便是有经验也最好再熟悉一次,比如不同的 ASR 产品也许犯错的种类不一样呢。实际过程中可以对样本按类别进行均匀采样,然后去观察数据。

03 测试方案

很多人以为分析完数据就可以直接开干了,当然这也没问题,但我更觉得在开始之前应该先想清楚测试方案。至少应该包括以下内容:

  1. 正常的精准、召回、AUC。根据关注精准还是召回,如何权衡。是否有任务需要特别关注的指标?比如推荐要评估多样性、覆盖率等。
  2. 如何测试模型的有效性?即如何评估模型真正学到了期望学到的东西。这对于之后的改进有非常重要的意义。
  3. 如何测试模型的性能?能否满足目标,比如多少并发下的平均响应时间。
  4. 如何做回归测试?主要针对系统不同组件更新对其他部分和整体的影响。
  5. 如何做线上 A/B 测试?主要测试组件更新后线上是否真的有效。

第一个属于常识,也是最基本的测试方法,我们需要注意的是,多种方法(比如规则+模型)配合使用时,如何确定阈值以实现整个系统效果最优。这里需要重点关注的是尽量让不同的方法互补,交叉最少。

第二个其实是从系统使用的角度考虑的。比如句子对相似度模型,我们在实际使用时往往并不是直接给一个句子对,然后判断它们是不是相似。往往会有其他一些应用场景,比如在 QA 时用来查询最相似的 Answer。这种情况我们应该测试的是召回方面的效果。

第三个是需要特别强调的。有时候我们会上来就用一个当前效果最好的模型(我以前就经常),但很少思考为什么这个模型可以。这个模型的哪个结构或配置起了作用?为什么会起作用?是不是和我们预期(分析数据阶段)的相符?无论我们使用什么模型,都应该深入探究起内部机理,比如 TextCNN,我们可以把 MaxPooling 的位置给标记出来,不同的 Kernel 该位置的分布是什么样的,这些位置能否代表整句话输出对应的 Label。只有明确了这些机理,做到了心中有数,才有可能根据不同的任务和数据调整模型的结构。

后面几个基本都到系统级别了,涉及到与当次任务组件相关的其他模块。性能是保证线上服务稳定的基本,在设计模型之前就应该予以考虑,这里的考虑不止是性能的目标,还应该充分考虑公司能提供的资源。如果最终服务没有 GPU 服务器,那 GPU 并发的推理就不予考虑;如果要部署到边缘设备,那还要考虑支持哪些算子,是否需要单独开发;如果是微服务方式,则需要考虑服务间通信、缓存等因素。总之,最好能在构建模型之前就对最终的使用方式有一定的了解,这样也便于构建和使用最适合的模型。

大部分情况下,我们面临的都是一个系统,模型负责的任务可能只是其中的一个个组件。很自然地,当某个组件发生变化时,很有可能会对依赖它的其他组件产生影响。比如召回和精排,如果召回模块出了问题,后面的精排模块再怎么样结果都可能是有问题的。所以,我们在上线新的版本或使用新的模型时,一定要考虑到它可能对系统整体造成的影响。具体就是在模型发布在测试环境后要跑回归测试,确定模块之间衔接符合预期。

A/B 测试是从产品整体的角度进行评估,一般情况下我们都会让新发布的版本和之前的版本分别在不同的分组上运行一段时间,然后评估最终效果是否提升。需要特别注意分组最好能够保证在各个维度上的随机性。

科学界有句名言:“没有测量就没有科学”,放在软件开发领域依然适用,且无比正确。因为无论我们做什么任务、用什么模型,最终都是要作为产品的一部分给客户使用的。作为一名工程师,我们理应时刻站在整个系统的角度考虑问题。

04 模型算法

这部分内容应该是算法工程师最核心的工作了,尤其是对于专门从事算法研究的同学。抛开研究不谈,从工业的角度来看,如果前面数据阶段已经搞得很清楚了,这一部分的工作反倒会容易很多。因为我们现在几乎所有的模型,尤其是有监督训练的模型,本质上都只是在 “记忆” 训练数据,只不过记忆的是特征。不同的模型归根结底只是记忆特征的方式不同罢了。这也就是为什么会有 “数据决定上界,模型只是不断逼近这个上界” 的说法。

另外,根据实际经验,模型训练这一过程所花费的时间往往并不多,可能还不到 25%,但绝对不到 50%。而且大多数时候都是把模型跑起来然后就去干其他的了,也不用一直盯着它看。尤其是前面都搞清楚后,这里只需要等模型跑完看下结果,验证一下是否符合我们的预期即可。

当然,关于模型训练我们依然要考虑一些因素:

资源。最直观的是机器资源,有条件的可能使用 TPU,没条件的可能只能用普通的 CPU,或者要去租赁 GPU。资源的不同除了训练模型的代码不同外,其实更重要的是训练策略的不同。比如有几乎无限制的资源时,我们可能会多跑几组模型,多试几组参数,甚至会重新预训练大模型,自己做蒸馏压缩。当然除了机器资源,还有人力配备、时间节点等等都要予以考虑。

多模型。当面对一个任务,尤其是复杂任务时,我们经常会有不止一个想法(模型结构)需要验证,自然需要跑多组模型看效果。即便不是这样,最好也能尝试多个侧重点不一样的模型,这样更容易验证自己的想法。比如,我们可以同时跑 CNN 和 LSTM+CNN 判断时间顺序到底有没有起作用。

预处理。这块内容和任务强相关,但总的来说中文任务一般包括以下几个方面:

  • 字级别还是词级别的 Token。字相比词没有那么稀疏,词表也比较小,缺点是损失了部分语义。因为中文的基本构成单位是词,尤其是涉及到实体,拆开单独看可能完全是另一种意思。而词相比字,除了词表很大外,还会有未登录词的问题,另外,还需要单独做分词任务。具体使用字还是词要看任务确定。
  • 数据清洗。主要是去掉一些无关的文本,比如超链接、图片、特殊符号等等。
  • 数据归一。这个主要是处理具体的、特定的文本。比如句子级别的任务中,实体(包括人名、地名、时间、方位等)可能并没有太多意义;部分任务中具体的数字可能需要规范到不同的范围。3. 调参。俗称炼丹,主要是对同一个模型使用不同的超参数,比如 Embedding 维度,TextCNN 的 Kernel Size、Filter Size,Bert 的层数,各种 hidden size、激活函数等等。除此之外,还应该包括部分组件的调整,比如增加归一化、使用 Dropout等等。使用不同参数前依然应该遵守分析数据的方法,假定参数调整了结果会咋样,然后通过实际结果去验证我们的假设。

05 模型部署

这里主要指将一个或多个深度学习模型部署为微服务的情况。这是我个人比较喜欢的方式,主要有以下好处:

  • 部署使用分离。所有的推理都通过 RPC 或 RestFul 接口实现,与模型部署无关,甚至与模型本身也无关,服务模块只关心输入和输出。这样当我们需要更新模型时,只需将新模型放到对应位置即可,代码层面不用做任何改动。
  • 合理利用资源。所有的模型可以统一部署到一个服务下,共享同一个服务器资源。因为模型一般是用 GPU 服务器,而普通的服务一般是用 CPU 服务器,这样的部署方式能够更合理地利用资源。
  • 统一管理监控。因为所有的模型逻辑上都在一起,所以无论日常的管理还是数据的监控,实施起来都比较方便。

在部署时,推荐使用容器化部署方案,使用 k8s 或类似的集群框架对服务进行管控。这不是我们要赶潮流,主要是考虑到以下几个优点:

  • 部署方便。完全不用考虑不同环境可能造成的冲突,所有的服务相互隔离。部署时通过 YAML 配置服务,实现一键全自动部署。
  • 便于扩展。水平扩展可以直接添加实例,垂直扩展修改资源限制,所有配置均可通过配置文件完成,完全实现资源配置化。而集群资源不够时,直接添加节点主机即可。
  • 便于管控。通过 Istio 等组件非常容易实现流量和服务管控。比如可以很容易地配置实现灰度发布,进行线上 A/B 测试,而且这些功能都是和业务解耦的。
  • 节约资源。因为集群的服务其实是共享节点资源的,所以高峰时期服务会自动多占用资源(当然不会超过配置的限制),低谷时期就自动释放资源。这样其实最大限度地利用了可利用的资源,节约了成本。
  • 管理方便。从管理机器变成管理服务,只要配置好相应的服务,机器只是无状态的节点,多一个少一个挂一个重启一个对服务没有影响。而且集群还支持非常细粒度的权限控制,使用权限可以按需下发到部门或个人。

当然,使用这种方案本身是有一定学习曲线的,不可能一下子掌握。另外,也要根据公司的实际情况,分清楚使用场合。

06 工程开发

工程开发是一个工程师最核心的能力,我们常说算法工程师他首先得是个工程师,就意味着算法工程师必须要具备不错的工程能力。这块其实是编码能力,说起来很大,这里也主要谈一下自己对工程开发的一些浅显认识。

写好测试

注意我并没有说 “测试驱动”,因为这个往往说的人多但能做到或做好的少;而且这个并不是规范,更不是银弹。不过测试的重要性毋庸置疑(我也不大会相信会有工程师在写完工程后再补上测试代码)。所以,即便不是测试驱动,也强烈建议在开发的同时完成测试代码,甚至可以在功能完成后把测试代码写好。这其实是对自己代码的一种自测,是代码清晰、系统稳定的基本保证,好处至少包括:

  • 代码更鲁棒。主要体现在边界和非法输入测试环节,它会强迫我们去考虑各种可能错误的输入。
  • 代码更清晰。比如有个函数同时做了几件事,在写测试的时候就会发现很不好写,因为几件事可能互相有影响导致输出不同的结果,这就能逼迫你重构代码。
  • 代码更系统。主要是指多个函数(或组件)组合或管道完成一项功能时,结果不符合预期的情况。此时如果某个函数(或组件)有完整的测试,那我们就很清楚地知道该函数(组件)一定没问题,问题肯定出在它之前或之后。
  • 出错更容易排查。只要发现 Bug,很容易就知道问题出在哪里,因为报错信息一般能提示到具体的方法或函数,根据报错信息结合已知的测试范围很容易就确定到底是什么原因导致的错误。

只要写一次,就会一直有效。不考虑重构的话,测试简直就是一劳永逸的事,无论代码怎么改,只要功能和输入输出不变,测试就一直有效。还有比这更美好的事吗?

至于怎么写,总的建议是每个函数都应该有测试,且至少应该包括:正常功能测试、边界测试、非法输入测试,底线是核心代码必须要有测试。另外,测试也是要随着代码的演进不断重构和优化的,很多时候甚至是 Bug 让我们的测试更加完善。

写好注释

首先需要澄清的是,这里并不是指 “代码即注释”,“代码即注释” 应该是作为工程师群体的基本共识,不需要再多做讨论。这里主要是要解释为什么这样做,或者记录设计思路。以我的实际经验看,如果没有注释,对于稍微复杂的设计或思路,过几个月再看基本上是看不懂了,或者要想很久。

所以说,注释首先是给自己看的,可以想象,自己写的代码过一阵子都看不明白,那又怎么能期望别人(尤其是接你活儿的人)能看懂呢。至于形式我觉得反倒是其次,但如果能按规范注释,当代码完成时我们可以顺便得到一份自文档,这对于爱偷懒的人绝对是福音。

写好文档

这恐怕是绝大部分程序员最不爱干的事,不过还是需要澄清一下,这里指的是 “设计文档”,而不是接口或使用文档,后者我一般会倾向于使用自文档。设计文档至少应该编写两次,第一次是在项目或任务开始前,第二次是在结束后。它主要记录项目的目的、整体的构思、所使用的的技术、架构等,它是战略层面的指导方针,编写该文档的过程其实是理清自己思路的过程。如果发现自己无法完成该文档的编写,那很有可能是有些地方根本没想清楚,或者目标或需求很不明确。

模块化

与此相类似的还有组件化、微服务化,不过模块化是针对代码功能层面的。模块化有不少优点,比如:系统整体结构清晰,功能结构一目了然;模块之间相互解耦,便于开发和维护;模块可复用程度高,减少代码重复。感觉就像 “代码即注释” 一样,程序员天然就会在不知不觉地模块化。

DRY

对这条原则的基本感悟是:如果代码重复第二次,就应该考虑将其变为独立功能的函数;如果重复第三次,涉及到的所有代码应该已经很好地被重构了。其实我在这里更加想表达的是,如果有能更省事的方法,就尽量尝试去用,比如泛型编程、宏、模板。

分层和抽象

这应该算是一种基本的设计方法,其实我们在软件开发中会经常使用,比如分词可能是一个底层服务,情感分类模型可能就是上一层的服务,对话机器人可能是更高一层的服务。不同层的抽象程度不同,底层服务相比高层服务往往更加抽象,因为它们可能被多个不同的上层调用。这样设计的主要目的还是清晰、隔离、解耦、重用,服务彼此独立且又相互依赖,通过组合形成完整的系统。

08 运维监控

这块内容其实往往比预想重要,打个形象点的比喻,运维就是我们的感官,系统现在的 “状态” 如何全靠它来展示。这里的状态主要可以分为两个方面:数据流转和服务负载。

数据流转是指流程中各个节点的输入和输出情况,节点可能是某一个服务,也可能是一个组件,甚至是一个模型,关注的是流转的内容是否正常。服务负载是指流程中各个节点的流量情况,关注的是流量的大小。这块内容之前涉及的很少,只是简单地用过一下 Istio,暂时也没有太多的感受。先记录几个自己的直观认知。

  • 配置化。主要针对运维,理想状态下每个模块都有对应的配置文件,整个系统的组织就是对配置文件的组织。这在 k8s 里面是自然的,我们可以通过配置文件很方便地指定环境变量、资源配置、服务策略等,然后可以用命令行工具一键(或自动)启动或更新。与此相反的是人工手动操作或代码里写死,要尽量避免类似的行为,如果需要通过外部变量影响模块内部行为或模式,最好将这些变量映射到外部配置文件。
  • 系统化。主要针对监控,当我们设计监控系统时,不仅要考虑关注的节点,还要考虑这些节点状态信息如何传输、存储、读取、展示,以及数据的流动是否会影响系统性能等多个方面。可以做个很简单的实验,一个简单的循环操作,每个循环打印结果和不打印结果性能会相差数十倍,如果要写信息,性能相差可能会更大。一个反面的例子就是无脑打印日志,不仅充斥着大量乱七八糟的无效信息,还严重影响性能。

09 更新迭代

软件工程不同于传统的工程项目,它在实施完成后依然需要频繁地改动,这也是软件工程更加复杂的一个方面。这里除了代码层面的可扩展性,还包括版本管理和热更新,此处重点说说后两个。

版本管理

我们平常一般会碰到两种不良的方式:第一种,将一大堆功能堆到一个版本下面;第二种,有一个改动就生成一个版本。这一般是粗放式发展下的结果,正常情况下,版本管理应该至少考虑以下几个方面:

  • 需求推动。需求往往来自于三个方面:业务方、运营方和技术规划。无论哪种需求,我们一般都会放在需求池中,然后根据优先级规划不同的版本。版本的迭代可以按周、双周或月,不过个人不太推荐太长的迭代周期。一来容易懈怠,二来可能有新的重要需求不断出现,三来回退麻烦。比较推荐双周一版本,时间分配上,一周用来开发,一周用来规划、测试。
  • 语义化版本。这个本应该是软件开发的常识,其主要思想是将软件的变动记录为 主版本号.次版本号.修订号 的形式,主版本号主要是针对不兼容的改动;次版本号是针对向下兼容的功能新增;修订号是针对向下兼容的功能修正。具体可参考:语义化版本 2.0.0 | Semantic Versioning。这其实是一种基于约定的方法,作为开发人员只要一看版本号就能掌握关于该版本的基本信息。

热更新

集群环境下热更新比较方便,我们这里主要说的是模型的更新。具体又包括以下几个方面。

  • 模型全量更新。主要是指模型整体升级,比较推荐 tensorflow/serving: A flexible, high-performance serving system for machine learning models,不仅性能优秀,而且可以通过监控模型文件的变化自动升级到新的版本。同时,还支持 RPC 和 RestFul 两种接口,支持版本控制,支持多个模型,简直是业界良心。
  • 模型在线学习。主要指模型根据线上数据实时或准实时更新模型的情况。这块目前工作几乎还未涉及,日后更新。
  • 更新毛刺。主要指模型更新前后线上请求出现的延迟抖动现象。一般在规模很大时才会出现。爱奇艺团队针对 Tensorflow Serving 有过不错的改进尝试,被 Tensorflow 官方公号发表。

以上就是完成一个产品需求的全流程了。但在实际工作中,有时候需求并不是完全清晰的,还可能是伪需求,这部分如果有伙伴感兴趣,会写一写AI工程师面对不确定需求的沟通方法。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • …

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • …

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • …

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • …

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
拓扑优化背后的科学:ANSYS Workbench中的算法与原理 本文深入解析了ANSYS Workbench中拓扑优化的科学原理与算法实现,重点介绍了密度法(SIMP)和灵敏度分析等核心算法。通过分层架构解析和参数调优实战,展示如何有效进行模型验证与多物理场耦合优化,帮助工程师提升结构设计效率与性能。 阅读详情

相关推荐

一文读懂AI大模型时代的RAG技术

RAG(Retrieval-Augmented Generation,检索增强生成) 是一种结合检索技术与生成模型的技术架构,旨在通过动态引入外部知识库增强大语言模型(LLM)的生成能力。其核心思想是通过检索系统从外部数据源(如企业知识库、实时文档等)获取相关信息,并将检索结果作为上下文输入生成模型,以提高生成答案的准确性、时效性和专业性

awei0916的专栏 2119

如果想转行AI领域却不知如何开始?可以试试这五步

我看了计算机科学家大卫·格维茨写的一篇博客,里面介绍了如果想从事AI行业,却不知道如何开始的话,可以走下面五步,从而达到转行的目的。因为这是个国外作家写的,跟我们国内的情况有一些出入,但是大思路是没有问题的。如果你想转行的话,那么你会什么就变得很重要,转行AI行业,并不需要从零开始。格维茨拿产品经理举例子,说产品经理最擅长的就是和人打交道的能力,因为他们要在公司里“哄骗”不同部门的各种同事。并且产品经理还会有一定的写作能力,因为他们需要编写各种产品文档。

Python_paipai的博客 1万+

全国职业院校技能大赛-大数据应用赛项-数据挖掘-01

-----------------------推荐Top5结果如下--------------------------------------------第一条数据前10列结果展示为:----------------------------------------相同种类前10的id结果展示为:--------------------相似度top5(商品id:14,平均相似度:0.522356)相似度top1(商品id:1,平均相似度:0.983456)若属于该spu_id,则内容为1否则为0。

Eternity_04的博客 1954

我是如何转行 AI 并且实现薪资翻倍的

当你看到这篇文章的时候,我已经在我的公众号上发了100+原创文章了,也在优快云上发表了不少文章,给想入门 AI 的同学科普算法,因为自己经历过,所以才知道如何理解更加简单。熟悉我的小伙伴都知道,我之前在北京某211大学,本硕读了7年的机械专业,后来硕士毕业后,果断转行去做了嵌入式开发,随后瞅准了 AI 爆发的时机果断转行去做了AI。在这家公司,学到了很多,一步步的也成长了很多,可惜的是最近这一年公司裁员不断,很多一起奋斗的小伙伴也都离开了,当然我也离开了。后来我投了商汤,获得了宝贵的面试机会。

通俗易懂的 AI 技术 1842

OpenCV+ArUco实战:如何用Python实现高精度二维码测距(附完整代码)

本文详细介绍了如何使用Python和OpenCV实现基于ArUco标签的高精度单目视觉测距。通过相机标定、标签检测和三维位置估算,结合完整代码示例,帮助开发者在机器人导航、工业自动化等场景中实现厘米级距离测量,并探讨了精度优化与三维可视化等进阶应用。

weixin_29052717的博客 477

从零到一:移远EC200UCN_LA OpenCPU开发中的‘避坑’实战指南

本文详细介绍了移远EC200UCN_LA 4G通信模块的OpenCPU开发实战指南,涵盖开发环境搭建、项目构建、通信接口开发、调试技巧及固件升级等关键环节。通过避坑经验和实用技巧,帮助开发者高效完成二次开发,提升4G通信模块的应用开发效率。

weixin_29159711的博客 505

为什么越来越多的程序员选择转行AI?转行AI大模型开发难吗?怎么学才能找到工作?

为什么越来越多的程序员选择转行AI?转行AI大模型开发难吗?怎么学才能找到工作?这应该是所有新人都会面临的问题,所以我结合自己的经历,做了一些总结和学习方法,希望能对大家有所帮助。

2401_84208172的博客 1421

【深度学习】通俗易懂讲解循环神经网络LSTM

目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。...

Nieson2012的专栏 2729

【建议收藏】35岁程序员转行AI - 岗位选择、学习路径及全景知识图谱

企业对技术岗位的年龄门槛普遍提高,35岁以上从业者常面临被“优化”或求职受阻的困境。每天的职业焦虑如影随形,但AI也为这一群体打开了一扇新窗。凭借扎实的编程基础和工程经验,35岁程序员转型AI不仅能突破年龄壁垒,还可能实现薪资与职业发展的双突破。

xxue345678的博客 1114

TwinCAT报SSE invalid operation错误

错误类型 TwinCAT程序中报出以下错误: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 **** 383 ms | 'Port_851' (851): Exception (Exception Code: 0xc0000090, SSE invalid operation) in PLC Application Untitled1 Instance, Task PlcTask (RBP: 0xffffb3016c80ecc0, RIP: 0xffffe708ee5b5f53, RSP:

akadiao的博客 4161

IFRS 9与CECL对比解析:跨国企业财务必须掌握的两种信用损失模型

本文深度解析IFRS 9与CECL两种信用损失模型的差异,帮助跨国企业应对财务合规挑战。从基础架构、数据治理到监管策略,详细对比三阶段模型与单一阶段模型的核心区别,并提供实施双轨制的实务建议,助力企业优化资本管理和税务筹划。

3c4x5z6v7b的博客 668

想高薪!普通人转行做AI,试试这5步!

这五步,听起来简单,但是实施起来却需要非常大的决心和毅力。但是,只要你愿意付出努力,转行成为AI领域的佼佼者,绝对不是梦!在大模型时代,我们如何有效的去学习大模型?现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。掌握大模型技术你还能拥有更多可能性• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

qkh1234567的博客 3519

Prism 入门02,区域介绍

什么是区域(Region)?区域,在Prism 框架中,区域是模块化的核心的功能之一,其主要作用是降低应用程序和模块之间的耦合度。使用方式:在应用程序的界面中,划分出某块区域,并为这个区域定义一个唯一的区域名称。那么通过这个区域名称,应用程序就可以找到指定的区域。并为这个区域动态放置一些容器或控件,从而呈现在界面中。

build2024 1126

五一后“实在高校行”紧锣密鼓走进四所高校,校企合作硕果累累!

如今,以GPT为代表的新兴自然语言处理技术,在人机交互和人工智能商业化发展等方面具有巨大的推动作用,在大语言模型等AI能力的加持下,实在智能继续以AI技术为基础,不断推动数字员工的大规模应用,向科技要生产力的优势,打造出了拥有AIGC能力的超进化数字员工、能与文档自动对话的Chat-IDP以及一站式的智能自动化统一门户实在智能门户平台,实在智能超自动化平台与AIGC技术快速融合实现再升级,推动人工智能技术的普及和分享,为业界提供更加稳定高效、应用广泛的超自动化解决方案。这次实在高校行,硕果累累。

企业级智能体,全行业解决方案,5000+企业签约,海量场景覆盖。 771

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2020年个人总结和分享(华为云-云享专家、优快云博客专家 成长记录)

2020年经历了许多,这一年不平凡,这里简单写了一点总结,分享职场、成长、感悟。发现了一些适合自己的效率工具,和大家分享使用该工具提升效率。喜欢这句来勉励自己“纸上谈来终觉浅,绝知此事要躬行”。

黎国溥 3117

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

7月23日云栖精选夜读丨前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的?...

我做前端已经有五年的时间了,从大学刚毕业的时候,我是一个完全什么都不懂的小白。虽然我大学里学的是软件工程专业,但是因为在大学里荒废学业,每天只知道打游戏,基本上到大学毕业之前我是什么都不会的,而且大学里是没有教前端相关的东西的。 热点热议 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端工程师的? 作者:a独家记忆 如何判断程...

weixin_34342992的博客 246

LongCat-Video 视频生成服务部署完全指南:从本地环境到浏览器体验的 5 分钟教程

LongCat-Video 是美团开源的 13.6B 参数视频生成模型,用一个模型统一了文生视频、图生视频与视频续写,并额外提供音频驱动的 Avatar 扩展。这篇文章带你把环境装好、模型拉下来,最后用 Streamlit 起一个本地可访问的视频生成服务,全程不需要改一行代码。 ## 能力速览 - **一个模型跑三种任务**:文本生成视频、图片生成视频、视频续写,在同一个推理框架里完成,无需切

gitblog_01005的博客 216

程序员成长之路心得篇——高效编码诀窍

就高效编码心得扯扯淡

zygswo的博客 494

终极麻将AI助手Akagi:从菜鸟到高手的免费快速提升指南

你是否在雀魂、天鳳等日本麻将平台上感到迷茫?面对复杂的牌局不知如何决策?Akagi正是为你量身打造的实时麻将AI辅助工具,帮助你在对局中做出更明智的选择,提升麻将水平。这款开源工具支持雀魂、天鳳、麻雀一番街、天月麻將等主流平台,能够使用自定义AI模型实时分析对局并提供专业建议。 ## 为什么你需要一个麻将AI助手? 日本麻将(日麻)以其复杂的规则和策略性而闻名,即使是经验丰富的玩家也常常在以下

gitblog_00666的博客 645

推荐一些成长的公众号

公号太多,很多人也筛选不过来下面给大家推荐的几个优质公众号他们有态度、有温度、有质量值得拥有♥长按二维码,选择“识别图中二维码”订阅。Python爱好者社区ID:pyth...

stormzhang的专栏 3151

职场新人成长宝典

职场新人成长宝典   首先在此声明本文仅涉及测试范畴。 职场新人是谁,这个我们并不陌生,每个人都是从职场新人走过来的,只是有的人走得坎坷,有的人走得安逸。在不同人口中他们有很多不同的称谓,如 “新手”、“毕业生”和“菜鸟”等,面对这样的代名词自然会心生厌恶之情。要摆脱这样的代名词其实不难,不需要你对十八般武艺样样精通,你只需要学会日常工作中常用的工具,重点研究一下下日常工作中使用程度比较深的

实践助梦想成长 921

关于优快云—菜鸟首飞:我在 优快云 撒下的第一篇 “文” 字种子

优快云成就一亿技术人,成为技术人交流和成长的家园

2201_75986927的博客 3574

5个让你抓狂的办公痛点,被这个“随身秘书矩阵“秒解!

“上周在机场赶飞机时,突然发现客户需要的项目资料还在公司服务器上!打车回去要3小时通勤,错过航班又要损失500块改签费…

YUAN_XU_CHENG的博客 351
上一篇: AI大模型开创新时代,B端落地正当其时!浅析大模型企业应用的几种模式
下一篇: 本科生60行代码教你手搓GPT大模型,技术介绍堪比教程
AI程序猿人
博客等级 码龄3年 6517粉丝 561原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值