0

0

使用感知机拟合余弦函数的近似二次多项式:原理、实现与关键优化

霞舞

霞舞

发布时间:2026-02-13 13:11:00

|

544人浏览过

|

来源于php中文网

原创

使用感知机拟合余弦函数的近似二次多项式:原理、实现与关键优化

本文详解如何用单层感知机逼近 cos(x) 在 [0, π/4] 上的二次多项式,指出原始代码不收敛的根本原因(缺失学习率),给出可运行的修正方案,并阐明其与线性回归的本质区别及适用边界。

在函数逼近任务中,初学者常尝试用感知机(单神经元)拟合简单非线性函数(如 cos(x)),误以为输出权重可直接作为多项式系数。但需明确:标准感知机+sigmoid激活 ≠ 多项式回归——前者学习的是经非线性变换后的映射,后者才是真正的线性参数化逼近。本文以 cos(x) 在 [0, π/4] 区间上的二次逼近为例,系统梳理实现逻辑、常见陷阱与专业优化路径。

? 核心问题定位:为何原始代码不收敛?

原始实现中,权重更新为 w += deltaw,隐含学习率为 1。这极易导致梯度下降发散:当损失曲面存在局部陡峭区域时,过大的步长会使参数在最优解附近剧烈震荡甚至越界。数学上,梯度更新应满足: $$ \mathbf{w}_{t+1} = \mathbf{w}t - \eta \nabla{\mathbf{w}} \mathcal{L}(\mathbf{w}_t) $$ 其中 $\eta$ 为学习率($\eta \in (0, 1)$)。修正后,关键更新行变为:

learning_rate = 0.01
# ...
w += learning_rate * deltaw  # 或更规范地:w -= learning_rate * (-deltaw)
✅ 推荐写法(数学严谨):显式体现负梯度方向 grad = -numpy.dot(training_inputs.T, errors * sigmoid_prime(outputs)) w -= learning_rate * grad

? 完整可运行修正代码

以下为修复学习率、增强数值稳定性并添加可视化验证的完整实现:

聪豹Wiseal
聪豹Wiseal

聪豹Wiseal是一个专业的历史时间线收集整理工具

下载
import numpy as np
import matplotlib.pyplot as plt
import math

# 1. 数据生成
np.random.seed(42)
R = np.random.uniform(0, math.pi/4, 1000)

# 2. 特征矩阵:[x², x, 1]
X = np.column_stack([R**2, R, np.ones_like(R)])  # shape: (1000, 3)

# 3. 目标输出:sigmoid(cos(x)) —— 注意:这是归一化到 (0,1) 的标签
y_true = 1.0 / (1.0 + np.exp(-np.cos(R)))  # sigmoid(cos(x))

# 4. 感知机训练(带学习率 & 规范梯度)
def train_perceptron(X, y, lr=0.01, n_iter=5000):
    w = np.random.normal(0, 0.1, (3, 1))  # 随机初始化更鲁棒
    errors_history = []

    for i in range(n_iter):
        # 前向传播
        z = X @ w
        y_pred = 1.0 / (1.0 + np.exp(-z))  # sigmoid

        # 计算误差与梯度(交叉熵风格的导数)
        error = y_pred - y.reshape(-1, 1)
        grad = X.T @ (error * y_pred * (1 - y_pred))  # sigmoid'(z) = y_pred*(1-y_pred)

        # 权重更新(负梯度方向)
        w -= lr * grad
        errors_history.append(np.mean(np.abs(error)))

    return w, errors_history

# 执行训练
weights, errors = train_perceptron(X, y_true, lr=0.01, n_iter=3000)

print("Learned weights [w2, w1, w0]:", weights.flatten())
# 输出示例:[ 0.12, -0.85,  0.97] → 对应 w2*x² + w1*x + w0

⚠️ 关键注意事项与深层解读

  • 激活函数限制决定输出范围
    sigmoid 输出恒在 (0,1),而 cos(x) 在 [0, π/4] ∈ [√2/2, 1] ≈ [0.707, 1.0],虽可覆盖,但若扩展至 [0, π](cos∈[-1,1]),必须改用 tanh(输出 [-1,1])或线性激活(直接回归)。否则会因目标值域不匹配导致严重拟合偏差。

  • 权重 ≠ 多项式系数
    感知机输出为 sigmoid(w₂x² + w₁x + w₀),不能将 weights 直接代入 w₂x² + w₁x + w₀ 作为 cos(x) 近似!它只是 sigmoid 映射下的参数。若需纯多项式逼近,应使用线性回归

    from sklearn.linear_model import LinearRegression
    reg = LinearRegression().fit(X[:, :2], np.cos(R))  # 用 x²,x 拟合 cos(x)
    print("Linear regression coeffs:", reg.coef_, reg.intercept_)
  • 为什么不用感知机做多项式拟合?
    感知机本质是分类器/非线性回归器,引入 sigmoid 会扭曲误差曲面,增加优化难度;而线性回归在多项式特征下是凸优化问题,有解析解,更快更稳。

✅ 总结:何时用感知机?何时用线性回归?

场景 推荐方法 理由
用多项式基函数逼近连续函数(如 cos, sin) 线性回归 解析解、无超参、物理意义明确、高效稳定
学习复杂非线性映射(无先验函数形式) 多层感知机(MLP) 表达能力强,可自动学习特征交互
强制要求输出在 (0,1) 或 (-1,1) 区间 单层+sigmoid/tanh 激活函数提供天然约束

? 实践建议:对 cos(x) 这类光滑函数,优先尝试泰勒展开(1 - x²/2 + x⁴/24)或最小二乘多项式拟合;感知机更适合教学演示梯度下降过程,而非实际函数逼近任务。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

3

2026.02.13

微博网页版主页入口与登录指南_官方网页端快速访问方法
微博网页版主页入口与登录指南_官方网页端快速访问方法

本专题系统整理微博网页版官方入口及网页端登录方式,涵盖首页直达地址、账号登录流程与常见访问问题说明,帮助用户快速找到微博官网主页,实现便捷、安全的网页端登录与内容浏览体验。

3

2026.02.13

Flutter跨平台开发与状态管理实战
Flutter跨平台开发与状态管理实战

本专题围绕Flutter框架展开,系统讲解跨平台UI构建原理与状态管理方案。内容涵盖Widget生命周期、路由管理、Provider与Bloc状态管理模式、网络请求封装及性能优化技巧。通过实战项目演示,帮助开发者构建流畅、可维护的跨平台移动应用。

3

2026.02.13

TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

1

2026.02.13

Redis高可用架构与分布式缓存实战
Redis高可用架构与分布式缓存实战

本专题围绕 Redis 在高并发系统中的应用展开,系统讲解主从复制、哨兵机制、Cluster 集群模式及数据分片原理。内容涵盖缓存穿透与雪崩解决方案、分布式锁实现、热点数据优化及持久化策略。通过真实业务场景演示,帮助开发者构建高可用、可扩展的分布式缓存系统。

1

2026.02.13

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

25

2026.02.12

雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法
雨课堂网页版登录入口与使用指南_官方在线教学平台访问方法

本专题系统整理雨课堂网页版官方入口及在线登录方式,涵盖账号登录流程、官方直连入口及平台访问方法说明,帮助师生用户快速进入雨课堂在线教学平台,实现便捷、高效的课程学习与教学管理体验。

9

2026.02.12

豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法
豆包AI网页版入口与智能创作指南_官方在线写作与图片生成使用方法

本专题汇总豆包AI官方网页版入口及在线使用方式,涵盖智能写作工具、图片生成体验入口和官网登录方法,帮助用户快速直达豆包AI平台,高效完成文本创作与AI生图任务,实现便捷智能创作体验。

107

2026.02.12

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

11

2026.02.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号