RAG 与微调在大模型应用中如何抉择

RAG模型选择:根据任务需求选择合适的模型 这个函数接受一个问题作为输入,利用RagModel和生成答案。 阅读详情

随着大型语言模型热度的不断升温,越来越多的开发者和企业投身于基于这些大模型的应用程序开发中。然而,面对预训练基座模型未能达到预期的表现时,如何提升应用程序的性能就成为了一个迫在眉睫的问题。我们终将会问自己:为了优化结果,RAG (检索增强生成) 和 Fine-Tuning (微调) 怎么选?本文将探讨 RAG 和微调在各个维度之间的微妙差别,发掘它们的适用场景。

RAG 和 Finetuning 方法介绍

RAG 技术

RAG (Retrieval-Augmented Generation, 检索增强生成) 是一种结合了检索和生成能力的 NLP 技术。它首先从一个大型的文档数据库中检索出与输入查询最相关的文档,然后利用这些检索到的文档作为额外的上下文信息,辅助生成模型生成更准确、更丰富的回答。RAG 模型通过这种方式结合了 Retrieval (检索) 的精确性和 Generation (生成) 模型的创造性,旨在改善模型对复杂查询的回答能力,特别是在需要广泛背景知识进行回答的场景中。RAG 使得模型不仅依赖于其内部知识,还能动态地利用外部信息源来增强其回答的准确度和相关性。

rag1.png

Fine-Tuning 技术

Fine-Tuning (微调) 是机器学习和 NLP 领域的一个核心概念,指的是在一个已经预训练好的模型基础上进行微调,使其更好地适应特定任务或数据集的过程。这种方法在大语言模型中十分常见,因为它允许开发者利用在大量数据上预训练的模型 (如BERT、GPT等) 的通用知识,通过在特定任务的较小数据集上进行进一步训练,来快速提高模型在这个任务上的性能。通过微调,可以根据我们的数据调整模型的权重,使其更适合我们应用程序的独特需求。

fineturning.png

抉择方法论

做出合理抉择的重要性

RAG和微调都是增强基于 LLM 应用性能的强大技术,但它们解决优化过程的不同方面,所以做出合理的抉择至关重要。RAG和微调之间的细微差别涵盖了模型架构、数据需求、计算复杂性等方面,忽视这些细节可能会使项目进度和预算脱轨。

方法选择错误可能会导致:

  • 在特定任务的场景中,由于模型性能不佳,导致输出结果与理想结果相去甚远。
  • 如果使用的技术没有对使用情况进行针对性优化,模型训练和推断的计算成本会大幅增加。
  • 如果后续转向不同的技术,需要额外的开发和迭代时间。
  • 如果选择过于复杂的适应方法,模型的可解释性会受到影响。
  • 由于大小或计算约束,将模型部署到生产环境中存在困难。

灵魂六问

1. 用例需要访问外部数据源吗?

面对一个大模型在判断选择微调还是使用 RAG 时,一个关键考虑因素是应用程序是否需要访问外部数据源。如果答案是肯定的,那么 RAG 可能是更好的选择。

RAG 旨在通过从知识来源检索相关信息,然后生成响应来增强大模型的能力。这使得这种技术非常适用于需要查询数据库、文档或其他结构化和非结构化数据存储库的应用程序。检索器和生成器组件可以优化以利用这些外部来源。

相比之下,虽然可以对大模型进行微调以学习一些外部知识,但这需要一个大型的标记数据集,其中包含来自目标领域的问答对。随着基础数据的变化,这个数据集必须进行更新,这使得它在数据源频繁变化的情况下变得不切实际,微调过程也没有明确地对涉及查询外部知识的检索和推理步骤进行建模。

因此,如果应用程序需要利用外部数据源,使用RAG 技术可能比仅仅通过微调来“内置”所需的知识更有效和可扩展。

2. 需要修改模型的行为、写作风格或领域特定知识吗?

另一个非常重要的考虑因素是需要模型调整其行为、写作风格或为特定领域的应用量身定制回答的程度。微调在使大模型适应特定细微差别、语调或术语方面表现出色,如果希望模型听起来更像金融专业人士,或者以鲁迅风格写作,或者使用特定行业的专用术语进行表达,那么在这些数据基础上进行定制可以实现更好的效果,影响模型行为的能力对于需要与特定风格或领域专业知识保持一致的应用程序至关重要。

RAG 技术虽然在整合外部知识方面很强大,但主要专注于信息检索,并不会根据检索到的信息固有地调整其语言风格或领域特定性。它会从外部数据源中提取相关内容,但可能不会展现出经过精细调整的模型所能提供的定制细微差别或领域专业知识。

因此,如果应用程序需要专业的写作风格或与特定领域的术语和惯例深度契合,微调提供了更直接的实现途径。它通过定制化确保与特定受众或专业领域真正共鸣,确保生成内容的真实感。

3. 对于 “幻觉” 的容忍程度如何?

大模型的一个缺点是在使用过程中产生不可控的 “幻觉”,即编造没有现实基础的事实或细节。在精确性和真实性至关重要的应用场景中,这可能会带来比较严重的问题。

微调可以通过将模型基于特定领域的训练数据来一定程度上减少幻觉。然而,当面对不熟悉的输入时,模型仍可能会制造虚假的回应。需要重新训练以持续减少幻觉回复。

相比之下,RAG 由其特性决定天生更不容易产生幻觉,因为相关回答会基于检索到的依据。检索器在生成器构建答案之前从外部知识源中识别相关事实。这一检索步骤充当事实核查机制,降低了大模型产生虚构内容的可能,生成器会一定程度受限于合成受检索上下文支持的回应。

因此,在面对幻觉限制严格的应用场景中,RAG 系统提供了内置机制来最小化幻觉。

4. 可供使用的标记后训练数据有多少?

在选择 RAG 和微调之间时,还需要考虑手头拥有的领域或任务特定的标记训练数据的数量。

对大模型进行微调时,严重依赖于可用的标记数据的质量和数量。丰富的数据集可以帮助模型深入理解特定领域的内涵、复杂性和独特模式,从而使其能够生成更准确和与上下文相关的响应。然而,如果使用的是有限的数据集,微调可能带来的改进可能是微不足道的。在某些情况下,内容有限的数据集甚至可能导致过拟合,即模型在训练数据上表现良好,但丧失了原本具有的通用能力。

相反,RAG 与训练数据无关,因为利用的是外部知识源来检索相关信息。即使没有大量标记的数据集,RAG 仍然可以通过访问和整合来自外部数据源的见解来展现出色表现。检索和生成的结合确保系统保持了解,即使场景特定的训练数据很少。

在实际中,如果拥有大量从场景获取到的复杂性标记数据,微调可以提供更贴合和精细的模型行为。但在数据有限的情况下,RAG 提供了一个强大的替代方案,通过其检索能力确保应用程序保持数据驱动和上下文语境。

5. 数据是静态的还是动态的?

在选择 RAG 和微调之间时,还有一个需要考虑的基础方面是数据的动态性,数据更新频率如何,模型保持最新状态有多重要?

在特定数据集上微调模型意味着模型的知识范围变成了训练时数据的静态快照。如果数据经常更新、改变或扩展,很快就会使模型过时。为了在这样动态的环境中保持模型的时效性,就需要经常重新训练它,这个过程可能既耗时又资源密集。此外每次迭代都需要详细测试,以确保更新后的模型在不同场景下仍然表现良好,并且没有产生新的偏见或理解上的偏差。

比较而言,RAG 在动态数据环境中具有优势。它的检索机制不断查询外部来源,确保生成响应所使用的信息是最新的。随着外部知识库或数据库的更新,RAG 可以无缝集成这些变化,保持其相关性,而无需频繁重新训练模型。

如果当前正在应对快速发展的数据格局,RAG 提供了一种传统微调很难实现的灵活性。通过始终与最新数据保持连接,RAG 确保生成的响应与当前信息状态保持一致,使其成为动态数据场景的理想选择。

6. 对大模型在应用过程中的可解释性要求如何?

大模型虽然能力强大,但操作方式类似黑匣子,其响应背后的推理决策难以理解。仅着眼于模型内部吸收数据集的信息,很难确定每个响应的确切来源或推理过程。这可能会让开发人员或用户难以信任模型的输出,特别是在理解答案背后的“为什么”至关重要的关键应用中。

另一方面,RAG 系统提供了一定程度的透明度,这种透明度通常不会出现在微调后的模型中。考虑到 RAG 的两步性质 “先检索后生成” ,用户可以窥视这个过程。检索组件允许检查选择哪些外部文档或数据点相关。这提供了一系列有形的证据或参考资料,可以对其进行评估,从而理解构建回应的基础。在需要高度可靠性的应用程序中,或者在需要验证生成内容的准确性时,追溯模型对特定数据源的回答的能力是非常宝贵的。

如果透明度和解释模型响应基础是优先考虑的话,RAG 提供了明显的优势。通过将响应生成分解为不同阶段,并允许洞察其数据检索,RAG 促进了对其输出的更大信任和理解。

抉择总结

参考指标RAG微调
外部数据源✅❌
修改模型行为❌✅
应对 “幻觉”✅❌
庞大的训练数据❌✅
数据偏动态✅❌
数据可解释✅❌

额外补充

可扩展性

随着模型应用的深入和需求的演变,可扩展性方面也值得关注。鉴于 RAG 的模块化特性,尤其是在知识库增长的情况下,可能会提供更直接的可扩展性。另一方面,经常微调模型以满足不断扩大的数据集可能会对计算能力提出要求。

时效性

如果应用程序要求实时或接近实时的响应反馈,那么就需要考虑不同技术引入的延迟因素。与基于内部知识生成响应的微调相比,会在生成响应之前检索数据的 RAG 可能会导致更多延迟。

可集成性

如果企业已经建立了某些基础性设施,无论是数据库、云服务还是用户界面,RAG 或微调与现有组件的兼容性都可能影响选择。

可维护性

可维护性角度需要结合应用程序的定位和企业的布局考虑,RAG 可能需要对数据库和检索机制进行维护,而微调则需要持续的训练工作,特别是如果数据或需求发生变化时候。

可靠性

虽然 RAG 可以从外部数据来源获取信息,并且可以应对各种问题,但经过高质量微调的大模型在某些领域可能提供更有效的结果。

用户友好性

企业需要考虑最终用户及其需求,如果他们需要详细的、有参考支持的答案,RAG 可能更有效;如果他们重视速度和领域专业知识,那么一个经过微调的大模型可能更合适。

投入成本

微调可能花销更大,特别是对于大参数的模型而言。但在过去的几个月里,由于 QLoRA 等微调技术的出现,成本已经显著下降。建立 RAG 可能需要较大的初始投资,包括集成、数据库访问,甚至可能还有对外部知识库的定期维护等等。

合规性

存储和从外部数据库检索数据可能会引发隐私问题,特别是对于敏感数据。另一方面,一个经过高质量微调的大模型,虽然不会查询实时数据库,但仍可能根据其训练数据产生输出,这可能会引起其自身的道德问题。

RAG 与微调的未来

其实 RAG 与微调技术并不是两个对立面,它们既可以独立使用,也可以共同工作,特别是在企业计划塑造独有标签的应用程序的时候。

通过微调可以确保对客交互终端与企业的品牌、常用语及业务知识保持一致,处理大多数典型的客户问答场景。然后,RAG 可以作为一个补充支持,用于更具动态性或特定的查询场景,确保终端可以从最新的企业文件或数据库中获取信息,从而最大程度地减少错误。通过整合这两种方法,企业可以提供全面、及时和品牌一致的客户认可体验。

融合发展.png

结语

在 RAG 和微调之间抉择需要对特定应用程序的独特需求和优先事项进行谨慎评估,并不存在一种适合所有情况的解决方案,成功之道是将优化方法与任务的具体要求相匹配。需要注意的是避免先入为主的假设和思维定式,像任何其他技术一样,它们的适用性取决于具体的工作,手段和目标的不匹配会阻碍项目进展。通过评估 “灵魂六问” 中的关键标准,组织可以就最佳实践进行决策。在某些情况下,利用 RAG 和微调的混合方法可能是更好的选择。

​

如何学习大模型

现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。

作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。

我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。

在这里插入图片描述

二、AI大模型视频教程

在这里插入图片描述

三、AI大模型各大学习书籍

在这里插入图片描述

四、AI大模型各大场景实战案例

在这里插入图片描述

五、结束语

学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。

再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。

因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。

DIKW模型实战:用Obsidian打造个人知识库的5个关键步骤 本文详细介绍了如何利用DIKW模型在Obsidian中构建高效个人知识库的5个关键步骤,从数据收集到智慧应用的全流程实践。通过标记系统、信息加工引擎和知识结晶方法,帮助知识工作者实现从原始数据到决策智慧的认知跃迁,提升个人知识管理效率。 阅读详情

相关推荐

XGBoost详解(原理篇)

XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。Note:关于Boosting算法详见博文集成学习详解_tt丫的博客-优快云博客XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。

tt丫的博客 7万+

大模型的微调和RAG的分别是什么?

通用大模型存在一定的幻觉问题,通过把企业私有的领域数据知识喂给通用大模型,从而降低了大模型的幻觉,这就是所谓的企业私有大模型,从技术层面来讲,实现企业私有大模型有2个技术手段:微调(Fine-tuning)、RAG(Retrieval Augmented Generation)检索增强生成。Fine-tuning 是什么?‍‍‍‍RAG是什么?‍‍‍‍‍‍‍两者有什么区别?‍‍‍‍‍‍‍‍。

m0_59164520的博客 2412

Perplexity SPACE沙箱平台:安全AI开发环境实战解析

沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。

weixin_29029995的博客 275

大模型优化:RAG还是微调?

在这篇博文中,我们将深入探讨区分 RAG 的细微差别以及跨各个维度的微调,在我看来,这些细微差别对于确定特定任务的最佳技术至关重要。

探索人工智能领域 5866

基因家族的鉴定-基于Windows系统上的HMMER

基因家族的鉴定-基于Windows系统上的HMMER。

liangjinghui123的博客 3256

模拟ic入门——设计一个单极运放(一)单级运算放大器设计基础

主要介绍了单级运放的基本理论和使用场景

qq_64956710的博客 3750

一文搞懂微调技术和RAG技术区别

▼最近直播超级多,预约保你有收获今晚直播:《大模型ChatGLM3应用案例实战》—1—为什么要做微调和RAG的对比?通用大模型存在一定的幻觉问题,通过把企业私有的领域数据知识喂给通用大模型,从而降低了大模型的幻觉,这就是所谓的企业私有大模型,从技术层面来讲,实现企业私有大模型有2个技术手段:微调(Fine-tuning)、RAG(Retrieval Augmented Generation)检...

musicml的博客 6125

Cesium中级开发教程之五十二:气泡弹窗

支持多种交互方式触发气泡弹窗显示,如鼠标悬停、点击地图上的特定元素(像实体、标注、模型等)。例如,当用户鼠标悬停在一个表示城市的点上时,弹出显示该城市名称、人口等信息的气泡。:依据特定的数据条件或业务逻辑触发。比如,当某个区域的气象数据达到一定阈值时,自动弹出显示相关气象预警信息的气泡。

665

RAG 与微调在大模型应用中如何抉择,大模型入门到精通,收藏这篇就足够了!

随着大型语言模型热度的不断升温,越来越多的开发者和企业投身于基于这些大模型的应用程序开发中。然而,面对预训练基座模型未能达到预期的表现时,如何提升应用程序的性能就成为了一个迫在眉睫的问题。

2301_81940605的博客 799

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

Oracle 从入门到精通系列(入门篇)1.1-Oracle 数据库发展史

LuciferLiu_DBA 2191

保姆级教程:如何将仅限客户端使用的免费大模型(Gemini、Antigravity、Qwen Code、Kiro 等)转为任何应用可调用的 OpenAI 兼容标准接口

大模型 API 费用太贵?💸 这篇文章分享一个薅羊毛神器,能把 Gemini、Qwen Code、Kiro 等客户端专属的免费大模型转换成标准 OpenAI 兼容接口 🔌。支持多协议互转、账户池管理、Web 管理界面,Docker 一键部署,零成本调用 Claude Opus 4.5、Gemini 3 Pro 等高级模型 ✅

XiaoqiangClub的博客 1038

RAG还是微调?为您的大型语言模型找到正确路径

RAG (Retrieval-Augmented Generation, 检索增强生成) 是一种结合了检索和生成能力的 NLP 技术。它首先从一个大型的文档数据库中检索出与输入查询最相关的文档,然后利用这些检索到的文档作为额外的上下文信息,辅助生成模型生成更准确、更丰富的回答。RAG 模型通过这种方式结合了 Retrieval (检索) 的精确性和 Generation (生成) 模型的创造性,旨在改善模型对复杂查询的回答能力,特别是在需要广泛背景知识进行回答的场景中。

2401_84204207的博客 1243

【Leetcode】269.火星词典(Hard)

应用拓扑排序

明朗晨光的专栏 777

RAG还是Fine-tuning?大模型应用的“生死抉择”,选错路,白干一年

微调大语言模型是利用特定任务或领域的定制数据集,对预训练模型进行调整;而检索增强生成(RAG)则将检索系统与生成模型相结合,动态地将外部的、最新的知识融入生成结果中。

m0_59235245的博客 1136

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

RAG检索增强生成和大模型微调的抉择

“ RAG和微调即相似,又不完全相同,它们在能力上是互补的。”前排提示,文末有大模型AGI-优快云独家资料包哦!很多人会奇怪RAG和微调有什么关系,而对RAG和微调了解的人应该都明白为什么会把RAG和微调放在一块讨论。有些人说有了RAG就不需要微调,而另一些人说有了微调就不需要RAG,这到底是怎么回事?RAG和微调之间到底存在什么样的恩恩怨怨?RAG与微调作者在第一次看到RAG和微调的标题时,也是一脸懵逼;RAG和微调有什么关系,它们完全是两种不同的技术,为什么会被放在一块讨论?而随着对大模型了解的加深,

2301_76161259的博客 1222

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【AI大模型】RAG检索增强生成和大模型微调的抉择

很多人会奇怪RAG和微调有什么关系,而对RAG和微调了解的人应该都明白为什么会把RAG和微调放在一块讨论。 有些人说有了RAG就不需要微调,而另一些人说有了微调就不需要RAG,这到底是怎么回事?RAG和微调之间到底存在什么样的恩恩怨怨?

2401_85327249的博客 968

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【RAG+通用大模型】 or 【RAG+微调大模型】?企业知识库落地方案如何抉择?

当下,企业在做垂直应用方案落地时,会在上难以抉择。有人认为,基于“通用”大模型的RAG 知识库方案就能实现业务场景。而有时会发现,仍然无法满足预期要求,而到底什么时候才应该选择微调,而不是优化我的 RAG 方案?这个界限如何找?“通用”大模型:指的没有做过微调的大模型,比如大家熟知的 gpt-4、Qwen、Baichuan、Llama 等等。的确,这个界限很难找,因为你也不知道,是目前你的 RAG 方案本身问题,还是说应该微调的问题。本文将针对这个困惑给予一些建议,希望对你有帮助。

m0_59235245的博客 875

AI Agent开发:RAG与微调,该如何抉择?

在当今人工智能飞速发展的时代,AI Agent的开发成为了众多企业和开发者关注的焦点。而在AI Agent的开发过程中,RAG(Retrieval-Augmented Generation)和微调是两种常见的技术手段,它们看似都能提升模型对特定任务的处理能力,但实际上却有着本质的区别。

2301_81888214的博客 875
上一篇: [书籍推荐] 一书让你进入大语言模型的世界之《大语言模型综述》附pdf
下一篇: 几种Word Embedding技术详解
AI_小站
博客等级 码龄3年 6255粉丝 1154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值