Hero Circle Shape
Hero Moon Shape
Hero Right Shape
tokenpocketapp官方下载最新版本|模型设计

tokenpocketapp官方下载最新版本|模型设计

  • 作者: tokenpocketapp官方下载最新版本
  • 2024-03-17 02:31:08

如何系统性掌握深度学习模型设计和优化? - 知乎

如何系统性掌握深度学习模型设计和优化? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册人工智能机器学习模式识别深度学习(Deep Learning)卷积神经网络(CNN)如何系统性掌握深度学习模型设计和优化?模型是深度学习的核心技术之一,我们平时在从事相关工作时,有很大一部分精力都在 模型设计和优化上。对于新手朋友们来说,往往只会跑一跑别人的模型或者只会盲…显示全部 ​关注者72被浏览27,098关注问题​写回答​邀请回答​好问题 2​添加评论​分享​9 个回答默认排序杜凌霄​北京大学 理学硕士​ 关注论文:FFSplit: Split Feed-Forward Network For Optimizing Accuracy-Efficiency Trade-off in Language Model Inference大模型模型参数太大,既会影响能够同时运行的batch数量,也会影响推理的速度,本文就是为了在尽量保持精度的情况下解决效率问题。这篇文章是(简称lazy)的延续,在lazy这篇文章中,我们观察到几个现象:使用relu在activation之后的稀疏性,也就是说,大部分的activation值都是0; 上图是T5和Vit(都是使用ReLU)各层在各种数据上和配置上激活值非0的比例。可以看到,都不到50%是非0的。实际上,训练完之后,encoder-decoder层非0的平均占比是2.7%, 最大的层是12%, 比例最小的层非0激活值占比只有1.1%。 2. 数据无关性 对于所有的数据集,稀疏性是大体一致的。并不是对于不同的数据激活值非0的节点完全不同。 上图是使用C4 dataset在T5的第一层的统计,一部分节点在大约50%的数据经过的时候都会激活;大部分(93.5%左右)在10%的数据经过的时候会被激活。另外,没有一个节点是任何一次都没有被激活的;99%的节点被激活的次数小于1%。 3. 模型越大,稀疏性越强。 本文讨论的目标文章是lazy研究针对的激活函数是ReLU, 但是现在主流的大模型使用的激活函数是GeLU或者SwiGLU。FFSplit研究的出发点就是在这些主流大模型使用的激活函数的情况下是否依然有heavy hitter,也就是激活值具有稀疏性,ffn层少量了的神经元经常贡献了绝大部分的值。GeLU或者SwiGLU不是直接截断,所以研究的范数从ReLU的非零变成了值的大小,从研究非零值的稀疏性变成了研究范数较大值的稀疏性。事实上,从上图可以看出,稀疏性依然存在。那稀疏性有什么作用呢?直到了那些节点贡献大,哪些小,我们就可以把ffn分成两部分模型太大,我们就对模型进行压缩。为了保证精度,可以对贡献小的那部分压缩得更狠,而对贡献比较大的那部分就分配更多的资源。要知道FFN层的参数占总参数大致\frac{2}{3}。本文实验保持25%的heavy hitter不动,把剩下的75%做svd分解并使用10%的full rank最为最终的rank,把模型压缩了43.1%并且推理速度提升了1.2~1.56倍,结果损失相对较小。发布于 2024-01-09 21:31​赞同 3​​添加评论​分享​收藏​喜欢收起​老朽​路人甲​ 关注这篇博文出自 MATLAB 产品经理 Heather Gorr。你可以在社交媒体上关注她:@heather.codes, @heather.codes, @HeatherGorr,以及 @heather-gorr-phd。这篇博文是在 YouTube 上精彩的建模竞赛现场直播之后发布的,MATLAB 的最佳模型:深度学习基础 指导您如何选择最佳模型。对于深度学习模型,有多种方法可以评估什么是“最佳”模型。可能是 a) 比较不同的网络(问题 1)或 b)为特定网络找到正确的参数(问题 2)。如何有效、快速地进行实验管理?在 MATLAB 中使用低代码工具,Experiment Manager APP!方法我们创建了两个问题:图像分类和时间序列回归。基于数据集,我们考虑了两种类型的模型:卷积 (CNN) 和长短期记忆 (LSTM) 网络。下图显示了用于不同数据类型的一些常见网络。图 1:常见数据集和网络我们使用 MATLAB帮助文档中的示例来实现可重复性(以及用于直播的合理大小的数据集!)并使用 MATLAB 中的APP快速探索、训练和比较模型。当我们进入细节时,我们将讨论更多!问题 1:图像分类对于我们的第一个问题,我们比较了 CNN 模型来对花卉类型进行分类。CNNs很常见,因为它们涉及到一系列我们可以大致理解的操作:卷积、数学运算和聚合。图 2:卷积神经网络 (CNN) 图您可能还记得以前的帖子,我们在这个领域有一些很好的起点!我们使用了迁移学习,您可以在其中使用您的数据更新预训练网络。选择网络我们首先使用 Deep Network Designer 探索预训练模型,该应用程序提供了对整体网络架构的了解,以帮助我们在深入细节之前进行选择。图 3:Deep Network Designer 中的预训练模型我们希望我们的比赛具有不同程度的复杂性,所以我们决定使用squeezenet、googlenet和inceptionv3。比较网络接下来,我们需要训练和验证所有 3 个网络并比较结果!该Experiment Manager APP超级有助于我们组织和自动化这部分工作。 此帮助文档示例给出了如何设置和运行实验:cd(setupExample('nnet/ExpMgrTransferLearningExample')); setupExpMgr('FlowerTransferLearningProject');图 4:在 Experiment Manager App 中设置网络参数您可能知道,训练网络可能需要一些时间!在这里,我们正在训练其中的 3 个 - 因此您需要在开始运行之前考虑您的硬件和问题。您可以调整设置以使用 GPU 并通过APP轻松地将实验运行并行化。我提前开始了实验,以确保我们有时间比较并在我的 Linux 机器上运行,我用了多 GPU来加速!评委评分我们的模型表现如何?我们用来评估的几个标准:准确性速度总的质量可解释性针对这些评价的大多数措施都可以在APP中快速找到 —— 看图说话,因为它更加微妙!图 5:Experiment Manager App 中的分类结果我们发现,在这个例子中,inceptionv3 获得了最佳 的准确度(91.9%),但也耗时最长,因为相较于其他模型它的架构更复杂些。看看亚军,googlenet 可能是一个更好的折衷方案,因为它速度更快,并且仍然具有类似的良好验证准确度 (91%)。Squeezenet 模型训练得最快,但准确度更差,尽管我不排除它!当涉及到最重要的问题时,每个问题都是不同的!最后,我们检查了看起来非常相似和平衡的混淆矩阵。这是一个非常重要的视觉效果,可帮助确保您要做的分类之间没有不平衡的准确度……这将我们引向我们的最后一个标准。可解释性能够解释模型变得越来越重要,模型可解释性是 深度学习领域的一个活跃研究领域。我们将保持本节简短,因为关于这个方面我们将会推出更多的内容。基本上,您了解正在发生的事情,尤其是出现问题时(开发人员、团队,甚至用户都需要了解)。有一些很好的技术,例如网络激活和可视化,以及其他策略。最后的一些提示 - 确保记录良好,如果您使用了预训练模型,请确保训练数据和模型信息透明且无偏见。调优深度学习的很大一部分就是调整网络直到您对结果感到满意。为了改进层架构、求解器和数据表示,有许多参数需要调整。同样,APPs 将对此有所帮助,因为您可以在 Deep Network Designer 中轻松检查和调整参数,然后使用 Experiment Manager 执行参数扫描。我们遵循了一个帮助文档示例,该示例显示了使用 googlenet 和一个简单的“默认”网络,尝试三个不同的求解器:cd(setupExample('nnet/ExperimentManagerClassificationExample'));setupExpMgr('MerchandiseClassificationProject');我们不会在这篇文章中详细介绍可用的求解器,但是如果您忘记了带有动量的随机梯度下降 (sgdm) 和均方根传播 (RMSProp) 之间的区别,这是一个很好的探索方式!文档中有更多内容,包括对所有可调整参数的快速概览。图 6:在 Experiment Manager App 中探索结果我们进行了实验并且 googlenet 在这里表现得更好(尽管显然需要更长的时间来训练)。有趣的是,比较求解器时准确度没有明显差异——更多数据可能有助于检查这一点。然而,求解器在具有最少层的默认算法中产生了很大的不同(70% vs 80%)。如果您看到这种变化,这是值得检查的情况类型!问题 2:时间序列回归接下来我们专注于时间序列回归问题。首先,让我们考虑一下整体架构。CNN 对许多问题都有广泛的用处,但有时模型需要了解先前时间步长的信息。这就是递归神经网络 (RNN) 派上用场的地方,因为它们通过系统保留记忆,这使得它们非常适合时间序列、视频、文本和其他顺序问题。在深度学习术语中,CNN 是前馈,而 RNN 是后馈,它通过层的输入和输出携带一些记忆。在这种情况下,我们专门研究了LSTM,它是一个 RNN,在输入和输出方面有额外的“门”。这有助于保留数据中的长期趋势,这对于时间序列问题很重要。下图比较了两个网络。图 7:RNN(左)和 LSTM 网络(右)的比较使用 LSTM,您通常不需要像 CNN 那样多的层 —— 艺术在于选择参数以最好地表示数据和趋势。虽然我遇到过非常深的 LSTM,但大多数情况下,网络只需很少的层就可以很好地学习。例如,Deep Network Designer 有一个包含 6 层的模板:input、lstm、dropout、fullyConnected、softmax 和一个分类或回归层。这是一个简单的架构,其中数据准备和层参数有很大影响。图 8:Deep Network Designer 6 层模板我们使用与问题一相同的方法来比较不同的网络参数,使用Experiment Manager和一个预测引擎剩余使用寿命 (RUL) 的帮助文档示例:cd(setupExample('nnet/ExperimentManagerSequenceRegressionExample'));setupExpMgr('TurbofanSequenceRegressionProject');选择参数我们比较了两个主要的网络参数:阈值 和LSTM 深度。阈值表示响应数据的截止值,LSTMDepth 是层数。图 9:比较主要网络参数这里用了自定义指标 MeanMaxAbsoluteError,这很有帮助,因为您可以包含任何您喜欢判断拟合优度的方法。我们检查了setup函数,把实验跑起来,然后焦急地等待结果!图 10:运行实验并比较结果评委评分对于预测数值的回归问题,精度的常用度量是已知数据和预测数据之间的 RMSE(均方根误差)。理想情况下,RMSE 尽可能接近于零。图 11:RMSE 结果最好的 模型(RMSE最小)是最小阈值(150)和最小深度(1)的网络。在这种情况下,基于网络深度的结果没有任何改进,因此在设置 LSTM 时再次考虑简单性,并将有助于如上所述的可解释性。文档中有很好的例子,可以更详细地展示 LSTM 训练和评估,包括视频、音频和文本等几个问题。遗憾的是,我们无法在一小时内进行更多比较,但既然我们已经涵盖了基础知识,也许下次我们可以处理更复杂的问题!在此处查看更多示例。综要我们能够训练、比较和评估这些漂亮的模型(不到一个小时!)希望这能让您了解如何为您的数据选择网络以及如何设置实验来调整和比较网络。在此过程中,使用APP并仔细考虑评价标准非常有帮助。如果您想了解有关设置自己的实验的更多信息,请访问Joe Hicklin 的这两个视频教程。我们将再次参加我们的建模竞赛系列 - 订阅@matlab YouTube 频道以继续关注更多信息并在社交媒体和评论中保持联系。让我们知道您接下来想看到什么!P.S. 本篇为译文,原文在这里:MATLAB's Best Model: Deep Learning Basics编辑于 2021-11-30 19:09​赞同 1​​添加评论​分享​收藏​喜欢

数据仓库模型设计开发流程与规范 - 知乎

数据仓库模型设计开发流程与规范 - 知乎首发于湖仓一体切换模式写文章登录/注册数据仓库模型设计开发流程与规范咬定青松版本:V1.1最后修改日期:2021/03/231. 数据模型设计目标 为使下游数据使用方低成本获取一致性的可靠数据服务,数据模型设计方需要达到如下目标:成本:模型设计者要平衡性能和成本要素对数据模型的影响,现有海量大数据情况下,以保障业务和性能为前提,合理使用数据模型方案和存储策略,尽量消除不必要的数据复制与冗余。性能:模型设计者需要兼顾模型刷新性能开销、产出时间和访问性能。数据一致性及数据互通:各个数据模型或者数据表之间必须保障数据输出的一致性,相同粒度的相同数据项(指标、维度)应具有相同的字段名称和业务描述,不同算法的业务指标应显性化区分。数据质量:数据公共层模型需要屏蔽上游垃圾数据源,一方面要保障数据本身的高质量,减少数据缺失、错误、异常等情况的发生;另一方面要保障其对应的业务元数据的高质量,数据有明确的业务含义,为数据提使用者供正确的指引。易用:在保障以上目标的前提下,数据用户能从业务角度出发快速找到所需数据;能较快的掌握模型的适用场景和使用方法;能相对便捷获取数据。2. 数据模型设计指导思想 数据模型设计以ER模型、维度模型和宽表模型理论为指导以及阿里巴巴数据仓库建设实践为经验参考。2.1 ER模型 数据仓库之父Bill lnmon 提出的建模方法是从全企业的高度设计一个3NF 模型,用实体关系( Entity Relationship, ER )模型描述企业业务,在范式理论上符合3NF 。数据仓库中的3NF 与OLTP 系统中的3NF的区别在于,它是站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系的抽象。其具有以下几个特点:需要全面了解企业业务和数据。实施周期非常长。对建模人员的能力要求非常高。2.2 维度模型 数据仓库领域的Ralph Kimball 大师所倡导的,维度建模从分析决策的需求出发构建模型,为分析需求服务,因此它重点关注用户如何更快速地完成需求分析,同时具有较好的大规模复杂查询的响应性能。其典型的代表是星形模型,以及在一些特殊场景下使用的雪花模型。维度模型的维度退化即是宽表模型。 ER模型是一种范式模型,ER模型和维度模型虽然建模工具类似,比如都使用实体关系来表示,主要区别在于:1. 着眼点不同:维度建模着眼点在产生事实的业务过程,ER模型着眼点在实体和实体的关系,ER模型的关系更为一般化。2. ER模型的实体通常是具有业务价值的业务对象,比如商品,客户等,维度模型的维度更着重业务检索需求,如日期、地域、商品等,如下图示例:3. 数据模型设计基本原则高内聚和低耦合:软件设计方法论中的高内聚和低耦合原则同样适用于数据建模,这主要从数据业务特性和访问特性两个角度来考虑:将业务相近或者相关的数据、粒度相同数据设计为一个逻辑或者模型;将高概率同时访问的数据放一起,将低概率同时访问的数据分开存储。核心模型与扩展模型分离:建立核心模型与扩 展模型体系,核心模型包括的字段支持常用核心的业务,扩展模型包括的字段支持个性化或是少量应用的需要,必要时让核心模型与扩展模型做关联,不能让扩展字段过度侵入核心模型,破坏了核心模型的架构简洁性与可维护性。公共处理逻辑下沉及单一:越是底层公用的处理逻辑更应该在数据调度依赖的底层进行封装与实现,不要让公共的处理逻辑暴露给应用层实现,不要让公共逻辑在多处同时存在。成本与性能平衡:适当的数据冗余换取查询和刷新性能,不宜过度冗余与数据复制。数据可回滚(数据生成支持幂等性):处理逻辑不变,在不同时间多次运行数据结果确定不变。一致性:相同的字段在不同表字段名相同,字段值相同。命名清晰可理解:表命名规范需清晰、一致,表名需易于下游理解和使用。4. 数据模型设计步骤总览4.1 数据模型设计总体步骤业务建模:生成业务模型,主要解决业务层面的分解和程序化,常用工具如流程图、时序图、用例图等。领域建模:生成领域模型,主要是对业务模型进行抽象处理, 生成领域概念模型,这一步中会涉及到概念的分组(主题),比如Teradata FS-LDM模型将金融业的领域概念划分成10大主题:当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道。逻辑建模:生成逻辑模型,主要是将领域模型的概念实体以及实体之间的关系进行数据库层次的逻辑化。物理建模:生成物理模型,主要解决逻辑模型针对不同关系数据库的物理化以及性能等一些具体的技术问题。上述步骤是模型从抽象化到具体落地的过程,也反应了模型的不同抽象层次。每个层次内部还可以继续按照层次具体分解,比如业务模型还可以分为顶层模型,业务域,业务流程,业务环节。4.2 数据模型设计实施流程 各步骤按照实施过程涉及到的内容见下图:业务调研和需求分析是数据仓库建设的基石。在代码开发之前,数据架构设计主要是根据数据域对数据进行划分;按照维度建模理论,构建总线矩阵、抽象出业务过程和维度。再次,根据需求抽象整理出相关指标体系。数仓建模主要关注从业务建模领域建模到逻辑建模的过程,其中业务建模和领域建模是基础,逻辑建模是核心。本文将上述实施步骤通过流程梳理如下:5. 数据模型设计术语名词解释术语解释主题(域)主题(Subject)是在较高层次上将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。例如“销售分析”就是一个分析领域,因此这个数据仓库应用的主题就是“销售分析”。主题域是对某个主题进行分析后确定的主题的边界。数据域指面向业务分析,将业务过程或者维度进行抽象的集合。其中, 业务过程可以概括为一个个不可拆分的行为事件, 在业务过程之下, 可以定义指标;维度是指度量的环境,如买家下单事件,买家是维度。为保障整个体系的生命力, 数据域是需要抽象提炼,并且长期维护和更新的, 但不轻易变动。在划分数据域时, 既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中和扩展新的数据域。业务板块业务板块定义了数据仓库的多种命名空间,是一种系统级的概念对象。当数据的业务含义存在较大差异时,您可以创建不同的业务板块,让各成员独立管理不同的业务,后续数据仓库的建设将按照业务板块进行划分。业务过程指企业的业务活动事件,如下单、支付、退款都是业务过程。请注意,业务过程是一个不可拆分的行为事件, 通俗地讲,业务过程就是企业活动中的事件业务限定统计的业务范围,用于筛选出符合业务规则的记录(类似于SQL中where后的条件,不包括时间区间)。原子指标是计算逻辑的标准化定义,业务限定则是条件限制的标准化定义。时间周期用来明确数据统计的时间范围或者时间点,如最近30 天、自然周、截至当日等修饰类型是对修饰词的一种抽象划分。修饰类型从属于某个业务域,如日志域的访问终端类型涵盖无线端、PC 端等修饰词修饰词指除了统计维度以外指标的业务场景限定抽象。修饰词隶属于一种修饰类型,如在日志域的访问终端类型下, 有修饰词PC 端、无线端等统计粒度统计分析的对象或视角,定义数据需要汇总的程度,可以理解为聚合运算时的分组条件(类似于SQL中group by的对象)。粒度是维度的一个组合,指明您的统计范围。例如,某个指标是某个卖家在某个省份的成交额,则粒度就是卖家、省份这两个维度的组合。如果您需要统计全表的数据,则粒度为全表。在指定粒度时,您需要充分考虑到业务和维度的关系。统计粒度也被称为粒度,是维度或维度组合,一般用于派生指标构建,是汇总表的唯一性识别方式。指标指标分为原子指标和派生指标。派生指标是以原子指标为基准,组装统计粒度、统计周期及业务限定而生成的。原子指标是对指标统计口径、具体算法的一个抽象。根据计算逻辑复杂性,Dataphin将原子指标分为两种:原生的原子指标:例如支付金额。衍生原子指标:基于原子指标组合构建。例如,客单价通过支付金额除以买家数组合而来。派生指标是业务中常用的统计指标。为保证统计指标标准、规范、无二义性地生成,OneData方法论将派生指标抽象为四部分:派生指标=原子指标+业务限定+统计周期+统计粒度。维度维度是度量的环境,用来反映业务的一类属性, 这类属性的集合构成一个维度,维度也可以称为实体对象。维度属于一个数据域,如地理维度(其中包挤罔家、地区、省以及城市等级别的内容)、时间维度(其中包括年、季、月、周、日等级别的内容)维度属性维度属性隶属于一个维度, 如地理维度里面的国家名称、同家ID 、省份名称等都属于维度属性派生指标派生指标=一个原子指标+多个修饰词(可选)+时间周期。可以理解为对原子指派生指标标业务统计范罔的圈定。如原子指标:支付金额,最近l天海外买家支付金额则为派生指标(最近l 天为时间周期, 海外为修饰词, 买家作为维度,而不作为修饰词)注意:这里有两个概念:主题域和数据域,两者概念一致,虽然都是从业务上划分,只是角度不同。主题从高层业务视角来划分,面向业务。数据域从系统数据打通的角度来划分,面向数据。数据域可能涉及到多主题域,主题域也可能涉及到多数据域。6. 数据模型设计实施过程6.1 数据调研 通过跟业务分析师或者运营人员了解数据需求,借助各种分析工具对涉及到的业务流程进行梳理和业务领域划分。这一步骤输出的文档包括业务流程图、时序图、活动图、用例图等。6.2 数据域划分 数据仓库是面向主题的应用,主要功能是将数据综合、归类并进行分析利用。数据仓库模型设计除横向的分层外,通常还需要根据业务情况纵向划分数据域。数据域是联系较为紧密的数据主题的集合,是业务对象高度概括的概念层次归类,目的是便于数据的管理和应用。通常您需要阅读各源系统的设计文档、数据字典和数据模型设计文档,研究逆向导出的物理数据模型。然后进行跨源的主题域合并,梳理出整个企业的数据域。划分数据域,需要分析各个业务模块中有哪些业务活动。数据域,可以按照用户企业的部门划分,也可以按照业务过程或者业务板块中的功能模块划分。例如,A公司电商营销业务板块可以划分为如下表所示的数据域。数据域中的每一部分,都是根据实际业务过程进行归纳、抽象得出的。输出文档:数据域和业务过程分类关系,格式可以是类似下面的图例:6.3 指标规范定义6.4 ER模型梳理 这一步骤是按照自下向上快速构建数仓的方式,对业务需要的业务过程建模。细化领域模型中得出的实体及其属性、维度及其属性、业务过程及其维度和度量、指标,输出ER图文档。6.5 数据域映射 该步骤将ER图中每个业务过程涉及到的业务表及其数据来源维度、指标等信息列举出来,输出数据源映射文档。6.6 数仓分层操作数据层( ODS ):把操作系统数据几乎无处理地存放在数据仓库系统中。包括全量和增量同步的结构化数据、经过处理后的非结构化数据以及根据数据业务需求及稽核和审计要求保存历史数据、清洗数据。数据公共层CDM(Common Data Model,又称通用数据模型层),包括DIM维度表、DWD和DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。公共维度层(DIM):基于维度建模理念思想,建立整个企业的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表,维度和维度逻辑表通常一一对应。公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。数据应用层ADS(Application Data Service):存放数据产品个性化的统计指标数据。根据CDM与ODS层加工生成。7. 数据模型设计开发规范本文首发微信公众号:码上观世界,本文为不完全版本,完整版请参考公号。编辑于 2021-03-25 13:37数据仓库数据模型​赞同 22​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录湖仓一体关于数仓和数据湖的设计

深度学习初学者如何设计模型? - 知乎

深度学习初学者如何设计模型? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册人脸识别计算机视觉深度学习(Deep Learning)深度学习初学者如何设计模型?学深度学习,人脸识别,之前看了些全连接和cnn神经网络,用c++手写了一个神经网络mnist识别,现在正在看各种模型,从网上看到的一些开源的alexn…显示全部 ​关注者19被浏览22,267关注问题​写回答​邀请回答​好问题 1​添加评论​分享​6 个回答默认排序龙鹏-笔名言有三​北京有三教育科技有限公司 CEO​ 关注好的模型结构是深度学习成功的关键因素之一,不仅是非常重要的学术研究方向,在工业界实践中也是模型是否能上线的关键。对各类底层深度学习模型设计和优化技术理解的深度是决定我们能否在深度学习项目中游刃有余的关键。那我们究竟如何去长期学好模型相关的算法呢?2022年有三AI CV秋季划-模型算法组正式推出了,供大家长期学习相关内容,学习不限时长,永久有效。详情大家可以听以下直播视频解读,更多补充可看图文。2022有三AI-CV秋季划模型算法组https://www.zhihu.com/video/1458400003023106048整体学习内容秋季划模型算法小组,聚焦于让大家能够跟随我们社区长期学习模型相关的算法,当前需要学习的东西包括:数据使用,模型分析,模型设计,模型优化,模型部署。总体的学习资料包括几个部分:(1) 学习书籍:有三自己撰写的模型设计教材。(2) 相关的视频专栏,包括《深度学习之数据使用》,《深度学习之模型设计》,《深度学习之模型分析》,《深度学习之模型优化》,《深度学习之模型部署》。(3) 知识星球社区:包括两个,一个是专用于秋季划模型算法学习小组存储资料的星球,永久有效,不对外开放。另一个是对外开放的有三AI知识星球,包括很多模型相关的内容,大家可以自行阅读下文了解。【杂谈】有三AI知识星球指导手册出炉!和公众号相比又有哪些内容?(4) 有三AI内容组,项目组,运营组:是学习后下一步从业的真正目标。在内容组大家可以从事内容创作和教学相关的工作,获得收入。在项目组大家可以参与各类工程项目,获得收入。在运营组大家可以参与生态运营,获得收入。(5) 线上线下答疑:包括有三的微信答疑和组织的线下活动和私人线下答疑。下面我们来看一下每一部分的学习内容:深度学习之数据使用数据使用是所有深度学习项目的基础,数据的使用是AI项目中的第一环,也是影响项目成败至关重要的一环,对于模型的选择也有一定影响,我们需要掌握数据的获取,整理,标注,数据增强等技能:(1) 如何针对自己的任务搜集数据(小型和大型数据集爬虫)。(2) 如何学会科学地整理数据(数据去重,质量分析等)。(3) 各类任务中的数据增强算法以及实战。这一部分内容的学习,我们配置了视频课专栏,如下:模型设计模型的设计是整个深度学习领域的通用基础,不管是从头设计自己的神经网络,还是对已有模型进行优化获得更高的任务指标,更快的运行速度,获得更小的模型体积,都需要掌握各类网络的设计技巧,是整个模型组的底层基础,我们需要掌握主流模型的设计思想,包括以下内容:(1) 学习掌握超过10类主流的模型设计架构。(2) 对模型进行训练调参,体验各类参数对模型性能的影响。这一部分内容的学习,我们配置了视频课专栏,直播和书籍,如下:模型分析深度模型参数多,网络结构复杂,模型结构的设计以及训练过程中超参数的调试,都非常依赖于经验。如果只凭经验,没有很科学的分析工具,仍然会有盲人摸象的感觉。因此为了能够更好地进行研究和实践,对模型进行相关的分析是非常重要的。我们需要掌握以下内容:(1) 如何对模型进行可视化,包括卷积核,特征图,激活图等。(2) 如何对模型的计算量,参数量,计算时间进行分析。这一部分内容的学习,我们配置了视频课专栏,如下:模型优化/压缩模型优化/压缩是整个模型算法组最核心的内容,所研究的就是如何用更少的资源,更快的速度获得与更大模型相关的性能,我们需要掌握高效率模型设计与压缩等以下内容:(1) 模型的稀疏化与裁剪。(2) 低精度量化与推理加速。(3) 更精简的模型设计与训练。这一部分内容的学习,我们配置了视频课专栏,书籍,知识星球,如下:知识星球的典型模块包括紧凑模型设计,动态推理,模型的剪枝、量化、蒸馏,软硬件优化,模型自动搜索等内容。请大家使用相关标签进行阅读,包括#模型剪枝# #模型量化# #模型蒸馏# #模型压缩# #硬件优化# #动态推理# #AutoML#等。模型部署最后,模型部署本身不属于模型优化的内容,模型优化/压缩是整个模型算法组最核心的内容,所研究的就是如何用更少的资源,更快的速度获得与更大模型相关的性能,我们需要掌握高效率模型设计与压缩等以下内容:涵盖了NCNN+MNN+Tengine+TensorRT+微信小程序共5大部署工具这一部分内容的学习,我们配置了视频课专栏,如下:学会能获得什么由于模型设计和优化是底层技术,在所有的深度学习领域中都有用处,因此在工业界也会接触到较多相关的项目。关于学习效果和产出形式,下面是一些有三AI季划成员的分享,供大家参考:【杂谈】有三AI季划的最核心价值在哪,听听这些同学怎么说!【杂谈】从学员到参与书籍写作,我在有三AI学习与成长的故事【杂谈】从学员到专栏作者、讲师,我在有三AI学习与名利双收的故事【杂谈】参加有三AI秋季划4个月,薪资翻倍,我在有三AI都学了啥?【杂谈】一个五岁孩子妈妈在有三AI学习并且赚钱的故事 【杂谈】从失业到重要项目负责人,2020年里我如何在有三AI上岸【杂谈】从学生到讲师,我如何20天里在有三AI赚3万如何报名即日起至2022年底学费为1388元(2021年底之前仍为1188元),终身有效,此后内容增加也不会新增费用,如果有模型设计书和有三AI知识星球可以抵扣相应费用,联系有三微信Longlongtogo即可报名。直接扫码订阅整个专栏即可:编辑于 2021-12-26 11:47​赞同 3​​添加评论​分享​收藏​喜欢收起​明天​自由职业者​ 关注大部分深度学习模型确实是黑箱,没有明确的意义。只有少部分深度学习模型的特定层,有着比较容易解释的含义。例如,残差收缩网络的软阈值化层,针对的就是信号中噪声较多的情况。强噪信号示意图:红色有用部分+蓝色噪声部分软阈值化本身是许多信号降噪算法的核心步骤,其公式如下(其中τ为阈值):残差收缩网络不仅把软阈值化作为其中一层,而且通过一个特殊的子网络,自动地设置了软阈值化的阈值τ[1] [2]。深度残差收缩网络参考^深度残差收缩网络:借助注意力机制实现特征的软阈值化 https://zhuanlan.zhihu.com/p/121801797^深度残差收缩网络:从删除冗余特征的灵活度进行探讨 https://zhuanlan.zhihu.com/p/118493090编辑于 2023-11-08 21:54​赞同 7​​添加评论​分享​收藏​喜欢

深度学习网络模型设计总结 - 知乎

深度学习网络模型设计总结 - 知乎首发于深度学习技术追踪切换模式写文章登录/注册深度学习网络模型设计总结飞桨PaddlePaddle​已认证账号摘要:目前在深度学习领域主要有两个研究方向:一、研究强大、复杂的模型网络和实验方法,追求更高的性能,在保证精度的前提下去优化模型的效率,以提升模型的准确率为目标;二、研究实时、简单的模型网络和实验方法,追求更高的效率,在保证效率的前提下提升模型的精度,以追求模型的实时性为目标。复杂的模型的容量大,在数据量足够的话能够找到更优的解,简单的模型计算量小,对于同样的任务相比于复杂模型更有效率。在实际应用中,在追求精度的时候我们也需要考虑在不损失模型精度的情况下进一步优化网络结构,提高网络参数的利用率,在追求速度的时候我们同样需要考虑在保证实时性的前提下进一步提升模型的精度。总之,在设计深度学习网络模型的时候,我们不仅需要考虑模型的效率,而且需要考虑模型的精度,减少模型参数和计算冗余,提高模型参数和数值计算的利用率。I. 实时性网络设计01加速网络结构设计1.1 分组卷积分组卷积即将输入的feature maps分成不同的组(沿channel维度进行分组),然后对不同的组分别进行卷积操作,即每一个卷积核至于输入的feature maps的其中一组进行连接,而普通的卷积操作是与所有的feature maps进行连接计算。分组数k越多,卷积操作的总参数量和总计算量就越少(减少k倍)。然而分组卷积有一个致命的缺点就是不同分组的通道间减少了信息流通,即输出的feature maps只考虑了输入特征的部分信息,因此在实际应用的时候会在分组卷积之后进行信息融合操作,接下来主要讲两个比较经典的结构,ShuffleNet[1]和MobileNet[2]结构。如上图所示,图a是一般的group convolution的实现效果,其造成的问题是,输出通道只和输入的某些通道有关,导致全局信息 流通不畅,网络表达能力不足。图b就是shufflenet结构,即通过均匀排列,把group convolution后的feature map按通道进行均匀混合,这样就可以更好的获取全局信息了。 图c是操作后的等价效果图。在分组卷积的时候,每一个卷积核操作的通道数减少,所以可以大量减少计算量。如上图所示,mobilenet采用了depthwise separable convolutions的思想,采用depthwise (或叫channelwise)和1x1 pointwise的方法进行分解卷积。其中depthwise separable convolutions即对每一个通道进行卷积操作,可以看成是每组只有一个通道的分组卷积,最后使用开销较小的1x1卷积进行通道融合,可以大大减少计算量。1.2 分解卷积分解卷积,即将普通的kxk卷积分解为kx1和1xk卷积,通过这种方式可以在感受野相同的时候大量减少计算量,同时也减少了参数量,在某种程度上可以看成是使用2k个参数模拟k * k 个参数的卷积效果,从而造成网络的容量减小,但是可以在较少损失精度的前提下,达到网络加速的效果。上图是在图像语义分割任务上取得非常好的效果的ERFNet[3]的主要模块,称为NonBottleNeck结构借鉴自ResNet[4]中的Non-Bottleneck结构,相应改进为使用分解卷积替换标准卷积,这样可以减少一定的参数和计算量,使网络更趋近于efficiency。1.3 Bottleneck结构上图为ENet[5]中的Bottleneck结构,借鉴自ResNet中的Bottleneck结构,主要是通过1x1卷积进行降维和升维,能在一定程度上能够减少计算量和参数量。其中1x1卷积操作的参数量和计算量少,使用其进行网络的降维和升维操作(减少或者增加通道数)的开销比较小,从而能够达到网络加速的目的,使得ENet在图像分割领域是目前最快的分割网络(仅限于CityScapes[6]榜单),同时精度也在可以接受的范围内。1.4 C.ReLU[7]结构C.ReLU来源于CNNs中间激活模式引发的。输出节点倾向于是"配对的",一个节点激活是另一个节点的相反面,即其中一半通道的特征是可以通过另外一半通道的特征生成的。根据这个观察,C.ReLU减少一半输出通道(output channels)的数量,然后通过其中一半通道的特征生成另一半特征,这里使用 negation使其变成双倍,最后通过scale操作使得每个channel(通道)的斜率和激活阈值与其相反的channel不同。注:目前用的不多,效果有待进一步验证(中科院基于该结构做了一些工作)。1.5 SqueezeNet[8]结构SqueezeNet思想非常简单,就是将原来简单的一层conv层变成两层:squeeze层+expand层,各自带上Relu激活层。在squeeze层里面全是1x1的卷积kernel,数量记为S11;在expand层里面有1x1和3x3的卷积kernel,数量分别记为E11和E33,要求S11 < input map number。expand层之后将 1x1和3x3的卷积output feature maps在channel维度拼接起来。02模型裁剪与稀疏化2.1 模型剪枝结构复杂的网络具有非常好的性能,其参数也存在冗余,因此对于已训练好的模型网络,可以寻找一种有效的评判手段,将不重要的connection或者filter进行裁剪来减少模型的冗余。剪枝方法基本流程如下:正常流程训练一个神经网络,得到训练好的model;确定一个需要剪枝的层,一般为全连接层,设定一个裁剪阈值或者比例。实现上,通过修改代码加入一个与参数矩阵尺寸一致的mask矩阵。mask矩阵中只有0和1,实际上是用于重新训练的网络。重新训练微调,参数在计算的时候先乘以该mask,则mask位为1的参数值将继续训练通过BP调整,而mask位为0的部分因为输出始终为0则不对后续部分产生影响。输出模型参数储存的时候,因为有大量的稀疏,所以需要重新定义储存的数据结构,仅储存非零值以及其矩阵位置。重新读取模型参数的时候,就可以还原矩阵。神经网络的参数量往往非常多,而其中大部分的参数在训练好之后都会趋近于零,对整个网络的贡献可以忽略不计。通过剪枝操作可以使网络变得稀疏,需要存储的参数量减少,但是剪枝操作同样会降低整个模型的容量(参数量减少),在实际训练时,有时候会通过调整优化函数,诱导网络去利用模型的所有参数,实质上就是减少接近于零的参数量。最后,对于如何自动设定剪枝率,如何自适应设定剪枝阈值,在这里不做过多讨论。2.2 核的稀疏化核的稀疏化,是在训练过程中,对权重的更新加以正则项进行诱导,使其更加稀疏,使大部分的权值都为0。核的稀疏化方法分为regular和irregular,regular的稀疏化后,裁剪起来更加容易,尤其是对im2col的矩阵操作,效率更高;而irregular的稀疏化会带来不规则的内存访问,参数需要特定的存储方式,或者需要平台上稀疏矩阵操作库的支持,容易受到带宽的影响,在GPU等硬件上加速并不明显。 论文[10]提出了Structured Sparsity Learning的学习方式,能够学习一个稀疏的结构来降低计算消耗,所学到的结构性稀疏化能够有效的在硬件上进行加速。由于在GEMM中将weight tensor拉成matrix的结构(即im2col操作),因此可以通过将filter级与shape级的稀疏化进行结合来将2D矩阵的行和列稀疏化,再分别在矩阵的行和列上裁剪掉剔除全为0的值可以来降低矩阵的维度从而提升模型的运算效率。该方法是regular的方法,压缩粒度较粗,可以适用于各种现成的算法库,但是训练的收敛性和优化难度不确定。论文[11]提出了一种动态的模型裁剪方法,包括以下两个过程:pruning和splicing,其中pruning就是将认为不中要的weight裁掉,但是往往无法直观的判断哪些weight是否重要,因此在这里增加了一个splicing的过程,将哪些重要的被裁掉的weight再恢复回来。该算法采取了剪枝与嫁接相结合、训练与压缩相同步的策略完成网络压缩任务。通过网络嫁接操作的引入,避免了错误剪枝所造成的性能损失,从而在实际操作中更好地逼近网络压缩的理论极限。属于irregular的方式,但是权值(网络连接)重要性评估在不同的模型以及不同的层中无法确定,并且容易受到稀疏矩阵算法库以及带宽的限制,在相关GPU等硬件环境下加速不明显。03量化加速3.1 二值权重网络[12]二值权重网络(BWN)是一种只针对神经网络系数二值化的二值网络算法。BWN只关心系数的二值化,并采取了一种混和的策略,构建了一个混有单精度浮点型中间值与二值权重的神经网络--BinaryConnect。BinaryConnect在训练过程中针对特定层的权重进行数值上的二值化,即把原始全精度浮点权重强行置为-1、+1两个浮点数,同时不改变网络的输入和层之间的中间值,保留原始精度。而真正在使用训练好的模型时,由于权重的取值可以抽象为-1、+1,因此可以采用更少的位数进行存放,更重要的是,很显然权重取值的特点使得原本在神经网络中的乘法运算可以被加法代替。乘法运算转变为加法的好处在于:计算机底层硬件在实现两个n位宽数据的乘法运算时必须完成2 * n位宽度的逻辑单元处理,而同样数据在执行加法时只需要n个位宽的逻辑单元处理,因此理论上可以得到2倍的加速比。3.2 二值神经网络[13]由于BWN取得的成功,人们开始尝试对二值网络进行更加深入的研究改造,并试图从中获得更大的性能提升。其中,最重要的基础工作是Matthieu Courbariaux 等人在几个月后提出的二值神经网络(BNN)。这一方法在BWN的基 础上进一步加大二值化力度,进而完全改变了整个神经网络中的计算方式,将所需的计算量压缩到极低的水平。BNN要求不仅对权重做二值化,同时也要对网络中间每层的输入值进行二值化,这一操作使得所有参与乘法运算的数据都被强制转换为“-1”、“+1”二值。我们知道计算机的硬件实现采用了二进制方式,而神经网络中处理过的二值数据 恰好与其一致,这样一来就可以考虑从比特位的角度入手优化计算复杂度。BNN也正是这样做的:将二值浮点数“-1”、“+1”分别用一个比特“0”、“1”来表示,这样,原本占用32个比特位的浮点数现在只需1个比特位就可存放,稍加处理就可以实现降低神经网络前向过程中内存占用的效果。同时,一对“-1”、“+1”进行乘法运算,得到的结果依然是“-1”、“+1”,通过这一特性就可将原本的浮点数乘法用一个比特的位运算代替,极大的压缩了计算量,进而达到提高速度、降低能耗的目的。然而,大量的实验结果表明,BNN只在小规模数据集上取得了较好的准确性,在大规模数据集上则效果很差。3.3 同或网络14XNOR-net是一种针对CNN的简单、高效、准确近似方法,它的核心思想是:在BNN的基础上,针对二值化操作给每一层数据造成的误差,引入最佳的近似因子,以此来弥补二值化带来的精度损失,提高训练精度的同时还能保持BNN在速度和能耗方面的优势。在BNN中,无论对权重二值化还是对中间值二值化,都会给本身的全精度数据造成严重的精度损失。而我们知道全精度数据本身是可以得到较好的训练效果的,因此,减小二值化带来的精度损失以达到全精度时能够实现的良好效果是最直接的思路。XNOR-net的解决办法是引入近似因子,并且针对权重和中间值分别引入近似因子,在一次计算后将近似因子添加到计算结果中去,通过少量的额外计算来弥补尽可能多的精度损失。同时,如果卷积的所有操作数都是二值的,则可以通XNOR和位计数操作估计卷积,如下图所示:如上图第三和第四行所示,正常两个矩阵之间的点乘如果用在两个二值矩阵之间,那么就可以将点乘换成XNOR-Bitcounting operation,从32位浮点数之间的操作直接变成1位的XNOR门操作,这就是加速的核心。同或网络在大规模数据集上的效果取得了巨大进步,其中在ImageNet上的正确性只比全精度的相同网络低十个百分点。但是,在很多复杂任务中,这一结果依然不能满足生产生活的需要。3.4 三值权重网络[15]三值网络主要是指三值权重网络(TWN)。二值网络中精度的损失主要来自于 对数据强置为(-1, +1)时与本身全精度之间产生的误差,而神经网络中训练得到的 权重服从均值为 0 的正态分布,这就意味着绝大部分权重在二值后会产生将近1的误差,这对计算结果造成的影响将是十分巨大的。为了解决这一问题,提高二值网络的正确率,Fengfu Li和 Bo Zhang等人在二值的基础上提出了TWN。TWN的核心在于计算出量化阈值Δ,将数值大小处于阈值内的数据强置为0,其他值依然强置为-1或+1,对于阈值的计算,作者也给了论证,能够最小三值化误差所带来的精度损失,还能够使神经网络权重稀疏化,减小计算复杂度的同时也能得到更好的准确率和泛化能力。在运行效率上,TWN与BWN相当,但是准确率却有着明显的提升。3.5 量化神经网络[16]Song Han等人在量化神经网络(QNN)方面做了大量研究工作。这一网络的主要目的是裁剪掉数据的冗余精度,原本32位精度的浮点数由“1 8 23”的结构构成,裁剪的方法是根据预训练得到的全精度神经网络模型中的数据分布,分别对阶码和位数的长度进行适当的减少。实验证明,对于大部分的任务来说,6位比特或者8位比特的数据已经能够保证足够好的测试准确率。QNN在实际的操作中通常有两种应用方式,一种是直接在软件层面实现整形的量化,通过更少的数据位数来降低神经网络在使用时计算的复杂度;另一种重要的应用是针对于AI专用芯片的开发。由于芯片开发可以设计各种位宽的乘法器,因此将神经网络中32位的全精度数据可以被处理成6位或8位的浮点数,同时结合硬件指定的乘法规则,就可以在硬件上实现更高的运算效率,达到实时运行深度神经网络的目的。这也是QNN最大的理论意义。但是如果从软件角度而非硬件角度出发,只是将浮点数量化成整形数,就没有办法显著地降低计算复杂度(除非对整形再进行量化),也就无法达到在低配硬件环境上实时运行深度神经网络的目的。因此,在软件设计的层面上,QNN相比BNN并没有特别明显的优势。04总结本文主要介绍了三种主流的深度学习模型压缩和模型加速的方向,分别为:加速网络结构设计,即通过优化网络结构的设计去减少模型的冗余和计算量;模型裁剪和稀疏化,即通过对不重要的网络连接进行裁剪,模型裁剪主要针对已经训练好的模型,而核的稀疏化主要是在训练的过程中进行诱导训练;量化加速,即通过对网络中的浮点值进行量化处理,使得浮点数计算转换为位操作(或者小整数计算),不仅能够减少网络的存储,而且能够大幅度进行加速,使得神经网络在CPU上的运行成为可能!当然,深度学习模型压缩和加速的方法不局限于我在本文中的介绍,还有其他很多类似的压缩和加速算法,如递归二值网络等。II. 高精度网络设计01ImageNet网络模型浅析ImageNet项目于2007年由斯坦福大学华人教授李飞飞创办,目标是收集大量带有标注信息的图片数据供计算机视觉模型训练。ImageNet拥有1500万张标注过的高清图片,总共拥有22000类,其中约有100万张标注了图片中主要物体的定位边框。接下来我们来介绍在ImageNet数据集上取得很好结果的几个经典的卷积网络结构,依此为AlexNet、VGGNet、Google Inception Net、ResNet、DenseNet,这五种网络依照出现的先后顺序排列,深度和复杂度也依次递进。1.1 AlexNetAlexNet是现代深度CNN的奠基之作。AlexNet中包含了几个比较新的技术点,也首次在CNN中成功应用了ReLU、Dropout和LRN等深度学习技巧。同时AlexNet拥有5个卷积层,其中3个卷积层后面连接了最大池化层,最后还有3个全连接层。AlexNet以显著的优势赢得了竞争激烈的ILSVRC 2012比赛,top-5的错误率降低至了16.4%,相比第二名的成绩26.2%错误率有了巨大的提升。AlexNet将LeNet的思想发扬光大,把CNN的基本原理应用到了很深很宽的网络中。AlexNet主要使用到的新技术点如下:成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。虽然ReLU激活函数在很久之前就被提出了,但是直到AlexNet的出现才将其发扬光大。训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。使用CUDA加速深度卷积网络的训练,利用GPU强大的并行计算能力,处理神经网络训练时大量的矩阵运算。AlexNet使用了两块GTX?580?GPU进行训练,单个GTX?580只有3GB显存,这限制了可训练的网络的最大规模。因此作者将AlexNet分布在两个GPU上,在每个GPU的显存中储存一半的神经元的参数。数据增强,随机地从256x256的原始图像中截取224x224大小的区域(以及水平翻转的镜像),相当于增加了(256224)2x2=2048倍的数据量。如果没有数据增强,仅靠原始的数据量,参数众多的CNN会陷入过拟合中,使用了数据增强后可以大大减轻过拟合,提升泛化能力。进行预测时,则是取图片的四个角加中间共5个位置,并进行左右翻转,一共获得10张图片,对他们进行预测并对10次结果求均值。1.2 VGGNetVGGNet是牛津大学计算机视觉组和Google DeepMind公司的研究员一起研发的深度卷积神经网络。VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠33的小型卷积核和22的最大池化层,VGGNet成功地构筑了19层深的卷积神经网络。VGGNet相比之前state-of-the-art的网络结构,错误率大幅下降,并取得了ImageNet 2014比赛分类项目的第2名和定位项目的第1名。VGGNet中全部使用了33的卷积核和22的池化核,通过不断加深网络结构来提升性能。该网络结构在对比的同时总结了以下几个观点:LRN层作用不大;神经网络结构越深效果越好;11卷积不如33的卷积有效,大一些的卷积核可以学习到更大的空间特征;3个3 3的卷积层拥有比1个7 7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。1.3 GoogLeNetGoogLeNet提出了一种新的网络模块(inception module),如图所示,它既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。Inception的主要思想是用稠密的模板覆盖卷积神经网络中最优的局部稀疏结构,使之能够近似地表示原来的局部稀疏结构。Arora等人对网络结构的最后一层做相关性统计,将相关性高的聚合成簇,作为下一层的单元,并与上一层相连。较低的网络层(靠近输入图片)中的单元集中在某一些局部区域,也就是说,最终在单个区域内会有大量簇,可以在下一层通过 的卷积过滤器覆盖,当然,也可以用更大尺寸的卷积过滤器来覆盖更大的区域,从而减少过滤器的数量。图 3-1所示的 Inception 结构采用了1x1,3x3和5x5的卷积过滤器,并额外地添加一个可选的池化操作,以增强效果。然而这种结构最大的问题是由于大量的滤波器存在,即使最后几个网络层中的卷积滤波器数量适中,计算量也会非常大。如果用这种结构覆盖最优稀疏结构,计算效率将非常低下。所以,GoogLeNet 采用的 inception 模块在上面的基础上做出了改进,在计算量较大的3x3和5x5的卷积过滤器之前,先用1x1的卷积过滤器降维,并修正线性特性。GoogLeNet采用了模块化的结构,方便增添和修改,一共约为100层,其中带参数的层有22层,全连接层输出1024位的向量。GoogLeNet的设计者在训练网络时,为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度,而在测试时,再将两个额外的softmax去掉。GoogLeNet在ImageNet 2014比赛中同时取得了检测任务和分类任务的第一名。1.4 ResNetResNet(Residual Neural Network)由微软研究院的Kaiming He等4名华人提出,通过使用Residual Unit成功训练152层深的神经网络,在ImageNet 2015比赛中获得了冠军,取得3.57%的top-5错误率,同时参数量却比VGGNet低,效果非常突出。在不断加神经网络的深度时,会出现一个Degradation的问题,即准确率会先上升然后达到饱和,再持续增加深度则会导致准确率下降。这并不是过拟合的问题,因为不光在测试集上误差增大,训练集本身误差也会增大。假设有一个比较浅的网络达到了饱和的准确率,那么后面再加上几个的全等映射层,起码误差不会增加,即更深的网络不应该带来训练集上误差上升。而这里提到的使用全等映射直接将前一层输出传到后面的思想,就是ResNet的灵感来源。假定某段神经网络的输入是x,期望输出是H(x),如果我们直接把输入x传到输出作为初始结果,那么此时我们需要学习的目标就是F(x)=H(x)-x。基本模块如下图所示:传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。在使用了ResNet的结构后,可以发现层数不断加深导致的训练集上误差增大的现象被消除了,ResNet网络的训练误差会随着层数增大而逐渐减小,并且在测试集上的表现也会变好。1.5 DenseNet这个结构主要参考了Highway Networks,Residual Networks(ResNets)以及GoogLeNet,通过加深网络结构,提升分类结果。加深网络结构首先需要解决的是梯度消失问题,解决方案是:尽量缩短前层和后层之间的连接。比如上图中,H4层可以直接用到原始输入信息X0,同时还用到了之前层对X0处理后的信息,这样能够最大化信息的流动。反向传播过程中,X0的梯度信息包含了损失函数直接对X0的导数,有利于梯度传播。DenseNet使得网络更窄,参数更少,很大一部分原因得益于这种dense block的设计,后面有提到在dense block中每个卷积层的输出feature map的数量都很小(小于100),而不是像其他网络一样动不动就几百上千的宽度。同时这种连接方式使得特征和梯度的传递更加有效,网络也就更加容易训练。“Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision.”即每一个隐层都能直接连接输入和损失函数,损失函数能够对其进行有效的监督,前面提到过梯度消失问题在网络深度越深的时候越容易出现,原因就是输入信息和梯度信息在很多层之间传递导致的,而现在这种dense connection相当于每一层都直接连接input和loss,因此就可以减轻梯度消失现象,这样更深网络不是问题。至于DenseNet的优点,总结有以下三点:充分利用了feature,加强了feature的传递,避免了feature在网络的不同层冗余出现。Dense Connection,路径增多,起到了deep supervision的效果,即损失约束到每一个隐层的路径很短,同时也进一步减轻了梯度消失问题。利用bottleneck layer,Translation layer, deep supervision(对隐层监督)以及较小的growth rate使得网络变窄,参数减少,有效抑制了过拟合,同时计算量也减少了。02设计高精度网络的几点思考网络更深,特征在进行多次线性变换之后表达能力更强,可以通过上一节ImageNet冠军网络的发展脉络可以看出;网络更宽,即融合多视角、多尺度的信息,使模型能够在不同视角进行学习,多视角特征进行融合的过程相当于模型融合的过程,最具代表性的事GoogLeNet的Inception结构;密集连接,网络的路径更多,既相当于是多模型融合的结果,又能够对网络的隐层进行直接或者较为直接的监督(deep supervision),从而提高模型的泛化能力和对参数的利用效率;感受野更大,对于网络中每个feature能够感知原图的区域越大,从而该特征融合的原图特征越多,表征能力也就越强;融合全局信息,对于每个特征位置都能够考虑全局的信息,从而能够进行更好的决策,提高网络的性能。参考论文[1] Zhang X, Zhou X, Lin M, et al. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices[J]. 2017.[2] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. 2017.[3] Romera E, Álvarez J M, Bergasa L M, et al. ERFNet: Efficient Residual Factorized ConvNet for Real-Time Semantic Segmentation[J]. IEEE Transactions on Intelligent Transportation Systems, 2017, PP(99):1-10.[4] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[C] Computer Vision and Pattern Recognition. IEEE, 2016:770-778.[5] Paszke A, Chaurasia A, Kim S, et al. ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation[J]. 2016.[6] Cordts M, Omran M, Ramos S, et al. The Cityscapes Dataset for Semantic Urban Scene Understanding[C] Computer Vision and Pattern Recognition. IEEE, 2016:3213-3223.[7] W. Shang, K. Sohn, D. Almeida, and H. Lee. Understanding and improving convolutional neural networks via concatenated rectified linear units. In ICML, 2016.[8] Treml M, Arjona-Medina J, Unterthiner T, et al. Speeding up Semantic Segmentation for Autonomous Driving[C] NIPS 2016 Workshop - MLITS. 2016.[9] S. Han et al. Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding. ICLR, 2016.[10] Wen W, Wu C, Wang Y, et al. Learning Structured Sparsity in Deep Neural Networks[J]. 2016.[11] Guo Y, Yao A, Chen Y. Dynamic Network Surgery for Efficient DNNs[C] NIPS. 2016.[12] Courbariaux M, Bengio Y, David J P. BinaryConnect: training deep neural networks with binary weights during propagations[J]. 2015:3123-3131.[13] Courbariaux M, Hubara I, Soudry D, et al. Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1[J]. 2016.[14] Rastegari M, Ordonez V, Redmon J, et al. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks[J]. 2016:525-542.[15] Li F, Zhang B, Liu B. Ternary Weight Networks[J]. 2016.[16] Hubara I, Courbariaux M, Soudry D, et al. Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations[J]. 2016.[17] Huang G, Liu Z, et al. Densely Connected Convolutional Networks[J]. CVPR 2017.[18] Yu, F., Koltun, V.: Multi-scale context aggregation by dilated convolutions. ICLR 2016[19] Wang P, Chen P, Yuan Y, et al. Understanding Convolution for Semantic Segmentation. 2017[20] Romera E, et al. Efficient ConvNet for real-time semantic segmentation. IEEE 2017.发布于 2019-05-21 15:28PaddlePaddle​赞同 47​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录深度学习技术追踪由PaddlePaddle官方撰写的技

设计常用模型 - 知乎

设计常用模型 - 知乎切换模式写文章登录/注册设计常用模型李煜佳阿里设计专家,《千里之行》作者,IXDC杰出讲师Google Design Sprint 设计方法Design Sprint, 设计冲刺,顾名思义就是要在短时间内做出好设计。Google把它定义在2-5天完成设计,核心就是以下这张图。设计过程包括:理解,定义,发散,决定,原型和验证。设计冲刺的价值Value that Design Sprint can bring1.帮助产品团队探索新的产品设计或商业方向2.通过分享背景知识,所有参与者得以从各个角度充分了解与交流领域知识3.设计冲刺是理想的设计教育工具,帮助非设计领域的同事了解产品设计思想,促进未来的跨领域合作4.设计冲刺包含用研,促进非设计领域的同事与用户之间的交流和共鸣5.多天的密切合作可以拉近参与者之间的关系,促进未来合作设计冲刺的 6 个阶段理解(Understand):理解要为用户解决的问题定义(Define):明确产品策略(数据分析,用户调研,设计原则制定等)发散(Diverge):探索实现方案决定(Decide):确定设计方案原型(Prototype):构建产品原型验证(Validate):验证产品原型第一步. 理解第一步只讨论问题,不要提解决方案。需要准确理解问题,定义好为谁解决什么样的问题。为了更好地理解问题,可以快速地讨论一些商业目标和技术挑战,利益相关者分析,以及用户调研和竞品分析。第二步. 定义定义阶段可以包含用户体验地图的整理,设计原则的确立,以及一句话定义产品。回到设计场地之后,将用户调研的问题整理成用户体验地图,方法如下图所示:第三步. 发散理解定义好问题之后,接下来就是想解决方案了。首先是发散思维,想很多很多idea。这也是我们工作中经常犯的错误,往往想到一个解决方案就开始深入设计,而没有发散开。第四步. 决定前面发散部分是团队中每个人单独想自己的idea,互不沟通。发散环节之后,所有团队有几个成员就会有几个idea。那么接下来怎么定用哪个方案呢?可以通过以下方法:投票,团队评价,以及思考帽子法。第五步. 原型设计对于大部分产品而言,原型可能是app或者微信公众号,或者网页。其实也可以更灵活,可以是视频,甚至是话剧。第六步. 验证验证环节包括用户测试,股东反馈,和技术反馈。参考文献谷歌产品设计的秘诀:2017年你最应该掌握的设计方法 - 优设-UISDCGoogle Design Sprint 设计方法介绍 - 知乎Google的产品设计方法:Design Sprint,六个阶段实现产品设计 | 人人都是产品经理苹果的设计方法参考文献设计方法:来自苹果的经验(双语字幕) | 美啊-见证设计的力量分析Google、微软、苹果设计规范的异同点 | 人人都是产品经理微软设计方法参考文献以后WINDOWS长这样:微软新一代设计体系Fluent Design - 知乎新兴设计方式:数据驱动策略——以微软公司办公室为例-访谈|设计师-专筑网GUCDR模型GUCDR模型植根于数个设计模型,并不是完全创新的模型。笔者设计它的目的是“在交互工作中可以直接拿来套用”,可以把它看做是一个“实用工具”。在实际工作中,只要能够回答画布中的每个点,即可形成完整的设计推演过程。参考文献设计方法:体系化的交互设计模型工具 | 人人都是产品经理双钻模型原研哉在《设计中的设计》中说:“设计的实质在于发现一个很多人都遇到的问题然后试着去解决的过程。”如果说解决问题是设计的核心价值,那么我们可以将解决问题分解成“问题是什么?”和“怎样解决问题?” 如果进一步准确地表达就变成:“正确的问题是什么?”和“目前最有效的解决方案是什么?” 帮助我们在日常的设计过程中,更好地把控住正确的问题,提炼出有效的解决方案。双钻设计模型由英国设计协会提出,该设计模型的核心是:发现正确的问题、发现正确的解决方案。一般应用在产品开发过程中的需求定义和交互设计阶段。文献参考设计方法:如何在设计中使用双钻设计模型? | 人人都是产品经理大眼模型P/资产:一家企业所拥有的最底层,核心的资源。可以是物理型的,比如摩拜单车的自行车,连锁酒店的酒店地产或物业;也可能是数字型资产,比如对于某一行业的数据,核心算法或者是线上流量,对于很多金融公司来说现金流就是其核心资产。M/模式:企业销售资产的方式。比如奔驰的新车,以租代售及Car to Go业务是对于其核心资产不同的销售模式,而摩拜单车并不售卖自行车,分时租赁是其销售核心资产的主要模式。B/品牌:企业或团队对内的理念与对外传播的具象化呈现。在内部与外部对于品牌的理解也会因视角不同有很大的差异性。C/用户:一个产品或服务最终的销售对象。参考文献大眼模型:产品是承载用户价值的最终容器 | 人人都是产品经理幸福设计-METUX模型为了帮助大家更好地进行“幸福设计”,卡里罗教授分享了他的一个模型——Motivation, Engagement and Thriving in theUser Experience (METUX)。在考虑用户体验时,应该从4个层次进行考虑:▪︎ 第一层是“界面”体验:用户与产品交互时的体验如何。▪︎ 第二层是“任务”体验:界面之上是用户完成的任务。如利用智能手环计步,用户在完成任务时体验如何。▪︎ 第三层是“行为”体验:任务之上是用户的行为。如用户购买智能手环的目的是运动,此时行为可能是跑步、骑自行车。因此产品在任务之上应该深入关注用户行为上的体验。▪︎ 第四层是“生活”体验:行为会对生活产生影响。如运动过量可能导致身体受损。在设计过程中,应该关注“胜任力”、“自主性”和“关系”三个关键因素,这些基本心理诉求是动机、投入感和幸福感的根本。(有关METUX模型,可通过卡里罗教授的论文《Designing for Motivation, Engagement and Wellbeing in Digital Experience》详细了解)参考文献积极计算:教你在科技时代做“幸福设计”AI 设计模型“机器人高效能交互模型(被CMU和NASA多次引用)区分自动模式与手动模式让用户直接与现实环境交互让用户直接与传感器信息交互帮助用户减少记忆成本帮助用户减少注意力成本参考文献AI机器人交互设计模型 (一)评估机器人交互的七大指标 | 人人都是产品经理AI机器人交互设计模型 (二):五大具体措施 | 人人都是产品经理卡诺模型上图是原始模型,现在我改下说法,三条曲线从“功能”的角度去理解。最下面一条曲线叫“基础(功能)”,没有的时候,用户对产品无法接受,有了,也不会夸奖你,用户会觉得这是理所应当的。所以,必须做,也叫“must have”,不管成本有多高都得做。在功能列表里,这种功能就不用参与pk了,比如手里的打电话、发短信,当然,也许多年以后不是了。最上面的曲线叫“亮点(功能)”,没有的时候,用户也想不到,有了以后,用户会赞不绝口,wow,惊喜。比如手机的指纹识别,解决了安全(更多更复杂的密码、证书、外挂硬件等等)和方便这一对矛盾的需求。亮点功能的特性,使得我们在选择“做哪个”的时候有一个诀窍——挑选成本低的亮点功能去实现,比如苹果电脑的呼吸灯?不要费太大的功夫去做一个亮点——除非你在大公司的里的“研究中心、创新中心”。你认为的亮点到底能不能点亮用户,是要运气的,相比下面一种功能,它更像早期投资。中间的叫“期望功能”,曲线比较平,也叫“nice to have”,这里体现出用户调研的局限性,如果我们简单的去问用户,只能获得“期望功能”,为什么,因为基础用户觉得你肯定有,不会提,而亮点根本想不到。那要让我们的产品更加丰满,怎么办?基础功能,我们说,要靠产品经理的领域知识来弥补,你是做手机的,就必须知道手机要能打电话;而亮点,就需要靠对用户需求、场景、人性的理解了,也就是我们经常所谓的“创造需求”,其实,你只是探究到了用户深层的需求,然后创造了一个解决方案。基础功能只能消除不满,不能带来满意,亮点的重要性在于,有了,才有口碑传播的概念,没有亮点的产品,只会有人用,没有口碑。一个功能的类别,随着时间会变,一般从亮点到期望到基本,比如手机的彩屏、和旋铃声,在十几年前还是亮点,今天已经没人再提。所谓饱暖思淫欲,由俭入奢易……这也是人类创新进步的源泉。参考文献能够预测用户满意度的一种方法——卡诺模型 | 人人都是产品经理KANO模型再理解 | 人人都是产品经理Kano模型思考:以QQ第一版为例,如何确定产品优先级 | 人人都是产品经理AIDASS -模型AIDASS模型在AIDAS基础上增加了Spread扩散模型到底什么样的产品与App才能吸引用户眼球,让用户一经使用便深深地爱上它,欲罢不能呢?其实最重要的因素是——习惯。千万别小看这个词哦,美国作家查尔斯·杜希格有一本书《习惯的力量》就对这个词做了深刻的解释:习惯是我们刻意或深思后而做出的选择,即使过了一段时间不再思考却仍继续、往往每天都在做的行为。这是我们神经系统的自然反应。习惯成形后,我们的大脑进入省力模式,不再全心全意地参与决策过程,所以除非你刻意对抗某个习惯,或是意识到其它新习惯的存在,否则该行为模式会自然而然地启动。怎么勾起用户的习惯并随之去引导用户爱上产品?下面将用AIDASS模型来解释一下。参考文献AIDASS模型思考|产品如何吸引用户? | 人人都是产品经理用ADDIE模型看产品经理如何做交互设计 | 人人都是产品经理上瘾模型“上瘾模型”是畅销书《HOOKED》提出的一种,帮助企业打造可以使得用户在固定场景下,习惯性依赖甚至上瘾的互联网产品的设计方法,主要分为四个步骤:触发、行动、多变的酬赏、投入。对于增新提老的设计目标,上瘾模型作为改版探索的理论支撑最为合适。那本文就从九个方面来分析,关于上瘾模型去驱动场景化设计。Intel的总裁格鲁夫曾说过:只有偏执狂才能生存HOOKED模型,由内部触发、外部触发、多变的奖励、行动和点滴投入五个部分构成,其中主要部分均与心理学的研究成果相关,其目的在于通过各种基于心理学原理的产品设计使用户对产品“上瘾”。参考文献9个方面分析:上瘾模型驱动场景化设计 | 人人都是产品经理用户故事地图、游戏化与HOOKED模型——一款K12产品的诞生 | 人人都是产品经理上瘾模型:Facebook、Twitter、Instagram是如何让用户上瘾的? | 人人都是产品经理CRM 模型CRM最早由著名的IT管理咨询公司Gartner在上世纪九十年代末期提出,是以客户数据的管理为核心,利用信息科学技术,实现市场营销、销售、服务等活动自动化,并建立一个客户信息的收集、管理、分析、利用的系统,帮助企业实现以客户为中心的管理模式。客户关系管理既是一种管理理念,又是一种软件技术。有些人以为CRM就是销售管理系统,有些人以为CRM就是客户细分,有些人以为CRM就是营销,这些都是比较片面的理解。本质上来讲,CRM代表一种企业对待核心客户资源的管理理念和运营方法,通过信息技术帮助企业识别、发展、维护、服务客户,提升企业收入,提高户满意度和忠诚度。参考文献关于CRM体系的高阶模型&基础系统设计方法论 | 人人都是产品经理RBAC 模型RBAC(Role-Based Access Control)基于角色的访问控制。这是从传统的权限模型基础上,改进而来并且相当成熟的权限模型。这里强调三个要素:用户、角色、权限。用户与角色是多对多关系,角色与权限是多对多关系。一般情况下,使用RBAC0模型就可以满足常规的权限管理系统设计了。参考文献后台产品设计方法论:RBAC模型概要分析(附案例分析) | 人人都是产品经理以RBAC模型为基础,分析B端权限系统的设计思路(业务技能) | 人人都是产品经理后台设计的基石:用户权限管理(RBAC)及工作流(workflow)模型 | 人人都是产品经理3种权限模型,快速定位设计目标 | 人人都是产品经理RBAC模型:基于用户-角色-权限控制的一些思考 | 人人都是产品经理三维一体模型设计师怎样高效拆分业务?试试三维一体模型 | 人人都是产品经理行为分析BDQA 模型从Be-goals到Do-goals的用户体验设计导图范式,期望能够帮助设计师从用户真实场景角度出发,挖掘出有价值的策略像素点,从而产出客观合理的产品或设计原型。为了深化设计师用户体验意识,并能够将其在具体业务分析中真正落地,本文提出了一种辅助设计师思考的结构化导图–“BD-QA模型”。BD-QA内容:该导图主要分为三个模块:Input(输入)、Machine(机制)、Output(输出)BD-QA模型的运行机制可以简单理解为:添加(Input)用户顶层目标(Be-goals)至反应箱内(Machine)最后经过“化学反应”生成(Output)生成相应物质(Product Prototype or Design Prototype)的过程。参考文献用户体验设计导图之BD-QA模型 | 人人都是产品经理FBM 模型Fogg是斯坦福大学的一名研究行为科学的教授。他于2009年发布了一篇研究论文(见文章结尾链接),提出了一个新的理解人类行为的模型(以下简称为FBM)。在这个模型中,他认为一个人的行为的产生是三个不可分割的因素的产物:行为动机(Motivation),行为能力(Ability)和触发机制(Triggers)。Fogg教授指出,触发机制发生作用需要三个条件:第一,触发机制要被我们成功的捕捉到;第二,触发机制要和我们的目标行为建立联系(QQ好友消息的提示音显然无助于我们点击网站广告);第三,我们要同时具有相应的行为动力和能力。Fogg教授在论文中进一步的指出,行为动力(Motivation),行为能力(Ability)和触发机制(Triggers)这三个元素又可以细分为:Motivation:愉悦痛苦(Pleasure_Pain),希望恐惧(Hope_Fear),以及社会接受和拒绝(Social Acceptance/Rejection);Ability: 时间(Time),金钱(Money),体力付出(Physical Effort),脑力付出(Brain Cycles),社会异常(Social Deviance)以及非常规(Non-Routine);Triggers: 刺激(Spark),辅助( Facilitator )和信号(Signal)。FBM同样适用于互联网用户的行为分析中。根据这个模型,我们可以思考:用户为什么没有按照我们预期的那样采取行动。是这个操作对用户来说太难,成本太高吗?是这个产品没有激发用户的参与感,驱动力和欲望嘛?还是因为激发机制不够强烈,不够明显?我相信大家看网络视频的时候或多或少的遇到弹出广告的情况。网站的运营者当然希望你去点击广告,去产生一些消费行为。但实际上这些广告的效果极差,不仅没有促进用户去点击,反而打扰了用户的沉浸状态,激起他们的反感。点击广告这个操作是极其简单,毫无操作成本的,但是用户为什么没有这样做呢?按照FBM的解释,我们可以去行为动力和触发机制上找原因。参考文献如何理解FBM行为模型:用户为何没有按照我们的预期操作 | 人人都是产品经理TBRR 模型如何让我们的产品更具“黏性”?以TBRR模型为思考框架,认为在Trigger阶段为了使用户有使用产品的动机,可以借一把“生理吸引”之风,当用户有了尝试产品的动机之后,通过顶层需求的疏通实现用户价值体验的提升,从而大概率地闭环二次场景回路。看了TED一个关于“上瘾”行为的研究,上瘾行为遵循“TBRR”模型—Trigger(触发)-Behavior(行为)-Reward(奖励)-Repeat(重复),如图1所示。以“烟瘾”为例,听说抽烟可以放松神经(Curious-Trigger),出于好奇于是就尝试尝试(Behavior),抽的过程中,真的很爽(Reward),当压力大时,大脑自动构建回路,抽烟可以缓解当前现状(Repeat)。参考文献“TBRR”模型:如何让我们的产品更具“黏性”? | 人人都是产品经理SWOT 模型SWOT分析法(也称TOWS分析法、道斯矩阵)即态势分析法,20世纪80年代初由美国旧金山大学的管理学教授韦里克提出,经常被用于企业战略制定、竞争对手分析等场合。在现在的战略规划报告里,SWOT分析应该算是一个众所周知的工具。来自于麦肯锡咨询公司的SWOT分析,包括分析企业的优势(Strengths)、劣势(Weaknesses)、机会(Opportunities)和威胁(Threats)。因此,SWOT分析实际上是将对企业内外部条件各方面内容进行综合和概括,进而分析组织的优劣势、面临的机会和威胁的一种方法。优劣势分析主要是着眼于企业自身的实力及其与竞争对手的比较,而机会和威胁分析将注意力放在外部环境的变化及对企业的可能影响上 。在分析时,应把所有的内部因素(即优劣势)集中在一起,然后用外部的力量来对这些因素进行评估。参考文献PEST、SWOT、五力模型、波士顿矩 - 知乎发布于 2020-01-04 14:49模型设计交互设计​赞同 27​​添加评论​分享​喜欢​收藏​申请

图神经网络综述:模型设计、理论分析与实际应用

图神经网络综述:模型设计、理论分析与实际应用

网站首页

论文发表

研究队伍

新闻列表

专利列表

科研项目

开源项目

英才招聘

成果发表规范

图神经网络综述:模型设计、理论分析与实际应用

2021-04-20

图神经网络(Graph neural network,GNN)是目前非常火热的研究领域。随着领域的快速发展,越来越多的图神经网络模型与变种被提出。面对众多的模型与变体,研究者如何针对自己的任务与应用选择合适的计算单元,设计高效的图神经网络模型?如何更好利用图的不同特点,从而提升模型精度?现在的图神经网络又有哪些理论支持与模型限制?针对这些问题,研究团队中的周界、崔淦渠、胡声鼎等同学将2018年在arxiv上公开的一篇综述《Graph neural networks: A review of methods and applications》进行了相应的更新,并从设计者的角度出发,详细介绍了图神经网络的模型设计、相关分析与具体应用,文章于近期发表在期刊AI Open上。本文的主要贡献如下:1、文章对现有的图神经网络模型进行了详细的总结,提出了一个通用的GNN模型设计框架并且详细讨论了其中每个组件的现有实现。文章还进一步介绍了对于现有GNN模型的相关理论与实验分析。2、文章对GNN现有的应用进行了系统地分类并且将应用划分为结构化场景应用和非结构化场景应用。文章介绍了每个场景中的典型应用与相关方法。3、文章提出了四个开放问题。文章对每个问题进行了相应的分析并提出了一些可行的未来方向。一、图神经网络的通用设计框架文章从模型设计者的角度来介绍相关的GNN模型,提出了一个通用的图神经网络模型设计范式,并将现有的模型总结到设计范式中的不同模块中。具体来说,该设计范式包括四个步骤:(1)寻找图结构;(2)明确图类型与规模;(3)设计损失函数;(4)使用计算模块构建模型。(1)寻找图结构在这一步中,设计者需要明确应用中的图结构。在一些如知识图谱、分子图、物理系统等结构化场景的应用中,图结构是较为明确的;在另一些非结构化场景中(如文本和图像),设计者需要首先明确图的形式,例如为文本构建一个全连接的词图或者为图像构建一个场景图。确定了图结构之后,之后的设计过程将关注在如何将GNN应用到相应的图上。(2)明确图类型与规模确定图结构之后,设计者需要根据应用确定图类型与规模。对于图类型来说,不同类型的图往往蕴涵了不同的额外信息,所以在设计模型时需要特殊考虑如何利用不同图的不同性质。对于图的规模来说,目前对于“大图”和“小图”没有一个明确的划分界限,并且评判的指标也会随着计算能力的发展不断变化。文章中将计算设备能否处理和存储一个图的邻接矩阵或拉普拉斯矩阵(空间复杂度为N^2,N为节点个数)作为划分的方式。如果一个图的邻接矩阵不能被设备直接处理或存储,那么将被视为大规模的图,对该图的处理要采用相应的大规模图神经网络模型。具体来说,文章在第4章详细介绍了考虑不同图类型和规模的现有模型变体,包括有向图、异质图、动态图、其他图类型以及大规模的图模型。(3)设计损失函数在这一步中,设计者需要根据自己应用的任务类型与训练设定来设计模型的损失函数。对于任务类型来说,文章将现有的图上相关任务划分为节点级别、边级别以及图级别任务。在不同级别上的任务又可以被划分为分类与回归等不同的任务类型,模型设计者需要考虑自己关注任务的类型来设计相应的损失函数。另一个需要考虑的因素是训练设定。根据任务标注数据的情况,现有的任务可以被划分为监督学习、半监督学习和无监督(自监督)学习三种不同的训练设定。对于监督和半监督学习来说,设计者可以利用标注标签使用相应的损失函数。对于无监督(自监督)学习来说,往往需要设计者自行设计相应的无监督(自监督)任务来进行模型的表示学习。在第5章中,文章详细介绍了无监督(自监督)设定下的相关模型,包括了基于图自编码器与基于对比学习的相关方法。(4)使用计算模块构建模型在上述步骤后,模型设计者最后需要使用相应的计算模块来设计最终的模型。文章将计算模块分类为(消息)传播模块、采样模块与池化模块。其中每个模块又包含不同的模型变种,如传播模块中包括卷积算子和循环算子这两种最主要的图神经网络计算模型以及跳跃连接。采样模块中包括节点采样、层采样和子图采样等不同采样方式。池化模块中包括直接池化与层级池化等不同的方式。每种分类下又包含相应的模型介绍。文章在第3章中详细介绍了具体的计算模块。二、图神经网络分析与应用文章在第7章从理论与实验两个角度介绍了对于图神经网络进行分析的相关工作。在理论角度,文章从图信号处理、泛化能力、表达能力、不变性、迁移能力、标签效率等几个角度进行了相关介绍。在实验分析角度,文章介绍了对于图神经网络进行性能评估的相关工作以及现有的大规模评估基准。在应用方面,文章将现有的图神经网络应用划分为结构化场景与非结构化场景,并介绍了不同场景中不同领域内的代表性模型。三、结语图神经网络在许多任务上都取得了较好的结果,然而目前还有许多没有解决的问题。文章在第9章介绍了目前图神经网络研究中的四个开放问题:鲁棒性、可解释性、图预训练与复杂图结构学习。随着领域的快速发展,越来越多的图神经网络模型与应用被提出。因为精力所限,本文无法穷尽该领域的所有方法与文献,但希望通过提出的设计框架为研究人员提供一个不同的视角,并为今后研究人员使用与设计图神经网络提供新的思路与见解。论文名称:Graph neural networks: A review of methods and applications论文作者:Jie Zhou, Ganqu Cui, Shengding Hu, Zhengyan Zhang, Cheng Yang, Zhiyuan Liu, Lifeng Wang, Changcheng Li, Maosong Sun论文链接:https://arxiv.org/abs/1812.08434AI Open简介:AI Open专注于AI的开放共享,分享 AI 理论与应用知识和前瞻性观点。所有被录用的文章将在Elsevier的ScienceDirect平台完全开放,发表后即可立即免费阅读、下载以及分享。该期刊的主题包括但不限于:深度学习与表征学习、图理论与图挖掘、知识图及其应用、自然语言处理、图像处理与分析等。此外,部分人脑研究主题也包含在内,如大脑连接和网络建模、神经免疫学等。欢迎投稿!

THUNLP

Address: Room 4-505, FIT Building, Tsinghua University

Tel: (+8610) 627-77701

基于模型的设计 - MATLAB & Simulink

基于模型的设计 - MATLAB & Simulink

跳到内容

切换主导航

登录到您的 MathWorks 帐户

我的帐户

我的社区资料

关联许可证

登出

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

MATLAB

产品

解决方案

学术

支持

社区

活动

获取 MATLAB

MATLAB

登录到您的 MathWorks 帐户

我的帐户

我的社区资料

关联许可证

登出

基于模型的设计

搜索 MathWorks.com

搜索

关闭移动搜索

关闭移动搜索

基于模型的设计

在整个开发过程中系统地使用模型

获取免费试用版

联系销售人员

利用基于模型的设计,虚拟模型成为开发过程的核心,从而改进交付复杂系统的方式。

使用 MATLAB 和 Simulink 进行基于模型的设计,可以缩短开发周期,使开发时间至少减半。

尝试新的设计思路和创意,并通过建模和仿真进行快速、可重复的测试

通过报告、编码和验证等关键步骤的自动化,消除人工步骤并减少人为错误

在需求和系统架构与组件设计和测试之间建立一个可追溯的数字线索

执行预测性维护,检测故障,并使用模型作为数字孪生来优化运营中的系统

采用基于模型的设计进行数字工程 (2:07)

使用 MATLAB 和 Simulink 进行基于模型的设计

使用 MATLAB 和 Simulink 进行基于模型的设计

2:08

视频长度为 2:08

使用 MATLAB 和 Simulink 进行基于模型的设计

基于模型的设计助力初创企业走向成功

5:42

视频长度为 5:42

基于模型的设计助力初创企业走向成功

Danfoss Accelerates Digital Transformation with MathWorks and Model-Based Design

4:20

视频长度为 4:20

Danfoss Accelerates Digital Transformation with MathWorks and Model-Based Design

什么是 Simulink

2:15

视频长度为 2:15

什么是 Simulink

“MathWorks 基于模型的设计工具为我们的整个开发过程提供了一个集成的工具链。我们不仅能清晰地追溯到需求,还能更为轻松地维护我们的软件,因为它是作为模型实现的,而且我们可以从这个模型自动生成代码。”

Thomas Ehl, Continental

基于模型的设计可用于:

敏捷软件开发

仿真、自动测试和代码生成缩短了开发周期,让您的团队成功实现敏捷化。

基于模型的系统工程

Simulink 在需求和系统架构与详细的组件设计、实现和测试之间架起一座桥梁,为整个系统生命周期提供支持。

数字孪生

将模型扩展到运营中的系统,以执行预测性维护和故障分析。

开发运营一体化

通过仿真、自动测试和代码生成,在开发和运营之间进行迭代,持续交付软件更新。

软件定义汽车

使用 MATLAB、Simulink 和 Polyspace 加速软件定义汽车开发。

AI 与基于模型的设计

将人工智能 (AI) 方法应用于工程系统的设计。

基于模型的设计入门

通过分阶段引入基于模型的设计,降低开发速度减慢的风险。从一个项目开始,然后在最初的成功基础上,扩大模型的使用和代码生成。这可以确保从一开始就有一个可实现的投资回报 (ROI)。

成功案例

Airnamics 使用基于模型的设计开发近程拍摄无人机系统

ENGEL 加快注塑机控制器开发

基于模型的设计为小型开发团队赋能:Airnamics 公司问与答

蒙德拉贡大学的学生通过基于项目的学习培养实用的工程技能

相关文献

为什么采用基于模型的设计?

评估基于模型的设计的投资回报

小型工程团队如何采用基于模型的设计

分阶段采用基于模型的设计

基于模型的设计助力初创企业走向成功

探索解决方案

Simulink 仿真和基于模型的设计

系统建模和仿真

利用基于模型的设计支持敏捷系统开发

基于模型的系统工程

什么是数字孪生?不可不知的三大要点

使用 MATLAB 和 Simulink 进行验证、确认和测试

MATLAB 和 Simulink 嵌入式代码生成

快速入门

Simulink 入门之旅

介绍 Simulink 基础知识的交互式课程。

了解详情并开始课程

Stateflow 入门之旅

初步了解如何在 Stateflow 中创建、编辑和仿真状态机。

了解详情并开始课程

Simscape 入门之旅

学习使用 Simscape 仿真物理系统的基础知识。

了解详情并开始课程

使用 Simulink 进行控制设计

Simulink 中的反馈控制设计基础知识快速入门。

了解详情并开始课程

获取免费试用版

30 天探索触手可及。

立即下载

有疑问吗?

与基于模型的设计专家探讨。

发邮件给我们

×

选择网站

选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。

(English)

(Deutsch)

(Français)

(简体中文)

(English)

您也可以从以下列表中选择网站:

如何获得最佳网站性能

选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。

美洲

América Latina (Español)

Canada (English)

United States (English)

欧洲

Belgium (English)

Denmark (English)

Deutschland (Deutsch)

España (Español)

Finland (English)

France (Français)

Ireland (English)

Italia (Italiano)

Luxembourg (English)

Netherlands (English)

Norway (English)

Österreich (Deutsch)

Portugal (English)

Sweden (English)

Switzerland

Deutsch

English

Français

United Kingdom

(English)

亚太

Australia (English)

India (English)

New Zealand (English)

中国

简体中文Chinese

English

日本Japanese (日本語)

한국Korean (한국어)

联系您当地的办事处

MathWorks

Accelerating the pace of engineering and science

MathWorks 公司是为工程师和科学家提供数学计算软件的开发商。

发现…

了解产品

MATLAB

Simulink

学生版软件

硬件支持

File Exchange

试用或购买

下载

试用软件

联系销售

定价和许可

如何购买

如何使用

文档

教程

示例

视频与网上研讨会

培训

获取支持

安装帮助

MATLAB Answers

咨询

许可中心

联系支持

关于 MathWorks

招聘

新闻室

社会愿景

客户案例

关于 MathWorks

选择网站

United States

信任中心

商标

隐私权政策

防盗版

应用状态

京公网安备 11010502045942号京ICP备12052471号

© 1994-2024 The MathWorks, Inc.

x

WeChat

关注我们

如何设计一个神经网络模型达到某种效果? - 知乎

如何设计一个神经网络模型达到某种效果? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册机器学习神经网络深度学习(Deep Learning)Caffe(深度学习框架)如何设计一个神经网络模型达到某种效果?上海交大MVIG实验室本科招新(深度学习,计算机视觉),面向发表CVPR/ICCV/NIPS 今天看到这个新闻,里面有句话说 老师会培养学生的模型设计…显示全部 ​关注者131被浏览63,326关注问题​写回答​邀请回答​好问题 22​添加评论​分享​7 个回答默认排序微软亚洲研究院​人工智能话题下的优秀答主​ 关注传统上,深度学习算法设计和部署平台的开发是相对独立的。算法设计科学家往往侧重于模型精度,而模型运行效率则是通过在设计中加入计算量的限制来进行保证。图1:深度学习算法设计和模型部署平台的开发是相对独立的。但近日,微软亚洲研究院异构计算组的研究员们在一篇题为“To Bridge Neural Network Design and Real-World Performance: A Behavior Study for Neural Networks”的论文中提出:仅仅用计算量来限制并不能保证实际部署的运行效率。论文链接:https://proceedings.mlsys.org/paper/2021/hash/02522a2b2726fb0a03bb19f2d8d9524d-Abstract.html研究员们表示,一个典型的例子是 MobileNetV3 相较于 MobileNetV2 具有更少的计算量和更低的内存使用,因此在 ARM A76 CPU + TFLite 推理时,V3 比 V2 快25%;但出乎意料的是在 Intel Movidius VPU + OpenVINO 推理时,V3 却比 V2 慢75%。目前,此篇论文已经被 MLSys 2021 (Conference on Machine Learning and Systems)大会收录,其主要研究内容是通过分析深度学习算法设计空间在移动端侧推理平台的行为特性,以设计针对不同平台的高效深度学习模型。换句话说,研究员们在论文中指出,当前仅仅用计算或访存量作为高效模型设计的指标是不合理的。每个部署框架都有不同的特性,高效算法设计必须考虑目标平台的特性,才能取得最好的性能。研究目标:评估深度学习算法的行为特性让算法设计者理解目标平台的特性是非常困难的。因为算法和平台设计往往属于不同的研究领域,有很高的学习门槛。更重要的是,近年来部署平台的迭代速度越来越快,而且很多平台的软硬件都是闭源的,因此对于这些平台的特性更是无从得知。基于此,微软亚洲研究院的研究员们提出了通过评估整个深度学习算法设计空间在目标平台上的行为特性来指导高效的算法设计。其目标是回答以下三个研究问题:1. 算法设计空间中有哪些异常的行为特性?这里的异常特性是指:不同算法配置会导致计算或访存量增加或减少,但部署平台的推理延时没有相应地增加或减少。这些特性是在算法设计中要尤其注意利用或避免的。2. 这些异常行为特性背后的原因是什么?3. 这样的特性对高效的深度学习算法的设计有什么启示?然而,由于每个算法的设计维度都有很多参数可选(本篇论文应用的是针对 ImageNet 的模型设计空间),整个算法空间轻易就能达到数十亿的数量级,评估所有参数会开销巨大,因此研究员们复用算法设计思路,每次仅调整和评估一个设计维度并固定其它维度以减小设计空间。此外,评估得到的每个维度行为特征可直接作为启发策略应用到算法设计中。研究员们还开发了一套全自动评估工具,流程如图2所示。表1:本篇论文评估的所有算法设计维度(第一行),以及该维度下对应的配置表2:评估中使用的七个部署平台表2:评估中使用的七个部署平台最终,研究员们一共发现并总结了七条异常的行为特征可用于指导深度学习的算法设计。接下来,研究员们简要针对算法设计者常见的问题,介绍了该论文发现的行为特征以及背后的原因和启示。研究发现:七个策略改进神经网络设计(1)增加卷积通道数一定会增加推理延迟吗?发现一:除 KPU 外,随着输出通道数的增加,卷积延时在推理平台上以阶梯式增加(如图3所示)。图3:推理延迟(纵轴)随着输出通道数(横轴)的增加阶梯上升原因:由底层硬件的数据级并行导致。以 CPU 为例,为使用 CPU 的数据级并行,即 SIMD 单指令多数据单元,推理框架会使用一个小数据块作为基本计算单位,比如 TFLite 使用(8,1)×(1,8)→(8,8)作为基本块,因此数据都要被填充成8的倍数,所以展示出如图3(a)中长度为8的阶梯行为。其他平台也是同样的原因。启示:为了潜在的更高精度,在设计神经网络时建议保留每个延时台阶的最大通道数,跳过其它通道数。例如,如果在 MetaPruning (神经网络通道数自动剪枝)这篇论文中应用该启示的话,搜索空间能够从30^14降低到4^14。(2)每个网络模块在不同平台上有相似的相对时延吗?发现二:一个网络模块的相对延时在不同推理平台上差异很大。除了在 CPU 上,非卷积算子可能会极大地拖慢推理速度(如图4所示)。图4:不同网络模块在不同平台上的相对时延差别很大(Ops 指计算量,mac 指访存量)原因:一个原因是除了 CPU,其它推理平台上计算和访存带宽不匹配现象严重。在 CPU 上,模块相对时延和计算量相符,但在其它平台上,模块相对时延更体现了访存量的区别。另一个原因是,除 CPU 外其它推理平台对非卷积算子支持较弱。例如,图4展示了 SE(Squeeze and Excitation) 模块会显著增加模型在几个平台的延时。以 GPU 为例,SE 的 Pooling 缺少算子融合的支持,因此虽然 Pooling 只占了<5%的计算量,但却消耗了>70%的延时。启示:算法设计空间的候选网络模块应该对每个推理平台进行定制。(3)激活函数对时延影响很小吗?发现三:只有 ReLU 和 ReLU6 的延时在每个推理平台上可以忽略。HardSwish 只在 CPU 和 GPU 上可忽略。除了 KPU,Swish 激活函数在各个推理平台上都会显著增加推理延时(如图5)。图5:不同激活函数在不同平台上时延不同(图中显示了 depthwise 卷积+激活函数的时延,因为激活函数通常和其它算子融合在一起)原因:推理平台对新激活函数的算子融合支持较弱。例如,虽然 HardSwish 常常被认为是对部署友好的算子:和 Swish 相比,它移除了 Sigmoid 和指数函数以减少复杂计算。但是由于缺少算子融合支持,它在 NPU 上的推理延时甚至远远超过了 Swish。启示:对每个推理平台的算法设计空间应考虑移除延时大的激活函数。(4)用小卷积核可以极大减少时延吗?发现四:随着内核尺寸的增加,除了 CPU、GPU 和 Edge TPU 的 DWConv,Conv 和 DWConv 延时的增加都远小于计算量的增加。原因:Conv 和 DWConv 在除 CPU 和 GPU 之外的平台上存储带宽都是受限的。当卷积核增大时,访存的增加要远小于计算量增加,因此延时增大不明显。图6:卷积和 depthwise 卷积延时随卷积核大小(K)的变化启示:在 NPU、DSP 和 VPU 上,应该使用更大尺寸的 DWConv 卷积核以得到模型精度的提升。同样,在 NPU、DSP 和 Edge TPU 上,则应该使用更大尺寸的卷积内核。(5)使用低数据精度会在保证模型精度可接受的情况下相应地减少时延吗?发现五:在 NPU 上应用 INT8 相较于 FP16 能获得11倍的加速比(除了 MobileNetV3 只有2.5的加速比)。然而,在 CPU 上,INT8 相较于 FP32 的加速比小于3.6。原因:NPU 具有专门的 INT8 的计算单元,而不是像 CPU 和 GPU 一样在不同的运算精度之间共享计算单元。另外,在 CPU 上,INT8 重量化算子(requantization)对低数据重用率的算子代价很高。启示:为了在 CPU 上获得最佳延时,每个算子应该选择合适的数据精度。发现六:INT8 会在许多模型上显著降低推理精度。原因:一些推理平台的 INT8 量化算法实现对某些算子不友好,从而导致精度降低。启示:如果目标平台的数据精度是 INT8,那么在算法设计空间内应移除可能造成准确度损失的模块或算子。(6)各个推理平台的横向比较是怎样的?发现七:考虑到对神经网络模型的支持程度,特别是对新模型的支持程度,CPU 平台是最好的选择。考虑到延时和能耗,以及对基础的流行的神经网络模型的支持,Edge TPU 和 NPU 是最好的选择。综上所述,研究员们提出了一个针对深度学习算法设计空间的数据集,通过在七种有代表性的边缘端侧推理平台上评估该数据集,发现了七个行为特征,并对每一个提出了相应的启发策略来改进高效的神经网络设计。案例研究表明,通过应用这些策略,通道剪枝和 NAS 的搜索空间可被大幅度减少。本账号为微软亚洲研究院的官方知乎账号。本账号立足于计算机领域,特别是人工智能相关的前沿研究,旨在为人工智能的相关研究提供范例,从专业的角度促进公众对人工智能的理解,并为研究人员提供讨论和参与的开放平台,从而共建计算机领域的未来。微软亚洲研究院的每一位专家都是我们的智囊团,你在这个账号可以阅读到来自计算机科学领域各个不同方向的专家们的见解。请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。也欢迎大家关注我们的微博和微信 (ID:MSRAsia) 账号,了解更多我们的研究。发布于 2021-04-09 18:47​赞同 75​​3 条评论​分享​收藏​喜欢收起​知乎用户zKk5cV​ 关注这个问题是找到网络结构和功能性能之间的关系,这可以这个领域最核心的问题,到目前为止实际上是无解的,所以深度学习才会被批评为炼金术。个人理解,找到明确的解析性的解的可能性几乎没有,因为自然界找到合理结构的方式是统计优化而不是直接设计,这和生物体的基因和功能之间的关系一样,自然选择这种优化方式是有原因的,我们应该敬畏自然,知道自然常常是实用最优算法的。也就是说,这个问题没有解析解,只有大样本的统计优化可以解决,就是autoML的思路。发布于 2018-07-26 11:48​赞同 21​​11 条评论​分享​收藏​喜欢

有关基于模型的设计(MBD)一些概念和理解(zz)_基于模型的底层软件驱动库-CSDN博客

>

有关基于模型的设计(MBD)一些概念和理解(zz)_基于模型的底层软件驱动库-CSDN博客

有关基于模型的设计(MBD)一些概念和理解(zz)

最新推荐文章于 2024-01-11 22:46:54 发布

丹阳阿豪

最新推荐文章于 2024-01-11 22:46:54 发布

阅读量1.2w

收藏

68

点赞数

12

分类专栏:

Simulink

Simulink

专栏收录该内容

3 篇文章

2 订阅

订阅专栏

http://www.matlabsky.com/thread-38774-1-1.html

本文转载于MathWorks 中国高级工程师董淑成的帖子内容。为了方便阅读,对原文进行了重新整理编辑。

之前有网友引发了一些讨论,为了方便大家进一步讨论,专门开贴,讨论基于模型的设计。题目有点大,以我的个人经历,我只能说说基于模型的嵌入式软件设计,我先抛砖引玉吧。

先胡乱问几个大问题:

什么叫基于模型的设计? 为什么要基于模型的设计? 基于模型的设计过程中,需要做什么事情? 再问几个小问题:

模型验证是否必要? 模型验证有哪些工作可以做? 模型验证是否一定需要被控对象模型? 代码生成效率如何? 底层驱动是否要建模? Embedded Coder(以前的RTW Embedded Coder)支持哪些芯片? MIL、SIL、PIL、HIL的目的和实现方式? 如何定点化? 如何做代码集成? 也希望版上的网友提出各自的问题及见解,我们一起讨论。

什么叫基于模型的设计? 这是一个很大的话题,因为本人能力所限,仅讨论使用Simulink模型开发嵌入式软件的设计过程。也就是说,我只能聊基于模型的嵌入式软件设计。

我的理解是,通过对算法建模进行软件设计的过程,都可以叫基于模型的设计。

当然,如果仅限于算法建模,把Simulink/Stateflow当做Visio使用,而不去进行其他环节的工作,这样的基于模型设计是不完整的,可能对你的开发效率不会有很大的提升。

如果想通过基于模型的设计提升软件开发团队的开发效率,提高软件品质,我觉得至少有如下几点可以考虑:

算法模型的验证 文档自动化 代码和模型的等效性验证 传统的开发过程中,我们有一个环节,需求捕获,也即,从系统需求分解出软件需求。

在基于模型的设计过程中,我们同样可以通过分析系统需求,获得软件需求。当然,根据系统需求的详细程度,我们可以考虑是否要写专门的软件需求。

在基于模型的软件设计中,我们主要关心的是系统的功能需求,或者说可以通过软件实现的功能需求。如果这部分需求在系统需求文档里已经有非常清楚的定义,那么我们可以以系统需求文档作为依据建立模型。

当然,如果系统需求不是足够清楚,那我们有必要编写专门的软件需求文档。如果不考虑Simulink/Stateflow的应用上的问题,也就是说,如果我们都是熟练的Simulink/Stateflow用户,那么建模过程的主要工作是需求分析,通俗点讲,需求弄清楚了,建模也就是非常简单的事情了。当然,建模的时候,要考虑未来的验证、实现以及后期维护的问题。

我个人的体会,这个阶段,不要着急建模,一定要先弄清需求,另外,建模的时候,模型架构非常重要。

有了模型之后,接下来要做什么事情?代码生成?

这是很多比较初级的用户容易犯的错误,犯这个错误的用户,很大程度上是因为没有弄清楚为什么要做基于模型的设计?

为什么要做基于模型的设计?我相信很多用户没有仔细考虑这个问题,很多用户做基于模型的设计的理由是:国外的公司都这么做,同行其他公司都这么做…

弄清为什么要基于模型的设计,也就是要弄清楚基于模型的设计到底可以给我们带来哪些好处?

很多人会非常自然的想到,代码生成,代码生成可以提高软件开发效率。没错,代码生成是一个很大的好处,但,代码生成不是唯一的,也不是最大的好处。

代码生成最大的好处是,算法的早期验证,之前NASA有研究表明,开发初期引入的bug,如果到了晚期才发现出来,那么修复这一的bug,会产生非常大的费用。所以,我们期望能够尽早的发现开发过程中引入的bug。

如何尽早的发现设计上的错误?传统的开发模式里,我们使用review的方式去发现错误,在质量体系ISO9001里面有定义,任何一份设计,都必须要评审。评审的目的,也就是为了发现这个阶段的错误,以防错误被带到后续的开发过程中。

而评审的效率,却是非常低下的。我想凡是参加评审的网友都会有体会。比如,我在做完一份设计之后,我会邀请我的同事来评审我的工作,而参加评审的这些同事,往往不能有足够的时间了解我的这份工作,而只能在评审会上听我介绍我做的工作,这样的评审,可能会发现一些非常明显的问题,除此之外的,很难发现问题。

评审作为一种非常传统的验证方式,并不能及时发现设计过程中引入的各种错误。而仿真,从效率上讲,要远高于评审,仿真更容易发现设计中的问题。

仿真是可以运行的,如果我们设定一些输入,运行模型之后,我们会得到相应的输出,我们很容易观测到此时的输出是否是我们期望的输出。

另外还有好处,仿真的结果是确定的,给定输入,就会得到确定的输出,当然,期望输出也是确定的。而不像评审,同样的文字,对于不同人,可能理解成不同的含义。

文档自动化

代码生成和早期验证之外,基于模型的设计,还可以给我们带来其他好处,比如文档自动化。

我们经常听到这样的说法:

我们终于把软件发布出去了,现在可以有时间补文档了… 下个月要audit了,所有同事都在补文档… 这里我要问:为什么要补文档?

补文档,我们可以从中得到两个方面的信息:

1.文档很重要,不能没有,至少从质量体系上要求我们必须有文档 2.工程师都不愿意写文档,是啊,如果愿意写文档的话,在开发过程中自然会把各类文档写起来的。

好,工程师不愿意写,开发过程中又不能少,如果计算机可以帮我们写,岂不是很美好的事情。基于模型的设计,可以帮助我们实现文档自动化,至少有相当大的一部分文档可以让计算机替我们写。

图形化设计

其实,基于模型的设计,还有一个天然的优势:图形化设计。

对于工程师来讲,图形化的东西,本身就比文字更容易理解,否则我们在软件开发过程中也不会去画流程图和状态机了。

所以总结一下,基于模型的设计可以从以下方面给我们提供便利:

图形化设计早期验证代码生成文档自动化

前面我大概论述了为什么要做基于模型的设计,或者说基于模型的设计可以给我们带来哪些好处。这些好处,最终会大大提高开发效率,并且改善软件品质。

下面,我在说说基于模型的设计(MBD)里有哪些事情要做?

刘博士说的没错,基于模型的设计,自然模型最重要,如何建模,毫无疑问是最为重要的环节。

在软件产品开发中,建模活动里,耗时最多的,就应该是需求分析了,需求分析不仅包括如何正确理解软件需求,而且要考虑如何通过模型实现,真正的画模型的时间,相比之下并不多,如果Simulink/Stateflow用的熟的话,真正打开MATLAB画模型的时间占建模阶段总时间的1/3都不到。

建模之后,接下来就是模型验证,验证,英文单词Verification,英文里面还有另外一个词Validation–确认,很多人不清楚这两个词之间的区别,通俗点讲:Verification是考察你是否正确的做了一件事,而Validation,则是考察你是否做出了正确的东西。一个强调的是过程,一个在乎的是结果。

闲话少说,咱们继续回到模型验证上来,通常模型验证包含如下活动:建模标准的检查、评审、单元测试、快速原型。(如果说的不完善,欢迎大家补充)

建模标准的检查,可以通过模型检查工具自动完成,建模标准检查的意义,和传统开发模式里C编码标准的意义一致,这里不展开了。

有关评审和单元测试,再专门开贴说吧。

模型验证之后,接下来就可以做代码生成了,有关代码生成,也专门讨论吧。 代码生成之后,需要做代码验证,基于模型的开发过程里面,SIL、PIL都是常用的代码验证方式。 在代码做完SIL或者PIL测试之后,要考虑软件集成了,即应用层软件,也就是通过Simulink模型生成的软件,和底层驱动软件之间的集成。 软件集成之后,后面的事情,基本上和传统的开发模式差不多了,当然,相对于传统的开发模式,你可以多一个HIL环节出来,不过话又说回来,即便是传统的开发模式,也一样可以有HIL这个环节的。 有关HIL的实现及目的,以后再说。

再说说模型验证的必要性。

我在进入MathWorks之后,接触过很多客户,不少客户在最初引入基于模型设计的时候,根本不在意模型验证工作,他们经常在模型编译通过之后就拿去生成代码,有了代码之后将代码下载到各种快速原型设备上去测试算法,Simulink的仿真功能基本上成了摆设。并且在这个阶段,不管我如何苦口婆心的给他们介绍模型验证的重要性,在他们那边,却总有各种各样的借口去省略模型验证环节,“项目时间太紧,模型来不及测”,“我们知道规范的开发流程,但是现在人手不够”。

当然,这类用户经常在这样折腾了一段时间之后,还是要回到模型测试上来,他们最终会发现,在HIL设备上测试算法,实在太难,当然,也有坚持的,坚持的结果就是他们所谓的基于模型的设计,开发效率比传统的开发模式高不了多少。

其实,这个问题我们可以这么去看,模型阶段的测试,我们是可以分模块进行的,而HIL上测试,基本上是集成之后的软件。比如,一个软件有10个模块,在HIL设备上,你很难分离出每个模块的bug,而如果是按模块做单元测试,则就是针对的一个具体的模块。打一个不算恰当的比方,我们都知道一块2克拉的钻石,价格肯定不是一块1克拉钻石的两倍。类似的,如果每个软件模块有2个bug,那么你从集成好的软件里去消除这20个bug,耗费的精力肯定不是从每个单元模块里去消除bug所耗精力的总和。 说白了,早期验证是非常重要的,很多软件工程的教材里都有相关的统计数据说明早期验证的重要性,对应到基于模型的开发过程,能在模型级别做的验证,一定不要拖到后续的环节中。

中国有句老话,“心急吃不了热豆腐”,“项目时间紧”或者“人手不够”不能成为我们忽略模型测试的借口。

继续说一下MBD开发过程中都有哪些验证工作(verification)要做。

模型出来并且可以编译之后,首先要做建模标准检查,这个过程使用工具(比如MathWorks公司的Simulink Verification & Validation提供的model advisor)自动化的完成,检查过后,修改模型中不符合公司建模规则的项目。

接下来,就可以进行模型评审了,也就是说,评审的模型有两个前提,一是可以编译的,二是符合公司建模规则的。这两个前提可以帮助我们消除模型中的一些低级错误,避免在评审过程中有太多的时间花费在这些错误上。因为评审是建模的工程师和其他同事共同参与的活动,做到上述两个前提,也是对其他同事工作时间的一种尊重。

评审之后,建模的工程师会修改评审中发现的问题,问题多的话,一般会要求修改之后再进行“再评审”,直到在评审中不会发现大量问题。

接下来,我们可以使用Simulink Design Verifier进行模型的结构分析,借助于Simulink Design Verifier自动生成测试用例的功能,去检查结构上是否存在问题,比如是否有不合理的逻辑设计,是否有运行不到的分支等。

再往后,就可以进行模型单元级别的功能测试了。软件开发过程中,对单元测试的要求是很高的,一般会根据应用的安全性、可靠性要求,给出测试的覆盖率要求。

这个过程中工作量最大的应该是测试用例设计以及测试向量的生成。测试用例设计,我们一般会根据需求去设计测试用例,当然,也会结合模型结构设计测试用例,这样说来,这里的测试,已经包含了黑盒测试和白盒测试。有了测试用例,如何把测试用例转换为测试向量,这也是非常重要的环节。我们知道,在MBD开发过程中,代码都可以自动生成,其他环节,我们要努力做到自动化实现。我们可以使用MATLAB脚本开发一些转换工具用于将测试用例转换为测试向量,我们还可以通过脚本实现测试过程的自动化。

测试的指标,即测试覆盖率是否达到公司的要求或者行业的要求。

单元级别的功能测试完成之后,我们自然会进行集成测试,当然,集成测试是分阶段、有步骤的,我们可以先把一些单元模块集成为组件级,进行组件级的集成测试,然后再将组件集成为系统级,进行系统级测试。集成测试和单元测试关注的内容不同,集成测试,我们更关注于单元模块之间的借口关系、调用关系等等,所以,单元测试中要求的判定覆盖率、MCDC覆盖率等,在集成测试中没有这样的要求。

条件允许的情况下,集成测试之前或者之后,可以通过快速原型的方式和实物相连,进行测试。

集成测试通过之后,我们基本上可以认为模型或者说算法是正确的了。接下来,我们就可以进行代码生成了。

代码生成之后,会跟着做SIL、PIL、HIL等测试,所有这些In-the-Loop测试都不是必须的,工程师应该根绝项目的实际情况,选择合理的测试方案,当然,建议SIL测试不要省略,原因在于这种测试的确非常方便做,并且也的确会发现一些代码生成过程中出现的问题。

前面提到模型验证,下面再说说代码生成。 代码生成的前提是模型已经是验证过的模型,或者说,是正确的模型。

正确的模型包含两层含义,模型做过足够多的验证,验证的结果都是正确的。前面提到的各种验证方式,都有必要做,对于功能测试来讲,还有必要达到足够高的覆盖率要求。

做到以上这些,就可以考虑进行代码生成工作了,代码生成是否就是按一下“Code Generation”按钮的工作呢?工程项目开发中,没那么简单,代码生成过程中,工程师要做的主要工作是数据管理工作,除此之外,还会有一些代码相关的配置,比如函数原型、比如代码文件等等。

数据管理主要是对Simulink/Stateflow模型中的两类数据进行管理,一是信号,一是参数。对应于C代码,我们可以简单的把信号对应到变量上,而参数,则是不通过程序运行而发生变化的,参数的变化,一般是通过人工调节完成的,也就是参数调节,参数调节的目的是为了选择合适的参数以得到最佳的性能。

数据管理的方式,使用的是数据对象进行数据管理,这里的“对象”二字,和我们经常听到的“面向对象编程”里面的“对象”意义相同。Simulink为用户事先定义好两个包,一个是Simulink Package,一个是mpt Package。以Simulink Package为例,包里面有类,分别为Simulink.Signal和Simulink.Parameter两个类。用户可以通过这两个类定义相应的对象(Object),然后通过类提供的属性(Property)定义数据的属性。其实这两个类里面除了属性之外,还定义了方法(Method),一般情况下,我们管理数据,使用属性就够了。

当然,不管是Simulink Package还是mtp Package,都不能完全满足用户的所有要求,所以,很多时候,需要用户定义自己的Package。依然按照面向对象里面的一些概念,我们可以从Simulink Package或者mpt Package继承并创建自己的包。所有我们关心的数据都通过数据对象的方式做了定义之后,接下来的工作,就是按下按钮,生成代码了。

因为前面预留的帖子不够多,所以,就继续在这个帖子里讨论一下自动生成的代码吧。

首先说一下大家很关心的效率问题,代码效率,我之前做过对比,比一般的工程师写的代码效率要高,当然,我相信对于那种C代码高手,一定可以写出效率更高的代码。不过我想强调的是,自动生成的代码,是可以用的,不要有任何心理障碍,毕竟,我们项目开发中的多数工程师也不是绝对的C语言高手。另外,关于效率,我最近也做过一次对比,就在这个帖子最开头提到的那个贴子里,虽然代码没有人去做编译,但从代码行数来看,和一个写了6年C代码的工程师的代码基本差不多。

再说说代码可读性的问题,很多人和我强调代码的可读性不如手写的好,我有条件的承认这一点。为什么是有条件的承认呢,我想说,如果你对模型做足够多的配置,生成的代码可读性基本上可以和手写的差不多。当然,我更想强调,在基于模型的开发过程中,我们是不读代码的(如果一定要读,那也是读那个.h文件),我们有其他方式保证代码是正确的,无须读代码。

再有一个问题,就是代码的集成问题,很多人也比较关心自动生成的代码如何集成到底层代码或者如何与其他手写代码做集成的问题,我一般会问他,如果这个模块的代码是手写的,你会怎么集成?他当然知道手写代码该怎么集成,好,自动生成的代码也同样可以集成。做代码集成的时候,我们关心的就是那个.h文件。

有关底层驱动的建模

我一直认为在产品化项目开发中,底层驱动是没有必要建模的。

原因如下: 1)底层驱动在Simulink环境下不能仿真; 2)底层驱动建模需要熟悉另外一种脚本语言——TLC; 3)产品化项目的底层软件往往很大,有些项目的底层软件甚至大于应用层软件,如此大的软件转换成Simulink下的TLC实现,不容易操作。

当然,有人会说,一旦有了底层驱动模型,就可以非常方便的实现Simulink模型到单片机hex文件的一键式实现,的确这样做貌似让整个开发过程的自动化程度得以提升,但是,不要忘记,你要开发出一个安全、可靠的底层模块库,会需要大量的时间投入,尤其在使用TLC设计的时候,TLC本身就是另外一种新的语言,同时这种语言所提供的调试环境也不尽如人意;相反,如果不使用这种一键式的模式,而是采用手工集成的方式实现自动生成的应用层代码与底层代码做集成,也是非常简单,非常轻松的事情。

总结一下,一键式的实现hex文件生成并不能明显提高开发效率,而开发出这样一个底层模块库,却需要花费大量的时间。

到MathWorks工作以来,经常被客户问到这样的问题:MATLAB的代码生成支持什么芯片?

支持什么芯片?MATLAB生成的是ANSI C代码,支持所有编译器,也就是支持所有芯片。当然,我说的是应用层代码的生成,不包括底层驱动代码。

我也知道很多人问这个问题的时候,心里面想着的是Target Support Package这样一个工具包,这个包里面的确提供了一些MCU或者DSP的底层驱动模块,借助于这些模块,我们可以生成底层代码。不过,继续强调一下,在很多工程化的项目里,这不是一个产品化的解决方案,这种方案更适合于做算法的快速验证。也正是因为这不是一个产品化的方案,所以这个产品的用户非常少,以至于MATLAB从2011a开始,不再单独销售这个模块,并不承诺以后会继续更新这个模块,这个模块连同IDE Link被打包到Embedded Coder产品中,只有你购买了Embedded Coder,你就可以使用这个模块了。

再说说In-the-Loop测试的问题

我们经常听到的有MIL、SIL、PIL、HIL等,在基于模型设计的开发过程中,是否都要做这些In-the-Loop测试?

我认为所有的In-the-Loop都不是一定要做的,不过,我非常建议不要省略SIL环节。

1)MIL,模型在环测试,在Simulink环境里,除建立控制器模型之外,还需要建立被控对象模型,讲控制器和被控对象连接起来并形成闭环,让控制器去控制被控对象。

是否一定要做这个In-the-Loop呢?或者说,是否一定要有被控对象模型呢?其实不一定,这取决于模型验证的可能方式。在不少应用里,控制器模型的输出是开关量,工程师可以很方便的通过设定输入并给出期望输出,这样的情况,被控对象是没必要的,比如,汽车电子里面的车身控制,控制一个灯的开或者关,只需要知道输出是ON或者OFF即可,没必要去做一个灯泡的模型放到Simulink里。

2)SIL,软件在环测试,软件在环测试,应该说是从模型在环测试引申过来的,区别只是把控制器的模型换成了由控制器模型生成的C代码编译成的S-function,SIL的目的是为了验证生成的代码和模型在功能上是否一致,或者说验证生成的代码和模型在功能上是否等效。

验证等效性,是否一定需要被控对象模型?不必要,既然验证生成的代码和模型的一致性,那只需要给生成代码和用于代码生成的模型相同的输入,比较它们在相同的输入条件下,输出是否一致即可。

3)PIL,PIL有两个目的,一是为了等效性验证,二是为了测量模型生成的代码在目标处理器上的运行时间。有关运行时间的测量,如果你选择的处理器足够强大,或者你非常把握目标代码的运行不会超限,那么PIL的意义就要打折扣了。

4)HIL测试的目的是为了验证控制器的,HIL过程中,会把被控对象的模型生成C代码并编译成可执行的文件放到工控机上运行,以便工控机替代真是的被控对象,然后把控制器和工控机连接起来,实现闭环控制,从控制器的角度上看,就相当于工作到实际控制系统之中。HIL经常被用于以下几种情形: a)被控对象非常昂贵,如果控制器不成熟会导致被控对象的损害; b)被控对象失效会危及人身安全; c)开发过程中,先开发出了控制器,而被控对象还没有开发出来。

优惠劵

丹阳阿豪

关注

关注

12

点赞

68

收藏

觉得还不错?

一键收藏

知道了

1

评论

有关基于模型的设计(MBD)一些概念和理解(zz)

http://www.matlabsky.com/thread-38774-1-1.html本文转载于MathWorks 中国高级工程师董淑成的帖子内容。为了方便阅读,对原文进行了重新整理编辑。之前有网友引发了一些讨论,为了方便大家进一步讨论,专门开贴,讨论基于模型的设计。题目有点大,以我的个人经历,我只能说说基于模型的嵌入式软件设计,我先抛砖引玉吧。先胡乱问几个大问题:什么叫基于模型的设...

复制链接

扫一扫

专栏目录

MBD基于模型的设计

09-25

简单介绍关于使用MATLAB/Simulink搭建模型自动生成代码的入门介绍

什么是基于模型设计(MBD)?

Suresoft China的博客

01-17

8804

因此,基于 MBD 的 SW 验证需求呈上升趋势,SureSoft 基于 ISO 26262 为基于 MBD 的 SW 提供静态和动态验证服务。特别是在汽车领域,在结构复杂的模型中,安全性很重要,定义了功能安全的国际标准 ISO 26262,以指定静态验证(例如检查模型是否符合准则)和动态验证(例如模型)模拟。用于执行基于自动代码的模型动态验证的工具 Controller Tester 是 SureSofttech 的自动化解决方案,可为在各种环境中开发的软件执行单元/集成验证。

1 条评论

您还未登录,请先

登录

后发表或查看评论

MBD_入门篇_11_Matlab程序设计

最新发布

ALongAuto的博客

01-11

455

if语法,if后面的条件表达式为真的时候,会执行if条件后面的语句command1。for循环是在for后面跟一个行向量,按照行向量的size去执行迭代的总次数,第n次迭代,行向量里的值更新为i(n)。try后面跟的命令,如果执行错误,会跳到catch后面执行。也可以只有if不带else,如果为真就执行if条件后面的语句command1。while后面的condition为真的时候,while循环就会执行,为假的时候,循环结束。按照顺序语句进行执行,最容易理解的结构,从前到后,从上到下。

MBD_入门篇_04_Matlab简介

ALongAuto的博客

12-17

436

还可以添加一些常用的文件夹在路径中,比如我们写了一套工具,我们希望想用这个工具的时候就可以直接使用,那我们就可以把这个工具的文件夹加到路径历里来。其实我们在Matlab这边显示的Workspace,它的名字应该叫Base Workspace,我们定义的变量等都会存储在这里,我们可以直接点击查看或者编辑,非常方便。加载到路径中相当于这个路径成为了我们使用的时候会去在这些文件夹中挨个去搜索我们要用的函数或者文件等,如果不加载,那我们是没办法直接使用的。可以去使用Matlab命令去定义变量,使用函数等等。

基于模型设计MBD.ppt

09-21

基于模型的设计就是解决该问题的一种方法。Matlab MBD解决方案可以使用户方便地穿梭于建模、仿真、验证与实施之间,而无需重写代码或改变软件环境。经过近几年的不断完善,这种方法已经从概念演变成实际应用中重要的开发模式。

基于模型设计(MBD)核心问题

01-24

讲诉了基于模型开发的一些核心操作流程、以及一些规范性问题

MATLAB/SIMULINK生成嵌入式代码的步骤

dp的博客

04-21

1万+

昨天参加了Mathworks公司在东南大学举办的关于MATLAB的培训,内容是关于MATLAB/SIMULINK的嵌入式代码生成以及物理建模,在这里把代码生成的步骤及一些相关内容总结一下。

嵌入式代码生成

嵌入式代码生成主要利用的是MATLAB中自带的MATLAB Coder模块,MATLAB Coder可以从MATLABcode产生可读且可移植的C/C++程序,支持多数MATLAB语言和工具...

什么是基于模型的测试?

KiroScarlet的博客

03-18

1万+

基于模型的测试属于软件测试领域的一种测试方法。MBT步骤如下:

常规测试一般是由人来设计几个特定的测试场景,然后断言测试结果。测试用例固定。缺少不确定性。基于模型的测试(Model-based Testing)是需要实现一个模型,然后制定行为和行为之间的关系以及行为和系统的关系(有限状态机),然后测试系统根据被测系统的状态、之前设置的限制条件和策略来生成很多用例(每执行一次生成的用例会不同),测...

基于模型的设计(MBD)在汽车ECU软件开发中的实践

digi2020的博客

12-09

2054

基于模型的设计(MBD)是整车厂在当前激烈的竞争环境下的最优选,但如何选择一套应用MBD、以模型为核心,且能处理从需求、设计、代码生成到测试的开发工具?点击原文了解详情。

基于模型设计

随便写写,留点痕迹

06-03

1428

基于模型设计的方法一级目录二级目录三级目录

一级目录

二级目录

三级目录

基于模型开发(MBD)中AUTOSAR架构实现

01-27

近年来,汽车行业所面临的最大挑战,是汽车上电子控制单元件数量的稳定增长以及驻留在这些控制器上的算法的复杂性。AUTOSAR

–汽车开放系统架构–已联合100多家公司,其中包含汽车制造商、供应商和工具供应商,为电子控制单元开发标准架构。2006年底,AUTOSAR

2.1版本发行,现在OEM厂商和供应商已经开始开发与AUTOSAR兼容的功能和组件并将其集成到车辆中。本文将重点讨论工程师如何在已有模型的情况下,在不需要进

simulink MBD 基于模型设计 自动代码生成之硬件驱动 参考书 供大家学习 交流

03-05

simulink MBD 基于模型设计 自动代码生成之硬件驱动 参考书 供大家学习 交流

元模型驱动--KAYA低代码开发平台Java实现(一)

chljapan的专栏

05-22

1万+

带你走进MDA的世界。--真正的模型驱动开发。

目前的建模工具很多,不过个人的观点来看,基本都跑偏了。没办法真正应用模型驱动来有效开发。

废话少说。

下面的就是MDA(KAYA)建模工具。

左侧是需要用到的元素,简单说来包括

1.Product(产品&服务--可以看作系统名称),

2.Role(角色--可以看作具体的业务表),

3.Property(属性--表...

模型驱动开发(二)

earnestliu的专栏

02-27

1562

数据库(DBMS)模型在J2EE开发中,数据持久性是一个重要的问题。通用的方法是用关系型数据库存储数据。为了存储数据,必须定义在对象模型和数据库间的对象-关系镜像。 OptimalJ用技术模式3自动从模型产生数据库模型,以此来处理对象-关系镜像。数据库模型用来建模和镜像所有的相关的数据库定义。数据库模型支持大纲、表、字段、行、外部键、主键和唯一约束。 对模型中的每一个元素,重要

如何选择架构中的底层工具?OpenMLDB 在 Akulaku 数据驱动中的应用实践给你答案

第四范式开发者社区

09-16

130

本文整理自第四范式技术日中 Akulaku 算法总监马宇翔在「高效落地AI工具链及开源生态」分论坛的演讲。

我的MBD学习之路

热门推荐

基于模型的嵌入式开发学习笔记

04-29

2万+

MBD即为Model Based Design 基于模型的设计。

 

   

国内的汽车行业使用Matlab\Simulink早已经不是什么新鲜事儿了,我还在读研的时候大家已经普遍的开始使用Matlab\Simulink来做数学模型开发、数据处理分析以及算法理论仿真。

 

   

在学校做项目的时候,那时候是用TI的DSP

2407,当时的Matlab是2007版,当时知道Simulink的库里有

谈谈基于模型的设计(Model-Based Design)

姚家湾博客

04-23

8232

本博文对基于模型设计的概念,术语和相关技术做一个梳理。

...

MBD设计模式(机器人开发,控制系统开发)

HiAI01的博客

11-12

2528

机器人开发设计MBD设计模式(机器人开发,控制系统开发)掌握基于模型设计的六轴机械臂控制系统的开发方法掌握六轴机械臂的知识和控制器的软硬件实现

MBD设计模式(机器人开发,控制系统开发)

MBD是一种世界先进的工程开发方法

本课程采用基于模型设计(MBD)的工程开发方法,实现对六轴机械臂系统的开发,包括六轴机械臂的知识和控制器的软硬件实现,有助于设计串联、并联的机械臂、康复医疗机器人等其它机电设备的电控系统。目前,这种世界先进的开发方法,国际上一流企业都在用,如Airbus、Boston Dynamics、

基于模型设计mbd实例

07-29

基于模型设计(Model-based Design,MBD)是一种软件开发方法,通过使用数学模型和仿真工具,在软件开发的早期阶段,将系统需求和设计规范转化为可执行的模型。然后,通过模型验证、自动代码生成和测试自动化等过程...

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

丹阳阿豪

CSDN认证博客专家

CSDN认证企业博客

码龄5年

暂无认证

30

原创

6万+

周排名

132万+

总排名

13万+

访问

等级

1339

积分

1218

粉丝

127

获赞

20

评论

795

收藏

私信

关注

热门文章

MATLAB如何画漂亮的图

14011

有关基于模型的设计(MBD)一些概念和理解(zz)

12378

如何提高simulink运行速度

11308

MATLAB的MEX文件编写和调试

9931

MATLAB的MEX文件编写和调试

7178

分类专栏

Autosar软件架构

8篇

TCU相关知识

7篇

数学知识

1篇

白车身试验

1篇

MATLAB

15篇

Simulink

3篇

C语言

15篇

混合动力

1篇

最新评论

Autosar 网络管理总结

桃源乐游:

意思是被动唤醒时候,因为被唤醒ecu本身不用承担主动唤醒其他ecu的业务,所以不用刻意在意先发是否nm报文(但是实际场景有时候也根据需求要求先发nm)。主动唤醒一般严格要求先发nm报文

Autosar 网络管理总结

dinfy:

你了解到了吗

Autosar 网络管理总结

红色推土机:

引用「总线上其他节点有唤醒网络的请求,NM报文和APP报文无先后顺序」

被唤醒的其他节点不是先发NM再发应用报文?

Autosar 网络管理总结

可可QAQ~:

我有一个问题,那网络管理报文的byte2这个字节呢

用Matlab做论文图片的一些总结

weixin_54223975:

太厉害了真的很实用

最新文章

ECU Bootloader自学笔记

Autosar 网络管理总结

结构体、函数指针、数组组合使用的一个例子

2022年4篇

2021年20篇

2020年4篇

2019年25篇

目录

目录

分类专栏

Autosar软件架构

8篇

TCU相关知识

7篇

数学知识

1篇

白车身试验

1篇

MATLAB

15篇

Simulink

3篇

C语言

15篇

混合动力

1篇

目录

评论 1

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

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

余额充值