神经网络基础:引入隐藏层
约 1171 字大约 4 分钟
神经网络基础:引入隐藏层
一、核心问题:非单调性分类
- 问题背景:目标变量的变化模式变得复杂,不再呈现简单的单调关系(如“越大越可能”或“越小越可能”)。
- 数学限制:传统的线性函数或具有单调激活函数的单神经元模型,其输出在整个定义域内是单调一致的,无法拟合“先增后减”或“先减后增”的模式。
- 解决方案:需要构建能够产生非单调输出函数的预测模型。
二、解决方案:构建神经网络
通过将多个神经元连接成网络,可以组合出复杂的、非单调的函数。
1. 网络结构示例
一个简单的网络包含:
- 一个输入层(输入特征X)
- 一个隐藏层(包含两个神经元)
- 一个输出层(包含一个神经元)
网络结构简化表示(省略了偏置项 b):
输入 X -> [隐藏层神经元1] -> [输出层神经元]
[隐藏层神经元2] ->2. 工作原理
- 隐藏层处理:
- 输入
X分别送入两个隐藏层神经元。 - 每个神经元执行:
线性运算 (z = w*x + b)->激活函数 (如 Sigmoid)。 - 通过梯度下降调整参数,两个神经元可以学习到输入数据在不同“维度”或“视角”下的不同特征(例如,一个关注“较小范围”,一个关注“较大范围”)。
- 输入
- 输出层整合:
- 将两个隐藏层神经元的输出作为输入。
- 执行:
线性组合 (z = w1*a1 + w2*a2 + b)->激活函数。 - 通过线性组合,可以将两个单调的Sigmoid曲线叠加,从而形成具有“山丘”形状的非单调最终输出曲线。
3. 核心概念
- 隐藏层:网络中间层,其神经元称为隐藏单元。隐藏层的存在使得网络能够学习输入数据的抽象特征和复杂组合。
- 网络深度:指隐藏层的数量。
- 深度学习:通常指隐藏层较多(例如超过三层)的神经网络。
- 模型的泛化能力:训练好的模型对未见过的新数据做出准确预测的能力。这是机器学习的核心目标。
- 数据依赖:神经网络的性能严重依赖于海量的训练数据。数据越充足,模型学到的规律越可靠,泛化能力越强。
三、编程实现要点(单隐藏层网络)
1. 参数命名规则
为了清晰管理多层网络中的众多参数,采用系统化的命名方式:
W[输入序号][本层神经元序号]_[层号]:表示权重。- 例:
W11_1表示第1层的第1个神经元,与第1个输入之间的权重。
- 例:
B[本层神经元序号]_[层号]:表示偏置。- 例:
B1_1表示第1层的第1个神经元的偏置。
- 例:
- 约定:下划线后的数字表示所在层。
2. 前向传播流程
- 隐藏层计算(以第一层为例):
- 神经元1:
Z11 = W11_1 * X + B1_1->A11 = sigmoid(Z11) - 神经元2:
Z21 = W12_1 * X + B2_1->A21 = sigmoid(Z21)
- 神经元1:
- 输出层计算(第二层):
Z12 = W11_2 * A11 + W21_2 * A21 + B1_2A12 = sigmoid(Z12)(此为最终网络输出)
3. 反向传播与梯度下降
- 核心:使用链式法则将最终输出误差
E反向传播,计算误差对于网络中每一个参数(W,B)的梯度。 - 步骤:
- 计算误差
E(如均方误差)。 - 从输出层向输入层逐层反向计算:
- 计算误差对当前层输出
A的导数。 - 计算
A对当前层线性输出Z的导数(即激活函数的导数)。 - 计算
Z对当前层参数W,B的导数。 - 利用链式法则相乘,得到误差
E对参数W,B的最终梯度。
- 计算误差对当前层输出
- 使用梯度下降更新所有参数:
参数 = 参数 - 学习率 * 梯度。
- 计算误差
关键提示:编码时需仔细梳理参数名称和计算顺序,耐心调试。
总结
本节课的核心在于通过引入隐藏层构建简单的神经网络,解决了单神经元模型无法处理的非单调分类问题。网络通过前向传播进行预测,通过基于链式法则的反向传播进行学习,调整所有连接权重和偏置。隐藏层使网络能够从数据中学习更复杂的特征组合,而网络的最终表现(泛化能力)则依赖于充足的数据和充分的训练。这构成了深度学习的基础框架。
