You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

神经网络训练中数据顺序为何影响模型效果?花朵拟合实验疑问

问题:坐标点顺序打乱后,神经网络拟合花朵隐函数失败的原因

近期发现AI模型出现奇怪表现:我希望构建一个能根据给定数据推测隐函数的模型,比如某花朵的方程对应图像如下:
花朵方程图像

我通过以下Numpy代码生成该花朵的坐标点数组:

import numpy as np
import math

K = 0.75
a = 9

def f(x):
    return x - 2 - 2*np.floor((x - 1)/2)

def r1(x):
    return abs(6 * f(a * K * x / 2 / np.pi)) - a/2
    
t = np.linspace(0, 17 * math.pi, 1000)
x = np.cos(t) * r1(t)
y = np.sin(t) * r1(t)

points = np.vstack((x, y)).T

首次训练时,模型成功拟合出正确的花朵形状:
拟合成功的花朵图像

但将坐标点数组打乱后重新训练,得到的结果完全不符合预期:
拟合失败的图像

我无法理解为何笛卡尔坐标的顺序会影响花朵隐函数的拟合效果,求解释。

以下是使用的AI模型代码:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# Define the neural network model
model = Sequential()
model.add(Dense(128, input_dim=2, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(2, activation='linear'))

# Compile the model
model.compile(optimizer='adam', loss='mean_squared_error')

# Train the model
model.fit(points, points, epochs=100, batch_size=32)

原因分析

1. 训练任务的本质误解

你的模型并非在拟合隐函数,而是在学习输入到自身的恒等映射(输入坐标点,输出相同的坐标点)。这种任务下,数据顺序看似不该影响结果,但实际差异源于小批次训练的随机性。

2. 小批次训练的梯度差异

你使用batch_size=32进行训练,Adam优化器依赖每个批次的梯度更新参数:

  • 未打乱数据时,每个批次内的点是花朵曲线上的连续片段,模型能快速捕捉局部空间相关性,梯度更新方向更一致,容易收敛到正确的恒等映射;
  • 打乱数据后,每个批次的点随机分布在花朵各个位置,初始阶段梯度更新方向混乱,加上仅100轮训练的轮次不足,模型难以收敛到最优解。

3. 隐函数拟合的正确姿势

若要真正拟合花朵的隐函数(即满足F(x,y)=0的曲线),当前的训练方式完全错误,正确的做法是:

  • 生成大量不在曲线上的点作为负样本;
  • 训练模型对曲线上的点输出0,对非曲线上的点输出其到曲线的距离(或分类为“在曲线上/不在曲线上”);
  • 这种任务下,数据顺序是否打乱不会影响结果,因为模型学习的是全局空间分布规律,而非点的顺序相关性。

4. 模型结构的适配性问题

全连接神经网络虽能处理非线性映射,但对于二维隐曲线的拟合,更适合结合二元分类/回归任务,或使用专门的隐函数拟合模型(如PINN物理信息神经网络)。

内容的提问来源于stack exchange,提问作者NikoMolecule

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:03:14