最近在系统性学习AI,从机器学习开始。选了《李宏毅深度学习教程》这本书,我觉得这本书很不错,值得推荐。

机器学习的框架

在这本书中,读到了这段内容,

alt text

我发现这个机器学习的框架和其他框架有很多相似点。由于图片展示的内容没有完整地描述机器学习的框架,这里我在补充下,总的来讲,机器学习通常分为以下几个步骤:

  1. 定义问题、收集并整理训练数据
  • 明确要解决的问题场景,比如分类、回归或其他类型的预测;
  • 收集、整理和预处理训练数据 ${ (x_i, y_i) }$,并划分出测试集${ (x_j, y_j) }$。
  1. 特征选择和模型选择
  • 特征工程:依据任务需求,提取并选择最能表达问题的特征,必要时进行降维、归一化等处理。
  • 模型设计:选择合适的模型架构或算法,为后续训练提供基础;这一选择可根据数据特点和任务复杂性进行调整。
  1. 确定目标函数(损失函数)和评价指标
  • 机器学习的目标通常是找到一个参数向量 $\theta^*$,使得损失函数 $L(\theta)$ 最小化;
  • 评价指标则用于评估模型对实际任务的表现,如准确率、F1 值、均方误差等。
  1. 训练模型并进行实验
  • 在给定训练数据的情况下,不断地进行模型训练、参数更新和实验测试;
  • 可以采用不同的优化算法(如梯度下降、随机梯度下降、Adam 等),不断迭代,直到模型收敛或达到满意的性能。
  1. 在测试集上验证并进行修正
  • 将模型在测试集或验证集上进行测试,以评估模型在未见过的数据上的泛化能力;

可以发现,在这个过程中,最重要的特征是系统化地持续循环迭代:准备数据 - 特征选择 - 模型选择 - 损失函数 - 模型训练 - 模型调优,每一步都在逼近最general模型。

相似的路径在别的领域也有体现。

其他领域框架

做计划

1.明确目标与现状

  • 在做计划时,首先要明确想要达到的目标,这类似于机器学习中“定义问题”,并评估当前的资源与条件,对应“收集数据”。
  • 例如:你要在一周内完成一个项目,就需要先了解项目的需求、时间、人力、物力等信息。

2.制定可执行的方案

  • 根据目标和现状,列出执行路径、需要完成的子任务,以及衡量成功的标准,这对应“设定目标函数或评价指标”。

  • 例如:将Object拆成多个key results, 针对每个key result设计实现方案

3.执行与实施

  • 将方案付诸行动,不断地跟进进度,类似于“训练模型并实验”。

4.评估与反馈

  • 在执行过程阶段或执行结束后,对结果进行评估,需要对照原先设定的目标,查看完成情况,看是否达成了预期目标,对应“在测试集上验证模型”。

  • 如果没有达到预期,就需要回到前面的步骤,重新调整计划或修正目标,对应“反馈修正”。

这就是一个典型的计划-执行-评估-修正的循环,与机器学习的四步流程十分相似。

解决具体问题

1.界定问题与搜集信息

  • 要解决一个具体问题,第一步是对问题进行定义 ,并收集 相关背景信息(对应机器学习中的“定义任务、收集数据”)。

  • 例如:生产环境遇到了线上问题,需要先定义问题的表现,明确问题的发生的时间、具体用户、用户行为、影响面。

2.提出可能的解决方案

  • 根据已收集到的信息,提出各种可行的解决思路,并设定评价标准(类似于“确定模型结构和损失函数”)。
  • 例如:假设线上问题可能是可能是用户操作失误、代码问题、配置问题,就需要对这几种可能性分别进行技术方案设计。

3.实施方案并收集结果

  • 在选定的方案上进行小范围或试点实施,收集实施结果(对应“训练模型并实验”)。
  • 例如:先在测试环境进行问题修复

4.评估与修正

  • 对结果进行评估,看问题是否得到缓解或解决(对应“在测试集上验证”)。
  • 如果结果不理想,需要回到前一步,修改方案或重新提出新的解决思路(对应“反馈修正”)。
  • 例如:在测试环境中进行测试,有问题回滚代码继续修复

整个过程同样是一个迭代循环:定义问题 → 解决方案 → 实施 → 评估 → 再提出新的解决方案

工程化

1.需求分析与规格定义

  • 工程团队需要明确产品或系统要完成的功能(对应“定义问题”),以及对材料、环境、成本、工期等方面的要求(对应“收集数据和约束条件”)。

  • 例如:设计一款手机,需要明确它的定位、功能要求、硬件指标、软件功能、用户体验等。

2.设计与方案评审

  • 根据需求,进行系统的概要设计与详细设计,并设定各项性能指标(类似于“损失函数、评价指标”)。

  • 例如:选择处理器、屏幕、电池方案,并确定要达到的续航时间、散热性能等指标。

3.实现与原型测试

  • 将设计转化为实际产品或原型,对其进行功能和性能测试(对应“模型训练并实验”)。

  • 例如:组装原型机,测试其硬件性能、软件稳定性,并在实验室或小规模用户群中收集反馈。

4.反馈与改进

  • 对测试数据进行分析,看是否满足最初的设计目标和规格要求(对应“测试集验证”)。

  • 如果不满足或发现新问题,需要回到设计阶段进行改进(对应“反馈修正”),可能要更换零件、优化软件、调整工艺流程等。

工程化过程通常包含多轮原型开发 - 方案设计 - 测试 - 反馈 - 改进 的迭代,直到产品或系统满足最终要求。

科学方法论

1.观察与提出问题

  • 科学研究一般来源于对自然现象的观察,然后提出需要解释或解决的问题(对应“定义问题并收集数据”)。

  • 例如:牛顿发现苹果总是从树上落下,引发了关于“为什么物体总是朝向地面运动”的思考

2.提出假设或理论

  • 根据已有的理论知识和观察结果,提出可检验的假设(类似于“选择模型结构”或“设定损失函数”)。

  • 例如:猜测存在一种吸引力,和物体质量有关

3.设计实验并收集数据

  • 通过控制变量、对照实验等方式,检验假设的正确性(对应“训练模型并实验”)。

  • 例如:通过严密的数学推导计算出万有引力公式

4.分析结果并修正理论

  • 对实验结果进行统计分析,若与假设一致,则增强对假设的信心;若不一致,就要修改或推翻假设(对应“测试集验证并反馈修正”)。

  • 例如:属于经典力学,微观尺度下不适用,后续提出了量子力学

科学研究的流程是经典的观察-假设-实验-结论-修正可证伪性是作为科学的核心要求,只有那些能够设计出实验来证明其错误的理论,才能在不断的试错中不断完善,进而视之为科学。

知识产生

1.现象观察与问题提出

  • 知识产生往往源于对世界的好奇或问题的困惑(对应“收集数据与定义问题”)。
  • 例如:人们观察到苹果从树上掉下来,会思考“为什么苹果会掉下去”。

2.构建理论框架

  • 在已有知识体系的基础上,提出新的概念或理论框架,解释所观察到的现象(对应“提出模型”或“设定假设”)。

  • 例如:牛顿提出万有引力定律,解释物体之间相互吸引的现象。

3.实验或应用验证

  • 通过各种方式(实验、实践、案例等)验证理论的适用范围和正确性(对应“模型训练与实验”)。

  • 例如:通过天文观测、地面实验等多种证据来验证引力理论。

4.理论修正与扩展

  • 如果出现无法解释或矛盾的现象,需要对理论进行修正或提出新的理论(对应“测试集验证与反馈修正”)。

  • 例如:爱因斯坦的相对论对引力的本质做出了新的诠释,进一步扩展了牛顿力学的适用范围。

知识的产生与发展,往往是一个螺旋式上升 的过程,每一次循环都可能让我们对世界有更深的理解。

瀑布流开发

  1. 需求分析
  • 收集并明确系统或软件需要实现的功能、性能以及约束条件。
  1. 系统设计
  • 将需求转化为系统的架构和详细设计方案,规划模块结构、接口、数据流等。
  1. 代码实现
  • 根据设计文档编写代码,实现各个功能模块。
  1. 集成与测试
  • 将实现好的模块集成在一起,并进行功能测试、性能测试等,验证软件是否符合需求。
  1. 部署与维护
  • 软件上线后,进行维护、修复缺陷,并在必要时对功能进行扩展或升级。

DevOps

alt text

对DevOps印象最深刻的是标志性的“∞”,无限迭代, dev指的是development,ops指的是operation。它的步骤大概是

  1. 计划(Plan)

  2. 编码(Code)

  3. 构建(Build)

  4. 测试(Test)

  5. 发布(Release)

  6. 部署(Deploy)

  7. 运营(Operate)

  8. 监控(Monitor)

  9. 回到“计划(Plan)”

DevOps的“持续循环”特征在于持续集成(CI)- 持续交付(CD)- 监控与改进

系统性地循环迭代和持续反馈

上面列举了我目前能想到的框架,观察下来,他们都有一个共同的相似点:系统性地循环迭代和持续反馈,渐进式逼近最优解

为什么会出现这种共性

回归到本质回答任何共性问题,这里我又要挪用我之前写的《如何创造知识》这篇问题的观点:人类都拥有相同的生理与心理基础,并共享同一个客观物理世界。

alt text

有个这个基点,只需要根据当前具体问题的限制,进行具体的修改既可以了。思考链是这样的:

  1. 问:人的什么生理和心理特征提供了产生系统性地循环迭代和持续反馈的共性的基础
    答:生理方面,有神经系统的可塑性,大脑每次接收反馈后,会动态调整神经连接,来适应新信息。这种生理基础支持持续的迭代学习。心理方面,操作性条件反射,人类的行为受到动机和奖励的驱动,促使我们不断尝试和调整以达到目标;认知资源有限性,人类工作记忆容量有限,无法一次性处理复杂问题,需通过迭代分解任务,逐渐逼近答案。

  2. 问:什么客观物理条件(存在某种共性),决定了系统性地循环迭代和持续反馈的共性
    答:物理世界的复杂性、不确定性和动态性

所以,之所以机器学习、问题解决、知识产生等不同的领域,都出现了循环迭代和持续反馈的特征,是因为它们本质上,是人类在已有的生理和心理条件限制下,面对复杂、不确定和动态场景时的普遍策略,也就是通过系统化的分解、反馈和迭代,逐步逼近最优解、真理和确定性。

了解了这个共性有什么用

  1. 深入理解而非死记硬背。最直观的,就是在学习深度学习的时候,可以更好地理解流程为什么这么设计,而不是机械记忆。遇到模型表现不好的时候,可以有一个闭环逻辑的定位问题,比如数据预处理不够、模型选择不对、损失函数设定问题等,根据这些可能性的问题一一排查

  2. 提升系统性思考能力。有一个整体视角把握问题全貌,而不是关注细节,重点是这种系统化思考能力可以迁移到其他问题场景

  3. 跨领域学习与启发。通过对不同领域中相似迭代反馈机制的比较,一方面,可以用一个领域的理解补充对另一个领域的理解,另一方面,还可以实现知识和方法的迁移,对于一个新领域,可以用这套思维启发我们快速设计出一个严谨、闭环的流程体系。