机器学习中的数学底蕴与设计模式
在说机器学习设计模式之前,想多说几句,在进入软件行业最初的10年,那时候耳熟能详的基本就是多线程编程,互斥同步锁,设计模式,OOA,OOP,常规数组,tree,图的数据结构及相关网络编程等。那时高等数学总觉得没有太多用武之地,慢慢的开始了解机器学习,你会发现数学在机器学习中占有举足轻重的地位。数学好的人,机器学习上手非常快,并且你不会浮于表面,只会那些所谓的 fine tune,我不是说 fine tune不重要,这件事肯定要做,只是现阶段是人工来完成,但未来 fine tune 这种事 迟早会被机器替代。因为机器学习后阶段人工fine tune会逐步消失,取而代之的是机器的全自动校正完成。但如果你有深厚的数学功底,你将是创建模型或改造模型的人,你将真正凌驾在machine learning 之上。
举个例子,如果你有很深的微积分造诣,那么你理解神经网络中的梯度下降,损失函数的构建及训练,调优等过程,你会轻车熟路,在较短时间内完美驾驭。如果你有较深的线性代数造诣,理解卷积神经网络,CNN, RNN,LSTM,GRU或者是Attention等transformer 机制,你会比别人更胜一筹。如果你有较好的概率论相关know-how,你将对softmax 等输出,损失函数等有很好的理解。当然我说的都是比较基础的理解部分。你甚至可以创建基于自己的super data AI model,这些idea或专利的源泉大部分来自你较好的数学功底,所以,如果你想在机器学习中有较好的可持续发展,Math is very important.
下面还是说干货,AI的设计模式。 Andrew Ng 在人工智能峰会(AI Ascent)上发表了《Agentic Reasoning》的演讲。虽然时间不长,但information 很多。主要包括反思、工具调用、规划和多智能体协作4种设计模式,你会发现AI的模式和人类的思考维度越来越接近,作为工作或生活中人类经常使用的PDCA模式在AI中得到了极致体现,同时已能印证我前面说的人工 fine tune迟早会被终结。
Zero-shot Prompting VS Agentic Workflow
在当下,不论是国外的AI工具如ChatGPT、Claude、谷歌的Gemini,还是国内的Kimi、通义千问和文心一言,我们大多数人的使用方式还是以“zero-shot prompt”直接对话的形式,也就是我们直接抛给ChatGPT一个问题,比如“写一篇关于xx主题的论文”,让它一次性给出回复。在这个过程中,LLM模型只会执行“生成”这一个动作。
然而,这与我们在真实世界中完成工作任务的流程是截然不同的。还是以写论文为例,一般我们会起草一个初稿,然后评估、分析、修订,迭代出第二、第三个版本,直到我们满意为止。其他工作和学习任务也是如此,我们通常会将其分解为一个一个的流程,然后按照流程来操作,以保证结果的质量。LLM模型也理应如此为我们服务。
Agentic Workflow赋能LLM模型
吴恩达教授的团队对“Zero-shot prompting”以及添加了不同设计模式的AI Agent的表现做了数据分析和对比,详情如下图。图中的纵坐标分别表示基座模型是GPT-3.5和GPT-4,横坐标表示在“Coding benchmark”下各模型/Agent的正确率(表现),百分比越高表现越好。
- Zero-shot模式:
- GPT-3.5的Zero-shot性能为48%。
- GPT-4的Zero-shot性能显著提升,为67%。
- 结论:Zero-shot模式下,模型在没有具体任务示例的情况下,仅依赖于其预训练的知识来执行任务。这种情况下比拼的是模型的通用基础能力,可以理解为模型的“智商”,GPT-4表现好是意料之中的。
- AI Agent(智能体)模式:
- Reflection反馈模式通过模型自身的反思与调整来改进任务执行。
- Tool Use工具调用模式涉及模型调用外部工具或库来帮助解决任务。
- Planning规划模式通过提前计划和组织任务步骤来提高效率和准确性。
- Multiagent多智能体协作模式涉及多个智能体的协同工作,以提高整体任务执行能力。
- 结论1:添加了Agentic Workflow的AI Agent在任务执行中的表现显著提升,不论基座模型是GPT-3.5还是GPT-4。
- 结论2:即使基座模型是GPT-3.5,通过添加Agentic Workflow将其设计为AI Agent后,性能表现也超过了Zero-shot模式下的GPT-4!
其实这种结论也很好理解,对于一项工作或学习任务来说,光有“智商”是不足以保证任务完成质量的,更重要的,与如何完成这项任务的方式方法有关系。“智商”(即大脑,LLM模型)可能起到一定作用,但合理的规划,完善的流程设计在后期任务执行过程中也起到关键的作用,虽然这常常被我们忽略。
1. 反馈(Reflection)
反馈(Reflection)设计模式是一种让AI模型通过自我反思和迭代改进来提高任务执行能力的方法。在这种模式中,模型不仅生成初始解决方案,还会通过多次反馈和修改,不断优化其输出。
在Andrew Ng 提到的例子中,任务是编写代码,模型首先生成初始版本,然后通过多次反馈和修改生成更优化的版本。例如,初始代码版本存在错误,模型通过反馈指出错误并进行修正,最终生成一个通过所有测试的版本。
2. 工具调用(Tool Use)
工具调用(Tool Use)设计模式是一种让AI模型通过调用外部工具或库来增强任务执行能力的方法。在这种模式中,模型并不仅仅依赖于自身的知识和能力,而是利用各种外部资源来完成任务,从而提高效率和准确性。
实际我前面写的 RAG与LLM 专栏 就是一个在LLM领域下 Tool Use 的应用,有兴趣可以取读一读,还在持续更新中。
3. 规划(Planning)
规划(Planning)设计模式是一种通过提前计划和组织任务步骤来提高效率和准确性的方法。在这种模式中,模型将复杂任务分解为多个步骤,并依次执行每个步骤,以达到预期的目标。
这和管理者经常使用的PDCA是何其相似,plan-do-check-action 直至目标完成,其中也包含了 fine tune 的逻辑。
4. 多智能体协作(Multi-agent Collaboration)
多智能体协作(Multiagent Collaboration)设计模式是一种通过多个智能体之间的合作来提高任务执行效率和准确性的方法。在这种模式中,多个智能体分担任务,并通过相互交流和协作,共同完成复杂任务。
实际上与 3 规划有一些联系,比如:
开发一个五子棋游戏。
- 设计阶段:一个智能体负责游戏的设计,包括界面和规则。
- 编码阶段:另一个智能体负责游戏的编码,实现核心功能。
- 测试阶段:第三个智能体负责测试游戏,找出并修复错误。
- 文档编写阶段:第四个智能体负责编写游戏的使用文档和说明。
通过智能体之间的分工合作,最终成功开发出一个完整的五子棋游戏。
就先写到这里吧
相关文章:

机器学习中的数学底蕴与设计模式
在说机器学习设计模式之前,想多说几句,在进入软件行业最初的10年,那时候耳熟能详的基本就是多线程编程,互斥同步锁,设计模式,OOA,OOP,常规数组,tree,图的数据…...
【Android面试八股文】性能优化相关面试题:如何查找CPU占用?
文章目录 一、 如何查找CPU的占用问题二、TraceView的使用关于TraceView和Android Studio的Profiler第一步、通过Android studio 打开`Android profiler`第二步、使用步骤第三步、技术说明第四步、CPU占用相关指标说明扩展阅读一、 如何查找CPU的占用问题 在Android开发中,如…...

面试框架一些小结
springcloud的⼯作原理 springcloud由以下⼏个核⼼组件构成: Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表, 从⽽知道其他服务在哪⾥ …...
c# 往window注册表写入数据后,未写入指定的路径
c# 往window注册表写入数据后,未写入指定的路径 最近在用c#开发一个往注册表写入数据的一个项目,发现将输入写入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell这个路径时,数据并没写入到这个…...

树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…...

Golang | Leetcode Golang题解之第198题打家劫舍
题目: 题解: func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…...
基于ruoyi-app的手机短信登录(uniapp)
本篇用于记录h5的框架搭建 组件地址:短信验证码登陆,手机号,验证码倒计时 - DCloud 插件市场 调整后的表单组件代码: <template><view class"login-view"><!-- <input type"tel" confirm-type"确认"…...

机器学习环境搭建
前言 个人笔记,记录框架和小问题,没有太详细记载。。 1、Anaconda安装 下载地址: Free Download | Anaconda (慢) 国内镜像:https://link.csdn.net/?targethttp%3A%2F%2Fitcxy.xyz%2F241.html 下载…...

2095.删除链表的中间节点
给你一个链表的头节点 head 。删除链表的中间节点 ,并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…...
Qt QML 坑
Qt QML 坑 QML Listview 1、不定高item 导致item重叠 ListView {id: _cityListViewproperty var _cityArray: [{ type:"A",cityArray:[]},{ type:"B",cityArray:[]},{ type:"C",cityArray:[]},{ type:"D",cityArray:[]}]model: List…...

Chrome浏览器web调试(js调试、css调试、篡改前置)
目录 1. 打开开发者工具(Dev Tool) 2. 打开命令菜单 截图 3. 面板介绍 4. CSS调试 右键检查快速到达元素处 查找DOM数 利用面板Console查找DOM节点 内置函数查找上一个选择点击的元素 5. 调试JS代码(Javascript调试) 日志调试 选择查看日志等级 眼睛观测变量 …...
【Java】Logbook优化接口调用日志输出,优雅!
logbook 简介 很多人可能没有接触过 logbook,但它的确是一个很好用的日志框架。引用官网的介绍 Logbook 是一个可扩展的 Java 库,可以为不同的客户端和服务器端技术启用完整的请求和响应日志记录。它通过以下方式满足了特殊需求: 允许 Web 应…...

LabVIEW电压电流实时监测系统
开发了一种基于LabVIEW和研华(Advantech)数据采集卡的电压电流实时监测系统,通过高效的数据采集和处理,为工业和科研用户提供高精度、实时的电压电流监测解决方案。系统采用研华USB-4711A数据采集卡,结合LabVIEW编程环…...

骁龙相机拍照流程分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 1.deliverInputEvent 拍照点击事件处理 2.submitRequestList Camera 提交拍照请求 3.createCaptureRequest 拍照请求帧数 骁龙相机通过binder 数据传输…...

sql-语句
文章目录 SQL语句的学习sql是什么sql的内置命令sql的种类sql mode库,表属性介绍:字符集,存储引擎列的数据类型:数字,字符串,时间列的约束DDL: 数据定义语言库表 Online DDL(ALGORITHM) *DML :数据操纵语言资…...
解决Vue3项目中跨域问题的步骤
决Vue3项目中跨域问题的步骤可以按照以下方式清晰地分点表示和归纳: 1. 使用代理服务器(Proxy) 步骤: 在Vue项目的根目录下找到或创建vue.config.js文件。在vue.config.js中配置devServer的proxy选项。设定需要代理的接口前缀&a…...
macos scroll direction
If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways...
Websocket实现方式二——注解方式
添加Websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>根据ServerEndpoint注解注册Websocket Configuration public class AgentWsConfig …...

零基础开始学习鸿蒙开发-页面导航栏布局设计
目录 1.设定初始页(Idex.ets) 2.自定义首页组件 3.自定义发现页面组件 4.自定义设置页面组件 总结:主要是运用 了Tabs组件对导航栏进行布局,然后运用BottomTabBarStyle组件嵌套图标和文字,完成导航栏的制作。 1.设定初始页(Idex.ets) import {find}…...

【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】
前言: 💞💞大家好,我是书生♡,今天主要和大家分享一下Hive中常见的优化手段----数据采集!常见的Join 优化有哪几种!什么是Hive索引!数据怎么发生倾斜!什么是mapreduce的本…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...