PyTorch深度学习教程:人工神经网络(ANNs)基础与应用

PyTorch深度学习教程:人工神经网络(ANNs)基础与应用

NYU-DLSP20 NYU Deep Learning Spring 2020 NYU-DLSP20 项目地址: https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning

引言

人工神经网络(Artificial Neural Networks, ANNs)是深度学习的核心组成部分。本文将以螺旋分类问题为例,深入讲解ANN的基本原理、结构设计和训练方法,帮助读者掌握使用PyTorch构建和训练神经网络的关键技术。

分类问题与线性不可分性

考虑一个二维空间中的三分类问题,数据点呈螺旋状分布(如图1所示)。每个颜色代表一个类别标签,总共有K=3个类别。这类数据的特点是线性不可分,即无法用直线将不同类别的数据完全分开。

螺旋数据分布

数学表示

  • 干净数据:$X_{k}(t)=t\left(\begin{array}{c}{\sin \left[\frac{2 \pi}{K}(2 t+k-1)\right]} \ {\cos \left[\frac{2 \pi}{K}(2 t+k-1)\right]}\end{array}\right)$
  • 带噪声数据:在角度上添加高斯噪声$\mathcal{N}(0, \sigma^{2})$

传统逻辑回归在这种问题上表现不佳,因为它只能产生线性决策边界。而神经网络的优势在于能够学习非线性变换,将输入空间映射到新的特征空间,使数据变得线性可分。

神经网络基础结构

全连接网络(Fully Connected Network)

一个典型的三层全连接网络(输入层、隐藏层、输出层)可以表示为:

$$ \begin{aligned} &\boldsymbol h=f\left(\boldsymbol{W}{h} \boldsymbol x+ \boldsymbol b{h}\right)\ &\boldsymbol{\hat{y}}=g\left(\boldsymbol{W}{y} \boldsymbol h+ \boldsymbol b{y}\right) \end{aligned} $$

其中:

  • $f$和$g$是非线性激活函数
  • $\boldsymbol{W}_h$, $\boldsymbol{b}_h$是隐藏层的权重和偏置
  • $\boldsymbol{W}_y$, $\boldsymbol{b}_y$是输出层的权重和偏置

激活函数选择

常用的激活函数包括:

  • ReLU:$f(x) = \max(0, x)$
  • Sigmoid:$f(x) = \frac{1}{1+e^{-x}}$
  • Tanh:$f(x) = \tanh(x)$
  • Softmax(多分类输出层):$\text{softmax}(\boldsymbol{l})[c] = \frac{ \exp(\boldsymbol{l}[c])} {\sum^K_{k=1} \exp(\boldsymbol{l}[k])}$

数据表示与预处理

输入数据

  • $\boldsymbol{X} \in \mathbb{R}^{m \times n}$:m个样本,每个样本n维特征
  • 对于螺旋数据,n=2(二维坐标)

标签编码

直接使用数字标签(如1,2,3)可能导致网络误认为类别间存在顺序关系。更好的方法是使用独热编码(one-hot encoding)

  • 对于类别$c_i$,创建一个K维零向量
  • 将第$c_i$位置设为1
  • 最终标签矩阵$\boldsymbol{Y} \in \mathbb{R}^{m \times K}$

独热编码示例

网络训练原理

损失函数

对于多分类问题,常用负对数似然损失(Negative Log-Likelihood Loss)

$$ \mathcal{L}(\boldsymbol{\hat{Y}}, \boldsymbol{c}) = \frac{1}{m} \sum_{i=1}^m \ell(\boldsymbol{\hat{y}_i}, c_i), \quad \ell(\boldsymbol{\hat{y}}, c) = -\log(\boldsymbol{\hat{y}}[c]) $$

其中$\boldsymbol{\hat{y}}[c]$是模型对正确类别的预测概率。

梯度下降

训练过程是优化网络参数$\mathbf{\Theta} = \lbrace\boldsymbol{W_h, b_h, W_y, b_y} \rbrace$以最小化损失$J(\mathbf{\Theta})$的过程。基本步骤:

  1. 前向传播计算输出
  2. 计算损失
  3. 反向传播计算梯度
  4. 参数更新:$\vartheta \gets \vartheta - \eta, \nabla_\vartheta J$

梯度下降示意图

实践案例:螺旋分类

线性模型 vs 非线性模型

  1. 仅线性层:准确率约50%,决策边界为直线,无法很好分离螺旋数据
  2. 线性层+ReLU+线性层:准确率提升至95%,能够学习非线性决策边界

决策边界对比

PyTorch训练关键步骤

# 1. 前向传播
output = model(input)

# 2. 计算损失
loss = criterion(output, target)

# 3. 清零梯度
model.zero_grad()

# 4. 反向传播
loss.backward()

# 5. 参数更新
optimizer.step()

扩展应用:回归问题

同样的网络结构也可用于回归任务。不同激活函数产生不同特性:

  • ReLU:分段线性预测
  • Tanh:平滑连续预测

回归结果对比

当预测超出训练范围时,网络预测会趋向于±∞,此时可以通过集成多个网络的预测来估计不确定性。

总结

本文通过螺旋分类问题,系统讲解了人工神经网络的核心概念:

  1. 全连接网络的结构与数学表示
  2. 激活函数的作用与选择
  3. 分类问题的数据表示方法
  4. 训练过程的原理与实现
  5. 线性与非线性模型的对比

理解这些基础知识是掌握更复杂深度学习模型的关键。在实际应用中,还需要考虑网络深度、宽度、正则化等更多因素来优化模型性能。

NYU-DLSP20 NYU Deep Learning Spring 2020 NYU-DLSP20 项目地址: https://gitcode.com/gh_mirrors/pyt/pytorch-Deep-Learning

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华情游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值