type
status
date
slug
summary
tags
category
icon
password
全连接神经网络
整体结构
- 输入层
- 隐藏层(包括输入和输出的神经元)
- 输出层

结构单元
一个神经元我们可以看作是一个 线性函数 + 激活函数 的组合。
其中
- X:输入,为一个矩阵/向量。
- W:权重。
- b:偏置量。
- h:激活函数。

激活函数
为什么要用激活函数?
如果不用激活函数,在这种情况下每一层输出都是上层输入的线性函数。容易验证,无论神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。因此引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。
激活函数一般为非线性,但是也有特殊的线性函数。
线性:满足齐次性和叠加性。
神经网络需要引入非线性因素,否则多层等价于一层,而这个非线性因素就是激活函数。
随着神经我那个罗深度的增加,会出现梯度消失或者梯度爆炸,引入残差模型能保留一部分数据。
前向传播
全连接神经网络的前向传播是数据从输入层经过隐藏层,最终到达输出层并产生预测结果的过程。
简单来说,前向传播就是一系列的线性矩阵运算与非线性激活的交替叠加。
第一步:加权求和(线性变换)
将上一层的输出与当前层的权重矩阵 相乘,并加上偏置项 。
- W (Weights权重): 决定了每个输入对下一层神经元的影响程度。
- b (Bias偏置量): 类似于截距,让模型能更好地拟合数据。
第二步:激活函数(非线性变换)
将上一步得到的 通过激活函数 (如 Sigmoid, Tanh 或 ReLU),得到当前层的最终输出(激活值)。
这一步至关重要,如果没有激活函数,无论网络有多少层,最终都只能表示线性关系。
前向传播的最终目的是为了计算出损失函数(Loss Function)的值。
- 通过将预测值 与真实标签 进行对比,我们可以知道当前模型的预测偏差有多大。
- 有了这个偏差,我们才能进行下一步:反向传播(Backpropagation),去更新权重。
损失函数
在全连接神经网络完成“前向传播”并得到预测值 $\hat{y}$ 后,我们需要一个标准来衡量这个预测值与真实标签 $y$ 之间的距离。这个标准就是损失函数(Loss Function)。
损失函数的值(Loss)越小,代表模型的预测越准确。
损失函数 vs 代价函数 (Cost Function)
在学习中你可能会听到这两个词,它们经常混用,但有微小区别:
- 损失函数 (Loss Function):通常指单个样本的误差。
- 代价函数 (Cost Function):通常指整个训练集所有样本误差的平均值。
- 目标函数 (Objective Function):更宽泛的概念,指训练过程中需要最大化或最小化的任意函数(损失函数是其一种)。
损失函数在训练中的位置
1. 前向传播:输入数据 经过 , 和激活函数 得到预测值 。
2. 计算损失:将 与真实值 代入损失函数 得到 。
3. 反向传播:根据 计算各个参数的导数(梯度)。
4. 参数更新:利用优化器(如 SGD, Adam)微调 和 。
梯度下降法
在神经网络中,如果说损失函数是衡量模型好坏的“尺子”,那么梯度下降法(Gradient Descent)就是引导模型进化的“指南针”。它是绝大多数深度学习算法的核心优化方法。
1. 直观理解:下山算法
想象你站在一座大雾漫漫的山上(这座山就是损失函数的曲面),你的目标是找到山的最低点(最低损失)。
- 因为大雾遮挡,你看不清远处的路。
- 你只能通过脚下的坡度,判断哪个方向下降得最快。
- 你朝着下降最快的方向迈出一小步,然后重复这个过程,直到到达山谷。
2. 数学原理
梯度的本质是一个向量,它指向函数值增长最快的方向。因此,为了减小损失函数的值,我们需要朝着梯度的反方向走。
其核心更新公式如下:
- :模型中的权重参数。
- (梯度):损失函数对参数的导数,代表了斜率。
- (学习率, Learning Rate):控制每一步迈多大。
3. 核心要素:学习率 ()
学习率是梯度下降中最关键的超参数:(通常为0.05-0.001)
- 太小: 步子太碎,模型收敛速度极慢,像蜗牛爬行。
- 太大: 步子太大,可能会直接跨过最低点,甚至导致损失值来回震荡,无法收敛。
4. 面临的挑战
- 局部最小值 (Local Minima):山谷可能不只是一个,你可能掉进了一个小坑,而没到真正的山底。
- 鞍点 (Saddle Points):有些地方像马鞍,一个方向下坡,另一个方向上坡,梯度为 0,导致模型停止更新。
全连接神经网络存在的问题
1. 参数量爆炸(Parameter Explosion)
全连接层的每一个神经元都必须与前一层的所有神经元相连。
- 举个例子: 假设输入是一张非常普通的 像素的彩色照片。
- 该图片的输入特征数 = 个像素值。
- 如果第一个隐藏层仅有 1000 个神经元,那么仅仅这一层就需要:
- 后果: 巨大的参数量不仅消耗极高的计算资源和内存,还极易导致过拟合(Overfitting),因为模型参数太多,它会倾向于“背下”训练数据而非学习规律。
2. 忽略了空间结构信息(Loss of Spatial Structure)
这是全连接网络处理图像时的致命伤。
- 必须拉平: 在进入全连接层之前,图像矩阵必须被“拉平”成一维向量。
- 后果: 像素之间的上下、左右、斜向的邻里关系被彻底破坏。对于神经网络来说,猫的眼睛是在耳朵旁边,还是在图片的左下角,它很难通过这种线性排列看出来。
- 对比: 人类看图是看“局部块”的,全连接网络看图是看“孤立点”的。
3. 缺乏平移不变性(Lack of Translation Invariance)
全连接网络对位置极其敏感。
- 现象: 如果你训练一个模型识别图片正中央的“猫”,当你把这只猫挪到图片的左上角时,全连接网络可能就认不出来了。
- 原因: 因为猫挪动位置后,对应的像素会触发完全不同的神经元连接。它没有一种机制来学习“无论猫在哪里,它都是猫”这种特征提取能力。
4. 特征提取效率低下
全连接网络试图在全局范围内寻找规律。
- 它每一层都在学习“整张图”的组合,而忽略了从局部到整体的层次感(如:先看线条,再看五官,最后看整张脸)。
- 这导致它无法像卷积神经网络(CNN)那样,通过小的卷积核在图像不同位置复用同一套参数(即权重共享)。
激活函数
Sigmoid函数
Sigmoid函数是一个在生物学中常见的S型函数,也称为S型生长曲线。在深度学习中,由于其单增以及反函数单增等性质,Sigmoid函数常被用作神经网络的激活函数,将变量映射到[0,1]之间。
Sigmoid函数的导数可以用其自身表示:
Sigmoid函数及其倒数的图像

✅ 优点:
- 平滑渐变: 它是全域可导的,这对于基于梯度的优化算法(如反向传播)(反向传播的时候更新参数续呀乘上到数值h)至关重要。
- 输出限制在 (0, 1): 这一特性使其非常适合表示概率。在二分类任务的输出层,Sigmoid 常被用来预测某个样本属于某一类的概率。
❌ 缺点:
- 梯度消失(Gradient Vanishing): 这是 Sigmoid 最致命的缺点。当输入 x 的绝对值很大时,函数的导数趋近于 0。在深度网络中,这会导致梯度在反向传播过程中迅速衰减,使得靠近输入层的参数几乎无法更新。
- 非零中心化(Not Zero-centered): Sigmoid 的输出始终大于 0,这会导致后一层的神经元输入永远是正数,可能导致梯度更新时出现“锯齿状”摆动,减缓收敛速度。
- 计算开销: 包含指数运算,相比于 ReLU ,计算成本稍高。
Tanh函数(双曲正切函数)
双曲正切函数是双曲函数的一种。双曲正切函数在数学语言上一般写作tanh \tanhtanh。它解决了Sigmoid函数的不以0为中心输出问题,然而,梯度消失的问题和幂运算的问题仍然存在。
函数特性
- 值域: 输出范围在 (-1, 1) 之间。
- 零中心化(Zero-centered): 这是它优于 Sigmoid 的核心点。Tanh 的输出均值为 0。
- S 型曲线: 同样具有平滑的、非线性的“S”形状。
✅ 优点:
- 解决了Sigmoid函数输出值非0对称的问题。
- 训练比Sigmoid函数快,更容易收敛。
❌ 缺点:
- 反向传播训练时有梯度消失的问题。
- Tanh函数和Sigmoid函数非常相似。
ReLU激活函数
ReLU 的定义非常“暴力”且简单:如果输入是正数,直接输出;如果输入是负数,输出为 0。
用分段函数表示为:


✅ 优点:
- 缓解梯度消失: 在 x > 0 的区域,导数恒为 1。这保证了在深层网络中梯度能有效回传,解决了 Sigmoid 等函数在深层网络中信号衰减的问题。
- 计算速度极快:计算更为简单,没有Sigmoid函数和Tanh函数的指数运算。
- 稀疏激活: 当 x < 0 时输出为 0。这意味着在同一时间只有部分神经元被激活,这种稀疏性使得网络更加轻量,能有效缓解过拟合。
❌ 缺点(潜在风险)
- Dead ReLU(神经元死亡): 这是最严重的问题。如果参数更新过大,导致神经元对所有数据都输出负值,那么该神经元的梯度将永久变为 0,导致其再也无法更新,变成“死掉”的神经元。
- 不能处理负值。
- 无界性: 相比于 Sigmoid 的 [0, 1] 限制,ReLU 在正向是无界的,如果权重控制不好,某些层的输出可能会变得非常大,导致数值溢出。
Leak ReLU函数
Leaky ReLU 在输入为负数时,不再将其强行“抹杀”为 0,而是赋予一个极小的斜率(通常为 0.01)。
用分段函数表示:
其中 是一个很小的常数(如 0.01)。
函数图像如下:


✅ 优点
- 防止神经元死亡: 确保了所有神经元在训练过程中都能保持参数更新。
- 收敛更稳: 由于输出的均值更接近于 0(相比标准 ReLU),它能在一定程度上加快模型的收敛速度。
- 计算依然简单: 虽然比 ReLU 多了一次乘法运算,但计算开销依然远低于 Sigmoid 或 Tanh。
❌ 缺点
- 参数超调: 的值需要手动设置(通常设为 0.01)。如果设置不当,可能会影响性能。
- 无法为正负值提供一致的关系预测。
损失函数
损失函数的选择高度取决于你的任务类型:
A. 回归任务(预测连续数值)
例如预测房价、气温等。
- 均方误差 (Mean Squared Error, MSE)
计算预测值与真实值差值的平方。
特点: 对误差较大的样本非常敏感(因为有平方),会惩罚离群点。
- 平均绝对误差 (Mean Absolute Error, MAE)
计算预测值与真实值差值的绝对值。
特点: 对离群点比 MSE 更鲁棒。
B. 分类任务(预测类别)
例如判断图片里是猫还是狗。
- 交叉熵损失 (Cross-Entropy Loss)
这是分类任务中最常用的损失函数。它衡量的是两个概率分布(真实分布与预测分布)之间的差异
- 二分类(Binary Cross-Entropy):
- 多分类(Categorical Cross-Entropy):通常配合 Softmax 激活函数使用。
特点: 当预测概率接近真实标签时,损失趋近于 0;当预测错误且非常有信心时,损失会变得巨大。
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://tangly1024.com/article/2dec7b13-c6a7-8024-aeda-de85578c0950
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!








