【机器学习笔记 Ⅱ】2 神经网络中的层
神经网络中的层(Layer)详解
神经网络中的“层”是模型的基本构建模块,每一层由多个**神经元(或节点)**组成,负责对输入数据进行特定类型的变换(如特征提取、非线性激活)。通过堆叠不同的层,神经网络可以学习从简单到复杂的多层次特征表示。
1. 层的核心作用
- 特征转换:每一层将输入数据映射到新的表示空间。
- 分工协作:
- 浅层:捕捉低级特征(如边缘、纹理)。
- 深层:组合低级特征为高级语义(如物体、语义概念)。
2. 常见的层类型
(1) 输入层(Input Layer)
- 功能:接收原始数据(不进行任何计算)。
- 示例:
- 图像任务:输入层维度为
(宽度, 高度, 通道数)
(如(224, 224, 3)
)。 - 文本任务:输入层维度为
(序列长度, 词向量维度)
。
- 图像任务:输入层维度为
(2) 全连接层(Dense Layer / Fully Connected Layer)
-
结构:每个神经元与前一层的所有神经元连接。
-
数学表达:
-
用途:分类器、特征组合。
代码示例(Keras):
from tensorflow.keras.layers import Dense
dense_layer = Dense(units=128, activation='relu') # 128个神经元,ReLU激活
(3) 卷积层(Convolutional Layer, Conv)
- 功能:通过卷积核(滤波器)提取局部特征(如边缘、纹理)。
- 核心参数:
filters
:卷积核数量(控制输出通道数)。kernel_size
:卷积核大小(如3×3
)。strides
:滑动步长。
- 优势:参数共享(减少参数量)、平移不变性。
代码示例:
from tensorflow.keras.layers import Conv2D
conv_layer = Conv2D(filters=32, kernel_size=(3, 3), activation='relu')
(4) 池化层(Pooling Layer)
- 功能:降维(减少计算量)、增强平移不变性。
- 类型:
- 最大池化(MaxPooling):取窗口内最大值。
- 平均池化(AveragePooling):取窗口内平均值。
- 参数:
pool_size
(如2×2
),strides
。
代码示例:
from tensorflow.keras.layers import MaxPooling2D
pool_layer = MaxPooling2D(pool_size=(2, 2))
(5) 循环层(Recurrent Layer, RNN/LSTM/GRU)
- 功能:处理序列数据(时间步间有依赖关系)。
- 结构:神经元间存在循环连接,保留历史信息。
- 变体:
- LSTM:长短期记忆,解决梯度消失问题。
- GRU:简化版LSTM,计算效率更高。
代码示例:
from tensorflow.keras.layers import LSTM
lstm_layer = LSTM(units=64, return_sequences=True) # 64个神经元,返回完整序列
(6) 嵌入层(Embedding Layer)
- 功能:将离散型数据(如单词、类别ID)映射为稠密向量。
- 用途:自然语言处理(NLP)、推荐系统。
代码示例:
from tensorflow.keras.layers import Embedding
embedding_layer = Embedding(input_dim=10000, output_dim=128) # 10000个词→128维向量
(7) 归一化层(Normalization Layer)
- 功能:标准化层输入,加速训练。
- 类型:
- BatchNorm:对小批量数据归一化(图像任务常用)。
- LayerNorm:对单个样本归一化(NLP任务常用)。
代码示例:
from tensorflow.keras.layers import BatchNormalization
norm_layer = BatchNormalization()
(8) Dropout层
- 功能:随机丢弃部分神经元(防止过拟合)。
- 参数:
rate
(丢弃比例,如0.5
)。
代码示例:
from tensorflow.keras.layers import Dropout
dropout_layer = Dropout(rate=0.5)
(9) 输出层(Output Layer)
- 设计依据:根据任务类型选择:
- 二分类:1个神经元 + Sigmoid激活。
- 多分类:N个神经元 + Softmax激活。
- 回归:1个神经元 + 线性激活(无激活函数)。
代码示例:
# 多分类输出层
output_layer = Dense(units=10, activation='softmax') # 10个类别
3. 层的堆叠与模型构建
(1) 典型网络结构示例
- 图像分类(CNN):
输入层 → [Conv → ReLU → Pooling]×N → Flatten → Dense → 输出层
- 文本分类(RNN):
输入层 → Embedding → LSTM → Dense → 输出层
(2) 代码示例(Keras Sequential模型)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import *model = Sequential([Input(shape=(224, 224, 3)), # 输入层Conv2D(64, (3, 3), activation='relu'), # 卷积层MaxPooling2D((2, 2)), # 池化层Flatten(), # 展平层Dense(128, activation='relu'), # 全连接层Dropout(0.5), # Dropout层Dense(10, activation='softmax') # 输出层
])
model.summary() # 打印模型结构
4. 层的超参数选择
参数 | 常见设置 | 影响 |
---|---|---|
神经元数/滤波器数 | 全连接层:644096;卷积层:16512 | 模型容量、计算成本 |
卷积核大小 | 通常为 3×3 或 5×5 | 感受野大小 |
激活函数 | ReLU(隐藏层)、Softmax(多分类输出) | 非线性能力、梯度传播 |
Dropout率 | 0.2~0.5 | 正则化强度 |
5. 总结
- 层是神经网络的基础组件,不同层负责不同功能(特征提取、降维、序列建模等)。
- 设计原则:
- 输入层维度需匹配数据形状。
- 隐藏层数量和宽度影响模型表达能力。
- 输出层设计需匹配任务类型。
- 核心技巧:
- 卷积层用于空间数据(图像),循环层用于序列数据(文本)。
- 使用BatchNorm和Dropout提升训练稳定性。
通过灵活组合不同类型的层,可以构建适应各种任务的强大模型!