Week 4:深度学习
目录
摘要
本周学习了深度学习、过拟合改进方法与卷积神经网络。具体了解了激活函数和优化器方面的演变与改进;了解了过拟合应对策略与正则化的必要性。
Abstract
This week, I studied deep learning, methods for improving overfitting, and convolutional neural networks. Specifically, I learned about the evolution and improvements in activation functions and optimizers, as well as strategies for addressing overfitting and the necessity of regularization.
1 深度学习
1.1 激活函数
上周我们用 Sigmoid 作为激活函数,但它有致命弱点——梯度消失。当输入绝对值较大时,Sigmoid 的输出接近 0 或 1,导数 ,深层网络几乎无法更新。
ReLU(Rectified Linear Unit)计算简单,不饱和,缓解梯度消失,但负半轴梯度为 0,神经元一旦落入负区就会“死掉”
正半轴恒为 1,负半轴为 0
Leaky ReLU
给负半轴一个很小的斜率(如 0.01),让神经元即使输出负值也能有微弱梯度,避免“死亡”。
ELU(Exponential Linear Unit)
负半轴平滑且保留非线性,但计算稍复杂。
我的理解:激活函数就像神经元的“开关模式”。Sigmoid 是软开关但容易卡死;ReLU 简单粗暴,能开就开,不能开就关,反而让信号传得更远。后来出现的变体都是给“关”的状态留一点门缝,让网络保留恢复的机会。
1.2 优化器
之前只用了朴素的 SGD 或 Adagrad,课程第八讲介绍了动量法和 Adam。
动量(Momentum)
模拟物理惯性,让更新方向不只依赖当前梯度,还包含历史速度:
通常取 0.9。当连续下降方向一致时,速度累加,加速收敛;遇到局部震荡,动量能平滑路径,不易被困在鞍点。
RMSProp
改进 Adagrad 的分母,用指数移动平均代替全部历史梯度平方和:
分母不会单调递增,避免后期学习率趋于 0。
Adam
结合动量与 RMSProp,是当前最常用优化器:
经偏差修正后:
默认参数,
,
。
我的理解:SGD 像一个人在黑暗中摸索下山,Adagrad 给每个人穿了不同底的鞋以适应地形,动量像是加了助跑,Adam 则是既有助跑又自动调节步幅。现在训练几乎都用 Adam,省心省力。
2 过拟合的应对方法
课程第八讲专门讨论如何对抗过拟合。
2.1 正则化(Regularization)
在损失函数中加入参数的大小惩罚:
L2 正则化:
权重衰减,使参数值变得稀疏且均匀,降低模型复杂度。
L1 正则化:
产生稀疏解,可用于特征选择。
2.2 Dropout
训练时随机丢弃一部分神经元,每次迭代相当于在训练一个子网络。测试时恢复全部神经元,但输出要乘以保留概率 p,或训练时除以 p,测试时不变。通过强迫神经元不依赖特定同伴,学习更鲁棒的特征,等效于集成大量子网络的预测平均防止过拟合。
课程中演示了 Dropout 在 Keras 中的应用:
from tensorflow.keras.layers import Dropout
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5)) # 50% 神经元被丢弃
2.3 Early Stopping
监控验证集损失,当它不再下降甚至回升时停止训练。本质是限制优化路径的长度,等效于较小的有效模型复杂度。这三种方法像是三种不同的约束方式实践中通常会组合使用。
3 批标准化(Batch Normalization)
课程第九讲前后介绍了 BN,它是深度网络的标配。训练过程中,各层输入分布会随前一层参数更新而变化(内部协变量偏移),导致深层网络不得不不断适应新分布,学习率不能大,参数初始化敏感。对每个 mini-batch 的每一个维度进行标准化:
再引入可学习的缩放 和平移
,恢复网络的表达能力:
训练时用 mini-batch 统计量,测试时用总体均值/方差的无偏估计(通常移动平均)。所以这种方法允许更大学习率,加速收敛;降低对初始化的敏感度,有一定正则化效果(mini-batch 统计量带有噪声)
Keras 中使用 BN:
from tensorflow.keras.layers import BatchNormalization
model.add(Dense(256))
model.add(BatchNormalization())
model.add(Activation('relu'))
4 卷积神经网络(CNN)
4.1 CNN的作用
专门处理图像等具有空间结构的数据,全连接网络处理图像时,会把每张 的图像展平成 10000 维向量,不仅参数量爆炸,而且完全忽略了像素之间的空间局部关联。
CNN 的三个核心思想:
1. 局部感受野:每个神经元只连接输入的一个小区域(如 )
2. 权重共享:整张图用同一组卷积核滑动,大幅减少参数
3. 池化:降采样,减少计算量并提供平移不变性
4.2 卷积层
一个卷积核(filter)在输入上滑动,计算内积,产生特征图(feature map)。若有 K 个卷积核,则输出 K 个通道。
公式:输出位置 (i,j) 的值
其中 k 是卷积核大小, 是权重,
是输入区域。
4.3 池化层
通常使用最大池化(Max Pooling):在一个 窗口内取最大值,步长为 2,特征图尺寸减半。它保留最强信号,减少参数,引入轻微平移不变性。
4.4 Keras 搭建 CNN
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
model = Sequential()
# 卷积层1
model.add(Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)))
model.add(MaxPooling2D((2,2)))
# 卷积层2
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
# 全连接分类层
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
CNN 的本质是把“图像是由局部边缘、纹理等组成”这个先验知识硬编码到网络结构里。卷积相当于用一个可学习的探测器扫描整张图,哪里出现特定模式,特征图就在哪里亮。池化则是表示如果某个模式在某个区域出现了,只需关心它最强的信号,位置细小的改变不会影响结果。
5 总结
本周学习使我对神经网络训练全流程建立了系统性认知。通过学习我发现各技术并非孤立技巧,而是针对特定问题提出的结构化解决方案。理解其设计动机与适用范围,是后续进行模型选型与调优的基础。
更多推荐




所有评论(0)