深度学习基础
深度学习基础核心知识点笔记
一、感知机(深度学习的"最小计算单元")
感知机是模拟生物"单个神经元信号传递"的简化模型,是神经网络的底层基石,核心解决"如何对输入数据做初步变换"的问题。
1. 核心定义与定位
- 范畴:属于传统机器学习模型(非深度学习),本质是"线性分类器",数学逻辑为主(与脑科学的神经元工作机制仅为"类比",无直接生物学关联)。
- 作用:为神经网络提供"输入→加权→激活→输出"的基础计算范式,单个感知机可解决简单线性可分问题(如"判断学生是否及格":输入成绩,输出"及格/不及格")。
2. 完整工作流程
感知机的计算需包含输入、加权求和(含偏置)、激活函数、输出四步,完整流程如下:
-
输入层:接收多个"特征输入"(如判断是否下雨的特征:湿度\(X_1\)、云量\(X_2\)、风速\(X_3\)),每个输入对应一个权重\(W\)(\(W_1, W_2, W_3\))——权重越大,代表该特征对输出的影响越强(如湿度对下雨的影响比风速大,则\(W_1 > W_3\))。
-
加权求和(含偏置):计算"输入×权重"的总和后,需加上偏置项\(b\)(Bias),公式为:
\[z = X_1W_1 + X_2W_2 + X_3W_3 + b \]- 偏置项作用:调整输出的"基线",避免因输入全为0导致模型无法激活(例如:即使湿度、云量都为0,偏置\(b\)可代表"默认下雨概率")。
-
激活函数处理:将\(z\)输入激活函数\(f(\cdot)\),实现"非线性变换"——这是感知机从"简单线性计算"到"能拟合复杂关系"的关键(若无激活函数,感知机仅能做线性回归/分类)。
视频及实际应用中常见激活函数对比:
激活函数类型 | 公式(简化) | 适用场景 | 特点 |
---|---|---|---|
阶跃函数 | \(f(z)=1\)(\(z≥0\));\(f(z)=0\)(\(z<0\)) | 二分类任务(如"是/否"判断) | 仅输出0/1,无中间值,无法传递梯度(不适合深度学习) |
Sigmoid函数 | \(f(z)=\frac{1}{1+e^{-z}}\) | 二分类任务输出层(输出概率0~1) | 输出平滑,可传递梯度,但易出现"梯度消失"(输入过大/过小时导数趋近0) |
ReLU函数 | \(f(z)=\max(0,z)\) | 隐藏层(尤其是深层网络) | 计算简单,缓解梯度消失,是目前最常用的隐藏层激活函数 |
- 输出层:激活函数的结果即为感知机的最终输出\(Y\),完整公式:\[Y = f(X_1W_1 + X_2W_2 + X_3W_3 + b) \]
3. 关键局限性
单个感知机仅能处理线性可分问题,无法解决"异或(XOR)"这类非线性问题——这是神经网络诞生的核心原因:
- 例:异或问题需求"输入(0,0)输出0;(0,1)输出1;(1,0)输出1;(1,1)输出0",用感知机无法找到一条直线将"输出1"和"输出0"的样本完全分开,而多个感知机构成的神经网络可通过多层计算解决。
二、神经网络(感知机的"多层协同网络")
神经网络是将多个感知机(称为"神经元")按"层级"连接形成的复杂模型,核心解决"感知机无法处理非线性问题"的局限,模拟人脑"多神经元协同处理信息"的过程。
1. 定义与核心优势
- 别称:早期称"多层感知机(MLP)",现统称"神经网络"(强调与脑科学的类比,增强AI属性)。
- 核心优势:通过"多层隐藏层+非线性激活函数"的组合,具备拟合任意非线性函数的能力(根据"万能近似定理",足够多的隐藏层和神经元可逼近任何连续函数)。
2. 完整网络结构
神经网络的结构分为输入层、隐藏层、输出层,层与层之间为"全连接"(即上一层每个神经元都与下一层所有神经元相连),具体定义与实例如下:
层级类型 | 定义 | 节点数(神经元数量)确定规则 | 实例(以"房价预测"任务为例) |
---|---|---|---|
输入层 | 接收原始数据的"入口层",无激活函数,仅传递数据 | 等于输入数据的"特征数"(每个特征对应一个节点) | 房价预测的特征:面积、房龄、楼层 → 输入层节点数=3 |
隐藏层 | 位于输入层与输出层之间,负责"提取数据特征",可多层(≥1层) | 无固定规则,通常根据任务复杂度调整(如简单任务1层,复杂任务3~5层) | 设1层隐藏层,节点数=5(通过经验或交叉验证确定) |
输出层 | 输出模型预测结果的"出口层",激活函数需根据任务选型 | 等于任务的"输出维度"(预测目标数量) | 房价预测是"回归任务"(输出具体价格)→ 输出层节点数=1 |
实例:房价预测神经网络的结构示意图
输入层(3节点):面积(X1) → 隐藏层(5节点):神经元1、神经元2、神经元3、神经元4、神经元5 → 输出层(1节点):预测房价(Y)
房龄(X2) → (全连接,每个输入节点连所有隐藏节点)
楼层(X3) →
3. 数据计算逻辑(分层拆解)
神经网络的计算是"逐层传递、每层独立计算",以"输入层→隐藏层→输出层"为例:
-
输入层→隐藏层:
- 输入层节点(\(X_1, X_2, X_3\))与隐藏层每个神经元的权重(如隐藏层神经元1的权重\(W_{11}, W_{21}, W_{31}\))相乘求和,加偏置\(b_1\),得到\(z_1 = X_1W_{11} + X_2W_{21} + X_3W_{31} + b_1\)。
- 对\(z_1\)应用激活函数(如ReLU),得到隐藏层神经元1的输出\(a_1 = \max(0, z_1)\)。
- 重复上述步骤,得到隐藏层所有神经元的输出(\(a_1, a_2, a_3, a_4, a_5\))。
-
隐藏层→输出层:
- 隐藏层输出(\(a_1\)~\(a_5\))与输出层神经元的权重(\(W_{1o}, W_{2o}, ..., W_{5o}\))相乘求和,加偏置\(b_o\),得到\(z_o = a_1W_{1o} + a_2W_{2o} + ... + a_5W_{5o} + b_o\)。
- 对\(z_o\)应用激活函数(回归任务用"恒等函数",即\(f(z)=z\)),得到最终预测输出\(Y_{\text{实际}} = z_o\)。
三、反向传播算法(BP:神经网络的"学习引擎")
反向传播(Backpropagation,简称BP)是神经网络"调整权重以降低误差"的核心算法,本质是"用误差指导权重修改",类比人类"做错后反思并修正"的学习过程。
1. 核心逻辑与数学基础
- 核心逻辑:正向传播算误差,反向传播求梯度,梯度下降改权重——通过正向传播得到预测误差,再反向计算各层权重对误差的"贡献度"(即梯度),最后用梯度下降法调整权重,减少误差。
- 数学基础:链式法则(复合函数求导法则)——误差是"权重的复合函数",需从输出层反向逐层求导,才能得到每个权重对误差的影响(梯度)。
2. 完整执行步骤
以"房价预测任务(目标输出\(Y_{\text{目标}}=100\)万元)"为例,详细拆解反向传播的每一步:
步骤1:初始化参数(权重与偏置)
- 随机初始化所有层的权重(如\(W_{11}=0.2, W_{21}=0.5, ...\))和偏置(如\(b_1=0.1, b_o=0.3\))——初始参数是随机的,因此首次预测误差会很大。
步骤2:正向传播计算实际输出
- 按"输入层→隐藏层→输出层"的流程,计算出模型的实际预测值\(Y_{\text{实际}}\)(如首次计算得到\(Y_{\text{实际}}=85\)万元)。
步骤3:计算误差
- 误差通过损失函数(Loss Function) 量化,不同任务用不同损失函数,视频及实际应用中常见2类:
- 均方误差(MSE):适用于回归任务(如房价预测),公式为:\[\text{Loss} = \frac{1}{2}(Y_{\text{目标}} - Y_{\text{实际}})^2 \]实例:\(Y_{\text{目标}}=100\),\(Y_{\text{实际}}=85\) → \(\text{Loss} = \frac{1}{2}(100-85)^2 = 112.5\)。
- 交叉熵损失(Cross-Entropy):适用于分类任务(如"判断图片是否为猫"),公式简化为:\[\text{Loss} = -[Y_{\text{目标}} \times \ln(Y_{\text{实际}}) + (1-Y_{\text{目标}}) \times \ln(1-Y_{\text{实际}})] \]特点:对分类任务的误差更敏感,训练速度更快。
- 均方误差(MSE):适用于回归任务(如房价预测),公式为:
步骤4:反向传播求梯度(核心步骤拆解)
梯度是"损失函数对权重的偏导数"(\(\frac{\partial \text{Loss}}{\partial W}\)),代表"权重每变化1单位,损失会变化多少"——梯度的正负决定权重修改方向,绝对值决定修改幅度。
以"输出层权重\(W_{1o}\)"和"隐藏层权重\(W_{11}\)"为例,梯度计算逻辑:
-
输出层权重梯度(如\(W_{1o}\)):
损失对\(W_{1o}\)的偏导数 = 损失对\(z_o\)的偏导数 × \(z_o\)对\(W_{1o}\)的偏导数
即:\(\frac{\partial \text{Loss}}{\partial W_{1o}} = \frac{\partial \text{Loss}}{\partial z_o} \times a_1\)- 其中\(\frac{\partial \text{Loss}}{\partial z_o} = (Y_{\text{实际}} - Y_{\text{目标}}) \times f'(z_o)\)(\(f'(z_o)\)是输出层激活函数的导数),\(a_1\)是隐藏层神经元1的输出。
-
隐藏层权重梯度(如\(W_{11}\)):
损失对\(W_{11}\)的偏导数 = 损失对\(z_1\)的偏导数 × \(z_1\)对\(W_{11}\)的偏导数
即:\(\frac{\partial \text{Loss}}{\partial W_{11}} = \frac{\partial \text{Loss}}{\partial z_1} \times X_1\)- 其中\(\frac{\partial \text{Loss}}{\partial z_1} = \left( \sum_{i=1}^5 \frac{\partial \text{Loss}}{\partial z_o} \times W_{io} \right) \times f'(z_1)\)(\(f'(z_1)\)是隐藏层激活函数的导数),需先汇总输出层对隐藏层的误差贡献,再求导。
步骤5:用梯度下降法修改权重
权重修改公式为:
(注意:原笔记公式符号有误,正确应为"减梯度"——因为梯度方向是损失增大的方向,需沿梯度反方向修改权重以减小损失)
- 各参数含义:
- \(\varepsilon\):学习率(Learning Rate),控制权重修改幅度(通常取0.001~0.1),例:\(\varepsilon=0.01\)。
- \(\frac{\partial \text{Loss}}{\partial W}\):权重的梯度(如\(W_{1o}\)的梯度计算得-3)。
- 实例:若\(W_{1o}\)旧值=0.8,梯度=-3,\(\varepsilon=0.01\) → \(W_{1o}\)新值=0.8 - 0.01×(-3) = 0.83。
步骤6:迭代优化
- 单次反向传播仅修改一次权重,无法让误差降至最低,需重复"正向传播→计算误差→反向传播→修改权重"的流程,直到误差稳定在较小值。
- 实际训练中,会将数据分成"批次(Batch)",每处理完一个批次的所有样本,才修改一次权重(称为"一次迭代(Iteration)");处理完所有批次的样本,称为"一个epoch"。
四、梯度下降法(反向传播的"权重修改工具")
梯度下降法是"利用梯度调整权重,使损失函数最小化"的优化算法,是反向传播的核心支撑——没有梯度下降,反向传播计算出的梯度就无法用于权重修改。
1. 核心思想
类比"人从山上下来找最低点":
- 山的高度 = 损失函数值(越高代表误差越大)。
- 人的位置 = 当前权重(一组权重对应一个"位置")。
- 梯度 = 山在当前位置的"坡度方向"(坡度最陡的方向,即损失增大最快的方向)。
- 梯度下降 = 人沿"坡度反方向"下山(即沿损失减小最快的方向修改权重),直到走到山底(损失最小,权重最优)。
2. 常见梯度下降类型对比
实际训练中,根据"每次处理样本数量"的不同,梯度下降分为3类:
类型 | 核心逻辑 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
批量梯度下降(BGD) | 每次用全部训练样本计算梯度,修改一次权重 | 梯度稳定,易收敛到全局最优 | 计算量大,训练慢(样本多时有内存问题) | 小数据集(样本数<1万) |
随机梯度下降(SGD) | 每次用1个训练样本计算梯度,修改一次权重 | 计算量小,训练快 | 梯度震荡剧烈(单个样本误差波动大),难收敛到全局最优 | 大数据集(样本数>10万),需快速迭代 |
小批量梯度下降(Mini-batch GD) | 每次用一小批样本(如32、64、128个)计算梯度,修改一次权重 | 兼顾速度与稳定性(梯度比SGD平滑,计算量比BGD小) | 需手动调整"批次大小" | 绝大多数场景(工业界默认选择) |
3. 梯度下降的关键问题(补充解决方案)
-
学习率选择问题:
- 问题:学习率太大→权重修改幅度过大,导致损失震荡不收敛;学习率太小→训练速度极慢,甚至陷入"局部最优"(山的小洼地,不是最低谷)。
- 解决方案:采用"学习率衰减"(初始学习率大,随着训练次数增加逐渐减小,如每10个epoch衰减为原来的0.9)。
-
梯度消失/梯度爆炸:
- 问题:深层网络中,梯度从输出层反向传递到输入层时,会因"激活函数导数<1"(如Sigmoid导数最大0.25)导致梯度越来越小(梯度消失),或因"权重>1"导致梯度越来越大(梯度爆炸),最终输入层权重无法更新。
- 解决方案:
- 用ReLU激活函数(缓解梯度消失)。
- 权重初始化采用"He初始化""Xavier初始化"(避免权重过大/过小)。
- 用"批量归一化(BN)"(让每层输入数据分布稳定,减少梯度波动)。
五、关键补充概念
概念 | 定义与作用 | 补充说明 |
---|---|---|
特征归一化(Normalization) | 将输入特征的取值范围统一到"01"或"-11"(如将"面积(100200㎡)"归一化为"01","房龄(130年)"归一化为"01") | 作用:避免因特征取值范围差异导致权重更新不均衡(如面积的权重更新幅度远大于房龄),加速模型收敛 |
过拟合(Overfitting) | 模型在"训练集"上误差极小,但在"测试集"上误差很大(模型"死记硬背"训练数据,无法泛化到新数据) | 解决方法:1. 增加训练数据;2. 用"正则化(L1/L2)"(给权重加惩罚,避免权重过大);3. 用" dropout"(训练时随机"关闭"部分神经元,减少过拟合) |
欠拟合(Underfitting) | 模型在"训练集"和"测试集"上误差都很大(模型复杂度不够,没学会数据规律) | 解决方法:1. 增加神经网络的隐藏层/神经元数量;2. 延长训练时间(增加epoch);3. 更换更复杂的模型(如CNN、Transformer) |
收敛(Convergence) | 随着训练迭代,模型的损失值不再明显下降,权重修改幅度趋近于0(如两次迭代的损失差<0.0001) | 收敛不代表"损失为0",而是损失稳定在"可接受范围"(如房价预测误差<5万元),此时可停止训练 |
六、知识点逻辑链与可视化总结
1. 逻辑链(从基础到应用)
感知机(线性计算)→ 神经网络(多层感知机+激活函数,解决非线性问题)→ 反向传播(计算误差对权重的梯度)→ 梯度下降(用梯度修改权重,降低误差)→ 训练(迭代优化,直到收敛)→ 应用(预测/分类)
2. 简化流程图
注:若博客园不显示Mermaid流程图,需在博客园后台"选项"中开启"允许使用Mermaid语法"。
七、常见误区澄清
- "神经网络和人脑一样":错误。神经网络仅"类比"人脑神经元的连接方式,其计算逻辑是数学模型,与脑科学的神经元工作机制(如生物电信号、神经递质)无直接关联。
- "感知机是深度学习模型":错误。感知机是传统机器学习模型,深度学习的核心是"多层神经网络+反向传播",需至少包含1层隐藏层。
- "学习率越大,训练越快":错误。学习率过大可能导致损失"震荡不收敛"(权重在最优值附近来回波动),反而需要更多时间调整,甚至无法训练出可用模型。