核心内容摘要
7000条青春说说如何永久保存?这款工具让QQ空间回忆永不褪色
人工智能之核心技术 深度学习
神经网络基础—公式关注公众号文章目录人工智能之核心技术 深度学习
感知器模型
1 线性感知器Perceptron
2 多层感知器MLP, Multi-Layer Perceptron
激活函数常见激活函数对比激活函数图像示意
神经网络结构设计
1 各层作用
2 设计原则1隐藏层数量2每层神经元数量
配套代码实现PyTorch
万能近似定理Universal Approximation Theorem
总结资料关注
感知器模型
1 线性感知器Perceptron结构线性感知器是最简单的神经网络单元由 Frank Rosenblatt 在 1957 年提出。
它模拟生物神经元接收多个输入加权求和后通过一个激活函数输出结果。
数学表达式为y f ( ∑ i 1 n w i x i b ) y f\left( \sum_{i1}^{n} w_i x_i b \right)yf(i1∑nwixib)其中x i x_ixi是第i ii个输入w i w_iwi是对应的权重b bb是偏置biasf ( ⋅ ) f(\cdot)f(⋅)是激活函数感知器中通常为阶跃函数原理感知器试图学习一个线性决策边界超平面将两类数据分开。
如果数据线性可分感知器学习算法可以收敛到正确解。
局限性感知器只能解决线性可分问题。
经典反例是异或XOR问题x₁x₂XOR000011101110这四点无法用一条直线完全分开如下图所示因此单层感知器无法学习 XOR。
x1Perceptronx2y关键结论单层感知器 线性分类器 → 无法处理非线性问题。
2 多层感知器MLP, Multi-Layer Perceptron为了解决感知器的局限性人们引入了隐藏层形成了多层感知器MLP。
结构输入层 → 一个或多个隐藏层 → 输出层核心思想通过堆叠非线性变换组合出复杂的决策边界从而拟合非线性函数如 XORXOR 的 MLP 解决方案2 层隐藏层有 2 个神经元分别学习“AND”和“OR”逻辑输出层组合它们实现 XORx1h1h2x2y✅突破MLP 非线性激活函数 → 可以逼近任意连续函数万能近似定理
激活函数激活函数赋予神经网络非线性表达能力。
如果没有激活函数无论多少层网络都等价于一个线性模型。
常见激活函数对比激活函数公式优点缺点适用场景Sigmoid$ \sigma(x) \frac{1}{1 e^{-x}} $输出在 (0,
适合概率输出梯度消失、输出非零中心二分类输出层Tanh$ \tanh(x) \frac{e^x - e{-x}}{ex e^{-x}} $零中心、比 Sigmoid 梯度更强仍存在梯度消失隐藏层早期ReLU$ \text{ReLU}(x) \max(0, x) $计算快、缓解梯度消失“神经元死亡”负区梯度为0默认隐藏层激活函数Leaky ReLU$ \text{LReLU}(x) \begin{cases} x x 0 \ \alpha x x \leq 0 \end{cases} $解决 ReLU 死亡问题需调超参α \alphaαReLU 的改进版Softmax$ \text{Softmax}(z_i) \frac{e^{z_i}}{\sum_j e^{z_j}} $多分类概率归一化仅用于输出层多分类任务输出层激活函数图像示意现代实践建议隐藏层优先使用ReLU或Leaky ReLU二分类输出用Sigmoid多分类输出用Softmax
神经网络结构设计
1 各层作用层类型作用输入层接收原始特征如像素值、文本向量不做计算仅传递隐藏层提取特征、学习数据的抽象表示层数越多抽象能力越强输出层生成最终预测分类概率、回归值等激活函数依任务而定
2 设计原则1隐藏层数量浅层网络1~2 层适用于简单任务、小数据集深层网络3 层适用于复杂任务图像、语音但需足够数据和正则化⚠️ 并非越深越好过深可能导致梯度消失/爆炸过拟合训练困难2每层神经元数量输入层神经元数 特征维度输出层神经元数 类别数分类或 1回归隐藏层神经元数经验法则通常介于输入与输出之间常用$ N_h \frac{N_{in} N_{out}}{2} $ 或 $ N_h \sqrt{N_{in} \times N_{out}} $也可采用“金字塔”结构逐层减少实用技巧从简单结构开始如 1 隐藏层64 神经元用验证集调参Grid Search / Random Search使用 Dropout、BatchNorm 提升泛化
配套代码实现PyTorch以下是一个完整的 MLP 实现用于解决 XOR 问题importtorchimporttorch.nnasnnimporttorch.optimasoptim# XOR 数据Xtorch.tensor([[0,0],[0,1],[1,0],[1,1]],dtypetorch.float
ytorch.tensor([[0],[1],[1],[0]],dtypetorch.float
# 定义 MLP 模型classXOR_MLP(nn.Module):def__init__(self):super().__init__()self.hiddennn.Linear(2,
# 输入2维隐藏层4神经元self.outputnn.Linear(4,
# 输出1维self.relunn.ReLU()self.sigmoidnn.Sigmoid()# 二分类输出defforward(self,x):xself.relu(self.hidden(x))xself.sigmoid(self.output(x))returnx# 实例化模型、损失函数、优化器modelXOR_MLP()criterionnn.BCELoss()# 二元交叉熵optimizeroptim.SGD(model.parameters(),lr
0.
# 训练forepochinrange(
:optimizer.zero_grad()predmodel(X)losscriterion(pred,y)loss.backward()optimizer.step()ifepoch%2000:print(fEpoch{epoch}, Loss:{loss.item():.4f})# 测试withtorch.no_grad():outputmodel(X)print(\n预测结果:)foriinrange(
:print(f输入:{X[i].tolist()}- 预测:{output[i].item():.4f}(真实:{y[i].item()}))输出示例Epoch 0, Loss:
7032 Epoch 200, Loss:
0321 ... 预测结果: 输入: [
0,
0] - 预测:
0123 (真实:
0.
输入: [
0,
0] - 预测:
9876 (真实:
1.
...✅ 成功解决 XOR
万能近似定理Universal Approximation Theorem定理一个具有单隐藏层和足够多神经元的前馈神经网络只要使用非线性激活函数就可以以任意精度逼近任何定义在紧集上的连续函数。
这意味着理论上一个隐藏层就足够强大。
但实践中深层网络更高效用更少参数表达复杂函数。