直观理解神经网络最后一层全连接+Softmax

本文从加权、模板匹配和几何三个角度深入理解神经网络最后一层全连接+Softmax。全连接层将特征与权重相乘得到分数,Softmax将其转换为概率分布。加权角度强调权重的重要性,模板匹配视wj为类别模板,几何角度通过超平面划分解释多分类。Softmax提供更好的可解释性,便于后续处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客:blog.shinelee.me | 博客园 | 优快云

写在前面

这篇文章将从3个角度:加权模版匹配几何来理解最后一层全连接+Softmax。掌握了这3种视角,可以更好地理解深度学习中的正则项、参数可视化以及一些损失函数背后的设计思想。

全连接层与Softmax回顾

深度神经网络的最后一层往往是全连接层+Softmax(分类网络),如下图所示,图片来自StackExchange

FlFUSJ.png

先看一下计算方式全连接层将权重矩阵与输入向量相乘再加上偏置,将 n n n ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)的实数映射为 K K K ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)的实数(分数);Softmax K K K ( − ∞ , + ∞ ) (-\infty, +\infty) (,+)的实数映射为 K K K ( 0 , 1 ) (0, 1) (0,1)的实数(概率),同时保证它们之和为1。具体如下:

y ^ = s o f t m a x ( z ) = s o f t m a x ( W T x + b ) \hat{\mathrm{y}} = softmax(\mathrm{z}) = softmax(\mathrm{W}^{T} \mathrm{x} + \mathrm{b}) y^=softmax(z)=softmax(WTx+b)

其中, x \mathrm{x} x为全连接层的输入, W n × K W_{n \times K} Wn×K 为权重, b \mathrm{b} b为偏置项, y ^ \hat{\mathrm{y}} y^为Softmax输出的概率,Softmax的计算方式如下:

s o f t m a x ( z j ) = e z j ∑ K e z j softmax(z_j) = \frac{e^{z_j}}{\sum_K e^{z_j}} softm

### 卷积神经网络全连接层的作用 在卷积神经网络(CNN)架构中,全连接层通常位于网络末端,在此之前是若干卷积层和池化层。这些前序层负责提取输入数据的空间层次特征并形成多通道的特征映射(feature maps)[^1]。 全连接层的主要功能在于将前面各层所学习到的不同抽象级别的空间分布模式汇总起来,并将其转换为固定长度的一维向量表示形式。这一过程有助于捕捉全局上下文信息以及不同区域间的关联性,从而更好地支持最终分类决策或其他高级任务需求[^2]。 然而值得注意的是,由于全连接操作会丢失掉原始图像中的位置关系等重要线索,因此对于某些特定应用场景如目标检测、语义分割等,则不太适用这种处理方式;相反地,在此类情况下更倾向于采用其他机制来保留必要的几何结构属性[^3]。 为了直观理解全连接层的工作原理及其在网络整体框架内的角色定位,可以参考下述简化版CNN结构示意: ![Convolutional Neural Network with Fully Connected Layers](https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/AlexNet.svg/800px-AlexNet.svg.png) 该图展示了经典的AlexNet模型架构,其中最后一部分即由两个连续堆叠而成的大规模全连接层组成(每层含有4096个节点),它们接收来自先前最大池化后的特征映射作为输入,并通过激活函数传递给后续Softmax分类器完成预测输出。 ```python import torch.nn as nn class CNNModel(nn.Module): def __init__(self): super(CNNModel, self).__init__() # 定义卷积层和其他组件... self.fc = nn.Sequential( nn.Linear(in_features=..., out_features=4096), nn.ReLU(), nn.Dropout(p=...), # 可选:防止过拟合 nn.Linear(in_features=4096, out_features=4096), nn.ReLU(), nn.Dropout(p=...) # 继续定义更多层或输出层... ) def forward(self, x): ... x = x.view(x.size(0), -1) # 将三维张量展平为一维向量 output = self.fc(x) return output ``` 上述代码片段展示了一个简单的PyTorch实现例子,说明如何构建包含多个全连接层在内的CNN模型。这里`nn.Linear()`方法用来创建线性变换模块,而`ReLU()`则提供了非线性的引入途径以增强表达能力。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值