手搓一个Agent#Datawhale 组队学习Task3
书接上回,首先回顾一下Task2的一些补充:
Task2主要任务是从零预训练一个tiny-llama模型,熟悉一下Llama的模型架构和流程。然后测试一下模型的效果。总的来说,因为某些未知的原因,loss一直没有降下去,导致最终效果一般般。
Task2知识点补充和解读
contextlib库
from contextlib import nullcontext
contextlib 是 Python 标准库中的一个模块,它提供了一系列工具来帮助开发者更方便地使用上下文管理协议(context management protocol)。
nullcontext 是 Python 中 contextlib 模块提供的一个上下文管理器,它主要用于不需要执行任何特定的进入或退出操作的情况。
datetime库
from datetime import datetime
datetime 是 Python 的标准库之一,提供了处理日期和时间的强大工具。
datetime 类是 datetime 模块中最常用的类之一,它代表了一个具体的日期和时间。你可以用它来进行日期和时间的运算,获取当前时间,格式化日期等。
datetime 库和 time 库的比较
datetime 库和 time 库都是 Python 中用于处理日期和时间的标准库,但它们各有侧重,适用于不同的应用场景。
datetime 库更适合于需要高级日期时间处理的应用场景,而 time 库则更适合于简单的计时和时间戳操作。
functools库
from functools import partial
functools 是 Python 标准库中的一个模块,它提供了多种工具来帮助开发者更高效地编写函数。partial 函数可以固定一个函数的一部分参数,从而创建一个新的函数。
AdamW优化器
AdamW 是一种广受欢迎的优化算法,它是在经典的 Adam 优化器基础上发展而来,引入了权重衰减(Weight Decay)机制。
Adam(Adaptive Moment Estimation)是一种自适应学习率优化算法,它结合了 AdaGrad 和 RMSProp 的优点。Adam 使用了动量(momentum)和自适应学习率来更新参数,其中动量用于加速收敛速度,自适应学习率用于调整不同参数的学习速率。
AdaGrad 没有使用动量的概念,而是直接根据历史梯度的平方来调整学习率。学习率单调递减:随着训练的进行,学习率会逐渐减小,最终可能变得太小。
动量机制:RMSProp 使用了指数移动平均来估算梯度的平方,从而避免了 AdaGrad 中学习率单调递减的问题。
- AdaGrad:适合处理稀疏梯度的问题,但由于学习率单调递减,不适合长期训练。
- RMSProp:通过指数移动平均解决了 AdaGrad 中学习率单调递减的问题,适合处理动态变化的梯度。
- Adam:结合了 AdaGrad 和 RMSProp 的优点,并通过偏置校正机制提高了初始阶段的收敛速度,是目前最常用的优化算法之一。
在使用 AdamW 优化器的情况下,是否需要使用 Dropout 主要取决于您的具体应用场景和模型设计的需求。
Dropout 和 Weight Decay 的区别:
-
Dropout
- 定义:Dropout 是一种正则化技术,通过随机“丢弃”一部分神经元(即设置为 0),从而降低模型的复杂度,防止过拟合。
- 作用:Dropout 可以使模型的各个部分相互独立地学习特征,从而提高模型的鲁棒性。
- 适用场景:通常用于深层网络中,特别是在训练非常大的模型时,Dropout 可以帮助模型更好地泛化到未见过的数据。
-
Weight Decay
- 定义:Weight Decay 是一种正则化技术,通过对模型的权重施加惩罚(通常为 L2 正则化),减少模型的复杂度。
- 作用:Weight Decay 通过使权重趋向于较小的值,从而降低模型的整体复杂度。
- 适用场景:几乎所有的模型都可以从中受益,特别是在数据集较小或者模型容量很大的情况下。
学习率调度器scheduler:
学习率调度器(Learning Rate Scheduler)是深度学习训练中用来动态调整学习率的技术。通过调整学习率,可以提高模型的训练效率和性能。在训练初期使用较高的学习率可以加快收敛速度,在后期精细调整参数,提高训练效率。
余弦退火(Cosine Annealing)学习率调度是一种动态调整学习率的技术,它根据余弦函数的周期性变化来调整学习率。尤其适合需要平滑地调整学习率的场景。
一般建议预热迭代次数为总迭代次数的 5% 到 10% 左右。
退火开始的迭代次数通常在训练的中期到后期,一般建议设置为总迭代次数的 80% 左右。
初始学习率取决于模型的复杂度和数据集的大小。一个常见的初始学习率设置为 0.001。根据模型规模和数据集大小Llama技术报告里面,初始学习率可能在 1e-4 到 5e-5 之间。
最小学习率应该设置得足够小,以防止在训练后期学习率仍然过高而导致的振荡。通常为初始学习率的十分之一。
我又重新跑了一次,根据学习率调度修改了一些参数,等结果更新,希望这次可以取得一个比上次更有的结果。
Task3.Tiny-Agent
论文:《REACT: SYNERGIZING REASONING AND ACTING IN LANGUAGE MODELS》
我们先来看一下这篇论文主要讲了什么。
摘要:该论文介绍了一种名为ReAct(Reason+Act)的新方法,它探索了如何使大型语言模型(LLMs)以交错方式生成推理轨迹和特定任务动作,以此增强推理与行动间的协同效果。ReAct通过推理来指导和更新行动计划,并通过实际行动与外部资源(如知识库)互动获取信息。这种方法在多种语言理解和决策制定任务中进行了测试,显示出了比现有技术更好的性能,并提高了模型的可解释性和可信度。特别是在HotpotQA和Fever任务中,ReAct减少了推理错误,并产生了更容易理解的结果;而在ALFWorld和WebShop这两个互动决策制定基准测试中,ReAct仅需少量示例就能显著提高成功率,超越了传统的模仿和强化学习方法。
接下来我们开始手搓Agent的代码实现:
Step 1: 构造大模型
这里我们选择了书生谱语的开源InternLM2作为我们的Agent模型。InternLM2是一个基于Decoder-Only的通用对话大模型,可以使用transformers库来加载InternLM2模型。
Step 2: 构造工具
我们在tools.py文件中,构造一些工具,比如Google搜索。在这个文件中,构造一个Tools类。在这个类中,我们需要添加一些工具的描述信息和具体实现方式。
Step 3: 构造Agent
我们在Agent.py文件中,构造一个Agent类,这个Agent是一个React范式的Agent,我们在这个Agent类中,实现了text_completion方法,这个方法是一个对话方法,我们在这个方法中,调用InternLM2模型,然后根据React的Agent的逻辑,来调用Tools中的工具。
Step 4: 运行Agent
在这个案例中,使用了InternLM2-chat-7B模型, 如果你想要Agent运行的更加稳定,可以使用它的big cup版本InternLM2-20b-chat,这样可以提高Agent的稳定性。
相关文章:
手搓一个Agent#Datawhale 组队学习Task3
书接上回,首先回顾一下Task2的一些补充: Task2主要任务是从零预训练一个tiny-llama模型,熟悉一下Llama的模型架构和流程。然后测试一下模型的效果。总的来说,因为某些未知的原因,loss一直没有降下去,导致最…...
基于SpringBoot+Vue+MySQL的在线酷听音乐系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展,网络已成为人们日常生活中不可或缺的一部分。在线音乐服务因其便捷性和丰富性,逐渐成为用户获取音乐内容的主要渠道。然而,传统的音乐播放平台往往存在歌曲资源有限…...
大数据实时数仓Hologres(一):Hologres 简单介绍
文章目录 Hologres 简单介绍 一、什么是实时数仓 Hologres 二、产品优势 1、专注实时场景 2、亚秒级交互式分析 3、统一数据服务出口 4、开放生态 5、MaxCompute查询加速 6、计算存储分离架构 三、应用场景 搭建实时数仓 四、产品架构 1、Shared Disk/Storage &am…...
【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库
【鸿蒙HarmonyOS NEXT】数据存储之分布式键值数据库 一、环境说明二、分布式键值数据库介绍三、示例代码加以说明四、小结 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、分布式键值数据库介绍 KVStore简介: 分布式键值数据库…...
基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本儿童预防接种预约微信小程序可以实现管理员和用户。 1、管理员功能有个人中心,用户管理,儿童信息管理,疫苗信息管理,儿童接种管理&#x…...
计算物理精解【8】-计算原理精解【5】
文章目录 logistic模型多元回归分析多元回归分析概览1. 多元回归的概念与重要性2. 多元回归在实际应用中的例子3. 多元回归在预测和解释数据中的优势和局限性4. 多元回归的优缺点及改进建议 多元线性回归分析详解一、原理二、性质三、计算四、例子与例题五、应用场景六、优缺点…...
【Linux】 tcp | 解除服务器对tcp连接的限制 | 物联网项目配置
一、修改tcp连接限制 1、编辑 vi /etc/sysctl.conf 2、内容 net.ipv4.tcp_keepalive_intvl 75 net.ipv4.tcp_keepalive_probes 9 net.ipv4.tcp_keepalive_time 7200 net.ipv4.ip_local_port_range 1024 65535 net.ipv4.ip_conntrack_max 20000 net.ipv4.tcp_max_tw_bucket…...
如何隐藏Windows10「安全删除硬件」里的USB无线网卡
本方法参照了原文《如何隐藏Windows10「安全删除硬件」里的USB无线网卡》里面的方法,但是文章中的描述我的实际情况不太一样,于是我针对自己的实际情况进行了调整,经过测试可以成功隐藏Windows10「安全删除硬件」里的USB无线网卡。 先说一下…...
【QT Quick】基础语法:导入外部JS文件及调试
在 QML 中,可以使用 JavaScript 来实现业务逻辑的灵活性和简化开发。接下来我们会学习如何导入 JavaScript 文件,并在 QML 中使用它,同时也会介绍如何调试这些 JavaScript 代码。 导入 JavaScript 文件 在 QML 中导入 JavaScript 文件的方式…...
【质优价廉】GAP9 AI算力处理器赋能智能可听耳机,超低功耗畅享未来音频体验!
当今世界,智能可听设备已经成为了流行趋势。随后耳机市场的不断成长起来,消费者又对AI-ANC,AI-ENC(环境噪音消除)降噪的需求逐年增加,但是,用户对于产品体验的需求也从简单的需求,升…...
用Flutter几年了,Flutter每个版本有什么区别?
用Flutter几年了,你知道Flutter每个版本有什么区别吗?不管是学习还是面试我们可能都需要了解这个信息。 Flutter 每个版本的用法基本都是一样的,每隔几天或者几周就会更新一个版本, 2018 年 12 月 5 日发布了1.x 版本&#…...
解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题
在使用unique_ptr声明成员变量后,我习惯性地在初始化构造列表中进行如下构造: 注意看,我将m_menuBtnGroup的父类指定为ui->center_menu_widget,这便是导致崩溃的根本原因,解决办法便是先用this初始化,后…...
语言的变量交换
不用第三个变量交换两个变量在面试题或者笔试题中无数次被提到,事实上,有些答案是理论性的,不是准确的。以整型为例,如下对比不同交换方式的差异。 不同的交换方式 利用中间变量c a; 00C02533 8B 45 F8 mov eax,dword ptr [a] 0…...
【muduo源码分析】「阻塞」「非阻塞」「同步」「异步」
欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言何为「muduo库」安装muduo库阻塞、非阻塞、同步、异步数据准备数据准备 引言 从本篇博客开始,我会陆续发表muduo库源码分析的相关文章。感谢大家的持续关注!!…...
顶顶通呼叫中心中间件-机器人话术挂机后是否处理完成事件
前言 问题:机器人放音的过程中,如果用户直接挂机就会继续匹配下一个流程,如果匹配上的是放音节点,还会进行放音,那么在数据库表中就会多出一条放音记录。 解决方法 一、话术添加一个全局挂机节点 需要在话术中添加一…...
Springboot Mybatis 动态SQL
动态SQL <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.wzb.SqlImprove2024…...
ORM的了解
什么是ORM?为什么要用ORM?-CSDN博客 C高级编程(99)面向资源的设计思想(ORM)_c orm-CSDN博客 ORM:Object-Relational-Mapping 对象关系映射 -------------------------- 我想对数据库中的表A进行增删改…...
关于大模型的10个思考
9月28日,第四届“青年科学家50论坛”在南方科技大学举行,美国国家工程院外籍院士沈向洋做了《通用人工智能时代,我们应该怎样思考大模型》的主题演讲,并给出了他对大模型的10个思考。 以下是他10个思考的具体内容: 1…...
CFR( Java 反编译器)---> lambda 表达式底层实现机制
一、安装教程 CFR(Class File Reader)是一个流行的Java反编译器,它可以将编译后的.class文件或整个.jar文件转换回Java源代码。以下是CFR的下载和使用教程: 下载CFR 访问CFR的官方网站或GitHub仓库:CFR的最新版本和所…...
《C++多态性:开启实际项目高效编程之门》
在 C的广阔编程世界中,多态性是一个强大而富有魅力的特性。它为程序员提供了极大的灵活性和可扩展性,使得代码能够更加优雅地应对复杂的业务需求。在实际项目中,理解和正确应用 C的多态性至关重要,它可以显著提高代码的质量、可维…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
