【机器学习】从机理建模到数据学习:机器学习究竟替代了什么

上一节我们讨论了故障与降级:一个可靠的嵌入式控制系统,不只要在异常时及时收住风险,还要留下故障原因、时间戳和关键状态。

这些记录起初是为了让系统可追溯;但当设备持续运行、数据不断累积时,它们还会带来另一种可能------让机器从真实运行的痕迹中学习那些难以手工写全的规律。

不过,"让数据学习"并不意味着可以把物理规律、控制器和安全边界全部丢掉。

文章摘要

本文以单关节机械臂为例,说明机器学习并不是把控制理论、物理规律和安全约束全部换成黑箱,而是在摩擦、负载、温漂、间隙等因素使精确机理模型难以完整描述时,用历史数据学习输入与输出之间的映射或模型残差。文章分析失配来源、数据任务、时序样本的时间关系与故障标签,以及训练集和线上工况不一致带来的分布偏移。最后给出"机理模型打底、数据模型补偿、安全边界兜底"的混合方案,并提出离线评估、影子运行、受限接入和持续监控的落地路径。机器学习替代的不是工程责任,而仅是部分难以手工写出的经验映射;当数据失去可信性或超出覆盖范围时,系统仍应退回可验证的控制与保护机制。

写在前面

继续回到那台单关节机械臂。

前面几节里,我们已经给它搭起了一条完整的控制链:编码器测量关节位置,控制器根据目标轨迹计算扭矩命令,驱动器用 PWM 推动电机,安全任务则持续检查电流、温度、通信和关键任务是否仍在正常推进。

如果只看实验室中的一次短程运动,这个系统似乎并不复杂。我们知道电机的额定参数,能够测到位置和电流,也可以根据连杆长度、减速比和负载质量写出一套描述关节运动的方程。控制器根据这套模型整定,机械臂就能平稳地到达目标位置。

但设备真正运行一段时间后,情况会慢慢变得不那么"教科书":

  • 夹爪换了工件,末端负载变了;
  • 齿轮润滑状态改变,低速摩擦不再和标称参数一致;
  • 电机发热后,电阻、磁链和可输出扭矩都在变化;
  • 线缆牵引、装配间隙和外部碰撞,带来了模型里没有写出的扰动;
  • 有些量本来就很难直接测到,例如实际摩擦、柔性形变和瞬时负载。

从机理建模走向数据学习,不是放弃理解物理世界,而是在已知结构之外,为那些难以精确写出的部分增加一种"从经验中归纳"的能力。

于是,问题不再只是"模型能不能写出来",而变成了:当一个系统的结构大体已知、但参数会漂移、扰动难预测、细节又难以穷尽时,机器学习究竟替代了什么?又绝不能替代什么?


一、先给结论:机器学习替代的不是物理,而是部分人工指定的映射

初学机器学习时,很容易把它理解成"不给公式,直接喂数据"。这种说法并不完全错误,却掩盖了最关键的边界。

在控制系统里,机理模型做的事情是:根据结构、守恒关系和已知参数,说明"给定输入后,系统为什么会这样变化"。例如电机通电后产生电磁转矩,转矩克服惯量、摩擦和重力,关节才会改变位置和速度。它强调的是因果结构

机器学习做的事情则是:从大量已发生的样本中,拟合"在这类输入和状态下,结果通常会怎样"。它不一定知道摩擦力具体来自哪一块接触面,也未必显式写出齿隙如何传递;只要训练数据足够可信、覆盖范围足够接近实际工况,它可以学到这些因素共同造成的经验映射

两者的差别可以先放在一张表里看:

问题 机理建模的回答方式 数据学习的回答方式 更适合谁
电机施加扭矩后为何加速 根据惯量、负载和力矩平衡推导 从历史扭矩、速度、位置中拟合变化趋势 结构清楚时优先机理
摩擦为何随温度和方向变化 逐项增加摩擦、温度与磨损模型 从不同温度和运动方向的数据中学习补偿 细节难测、变化频繁时适合数据
当前位置能否越过软限位 根据机构几何和安全规则判断 不应交给数据模型猜测 必须由确定规则负责
指令何时必须撤销 根据实时性、故障和保护状态处理 可以辅助预测风险,但不能拥有最终权限 必须由安全架构负责

因此,更准确的表述是:

机器学习替代的是一部分"由工程师手工指定的、难以穷尽的输入---输出关系";它不替代物理边界、实时执行链,也不替代安全责任。

这条边界决定了后面所有设计是否可靠。若把数据模型当成万能控制器,就会让它在没有训练数据、没有置信度、甚至传感器已经失真的时候,仍然试图给物理系统下命令;而这正是前一节的故障与降级机制必须阻止的事。


二、机理模型为什么会"失配":不是公式错了,而是现实比假设更丰富

机理建模并不是过时的方法。相反,机械结构、电路规律、能量约束和控制边界,仍然是理解系统最可靠的起点。问题在于,任何模型都是对现实的取舍:它保留对当前目标最重要的部分,同时忽略影响较小、难以测量或暂时不关心的细节。

实验室里忽略的细节,在真实运行中可能会逐渐积累成不可忽略的误差。

模型失配不是某个参数"填错了"这么简单。更常见的是:系统本身在变,而模型所依赖的简化假设没有跟着变。

1. 参数不是常数,而是随工况变化的量

我们常把惯量、摩擦系数、传动效率等写成一个固定值,方便分析和整定。但当机械臂从空载变成搬运工件,或从常温工作到高温连续运行时,这些量实际上已经发生变化。

固定参数模型仍然能描述系统的大致趋势,却很难在所有工况下都保持同样精度。若为了追求精确而不断补充参数,模型会越来越复杂,标定成本也会越来越高;而某些参数即使理论上存在,也未必有可靠手段在线测量。

2. 有些影响存在,却很难找到干净的解析表达

齿隙、柔性线缆、接触摩擦、材料形变和装配偏差,往往不是"有没有"的问题,而是它们会随速度、方向、温度、磨损和负载共同变化。把每一种因素单独建模并非不可能,但组合起来后,模型很快会变得难以维护。

例如关节低速换向时出现的爬行现象,可能同时与静摩擦、齿隙、编码器分辨率和电流采样误差有关。此时只改一个摩擦系数,通常无法解决所有问题。

3. 扰动会从系统边界外进入

控制模型通常把外部扰动抽象成一个未知项。但真实设备遇到的扰动并不总是随机噪声:搬运物体的重心会改变,线缆会在某个姿态突然拉紧,人与设备接触时会引入短时外力,甚至供电波动也会影响驱动能力。

机理模型可以告诉我们"系统应当具有一定鲁棒性",却未必能提前枚举每一种实际扰动的形态。历史数据的价值,恰恰在于它记录了这些扰动曾经怎样出现、系统当时处于什么状态、结果又如何变化。

4. 系统会老化,模型也需要面对时间

设备刚出厂时测得的参数,并不是永远有效的真相。磨损、松动、传感器偏置和环境变化,会让同一条控制命令在数月后产生不同结果。

这也是数据学习在预测维护、异常趋势识别和残差补偿中常常有价值的原因:它不要求每一次变化都先被工程师命名,只要变化在数据中留下了稳定且可验证的规律,就可能被识别出来。

这里需要注意:模型失配并不等于完全没有模型。 它只说明"用一套固定、简化的方程覆盖所有细节"开始变得吃力。越清楚这一点,越不会把机器学习误用成对机理的全盘替代。


三、数据到底能学什么:四类常见任务,四种不同的替代范围

"把数据交给模型"并不是一个具体任务。首先要说清:输入是什么、希望得到什么、结果将用于哪一步决策。对机械臂这类时序系统,常见的学习任务至少有四类。

学习任务 输入样本 期望输出 它替代或补足的部分 典型用途
软测量 电流、位置、速度、温度等可测量量 难直接测得的负载、摩擦或健康状态 昂贵、难安装或无法直接测量的传感环节 负载估计、状态监测
预测 一段过去的状态、命令与环境量 下一时刻或未来窗口的状态 难以精确写出的短期动态关系 轨迹误差预测、温升预测
残差补偿 机理模型输出与真实测量 两者之间的修正量 简化模型遗漏的非线性细节 摩擦补偿、重复误差修正
异常识别 正常与异常工况下的时序特征 异常类别或风险分数 难以用单一阈值覆盖的复合异常模式 早期故障预警

这四类任务有一个共同点:它们都没有要求机器学习"接管整台机械臂"。它可能帮我们估计当前负载,预测温度是否继续上升,补偿某段姿态的重复误差,或者更早识别出齿轮磨损的迹象;但关节的硬限位、最大电流和驱动使能,仍然由经过验证的控制与安全路径掌握。

1. 从"写公式"变成"给样本对"

机理建模时,工程师需要明确给出变量之间的关系。例如我们关心扭矩、速度和位置,就要说明它们为何相互影响。

监督学习时,工程师则要给出一组可信样本:某段时间内的输入、状态,以及希望预测或估计的目标。模型通过反复比较预测结果与真实标签的差异,调整内部参数,直到在已见样本上能较好地复现这种关系。

但"给样本对"绝不是把 CSV 文件丢进训练脚本这么简单。样本中的时间关系、传感器同步关系和故障状态,往往比模型选了几层网络更先决定结果是否可信。

2. 数据学习得到的是相关规律,不自动得到因果解释

如果模型发现"高电流之后常伴随温度上升",这在训练数据覆盖的工况里可能非常准确;但它不天然知道高电流是因为负载增加、机构卡滞还是传感器偏置。若训练集中只出现过一种原因,模型可能会把它误当成唯一解释。

因此,机器学习特别适合回答"在类似历史条件下,接下来大概率会发生什么";而对于"为什么发生、是否允许继续运动、该执行哪条安全动作",仍需要机理知识、状态机和安全规则共同参与。


四、在控制系统里,数据不是一行一行的数,而是一段段可信的时间关系

普通表格任务里,一行样本常常可以被看成独立个体;控制数据却不是这样。关节在当前时刻的速度,依赖于此前施加过的扭矩;当前温度,带着更早之前热量积累的记忆;一次通信超时,也可能让后续命令失去原本的语义。

所以,用控制日志训练模型时,第一件事不是选择网络结构,而是回答:这一段数据的时间轴是否可信?

1. 训练样本必须保留"过去---现在---未来"的顺序

假设我们要预测下一控制周期的位置误差。一个合理的样本,不是随机抽取某一行位置和电流,而是取连续窗口:

  • 前一小段时间内的位置、速度、电流和控制命令;
  • 当前时刻的目标、环境和设备状态;
  • 下一时刻真实产生的位置误差,作为标签。

若不保留这种顺序,模型可能在训练时"看见未来"。例如把未来时刻的滤波结果、故障结论或完整轨迹误差混入当前输入,离线指标会异常漂亮,部署后却立即失效。这种问题叫作时间泄漏,在时序系统中尤其隐蔽。

下面的伪代码只表达样本组织关系:

python 复制代码
def make_sample(frames, t, window):
    history = frames[t - window : t]

    # 输入只允许来自当前及过去已经可获得的信息
    x = {
        "position": [f.position for f in history],
        "velocity": [f.velocity for f in history],
        "current":  [f.current  for f in history],
        "command":  [f.command  for f in history],
        "temperature": history[-1].temperature,
    }

    # 标签来自之后真实发生的结果,不能回填到输入里
    y = frames[t + 1].position_error
    return x, y

2. 前一节的故障记录,决定哪些数据有资格进入训练集

如果编码器线缆松动时的跳变数据被当作"正常位置变化"送去训练,模型就会努力把错误学成规律;如果通信超时后仍缓冲着旧命令,而日志里没有标记这段命令已经失效,模型也会把"陈旧指令导致的结果"误认为正常控制响应。

因此,前一节提到的故障锁存、时间戳、传感器自洽校验和降级状态,不只是为了在线保护,也是在为数据建立可信边界:

数据来源 可提供什么 若缺少校验会有什么风险
编码器、IMU、电流采样 运动与执行器状态 时钟不同步、毛刺或丢帧会破坏时序关系
温度、电压、驱动器状态 工况与健康上下文 忽略温漂会把参数变化误归因为控制误差
目标轨迹与控制命令 输入条件和控制意图 命令超时或被限幅后,原始命令已不等于实际执行量
故障码、降级状态、急停记录 哪些数据不应视为正常样本 把故障过程混入训练,会污染标签与分布

一句很朴素的原则是:没有被证明可信的数据,不应因为"数量多"就自动获得训练资格。

3. 数据集划分不能随机打散时间

若把同一天、同一批工件、相邻时间段的样本随机分到训练集和测试集,测试集与训练集会过于相似。模型看似泛化很好,实际只是在记住同一种环境下的局部模式。

更接近工程真实的做法是按时间、批次、负载或环境来划分:用较早的运行数据训练,用后续日期、不同负载或不同温度范围的数据测试。这样得到的指标不一定更好看,却更接近上线时真正会面对的问题。


五、机器学习的反馈环比控制环慢得多:别让"训练"挤进不该挤的位置

专栏开篇曾提到,技术层级不断上升时,反馈环也在变化:底层控制环快、确定性强;数据学习环慢、处理的是统计规律。把这个观点放到机械臂上,会得到一个很实用的分工。

环路 典型时间尺度 它关心什么 是否允许不确定性
电流环、位置环 微秒到毫秒 当前命令能否稳定、及时地作用到执行器 很低,必须有明确时限
安全监督环 毫秒到百毫秒 传感、任务、驱动是否仍可信 很低,异常必须有确定处置
数据记录与特征计算 秒到分钟 收集完整、对齐的运行样本 可以延迟,但不能篡改时间关系
模型训练与评估 分钟到小时甚至更长 从历史数据总结规律 允许试错,但只能离线或受控进行
在线预测或补偿 毫秒到百毫秒 给控制器提供估计、预测或建议 受严格输入检查与输出限幅约束

这里最容易犯的错误,是把"模型在离线评测中预测得很准"直接等同于"它可以替代高速闭环控制"。离线模型可能使用了较长的历史窗口、复杂网络和大量计算;而电流环必须在极短时间内完成采样、计算和输出,错过一次截止时间就可能引入额外相位滞后。

所以,机器学习最稳妥的切入位置,往往不是先接管最内层控制环,而是先放在更外侧、更容易验证的任务上:预测温升、估计负载、识别异常、给出残差补偿建议。只有在计算时间、最坏情况延迟、输出边界和失效回退都经过验证后,才讨论它能否更深地参与控制。


六、模型在训练集上"学会了",不代表它在新世界里仍然可靠

数据模型并不认识"所有可能的机械臂"。它只从训练数据覆盖到的范围中归纳规律。若训练样本大多来自空载、常温、低速运行,那么模型在重载、高温或新的运动轨迹上表现变差,并不是它突然"背叛"了我们,而是它从未真正见过这些情况。

这种训练环境与实际环境不一致的现象,叫作分布偏移。在控制场景中,它通常来自以下变化:

  • 换了不同批次的工件,负载和重心改变;
  • 季节或连续运行时间改变,温度范围改变;
  • 传动机构磨损,原有摩擦模式逐渐漂移;
  • 传感器更换、重新标定,数据尺度发生变化;
  • 上位机换了轨迹规划策略,命令分布不再相同。

解决分布偏移,不是给模型加一句"请保持稳定",而是建立可观察的边界。

1. 先识别输入是否还像训练数据

例如模型只在某个速度、负载和温度范围内训练过,那么在线运行时应持续检查当前输入是否明显超出这些范围。发现超出并不必然说明系统故障,但意味着模型输出不再应被赋予同样的权重。

2. 让数据模型的输出拥有可撤销的权限

若模型给出的只是"温升风险分数",它可以触发更密集的监控;若它给出"残差补偿量",就应经过限幅、变化率限制和控制器侧的合理性检查。最坏情况下,系统应能将补偿量置零,退回经过验证的基础控制器。

3. 用线上结果反过来校验模型,而不是只看一次离线分数

部署后仍要观察预测误差、触发频率、输入分布和故障关联。如果某个模型在特定温度下持续偏差变大,应把它当作新的工程证据:可能需要更新数据、重新训练,也可能说明设备本身出现了新的异常。

机器学习带来的不是"模型永远正确",而是一条新的反馈链:数据---训练---上线---观察---修正。这条环路比电流环慢,却同样需要闭环。


七、最可靠的路线往往不是二选一,而是"机理打底,数据补偿,安全兜底"

当我们明确了各自的边界,就会发现机理模型与数据模型并不需要争夺控制权。

机理模型擅长提供结构:知道关节不能越界,知道扭矩不会凭空产生,知道目标轨迹如何经过连续约束到达执行器;数据模型擅长补足细节:学习在某个温度、速度和负载组合下,基础模型尚未解释的摩擦、偏置或预测误差;安全架构则负责最后的底线:无论哪一个模型给出什么结果,都不能越过电流、速度、位置和故障状态定义的边界。

两条路径最终汇入同一条受约束的控制链。数据模型可以改善性能,却不能绕开限幅、故障处理和驱动使能等确定性保护。

一个简化的在线补偿过程可以写成下面这样:

python 复制代码
def make_safe_command(state, reference, learned_model):
    base_cmd = model_based_controller(state, reference)
    
    if data_is_trusted(state) and within_model_coverage(state):
        correction = learned_model.predict(state, reference)
        correction = limit_rate_and_amplitude(correction)
    else:
        correction = 0.0   # 数据不可信或超出覆盖范围时,撤销学习补偿

    cmd = base_cmd + correction
    cmd = apply_hard_limits(cmd)

    if safety_supervisor_allows_drive():
        return cmd
    return safe_hold_or_disable()

这段伪代码里最重要的不是某个函数名,而是权限顺序:

  1. 基础控制器始终存在,即使数据模型暂时不可用,系统仍有可解释的基线行为;
  2. 学习补偿默认是可撤销的,输入不可信、工况超界或模型异常时,可以立刻归零;
  3. 硬限制在两者之后仍会再次生效,不让任何预测结果直接触达危险能量;
  4. 安全监督拥有最终否决权,这正是上一节故障与降级机制在机器学习层的延续。

这也是"机器学习进入控制系统"与"让一个模型自由生成动作"的根本区别:前者先定义边界,再让模型在边界内提高性能;后者则把边界也交给模型猜测,风险会随着系统复杂度迅速放大。


八、第一次落地时,不妨从"替代一个小环节"开始

如果刚开始接触机器学习,最不建议的目标是"用 AI 控制机械臂"。这个目标太大,也没有清晰的验证终点。更稳妥的做法,是从一个定义明确、能与原方案比较、即使失败也不会破坏安全的任务开始。

可以按下面的顺序推进:

  1. 选择一个窄问题:例如预测十分钟后的驱动器温度,或估计难以直接测得的末端负载;
  2. 建立数据契约:写清哪些传感器、什么采样频率、哪些故障状态的数据允许入库;
  3. 先做离线基线:与简单阈值、线性回归或基础机理模型比较,而不是只看复杂网络的绝对分数;
  4. 影子运行:让模型在线接收真实数据但不影响执行器,只记录它本会给出的预测和补偿;
  5. 受限接入:经过误差、时延和覆盖范围验证后,只允许模型在小幅度、可撤销的范围内参与;
  6. 持续监控与回退:统计输入是否漂移、模型误差是否增大,并始终保留退回原控制链的开关。

这条路线看起来慢,却能把"模型好不好"转化为一组可测量的问题:数据是否可信、预测是否比基线好、最坏延迟是否满足、输出是否有界、异常时是否可以无损回退。只有这些问题都能回答,机器学习才从一次演示变成一个工程能力。


九、把这一节放回整个专栏里看

控制理论首先教我们:要让系统稳定,必须对状态、输入和反馈之间的关系有基本把握;控制算法进一步讨论:在模型可信的前提下,怎样把误差、能耗和约束权衡得更好;嵌入式系统则把这些算法放进有采样、时限、有限精度和故障风险的真实硬件中。

走到机器学习这一层,问题发生了变化:

  • 不是否定"模型",而是承认模型无法无代价地覆盖所有细节;
  • 不是用数据取代"反馈",而是把历史运行中的反馈变成可学习的经验;
  • 不是让模型拥有无限权限,而是让它在明确约束下补足预测、估计和补偿能力;
  • 不是数据越多越好,而是时间关系、标签语义和故障边界越清楚越好。

前一节的可靠性设计,在这里再次变得重要。安全状态、故障锁存、可信时间戳和传感器自洽检查,原本是在保护执行器;现在它们也在保护数据的含义。没有这些基础,训练出来的模型可能只是把异常、延迟和错误标签一起学得更熟练。

如果说机理建模是在回答"系统为什么这样运动",那么数据学习补充回答的是:当那些难以穷尽的细节反复出现时,系统能否从自己的历史中学会更好地预测和修正?


In the end:下一步该看什么

从机理模型到数据模型,真正改变的不是"有没有公式",而是工程师把一部分工作从手工指定规律,转向了设计数据、定义目标和验证边界。

但模型如何根据样本知道自己预测得对不对?又如何一次次调整内部参数,让预测逐渐靠近真实结果?

下一节,我们将从机器学习最核心的反馈机制讲起:损失函数与梯度下降:机器如何通过"犯错"不断变好。

相关推荐
明志数科1 小时前
具身智能真机采集工程实践:5类高频失效模式与规避清单
人工智能·算法·机器学习
陕西企来客1 小时前
2026年9月西安家政服务大模型引流:AI推荐逻辑与落地方法
大数据·人工智能·西安家政服务大模型引流
上海心泾国际物流有限公司1 小时前
我在几个医疗器械仓库记下的一组温湿度数据
经验分享·笔记·学习·健康医疗·交通物流
ADAI_Bowen1 小时前
建筑 AI 设计图纸归谁所有?ADAI 与渲境 AI 合规安全全解析
人工智能·安全·机器学习
for_ever_love__1 小时前
python基础语法学习: requirements.txt
开发语言·python·学习
weixin_429630261 小时前
17.5 基于角加速度计与陀螺仪融合的深度学习辅助卡尔曼滤波低成本姿态估计
人工智能·深度学习
Ado柳贯一1 小时前
脑算力深度全解-生物科技新范式
人工智能
for_ever_love__2 小时前
python基础语法学习: 动态类型
开发语言·python·学习
shxjnpl2 小时前
Qwen3-ForcedAligner-0.6B 私有化部署实战:从模型离线、Docker封装到会议原声精准回听
人工智能·语音识别·智能硬件