第八课:向量、矩阵与Keras框架入门
约 1593 字大约 5 分钟
第八课:向量、矩阵与Keras框架入门
一、课程定位
- 本节是课程的重要分水岭。
- 前七节:深入研究了神经网络的底层数学原理。
- 本节起:转向使用工具和框架进行工程实践,不再深入底层数学分析。
- 鼓励有志于深入该领域者,自行继续研究背后的数学原理和最新进展。
二、核心工具:向量与矩阵
2.1 引入动机
- 问题:随着输入数据特征增多,手动编写线性函数表达式(如
z = w1*x1 + w2*x2 + ... + b)变得繁琐。 - 解决方案:使用向量和矩阵作为数学工具,使表达和计算变得统一、简洁。
2.2 基本概念
- 向量:可视为包含多个元素(如自变量、权重系数)的数学对象。
- 矩阵:可视为由多个向量并排组成的数学对象。
- 不同领域的视角:
- 物理学家:空间变换。
- 数据工程师:数据特征。
- 程序员:数组。
- 办公人士:Excel表格的行与列。
- 核心观点:从数学家的眼光看,向量和矩阵是服务于数学(进而服务其他科学)的工具。
2.3 向量运算表示线性函数
- 目标:用向量运算统一表示 n 元一次线性函数
z = w1*x1 + w2*x2 + ... + wn*xn + b。 - 定义:
- 输入向量
X = [x1, x2, ..., xn] - 权重系数向量
W = [w1, w2, ..., wn] - 偏置系数向量
B = [b](可视为单元素向量)
- 输入向量
- 运算规则:
- 转置:
W^T, 将行向量“竖起来”变成列向量。 - 点乘:
X · W^T = x1*w1 + x2*w2 + ... + xn*wn(对应元素相乘后求和)。
- 转置:
- 统一表达式:
Z = X · W^T + B - 优势:无论输入维度(元数)多高,函数形式保持简洁统一。
2.4 矩阵运算表示多个线性函数(神经元)
- 场景:当输入数据需要送入多个神经元(即多个线性函数)进行计算时。
- 定义:
- 权重系数矩阵
W:将多个神经元的权重向量并排组成。 - 偏置系数向量
B:包含每个神经元的偏置项。
- 权重系数矩阵
- 运算:
- 输入向量
X点乘 权重矩阵W的转置W^T。 - 该运算等效于
X分别与W^T的每一列(即每个神经元的权重向量)点乘,得到一组结果。 - 加上偏置向量
B,得到最终的结果向量Z。
- 输入向量
- 统一表达式:
Z = X · W^T + B- 此时
W是矩阵,B和Z是向量。
- 此时
- 核心价值:统一性。无论输入维度、神经元数量如何变化,数学模型形式保持不变,极大简化了表达和后续计算(包括编程实现,如使用NumPy库)。
三、编程实践:使用向量/矩阵构建模型
3.1 改造单神经元模型
- 数据:输入
X(包含大小、颜色深浅两个特征), 权重W, 偏置B均改为NumPy数组(向量)。 - 前向传播:
z = np.dot(x, W.T) + b, 然后通过Sigmoid激活函数。 - 反向传播:依据链式法则,计算误差对
W、B的梯度(导数),结果也是向量/矩阵形式。 - 参数更新:使用向量化后的梯度进行随机梯度下降。
3.2 引入Keras框架
- 动机:手写神经网络(尤其是带隐藏层的复杂网络)的反向传播、求导等过程非常繁琐。
- 框架类比:Keras 类似编程中的高级语言(如Python),对底层复杂的数学运算进行了封装,让开发者能专注于模型结构设计和业务逻辑。
- TensorFlow:类似C语言,更底层、强大、灵活。
- Keras:类似Python,核心优势是简单易用。
- 注意:使用框架不等于不需要懂原理,正如使用高级语言编程仍需理解计算机基本原理。
3.3 使用Keras搭建模型的流程
- 导入模块:
Sequential(模型容器),Dense(全连接层)。 - 创建模型:
model = Sequential()。 - 堆叠网络层:使用
model.add(Dense(...))添加层。- 关键参数:
units:该层的神经元数量。activation:激活函数,如‘sigmoid‘。input_dim:输入数据的特征维度(仅第一层需要指定)。
- 关键参数:
- 编译模型:
model.compile(...)。- 关键参数:
loss:损失函数(代价函数),如‘mse‘(均方误差)。optimizer:优化器(梯度下降算法),如‘sgd‘(随机梯度下降) 或SGD(lr=0.05)(可指定学习率)。metrics:评估指标,如[‘accuracy‘]。
- 关键参数:
- 训练模型:
model.fit(X, Y, epochs=..., batch_size=...)。epochs:训练回合数。batch_size:每次参数更新使用的样本数。
- 进行预测:
model.predict(X)。
3.4 Keras实践案例
使用Keras快速实现了前几节课的四种模型:
- 单特征,简单分布:单神经元,
input_dim=1。 - 单特征,复杂分布:单隐藏层(如2个神经元)+ 单输出神经元,
input_dim=1。 - 双特征,线性可分:单神经元,
input_dim=2。 - 双特征,非线性可分:单隐藏层(如2或4个神经元)+ 单输出神经元,
input_dim=2。
- 核心操作:通过调整
Dense层的units和input_dim参数,即可灵活改变模型结构以应对不同问题。
四、关于Keras的补充说明
- 底层依赖:Keras本身不是一个独立的计算框架,它调用 TensorFlow、CNTK 或 Theano 等后端引擎来执行计算。
- 灵活性与简洁性:高度的封装带来了极致的简洁,但在某些需要极度精细控制的场景下,可能不如 TensorFlow 等底层框架灵活。
- 现状:Keras 已被集成到 TensorFlow 2.x 中,作为其官方高级API (
tf.keras)。 - 框架选择:没有“最好”的框架,只有“最合适”的框架,取决于项目需求和个人偏好。
总结
本节课完成了从底层原理到工程实践的过渡。首先,引入了向量和矩阵作为统一、简洁表示神经网络计算的核心数学工具。然后,通过编程实验展示了如何用向量化运算改造模型。最后,重点介绍了 Keras 深度学习框架,它通过高度封装,极大地简化了神经网络模型的构建、训练和评估流程,使开发者能快速实现并实验不同结构的模型,为后续的机器学习应用实践奠定了基础。
