当前位置: 首页 > news >正文

关于神经网络中回归的概念

神经网络中的回归详解

引言

神经网络(NeuralNetworks)是一种强大的机器学习模型,可用于分类和回归任务。本文聚焦于神经网络中的回归(Regression),即预测连续输出值(如房价、温度)。

回归问题:给定输入特征x⃗\vec{x}x,预测连续目标yyy。神经网络通过多层非线性变换学习复杂映射f:x⃗↦yf:\vec{x}\mapsto yf:xy

基本概念回顾

神经元与层

  • 神经元(Neuron):基本单元。输入x⃗=(x1,…,xn)\vec{x}=(x_1,\dots,x_n)x=(x1,,xn),权重w⃗=(w1,…,wn)\vec{w}=(w_1,\dots,w_n)w=(w1,,wn),偏置bbb
    计算:线性组合z=w⃗⋅x⃗+b=∑i=1nwixi+bz=\vec{w}\cdot\vec{x}+b=\sum_{i=1}^nw_ix_i+bz=wx+b=i=1nwixi+b
    然后激活:a=σ(z)a=\sigma(z)a=σ(z)σ\sigmaσ为激活函数。

  • (Layer):多个神经元组成。

    • 输入层:原始特征。
    • 隐藏层:中间变换。
    • 输出层:最终预测y^\hat{y}y^(回归中通常1个神经元,无激活或线性激活)。
  • 前馈神经网络(FeedforwardNeuralNetwork,FNN):信息从输入到输出单向流动。也称多层感知机(MLP)。

激活函数

激活引入非线性。常见:

  • Sigmoid:σ(z)=1/(1+e−z)\sigma(z)=1/(1+e^{-z})σ(z)=1/(1+ez),输出[0,1]。
  • Tanh:σ(z)=(ez−e−z)/(ez+e−z)\sigma(z)=(e^z-e^{-z})/(e^z+e^{-z})σ(z)=(ezez)/(ez+ez),输出[-1,1]。
  • ReLU:σ(z)=max⁡(0,z)\sigma(z)=\max(0,z)σ(z)=max(0,z),简单高效,避免梯度消失。
  • Linear:σ(z)=z\sigma(z)=zσ(z)=z,用于回归输出层。

隐藏层常用ReLU,输出层线性以输出任意实数。

神经网络回归模型结构

数学表示

假设网络有LLL层。第lll层有mlm_lml个神经元。

  • 输入:a⃗(0)=x⃗∈Rm0\vec{a}^{(0)}=\vec{x}\in\mathbb{R}^{m_0}a(0)=xRm0

  • lll层:
    z⃗(l)=W(l)a⃗(l−1)+b⃗(l) \vec{z}^{(l)}=W^{(l)}\vec{a}^{(l-1)}+\vec{b}^{(l)} z(l)=W(l)a(l1)+b(l)
    a⃗(l)=σ(l)(z⃗(l)) \vec{a}^{(l)}=\sigma^{(l)}(\vec{z}^{(l)}) a(l)=σ(l)(z(l))
    其中W(l)∈Rml×ml−1W^{(l)}\in\mathbb{R}^{m_l\times m_{l-1}}W(l)Rml×ml1为权重矩阵,b⃗(l)∈Rml\vec{b}^{(l)}\in\mathbb{R}^{m_l}b(l)Rml为偏置。

  • 输出:y^=a⃗(L)\hat{y}=\vec{a}^{(L)}y^=a(L)(标量)。

整个网络:y^=f(x⃗;θ)\hat{y}=f(\vec{x};\theta)y^=f(x;θ)θ={W(l),b⃗(l)}l=1L\theta=\{W^{(l)},\vec{b}^{(l)}\}_{l=1}^Lθ={W(l),b(l)}l=1L为参数。

示例结构

简单回归网络:输入2维,1隐藏层(3神经元),输出1维。

  • 输入层:x⃗=(x1,x2)\vec{x}=(x_1,x_2)x=(x1,x2)
  • 隐藏层:W(1)∈R3×2W^{(1)}\in\mathbb{R}^{3\times2}W(1)R3×2b⃗(1)∈R3\vec{b}^{(1)}\in\mathbb{R}^3b(1)R3,激活ReLU。
  • 输出层:W(2)∈R1×3W^{(2)}\in\mathbb{R}^{1\times3}W(2)R1×3b⃗(2)∈R\vec{b}^{(2)}\in\mathbb{R}b(2)R,激活线性。

损失函数

回归常用均方误差(MeanSquaredError,MSE):
L(y^,y)=12(y^−y)2 \mathcal{L}(\hat{y},y)=\frac{1}{2}(\hat{y}-y)^2 L(y^,y)=21(y^y)2
批次样本:$ \mathcal{L}=\frac{1}{N}\sum_{i=1}N\frac{1}{2}(\hat{y}_i-y_i)2 $

其他:MAE(L=∣y^−y∣\mathcal{L}=|\hat{y}-y|L=y^y),HuberLoss(对异常值鲁棒)。

训练过程:反向传播与梯度下降

前向传播

从输入计算到输出,得到y^\hat{y}y^L\mathcal{L}L

反向传播(Backpropagation)

计算梯度∂L/∂θ\partial\mathcal{L}/\partial\thetaL/θ

  • 输出层误差:δ(L)=∂L/∂z⃗(L)=(y^−y)⋅σ(L)′(z⃗(L))\delta^{(L)}=\partial\mathcal{L}/\partial\vec{z}^{(L)}=(\hat{y}-y)\cdot\sigma^{(L)'}(\vec{z}^{(L)})δ(L)=L/z(L)=(y^y)σ(L)(z(L))(线性激活时σ′=1\sigma'=1σ=1,故δ(L)=y^−y\delta^{(L)}=\hat{y}-yδ(L)=y^y)。
  • 向后传播:δ(l)=(W(l+1))Tδ(l+1)⊙σ(l)′(z⃗(l))\delta^{(l)}=(W^{(l+1)})^T\delta^{(l+1)}\odot\sigma^{(l)'}(\vec{z}^{(l)})δ(l)=(W(l+1))Tδ(l+1)σ(l)(z(l))⊙\odot为逐元素乘。
  • 梯度:
    ∂L∂W(l)=δ(l)(a⃗(l−1))T \frac{\partial\mathcal{L}}{\partial W^{(l)}}=\delta^{(l)}(\vec{a}^{(l-1)})^T W(l)L=δ(l)(a(l1))T
    ∂L∂b⃗(l)=δ(l) \frac{\partial\mathcal{L}}{\partial\vec{b}^{(l)}}=\delta^{(l)} b(l)L=δ(l)

优化:梯度下降

更新参数:θ:=θ−η∇θL\theta:=\theta-\eta\nabla_\theta\mathcal{L}θ:=θηθLη\etaη为学习率。

变体:

  • SGD:随机梯度下降,每批次更新。
  • Momentum:添加动量v:=βv−η∇v:=\beta v-\eta\nablav:=βvηθ:=θ+v\theta:=\theta+vθ:=θ+v
  • Adam:自适应学习率,结合动量和RMSProp。

完整训练算法

  1. 初始化θ\thetaθ(e.g.,Xavier初始化)。
  2. 对于每个epoch:
    a. 前向:计算y^\hat{y}y^L\mathcal{L}L
    b. 反向:计算梯度。
    c. 更新θ\thetaθ
  3. 监控验证损失,早停防止过拟合。

数学推导示例:简单网络

假设单隐藏层,输入1维xxx,隐藏1神经元,输出y^\hat{y}y^

  • 前向:
    z(1)=w1x+b1z^{(1)}=w_1x+b_1z(1)=w1x+b1a(1)=σ(z(1))a^{(1)}=\sigma(z^{(1)})a(1)=σ(z(1))(ReLU)。
    z(2)=w2a(1)+b2z^{(2)}=w_2a^{(1)}+b_2z(2)=w2a(1)+b2y^=z(2)\hat{y}=z^{(2)}y^=z(2)(线性)。
  • 损失:L=12(y^−y)2\mathcal{L}=\frac{1}{2}(\hat{y}-y)^2L=21(y^y)2
  • 梯度:
    ∂L/∂y^=y^−y\partial\mathcal{L}/\partial\hat{y}=\hat{y}-yL/y^=y^y
    ∂L/∂w2=(y^−y)a(1)\partial\mathcal{L}/\partial w_2=(\hat{y}-y)a^{(1)}L/w2=(y^y)a(1)
    ∂L/∂b2=y^−y\partial\mathcal{L}/\partial b_2=\hat{y}-yL/b2=y^y
    ∂L/∂a(1)=(y^−y)w2\partial\mathcal{L}/\partial a^{(1)}=(\hat{y}-y)w_2L/a(1)=(y^y)w2
    ∂L/∂z(1)=∂L/∂a(1)⋅σ′(z(1))\partial\mathcal{L}/\partial z^{(1)}=\partial\mathcal{L}/\partial a^{(1)}\cdot\sigma'(z^{(1)})L/z(1)=L/a(1)σ(z(1))(ReLU’:1 ifz(1)>0z^{(1)}>0z(1)>0,else0)。
    ∂L/∂w1=∂L/∂z(1)⋅x\partial\mathcal{L}/\partial w_1=\partial\mathcal{L}/\partial z^{(1)}\cdot xL/w1=L/z(1)x
    ∂L/∂b1=∂L/∂z(1)\partial\mathcal{L}/\partial b_1=\partial\mathcal{L}/\partial z^{(1)}L/b1=L/z(1)

正则化与优化技巧

  • 过拟合防治

    • L1/L2正则:添加λ∑∣w∣\lambda\sum|w|λwλ∑w2\lambda\sum w^2λw2到损失。
    • Dropout:训练时随机丢弃神经元(概率p)。
    • 数据增强:增加训练数据。
    • 早停:验证损失上升时停止。
  • 初始化:He初始化forReLU:w∼N(0,2/ml−1)w\sim\mathcal{N}(0,\sqrt{2/m_{l-1}})wN(0,2/ml1)

  • 批标准化(BatchNormalization):在每层后标准化z⃗(l)\vec{z}^{(l)}z(l),加速训练。

  • 学习率调度:余弦退火或指数衰减。

  • 超参数调优:层数、神经元数、学习率、批大小。用GridSearch或BayesianOptimization。

优点与缺点

  • 优点

    • 处理非线性关系:通用函数逼近器。
    • 自动特征提取:隐藏层学习高级表示。
    • 可扩展:深层网络捕捉复杂模式。
  • 缺点

    • 计算密集:训练需GPU。
    • 黑箱:解释性差(用SHAP或LIME改善)。
    • 需大量数据:小数据集易过拟合。
    • 梯度消失/爆炸:深层网络问题(用ReLU、残差连接缓解)。

应用场景

  • 房价预测:输入面积、位置等,输出价格。
  • 时间序列预测:RNN/LSTM变体,但基本FNN可用于简单回归。
  • 图像回归:CNN提取特征,后接全连接回归(如年龄估计)。
  • 金融:股票价格预测。

实际例子

例子1:线性回归模拟

用单层无激活网络模拟线性回归y=2x+1y=2x+1y=2x+1

  • 输入xxx,输出y^=wx+b\hat{y}=wx+by^=wx+b
  • 损失MSE。
  • 训练后w≈2w\approx2w2b≈1b\approx1b1

例子2:非线性回归

预测y=sin⁡(x)+噪声y=\sin(x)+噪声y=sin(x)+噪声

  • 网络:输入1,隐藏[64,64]ReLU,输出1线性。
  • 数据:1000点x∈[−π,π]x\in[-π,π]x[π,π]
  • 训练:Adam,MSE,epochs=1000。
    网络学习正弦曲线。

代码实现(Python with PyTorch)

import torch
import torch.nn as nn
import torch.optim as optimclass RegressionNet(nn.Module):def __init__(self):super().__init__()self.fc1 = nn.Linear(1, 64)self.fc2 = nn.Linear(64, 64)self.fc3 = nn.Linear(64, 1)def forward(self, x):x = torch.relu(self.fc1(x))x = torch.relu(self.fc2(x))return self.fc3(x)# 数据
x = torch.randn(1000, 1) * 3.14
y = torch.sin(x) + 0.1 * torch.randn(1000, 1)# 训练
model = RegressionNet()
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.01)for epoch in range(1000):optimizer.zero_grad()output = model(x)loss = criterion(output, y)loss.backward()optimizer.step()

总结

神经网络回归通过多层变换、反向传播和优化学习连续映射。


文章转载自:

http://MfWsEhfU.jxwhr.cn
http://3bC1Qt8h.jxwhr.cn
http://QM1BdgDh.jxwhr.cn
http://rnOgJcVc.jxwhr.cn
http://bDPFBCCX.jxwhr.cn
http://SJex010x.jxwhr.cn
http://0JCFTtlo.jxwhr.cn
http://ZYnmyG5k.jxwhr.cn
http://sBqobTDi.jxwhr.cn
http://tdPXdKbu.jxwhr.cn
http://Q26JI9jF.jxwhr.cn
http://zL3EHOxh.jxwhr.cn
http://s8syOc4t.jxwhr.cn
http://j0CUFDGB.jxwhr.cn
http://CfQ5NDwW.jxwhr.cn
http://FIZlJsdo.jxwhr.cn
http://h4VkM4Eg.jxwhr.cn
http://6dHbKB8U.jxwhr.cn
http://92ZRD13K.jxwhr.cn
http://2C3ZksHf.jxwhr.cn
http://Me6AtimE.jxwhr.cn
http://zTnRCE9R.jxwhr.cn
http://dB28Bc3e.jxwhr.cn
http://cxRDAZ1h.jxwhr.cn
http://vsAaPoAk.jxwhr.cn
http://u806NmCD.jxwhr.cn
http://9Q6dpWty.jxwhr.cn
http://h0IcxWlI.jxwhr.cn
http://MXXH25nX.jxwhr.cn
http://Mggc3lin.jxwhr.cn
http://www.dtcms.com/a/377972.html

相关文章:

  • 前后端接口调试提效:Postman + Mock Server 的工作流
  • Cesium---1.133版本不修改源码支持arcgis MapServer 4490切片
  • express 框架基础和 EJS 模板
  • 多楼层室内定位可视化 Demo(A*路径避障)
  • python将pdf转txt,并切割ai
  • 可视化图解算法60: 矩阵最长递增路径
  • 4、幽络源微服务项目实战:后端公共模块创建与引入多租户模块
  • 用Next.js 构建一个简单的 CRUD 应用:集成 API 路由和数据获取
  • 如何通过url打开本地文件文件夹
  • Swagger隐藏入参中属性字段
  • JavaEE--8.网络编程
  • linux系统搭建nacos集群,并通过nginx实现负载均衡
  • 论文阅读:openai 2025 Why Language Models Hallucinate
  • Rail开发日志_9
  • opencv特征检测
  • 科普:环境隔离的工具:虚拟环境与容器Docker
  • 小迪安全v2023学习笔记(八十一讲)—— 框架安全ThinkPHPLaravelStruts2SpringBootCVE复现
  • ubuntu22.04 安装Docker
  • OpenCV 开发 -- 图像阈值处理
  • [Ubuntu][mount]ubuntu电脑挂载新硬盘
  • Maven中optional的作用
  • 使用pdfjs-dist 预览pdf,并添加文本层的实现
  • 操作系统应用开发(五)智能浏览器开发——东方仙盟元婴期
  • 蓝桥杯算法之基础知识(7)---排序题的快排和归并排序
  • leetcode-python-2154将找到的值乘以 2
  • Nginx 实战系列(十)—— LVS+Keepalived 高可用集群技术详解
  • C++ 前缀积 高频笔试考点 实用技巧 力扣 238.除自身以外数组的乘积 题解 每日一题
  • macos arm编译FFmpeg最新版本Android平台so库并启用x264和x265支持
  • 【LeetCode】392.判断子序列
  • StreamCap(直播录制) v1.0.2 绿色版