同济大学 · 人工智能科学与技术(智慧建造与低碳环境大类)· 2025~2026 春学期
📺 课堂互动演示 · 第六章

神经网络模型

含互动演示 · 可投影使用 · 需联网加载数学公式
🧠 神经元 🔗 网络架构 📉 损失函数 ⚡ 优化算法 🖼️ CNN 🔁 RNN
00

课程概览

从生物神经元到人工神经网络的完整学习路线

🎬 课前引入:为什么一条直线不够?

在学习神经网络之前,先看一个真实问题:预测混凝土的抗压强度。下面的散点图展示了水胶比与强度的关系——它不是一条直线!

🔬 拖动滑块,对比线性模型与神经网络的拟合效果
当前模型
线性模型
拟合误差 (MSE)
--
线性模型只能画一条直线——对于非线性关系,误差很大。点击“🧠 神经网络”看看效果有多大提升!
📏 线性模型的局限
只能拟合直线关系。当水胶比与强度呈现曲线、阈值、饱和等非线性关系时,线性模型的误差很大。
🧠 神经网络的优势
通过层层非线性变换,能自动学习任意复杂的输入-输出关系。这就是为什么我们要学习神经网络。
📌 本章主线案例:我们将以“钢梁挠度预测”为主线贯穿全章。输入特征包括跨度、荷载、截面尺寸等,输出是挠度值(mm)。这是一个典型的回归任务,适合用 MLP 解决。其他案例(裂缝识别 → CNN,振动监测 → RNN)作为延伸。
为什么要学神经网络?
🔴 传统模型的天花板
线性模型、决策树等传统方法在面对高度非线性、大规模数据时表现有限。比如预测建筑物在地震中的损伤程度,涉及上百个交互特征,传统方法难以胜任。
🧠 神经网络的突破
神经网络通过层层叠加的非线性变换,自动从原始数据中提取复杂特征。它是深度学习的基石,驱动了图像识别、自然语言处理、结构健康监测等领域的革命性进展。
🏗️ 土木工程应用:裂缝图像自动识别(CNN)、施工进度文本理解(RNN)、结构响应预测(MLP)——这些前沿应用的基础都是本章的神经网络。
本章学习路线
01
人工神经元 基础
生物启发、感知机模型、激活函数(Step/Sigmoid/ReLU)
02
网络架构 结构
多层感知机(MLP)、前向传播、参数计数
03
损失函数 度量
MSE、MAE、交叉熵——衡量模型“错了多少”
04
优化算法 核心
梯度下降、反向传播、学习率选择
05
训练技巧 实践
过拟合检测、Dropout、Batch Normalization、早停法
06
CNN 卷积神经网络 视觉
卷积、池化、特征提取——图像识别的利器
07
RNN 循环神经网络 序列
序列建模、记忆机制、时间序列预测
这节课到底在解决什么任务?

在学习神经网络结构之前,先搞清楚一个根本问题:你的任务属于哪种类型?任务类型决定了网络结构、输出层设计和损失函数的选择。

📈
回归任务
输出一个连续数值
例:预测混凝土 28 天抗压强度(35.2 MPa)
🏷️
分类任务
输出一个类别标签
例:裂缝等级判定(无/轻微/严重)
📊
序列预测
输出随时间变化的序列值
例:桥梁振动信号异常预警
任务类型输入示例输出示例适合网络
回归水胶比、龄期、温度强度值(MPa)MLP
图像分类裂缝照片有裂缝 / 无裂缝CNN
序列预测传感器时序数据下一时刻位移RNN / LSTM
⚠️ 先明确任务,再选网络!神经网络不是先学结构,而是先明确“我要解决什么问题、输入输出分别是什么”,然后再选择合适的架构。
从生物到人工

人工神经网络的灵感来自生物神经系统。大脑中约有 860 亿个神经元,通过突触相互连接。每个神经元接收信号、处理信号、发出信号——人工神经元正是对这个过程的数学模拟。

生物神经元结构
树突 (接收信号) 细胞体 (处理信号) 轴突 (传递信号) 突触 (传给下一个) 信号流向: 树突 细胞体 轴突 突触 → 下一个神经元
人工神经元(对照)
x₁ x₂ x₃ w₁ w₂ w₃ Σ + b → f(z) 偏置 b y 输入 (= 树突) 加权求和+激活 (= 细胞体) 输出 (= 轴突) y = f( w₁x₁ + w₂x₂ + w₃x₃ + b )
生物神经元 → 人工神经元的对应关系
生物结构功能人工神经元对应
树突接收来自其他神经元的电/化学信号输入 \(x_1, x_2, \ldots, x_n\)
突触强度不同突触传递信号的效率不同权重 \(w_1, w_2, \ldots, w_n\)
细胞体汇总所有输入信号,决定是否激活加权求和 \(z = \sum w_i x_i + b\)
激活阈值信号总量超过阈值才“放电”激活函数 \(f(z)\)
轴突将激活信号传递给下一个神经元输出 \(y = f(z)\)
💡 通俗理解:生物神经元就像一个“投票系统”——树突收集各方意见(输入),每个意见有不同的重要程度(权重),细胞体把加权后的意见汇总,如果总分超过门槛(激活阈值),就通过轴突发出“赞成”信号。人工神经元用数学公式精确模拟了这个过程。
课前思考题

在正式学习之前,先思考以下问题,带着问题学习效果更好:

🤔 为什么需要“多层”?
一层神经元能做的事情有限(类似线性回归),那多加几层会发生什么质的变化?“深度”到底带来了什么?
🤔 网络怎么“学习”?
神经网络不是规则编程,那它是怎么从数据中“自动学会”预测的?权重是怎么一步步调整到正确值的?
🤔 为什么需要不同架构?
MLP、CNN、RNN 三种网络结构有什么本质区别?为什么不能用一种网络解决所有问题?
🤔 AI 能替代工程师吗?
神经网络这么强大,能直接替代结构计算和工程判断吗?它的边界在哪里?
💡 学习建议:先理解“为什么”,再学习“怎么做”。每学一个概念,都试着想一个土木工程中的应用场景。
六次课的内容安排

本章内容分六次课讲授,从基础到应用循序渐进:

课次主题核心内容互动演示
第一课神经元与数据感知机、激活函数、数据集划分神经元模拟器、激活函数可视化、前向传播手算
第二课网络架构MLP 结构、前向传播、参数计数MLP 可视化
第三课损失与优化损失函数、梯度下降、反向传播损失对比、梯度下降可视化、SGD vs Adam
第四课训练技巧过拟合、正则化、模型评价过拟合检测器、Dropout 可视化、训练历程
第五课CNN卷积、池化、图像识别卷积动画、池化演示
第六课RNN 与应用序列建模、LSTM、工程应用记忆衰减、数据驱动 vs 物理驱动
01

人工神经元

感知机模型与激活函数

感知机数学模型

一个人工神经元做的事情非常简单:接收输入 → 加权求和 → 通过激活函数 → 输出

$$y = f\left(\sum_{i=1}^{n} w_i x_i + b\right) = f(\mathbf{w}^T\mathbf{x} + b)$$
权重 \(w_i\)
衡量每个输入的重要程度。权重越大,该输入对结果的影响越大。训练的本质就是调整权重。
偏置 \(b\)
相当于“门槛值”——即使所有输入为零,偏置也能让神经元有一个基础激活水平。类似线性回归中的截距项。
互动演示
🧠 神经元模拟器(土木工程场景)

场景:判断混凝土试块是否合格。三个输入特征各有权重,加上偏置后通过激活函数得到输出。

\(x_1\) 水胶比 0.60
\(w_1\) 权重 0.50
\(x_2\) 养护龄期 0.70
\(w_2\) 权重 0.30
\(x_3\) 抗压强度 0.50
\(w_3\) 权重 0.20
\(b\) 偏置 -0.50
加权求和 z
0.00
输出 y = f(z)
0.00
调整滑块观察神经元的输出变化
🤔 小思考:如果把激活函数去掉(让输出直接等于加权求和 z),这个神经元还能区分“合格”和“不合格”吗?——答:可以,但只能画一条直线来分界,面对复杂数据就不够了。
激活函数对比
📈 激活函数可视化

点击按钮切换不同激活函数,观察其形状和数学公式。激活函数为神经网络引入非线性,是网络表达能力的关键。

$$f(z) = \begin{cases}0 & z<0 \\ 1 & z \geq 0\end{cases}$$
优点
简单直观,输出二值分类
缺点
不可导,无法用于梯度下降优化
🏗️ 钢结构应用:在钢节点承载力预测中,ReLU 是最常用的激活函数——因为承载力不可能为负值,ReLU 自然地保证了输出非负。
为什么需要非线性?

如果没有激活函数(或只用线性激活),无论网络有多少层,最终都等价于一个单层线性变换。多层线性变换的组合仍然是线性的:

$$W_2(W_1 \mathbf{x} + b_1) + b_2 = W_2 W_1 \mathbf{x} + (W_2 b_1 + b_2) = W'\mathbf{x} + b'$$
⚠️ 关键结论:没有非线性激活函数,再深的网络也只能拟合线性关系。激活函数是“深度”产生效果的根本原因。
激活函数选择指南

不同的激活函数适用于不同的场景。以下是实用的选择建议:

激活函数适用位置推荐场景注意事项
ReLU隐藏层大部分场景的默认选择可能出现“死亡神经元”
Sigmoid输出层二分类的输出层(概率输出)不推荐用于隐藏层(梯度消失)
Softmax输出层多分类的输出层(概率分布)只用于最后一层
Tanh隐藏层 / RNN需要输出在 (-1,1) 范围时RNN 中常用,仍有梯度消失问题
无激活输出层回归任务(输出连续值)输出层不加激活函数,直接输出
💡 最简单的规则:隐藏层用 ReLU,输出层根据任务选择(回归→无激活,二分类→Sigmoid,多分类→Softmax)。
数据基础:样本、特征与标签

在训练神经网络之前,你需要准备好数据集。先搞懂四个基本概念:

样本(Sample)
数据集中的一条记录。例如:一个混凝土试块的检测记录、一张裂缝照片、一天的施工日志。
特征(Feature)
描述样本的输入变量。例如:水胶比、养护龄期、环境温度、水泥用量——这些是模型“看到”的信息。
标签(Label)
样本对应的正确答案。例如:该试块的实测抗压强度(回归)、是否有裂缝(分类)。
数据集 → 三份
训练集:用来学习(~70%)
验证集:用来调参(~15%)
测试集:最终评估(~15%)
📋 实例:钢梁挠度预测的数据集长什么样?

下面这张表就是一个真实数据集的样子——每一是一个样本,中间几是特征(模型的输入),最后一是标签(要预测的目标):

样本编号 特征 1:跨度 (m) 特征 2:荷载 (kN) 特征 3:截面高度 (mm) 特征 4:钢材等级 标签:实测挠度 (mm)
#16.050300Q23512.3
#28.080400Q34515.7
#35.030250Q2358.1
#410.0120500Q39018.9
#57.060350Q34511.5
#5009.0100450Q34516.2
每一行 = 1 个样本
共 500 根钢梁的检测记录
中间列 = 特征(输入)
跨度、荷载、截面、钢材等级
最后列 = 标签(输出)
我们要预测的目标值
1
收集数据
钢梁检测记录
2
提取特征
跨度、荷载…
3
标注标签
实测挠度值
4
划分数据集
训练/验证/测试
5
送入模型
开始训练!
⚠️ 铁律:训练集用来学,验证集用来调,测试集用来最终检验——三者绝不能混用!否则就像考试时偷看了答案,成绩再好也不真实。
互动演示
🧮 前向传播手算(钢结构场景)

场景:用一个微型网络预测钢梁挠度。2 个输入(跨度、荷载)→ 2 个隐藏神经元 → 1 个输出(挠度预测)。点击“▶ 下一步”逐步查看前向传播的每一步计算。

网络参数(固定)
隐藏层:\(w_1=0.5,\; w_2=-0.3,\; w_3=0.8,\; w_4=0.2,\; b_1=0.1,\; b_2=-0.2\)
输出层:\(w_5=0.6,\; w_6=0.4,\; b_3=0.1\)
点击“▶ 下一步”开始前向传播演示
当前步骤
0 / 5
预测挠度
-- mm
02

网络架构

多层感知机(MLP)与前向传播

MLP 结构

多层感知机(Multi-Layer Perceptron)是最基础的神经网络架构,由输入层、隐藏层、输出层组成。每层神经元与下一层全连接(Full Connected)。

📥
输入层
接收原始特征向量,不做任何计算。节点数 = 特征维度。
⚙️
隐藏层
核心计算层,可以有多层。每个节点做加权求和 + 激活。层数和节点数决定网络容量。
📤
输出层
输出预测结果。回归任务 1 个节点;分类任务节点数 = 类别数。
互动演示
🔗 MLP 网络可视化

调整隐藏层数和每层神经元数量,观察网络结构和参数数量的变化。

隐藏层数 1
每层神经元 4
权重数量
0
偏置数量
0
总参数量
0
网络深度
3
🏗️ 钢结构场景:预测钢框架节点的弯矩-转角关系。输入 6 个特征(柱截面尺寸、梁截面尺寸、螺栓数量、端板厚度、钢材强度等级、轴压比),隐藏层 2 层各 32 个神经元,输出 1 个节点刚度系数。总参数量 = 6×32+32 + 32×32+32 + 32×1+1 = 1281。
前向传播

数据从输入层出发,逐层经过加权求和和激活函数,最终到达输出层。这个过程称为前向传播(Forward Propagation)

1
输入
特征向量 \(\mathbf{x}\)
2
线性变换
\(z = Wx + b\)
3
激活
\(a = f(z)\)
4
重复
逐层传递
5
输出
预测值 \(\hat{y}\)
$$\mathbf{a}^{(l)} = f\left(W^{(l)} \mathbf{a}^{(l-1)} + \mathbf{b}^{(l)}\right)$$
万能近似定理(Universal Approximation Theorem)

为什么神经网络如此强大?万能近似定理给出了理论保证:

这个定理听起来很抽象。下面用一个直觉证明解释为什么 ReLU 网络能拟合任意曲线:

核心思路:用“折线”逼近任意曲线
1
一个 ReLU 神经元 = 一个“拐点”
单个 ReLU 神经元输出 \(\max(0, wx+b)\),就是一条在某个点“拐弯”的折线——左边平坦(输出 0),右边上升(斜率为 \(w\))。
2
两个 ReLU 相减 = 一个“凸起”
\(\text{ReLU}(x-a) - \text{ReLU}(x-b)\) 可以构造一个只在 \([a,b]\) 区间内非零的“脉冲”。就像用两块挡板在一段区间内“撑起”一个高度。
3
N 个“凸起”叠加 = 分段常数逼近
把目标函数在每个小区间上的值用一个“凸起”来近似,然后把所有“凸起”加起来。神经元越多,区间越细,逼近越精确。
4
极限 → 精确拟合
当神经元数量趋向无穷时,分段逼近误差趋向零——这就是万能近似定理的直觉证明!
📐 与泰勒公式的类比——你已经学过的近似思想!

大一高数中学过的泰勒公式,其实和万能近似定理有着相同的思想内核:用简单的基础单元叠加起来逼近复杂函数

泰勒展开
基础单元:多项式 \(1, x, x^2, x^3, \ldots\)
逼近方式:在某个点附近,用多项式的加权和来逼近
精度控制:多项式阶数 \(n\) 越高 → 逼近越精确
$$f(x) \approx \sum_{k=0}^{n} \frac{f^{(k)}(a)}{k!}(x-a)^k$$
ReLU 网络
基础单元:ReLU 折线 \(\max(0, w_i x + b_i)\)
逼近方式:在整个区间上,用折线段的加权和来逼近
精度控制:神经元数量 \(N\) 越多 → 逼近越精确
$$f(x) \approx \sum_{i=1}^{N} \alpha_i \cdot \text{ReLU}(w_i x + b_i)$$
泰勒展开ReLU 神经网络
基本构件多项式 \(x^k\)折线 \(\text{ReLU}(wx+b)\)
叠加方式加权求和(系数由导数决定)加权求和(系数由训练学得)
精度来源阶数 \(n \to \infty\)神经元数 \(N \to \infty\)
局限性只在展开点附近精确全局有效,但需训练
系数如何得到手算导数 \(f^{(k)}(a)\)梯度下降自动学习
💡 一句话总结:泰勒公式用多项式“基底”逼近函数,神经网络用 ReLU“基底”逼近函数——核心思想都是简单单元的叠加 → 逼近复杂关系。唯一区别是:泰勒系数靠手算导数得到,神经网络的权重靠训练数据自动学到。
🎮 互动演示:用 ReLU 折线逼近任意曲线

蓝色曲线是目标函数(钢梁挠度的非线性关系)。拖动滑块增加 ReLU 神经元数量,观察红色折线如何逐步逼近蓝色曲线:

ReLU 神经元数 2
神经元数
2
逼近误差
--
只有 2 个 ReLU 神经元——折线只有 2 段,逼近效果很粗糙。试试拖到 10 或 20!
这意味着什么?
无论钢梁挠度与荷载的关系多非线性,网络理论上都能学到
神经网络是一个“万能函数拟合器”——这是其强大的理论根基
但要注意!
“理论上能”不等于“实际训练得出来”——找到正确的参数很困难
“足够多神经元”可能意味着天文数字的参数和数据需求
实际中更深(多层)比更宽(单层很多神经元)更高效
💡 钢结构视角:一个 2 层 MLP(每层 32 神经元)就足以准确预测钢节点在不同参数组合下的承载力,不需要“无限多”神经元。实际中深度比宽度更重要。
MLP 设计实例:钢梁挠度预测

以预测简支钢梁跨中挠度为例,展示如何设计一个完整的 MLP 网络:

① 确定输入输出
输入特征(4 个)
\(x_1\):跨度 \(L\) (m)
\(x_2\):集中荷载 \(P\) (kN)
\(x_3\):弹性模量 \(E\) (MPa)
\(x_4\):截面惯性矩 \(I\) (cm\(^4\))
输出(1 个)
\(y\):跨中挠度 \(\delta\) (mm)

回归任务 → 输出层不加激活函数
损失函数 → MSE
② 网络架构设计
4
输入层
\(L, P, E, I\)
32
隐藏层 1
ReLU 激活
32
隐藏层 2
ReLU 激活
1
输出层
线性输出 \(\delta\)
③ 参数量计算
连接权重数偏置数小计
输入层 → 隐藏层 1\(4 \times 32 = 128\)32160
隐藏层 1 → 隐藏层 2\(32 \times 32 = 1024\)321056
隐藏层 2 → 输出层\(32 \times 1 = 32\)133
总计1184651249
📌 对比:材料力学公式 \(\delta = \dfrac{PL^3}{48EI}\) 只有 0 个需要学习的参数。但 MLP 的优势在于——当实际情况偏离理想假设时(非线性材料、复杂边界条件),它仍然能从数据中学到正确的输入输出关系。
03

损失函数

衡量模型预测与真实值之间的差距

回归损失函数
MSE 均方误差
$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat{y}_i)^2$$
对大误差惩罚更重(平方效应)。对异常值敏感,适合需要严格控制大误差的场景。
MAE 平均绝对误差
$$\text{MAE} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat{y}_i|$$
对所有误差一视同仁。对异常值更鲁棒,但在零点不可导。
🏗️ 钢结构场景:什么是焊接残余应力?

在学习损失函数的选择之前,先用一个直觉例子理解这个工程场景——你不需要学过钢结构也能看懂

焊接过程发生了什么?
钢板 A 钢板 B 焊缝 高温熔化 冷却后焊缝收缩 ↙ 拉扯周围钢板 ↘ → 即使没有外力,钢板内部也有了应力 这就是“残余应力”
残余应力沿钢板的分布
距焊缝中心的距离 应力 0 焊缝处:拉应力(很高) 远离焊缝:压应力 远离焊缝:压应力 ← 这个尖峰就是异常值!
💡 通俗理解:焊接时焊缝区域被加热到上千度然后冷却,焊缝像“缩水的毛衣”一样收缩,拉扯着周围的钢板——即使没有外力,钢板内部也产生了应力。这就叫“残余应力”。
那这和损失函数有什么关系?

如果我们想用神经网络预测焊缝附近各点的残余应力值(回归任务),面临一个关键选择:

选 MSE → 严惩大误差
焊缝正中心的应力尖峰(异常高值)会让 MSE 产生很大的平方惩罚。模型会拼命拟合那个尖峰,可能牺牲其他位置的精度。
适合:安全设计场景,必须准确预测峰值应力。
选 MAE → 对异常值更稳健
MAE 对所有误差一视同仁,不会被一两个极端值“带偏”。模型会更均匀地拟合所有位置
适合:对整体分布感兴趣,不想被个别极端点主导。
🤔 小思考:如果你的目标是确保焊缝区域的峰值应力不被低估(安全考虑),应该选 MSE 还是 MAE?——答:MSE,因为它对大误差的惩罚更重,会迫使模型更精确地拟合峰值。
互动演示
📉 损失函数对比(MSE vs MAE)

拖动滑块调整预测偏移量,观察 MSE 和 MAE 的变化差异。注意:MSE 对大误差的放大效应。

预测偏移 0.00
MSE
0.00
MAE
0.00
🤔 小判断:预测钢梁挠度是回归还是分类?——答:回归,因为挠度是一个连续数值(如 12.5 mm),不是类别标签。
分类损失函数:交叉熵

分类问题不能用 MSE——因为输出是概率,需要用专门的交叉熵损失。先用一个生活类比理解它:

📝
类比:老师的“扣分规则”
想象一场考试,正确答案是 A。老师根据你的回答自信程度来扣分:

你说“我 95% 确定是 A” → 答对了,几乎不扣分
你说“我 50% 猜是 A” → 答对了,但犹犹豫豫,扣一些分
你说“我 99% 确定是 B” → 答错了还很自信,狠狠扣分!

交叉熵就是这样的扣分规则:答错越自信,惩罚越重
交叉熵 \(-\log(p)\) 的曲线
置信度 p(对正确答案的概率) 损失 0 0.5 1.0 p=1: 损失≈0 p=0.5: 损失=0.69 p→0: 损失→∞
交叉熵公式
$$\mathcal{L} = -\left[y \cdot \log(p) + (1-y) \cdot \log(1-p)\right]$$
✍ 这里的 \(\mathcal{L}\)(花体 L)专指损失函数的值,和后面表示"网络总层数"的普通 \(L\) 不是一个东西——用不同字体方便区分。
当真实标签 \(y=1\)(有裂缝)
损失简化为 \(\mathcal{L} = -\log(p)\)
模型预测“有裂缝”的概率 \(p\) 越高 → 损失越小
模型预测“有裂缝”的概率 \(p\) 越低 → 损失越大
当真实标签 \(y=0\)(无裂缝)
损失简化为 \(\mathcal{L} = -\log(1-p)\)
模型预测“有裂缝”的概率 \(p\) 越低 → 损失越小
模型预测“有裂缝”的概率 \(p\) 越高 → 损失越大
🎮 互动演示:拖动滑块感受交叉熵

场景:检测钢梁焊缝是否存在裂缝(真实答案:有裂缝,即 \(y=1\))。拖动滑块改变模型的预测置信度:

模型预测 \(p\) 0.50
交叉熵损失 \(-\log(p)\)
0.69
模型置信度
50%
低损失(自信且正确)高损失(不自信或答错)
当 \(p = 0.50\) 时,模型相当于随机猜测,损失 = 0.69
🤔 为什么不用 MSE 做分类?MSE 对概率值的梯度在 0 和 1 附近非常小(梯度消失),导致训练困难。交叉熵在模型“自信地答错”时梯度极大,能快速纠正错误——这正是分类训练需要的。
损失函数的选择逻辑

损失函数不是随便选的——它和任务类型、输出层激活函数紧密绑定。记住以下对应关系:

任务类型输出层激活损失函数土木工程示例
回归无激活(线性输出)MSE / MAE预测混凝土抗压强度(MPa)
二分类Sigmoid二元交叉熵判断焊缝是否合格
多分类Softmax多类交叉熵裂缝等级分类(无/轻微/中等/严重)
⚠️ 常见错误:在回归任务中用了交叉熵,或在分类任务中用了 MSE——这会导致训练失败或性能很差。
输出层如何对应任务类型?

不同任务类型决定了输出层的设计。三种最常见的配置:

回归 → 直接输出
输出层 1 个节点,不加激活函数,直接输出实数。
例:预测强度 = 35.2 MPa
二分类 → Sigmoid
输出层 1 个节点 + Sigmoid,输出 0~1 之间的概率。
例:有裂缝的概率 = 0.87
多分类 → Softmax
输出层 K 个节点 + Softmax,输出 K 个概率之和为 1。
例:无损伤 0.1 / 轻微 0.2 / 严重 0.7
💡 Softmax 直觉:把多个节点的原始得分(可能是任意数字)“归一化”成概率分布——所有概率加起来等于 1,最大的那个就是模型的预测类别。
🎯 输出层与任务类型演示
网络输出
35.2 MPa
回归任务:输出层直接输出一个连续数值,不加激活函数。
完整链条:任务 → 输出层 → 损失函数 → 评价指标
任务类型输出层损失函数评价指标土木例子
回归线性输出(无激活)MSE / MAEMAE / RMSE / \(R^2\)钢梁挠度预测
二分类1节点 + Sigmoid二元交叉熵 BCE准确率 / 召回率裂缝有/无判定
多分类K节点 + Softmax多类交叉熵 CE准确率 / F1损伤等级(无/轻/重)
💡 这张表是核心!遇到一个新问题,先确定任务类型,然后这张表告诉你输出层怎么设计、损失函数怎么选、用什么指标评估。
04

优化算法

梯度下降与反向传播

梯度下降的直觉

想象你蒙着眼站在山上,想走到山谷最低点。你能做的就是感受脚下的坡度(梯度),然后沿着最陡的下坡方向走一小步。重复这个过程,最终就能到达谷底。

$$\theta_{t+1} = \theta_t - \eta \cdot \nabla L(\theta_t)$$
\(\theta\) 参数
网络中所有权重和偏置的集合,是我们要优化的目标。
\(\eta\) 学习率
每一步走多远。太大会“跨过”谷底发散;太小会走得极慢。
\(\nabla L\) 梯度
损失函数对参数的偏导数,指示最陡的上坡方向,取负号就是下坡方向。
互动演示
⛰️ 梯度下降可视化

调整学习率,点击“开始下降”观察优化轨迹。学习率过大会发散,过小会收敛极慢。

学习率 η 0.030
当前损失
--
迭代步数
0
点击“开始下降”观察优化过程
🏗️ 钢结构类比:梯度下降就像在钢结构优化设计中寻找最轻的截面——每一步都沿着“减重最快”的方向调整截面尺寸,学习率决定每步调整幅度。
反向传播(Backpropagation)

反向传播是计算梯度的高效算法。下面这张图展示了完整的训练循环——数据先从左到右“前向传播”得到预测值,再从右到左“反向传播”计算每个参数的梯度:

🔄 前向传播 vs 反向传播

点击按钮切换查看两个方向的数据流。绿色箭头 = 前向传播(计算预测值),红色箭头 = 反向传播(计算梯度)。

前向传播:数据从输入层出发,逐层经过加权求和 + 激活函数,最终到达输出层得到预测值。
📖 符号速查(忘了就回头看):下面公式里的字母都来自前几节,这里统一回顾一下。
符号读法含义出现位置
\(z^{(l)}\)"z 上标 l"l 层的加权求和结果(还没过激活函数),即 \(z = \sum w_i x_i + b\)神经元加权求和
\(a^{(l)}\)"a 上标 l"l 层的激活值 / 输出,\(a = f(z)\),f 是 ReLU / Sigmoid 等激活函数神经元激活后输出
\(w^{(l)}\)"w 上标 l"l 层的权重参数(反向传播就是要算它的梯度)网络参数
\(L\)普通大写 L网络的总层数(所以 \(a^{(L)}\) 就是最后一层的输出,也就是预测值 \(\hat y\))网络架构
\(\mathcal{L}\)花体 L("Loss")损失函数的值,比如 MSE、交叉熵算出来的那个数。
📌 用花体是为了和上面表示"总层数"的普通 \(L\) 区分开,不会混淆。
损失函数
\(l\)小写 l任意第 l 层的编号,\(l = 1, 2, \dots, L\)层索引
\(\frac{\partial \mathcal{L}}{\partial w}\)"偏 ℒ 偏 w"梯度:损失 \(\mathcal{L}\) 对权重 \(w\) 的偏导数,表示"这个 \(w\) 动一点点,损失会变多少"梯度下降要用的量
⚠️ 三个 L 一次分清
• 花体 \(\mathcal{L}\) = 损失(Loss),一个标量数值
• 普通 \(L\) = 网络总层数(比如 5 层网络 \(L=5\)),所以 \(a^{(L)}\) 是最后一层输出
• 小写 \(l\) = 任意第几层的编号
$$\frac{\partial \mathcal{L}}{\partial w^{(l)}} = \frac{\partial \mathcal{L}}{\partial a^{(L)}} \cdot \frac{\partial a^{(L)}}{\partial a^{(L-1)}} \cdots \frac{\partial a^{(l+1)}}{\partial z^{(l)}} \cdot \frac{\partial z^{(l)}}{\partial w^{(l)}}$$
🔎 逐项翻译上面那条公式
• 左边 \(\frac{\partial \mathcal{L}}{\partial w^{(l)}}\):我们想求的——损失 \(\mathcal{L}\) 对第 \(l\) 层权重的梯度。
• \(\frac{\partial \mathcal{L}}{\partial a^{(L)}}\):损失对最后一层(第 \(L\) 层)输出的导数(最好算,直接由损失函数定义)。
• 中间一串 \(\frac{\partial a^{(L)}}{\partial a^{(L-1)}} \cdots\):从最后一层一路"传"回第 \(l\) 层,每一步就是一层的局部导数。
• 最后 \(\frac{\partial z^{(l)}}{\partial w^{(l)}}\):加权求和对权重的导数,就是这一层的输入 \(a^{(l-1)}\)
💡 链式法则:复合函数的导数 = 各层导数的乘积。反向传播就是从输出到输入,逐层应用链式法则,高效计算所有参数的梯度。
⚠️ 常见误解:反向传播不是让网络“倒着算输出”,而是倒着算“每个参数错了多少、该往哪里改”。
互动演示
🎮 互动演示:SGD vs Adam 优化对比

在同一个损失曲面(x² + 3y²)上,同时观察 SGD 和 Adam 两种优化器的轨迹。Adam 利用动量和自适应学习率,通常收敛更快更稳定。

SGD 步数
0
Adam 步数
0
SGD 损失
--
Adam 损失
--
点击“▶ 同时开始”观察两种优化器的对比
学习率与动量的直觉
⚙️
学习率(Learning Rate)
学习率就像吊车提升钢梁的速度——太快可能甩偏(发散),太慢效率低下(收敛慢)。
🔵
动量(Momentum)
动量就像钢球在轨道上滚动的惯性——帮助穿越平坦区域,减少来回震荡。
📐 学习率大小对比示意

损失函数像一个碗,梯度下降就是沿碗壁往下走。学习率决定每步走多远——轨迹上的每个点都在碗壁上

🔵 有动量 vs 无动量的优化轨迹
最小值 无动量 SGD (上下震荡严重) SGD + 动量 (平滑且快速) 动量像惯性:在同一方向上加速,在震荡方向上抑制,整体更平滑
💡 Adam 优化器结合了动量(一阶矩估计)和自适应学习率(二阶矩估计),是目前深度学习中最常用的优化器之一。
权重初始化

训练开始前,网络的权重不能全初始化为 0(否则所有神经元都做相同的事),也不能随机太大或太小。合理的初始化是训练成功的第一步。

❌ 错误做法
全零初始化:所有神经元计算结果完全相同,梯度也相同,永远无法分化——等价于只有一个神经元。
过大随机值:激活值饱和,梯度消失或爆炸,训练无法进行。
✅ 常用方法
Xavier 初始化:适配 Sigmoid/Tanh,\(w \sim \mathcal{N}(0, 1/n_{in})\)
He 初始化:适配 ReLU,\(w \sim \mathcal{N}(0, 2/n_{in})\)
其中 \(n_{in}\) 是该层的输入节点数。
💡 实践中:深度学习框架(PyTorch、TensorFlow)默认就使用了合理的初始化策略,通常不需要手动设置。但理解其原理有助于排查训练问题。
Epoch、Batch 与迭代

训练神经网络时,数据不是一次性全部送入的,而是分批处理的。理解以下三个概念非常重要:

📊 Epoch、Batch、Iteration 的关系
例:8 个样本,Batch Size = 4 全部数据 样本1 样本2 样本3 样本4 样本5 样本6 样本7 样本8 ⬇ 分成 2 个 Batch(每个 Batch 含 4 个样本) Epoch 1 (第一轮) Batch 1: 样本1 样本2 样本3 样本4 → Iteration 1(前向+反向+更新) Batch 2: 样本5 样本6 样本7 样本8 → Iteration 2(前向+反向+更新) Epoch 2 (第二轮) Batch 1(重新打乱) → Iteration 3 Batch 2(重新打乱) → Iteration 4 每个 Epoch = 2 次 Iteration | 训练 N 个 Epoch = 2N 次参数更新
🔄
Epoch(轮次)
整个训练集被完整地过了一遍。通常需要多个 epoch 才能收敛。
:1000 个样本,训练 50 个 epoch = 模型看了每个样本 50 遍。
📦
Batch(批次)
每次送入网络的样本子集。Batch Size = 每批的样本数。
:1000 个样本,batch size = 32,则每个 epoch 有 ⌈1000/32⌉ = 32 个 batch。
🔁
Iteration(迭代)
处理一个 batch 就是一次迭代。每次迭代做一次前向传播 + 反向传播 + 参数更新。
:50 epoch × 32 batch/epoch = 1600 次迭代。
三种梯度下降变体
方式Batch Size特点
批量梯度下降 (BGD)= 全部样本梯度精确,但每步计算量大;内存需求高
随机梯度下降 (SGD)= 1每步只用 1 个样本,噪声大但更新快;有助于跳出局部最优
小批量梯度下降 (Mini-batch)16 ~ 256兼顾效率和稳定性,是最常用的方式
💡 实践中几乎总是使用 Mini-batch 梯度下降。常见的 batch size 为 32 或 64,既能充分利用 GPU 并行计算,又保持梯度的合理噪声。
05

训练技巧

过拟合、正则化与实用训练方法

过拟合与欠拟合
📈
过拟合(Overfitting)
模型在训练集上表现极好,但在测试集上表现差。原因:模型过于复杂,“记住”了训练数据中的噪声。
训练损失低,验证损失高。
📉
欠拟合(Underfitting)
模型在训练集和测试集上表现都差。原因:模型过于简单,无法捕捉数据中的规律。
训练损失和验证损失都高。
互动演示
🔍 过拟合检测器

调整模型复杂度,观察训练损失和验证损失的变化趋势。当两条曲线开始分叉时,就是过拟合的信号。

模型复杂度
模型复杂度适中,训练损失和验证损失走势一致。
💡 什么是泛化能力?模型在从未见过的新数据上的表现好不好,就叫泛化能力。训练集成绩再好,如果新数据上表现差,泛化能力就差——这就是过拟合。
正则化方法
🎲
Dropout
训练时随机“关闭”一部分神经元(概率 p),迫使网络不依赖任何单一神经元,提高泛化能力。
类比:团队协作中,随机让部分成员缺席,迫使每个人都能独当一面。
⏹️
早停法(Early Stopping)
监控验证集损失,当验证损失开始连续上升时提前终止训练。简单有效,是最常用的防过拟合手段。
📏
L2 正则化(权重衰减)
在损失函数中加入权重平方和的惩罚项:\(\mathcal{L} + \lambda\sum w^2\)。迫使权重保持较小值,降低模型复杂度。
📦
Batch Normalization
在每层的激活值上做标准化,加速训练收敛,也具有轻微的正则化效果。让深层网络的训练更加稳定。
互动演示
🎮 互动演示:Dropout 可视化

调整 Dropout 比率,观察隐藏层中神经元被随机“关闭”的效果。被关闭的神经元(灰色)在本次前向传播中不参与计算。

Dropout 比率 0.30
活跃神经元
10
总神经元数
10
活跃连接数
0
总连接数
0
🏗️ 钢结构类比:就像钢桁架中随机拆掉几根杆件测试整体稳定性——如果结构仍然稳定,说明没有过度依赖某一根杆件。Dropout 让网络的每个神经元都能“独当一面”。
互动演示
🎮 互动演示:训练历程(Training History)

场景:用神经网络预测钢梁的极限承载力。点击“▶ 开始训练”观察训练损失和验证损失随 epoch 变化的动态过程。

当前 Epoch
0 / 50
训练损失
--
验证损失
--
状态
就绪
点击“▶ 开始训练”观察训练过程
模型评价指标

训练完模型后,用什么指标评判它好不好?回归和分类用不同的指标。

回归指标
MAE:预测值与真实值之差的绝对值平均
RMSE:均方误差开根号,与原始数据同单位
\(R^2\):模型解释了多少比例的数据变异(1.0 = 完美,0 = 毫无解释力)
分类指标
准确率:预测对的比例 = 正确数 / 总数
召回率:真正的正类中,有多少被找出来了
混淆矩阵:详细列出“预测对/预测错”的各种情况
💡 召回率通俗理解:假设工地上真的有 100 条裂缝,你的模型找出了 80 条——召回率 = 80%。在安全检测场景中,“漏检”比“误报”更危险,所以召回率往往比准确率更重要。
裂缝检测混淆矩阵示例
预测:有裂缝预测:无裂缝
实际:有裂缝TP = 80(正确检出)FN = 20(漏检!)
实际:无裂缝FP = 10(误报)TN = 890(正确排除)
⚠️ 准确率 = (80+890)/1000 = 97%,看起来很高!但召回率 = 80/100 = 80%,意味着 20% 的裂缝被漏检——在安全场景中这可能是致命的。
超参数选择指南

神经网络中有很多需要人工设定的“超参数”(不是训练学出来的),选择不当会严重影响性能。以下是常见超参数及其选择建议:

超参数典型范围选择建议
学习率0.0001 ~ 0.1先用 0.001 尝试;如果损失震荡,调小;如果收敛太慢,调大
隐藏层数1 ~ 5简单任务 1~2 层够用;复杂任务逐步加深,注意过拟合
每层神经元数16 ~ 512通常是 2 的幂次(32, 64, 128);逐步调整,观察验证集表现
Batch Size16 ~ 256小 batch 噪声大但泛化好;大 batch 训练快但可能陷入局部最优
Dropout 比率0.1 ~ 0.5过拟合严重时增大;通常从 0.2 开始尝试
训练轮次 (Epochs)10 ~ 1000配合早停法使用,监控验证集损失决定何时停止
💡 经验法则:超参数调优没有万能公式。最可靠的方法是“控制变量法”——每次只改一个超参数,观察效果,逐步逼近最优组合。
📌 钢结构场景:土木工程数据集通常较小(几十到几百条),建议使用较小的网络(1~2 层,每层 16~64 个神经元)、较高的 Dropout(0.3~0.5)和较小的学习率(0.0005~0.005)。
数据预处理的重要性

神经网络对输入数据的尺度非常敏感。如果不做预处理,特征值范围差异巨大(如跨度 6 m vs 弹性模量 206000 MPa),会导致训练困难。

标准化(Standardization)
将每个特征转换为均值 0、标准差 1:
\(x' = \frac{x - \mu}{\sigma}\)
适合大部分场景,特别是特征分布接近正态时。
归一化(Min-Max Normalization)
将每个特征缩放到 [0, 1] 范围:
\(x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}}\)
适合已知取值范围且分布不均匀的场景。
⚠️ 致命错误:用整个数据集(包括测试集)计算均值和标准差来做标准化——这叫“数据泄露”。正确做法:只用训练集的统计量来标准化所有数据。
钢梁数据预处理示例
特征原始范围标准化后说明
跨度 L (m)4 ~ 20-1.5 ~ 1.5均值 12 m,标准差 5.3 m
荷载 P (kN)10 ~ 500-1.5 ~ 1.5均值 255 kN,标准差 163 kN
弹性模量 E (MPa)200000 ~ 210000-1.5 ~ 1.5均值 206000,标准差 2800
截面惯性矩 I (cm⁴)1000 ~ 50000-1.5 ~ 1.5均值 15000,标准差 12700
06

卷积神经网络 CNN

图像识别的核心架构

为什么图像需要 CNN?

一张 256x256 的彩色图片有 256 × 256 × 3 = 196,608 个像素值。如果用全连接层,第一层就需要近 2 亿个参数!CNN 通过局部连接参数共享大幅减少参数量。

🔍
局部连接
每个神经元只“看”输入图像的一小块区域(感受野),而非全部像素。就像用放大镜逐区域检查。
🔄
参数共享
同一个卷积核在整张图上滑动,所有位置共享同一组权重。大幅减少参数数量。
📐
平移不变性
无论裂缝出现在图像的哪个位置,同一个卷积核都能检测到。这正是图像识别需要的特性。
感受野(Receptive Field)

感受野是指输出特征图上的一个像素“能看到”原始输入图像多大的区域。随着网络层数增加,感受野逐渐扩大。

🔍
第 1 层卷积
感受野 = 3×3
只能看到局部细节
检测:边缘、点、线
🔎
第 2 层卷积
感受野 = 5×5
能看到更大的局部模式
检测:角、纹理、小裂缝
🔭
第 3 层卷积
感受野 = 7×7
能看到更大的语义区域
检测:缺陷形状、裂缝走向
💡 这就是“深度”的意义:浅层提取低级特征(边缘、颜色),深层组合成高级语义(裂缝、气孔、未焊透)。层数越多,网络理解的“抽象程度”越高。
互动演示
🖼️ 卷积操作动画

5×5 输入矩阵与 3×3 卷积核逐步进行卷积运算。点击“下一步”观察卷积核滑动和对应输出的计算过程。

输入矩阵 (5×5)
*
卷积核 (3×3)
=
输出矩阵 (3×3)
当前计算
点击“下一步”开始
当前结果
--
互动演示
📏 池化操作(Max Pooling)

4×4 输入矩阵上进行 2×2 最大池化。每个 2×2 区域取最大值,输出为 2×2。点击“下一步”逐步演示。

输入 (4×4)
Max→
输出 (2×2)
当前操作
点击“下一步”开始
🤔 小思考:为什么裂缝检测要用 CNN 而不是 MLP?——答:裂缝照片是二维图像,MLP 会丢失空间位置信息,而 CNN 的卷积核能保留和利用局部空间关系。
经典 CNN 架构
1
输入
原始图像
2
卷积层
提取特征
3
池化层
降维压缩
4
重复
多轮卷积+池化
5
展平
Flatten
6
全连接
分类输出
🏗️ 土木工程应用:桥梁裂缝检测——输入裂缝照片,CNN 自动提取边缘、纹理、形状等特征,最终判断裂缝的严重程度等级。
📌 重要:卷积核中的数字不是人工编写的规则,而是通过训练自动学出来的。好的卷积核能提取有用的特征(如边缘、纹理),坏的卷积核提取不出有用信息。
钢结构实战场景
钢结构焊缝缺陷检测——CNN 实战场景

钢结构的焊缝质量直接关系到结构安全。传统的焊缝检测依赖人工目视检查或超声波探伤,效率低且受主观因素影响。CNN 可以通过自动分析焊缝照片来检测缺陷类型。

1
输入
焊缝灰度图像
2
Conv 1
检测边缘和裂纹
3
Conv 2
识别缺陷模式
4
池化
降分辨率,保留主要特征
5
全连接
输出缺陷类别
三种常见焊缝缺陷
气孔(Porosity)
焊接过程中气体未能逸出,在焊缝内部形成空洞。CNN 通过识别圆形暗斑模式来检测。
裂纹(Crack)
焊缝中的线性断裂,是最危险的缺陷类型。CNN 通过识别细长线状特征来检测。
🔲
未焊透(Lack of Penetration)
焊缝未完全熔透母材,表现为根部未融合区域。CNN 通过识别不规则暗带来检测。
参数量对比:全连接 vs 卷积

一张 128×128 焊缝图像,如果用全连接需要 128×128×64 = 1,048,576 个参数(仅第一层)。用 3×3 卷积核只需要 3×3×64 = 576 个参数——减少了 99.95%

全连接
1,048,576
卷积
576
⚠️ 这就是 CNN 的核心优势:参数共享让网络可以用极少的参数处理高分辨率图像,同时还能保持平移不变性——无论缺陷出现在焊缝的哪个位置,同一个卷积核都能检测到。
07

循环神经网络 RNN

序列数据建模与记忆机制

为什么需要 RNN?

MLP 和 CNN 处理的是固定大小的输入。但很多数据是序列形式的——文本是单词的序列、时间序列是时间步的序列。序列中的前后信息有依赖关系,RNN 通过“记忆”来捕捉这种依赖。

$$h_t = f(W_{hh} h_{t-1} + W_{xh} x_t + b)$$

其中 \(h_t\) 是第 \(t\) 步的隐藏状态(记忆),它同时依赖当前输入 \(x_t\) 和上一步的记忆 \(h_{t-1}\)。

互动演示
🔁 RNN 记忆衰减可视化

观察 RNN 处理一句话时,对早期单词的“记忆”如何随距离衰减。颜色越深代表记忆越强,越浅代表记忆越弱。点击“播放”逐词处理。

输入句子(施工日志):
点击“播放”观察记忆衰减效果
🤔 小判断:预测明天的桥梁位移用 MLP 还是 RNN?——答:RNN,因为位移是时间序列数据,需要考虑历史趋势(今天的位移会影响明天的预测)。
梯度消失与 LSTM

普通 RNN 在序列较长时,梯度在反向传播中会指数级衰减(梯度消失),导致网络无法学习长距离依赖。LSTM 通过引入门控机制解决了这个问题。

🚪
遗忘门
决定丢弃哪些旧记忆。
\(f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)\)
📥
输入门
决定哪些新信息写入记忆。
\(i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)\)
📤
输出门
决定从记忆中输出哪些信息。
\(o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)\)
💡 类比:LSTM 就像一个智能笔记本——遗忘门决定擦掉哪些旧笔记,输入门决定写入哪些新内容,输出门决定当前要翻阅哪些笔记来回答问题。
📌 补充:今天很多序列任务也会用 Transformer 架构。但 RNN 在教学上仍然重要,因为它最容易帮助理解“记忆”和“时间依赖”的概念。
从 RNN 到 Transformer 的演进

RNN 的核心限制在于“逐步处理”:必须按顺序一个时间步一个时间步地计算,无法并行化。2017 年提出的 Transformer 通过“注意力机制”彻底改变了这一局面。

RNN 的局限
① 顺序计算:t 时刻的输出依赖 t-1 的隐藏状态,无法并行
② 长距离依赖:即使 LSTM 也难以处理超长序列(数千步)
③ 训练效率:序列越长,训练时间线性增长
Transformer 的突破
① 注意力机制:任意两个位置可以直接“对话”,不受距离限制
② 全并行计算:所有位置同时处理,充分利用 GPU
③ 可扩展性:模型越大、数据越多,效果越好(Scaling Law)
💡 注意力的直觉:读一个句子时,你的注意力不是均匀分配的——重要的词会被“重点关注”。Transformer 的注意力机制就是让模型学会“该关注哪里”。
📌 工程启示:在结构健康监测中,Transformer 开始替代 LSTM 处理长时间序列数据(如数小时的传感器记录),因为它能更好地捕捉远距离时间关联。
RNN 架构变体

RNN 的灵活之处在于输入和输出可以是不同长度的序列,这催生了四种常见的架构变体:

1️⃣
One-to-One(一对一)
普通分类/回归,单输入单输出。严格来说不需要 RNN,但可以作为 RNN 架构的特例理解。
1️⃣→📝
One-to-Many(一对多)
给一张钢结构照片,生成一段检测报告文字。输入是单个特征向量,输出是一个文本序列。
📊→1️⃣
Many-to-One(多对一)
读取一段振动时序数据,输出结构健康等级(如“正常/预警/危险”)。多个时间步输入,一个分类结果输出。
📊→📊
Many-to-Many(多对多)
输入历史位移序列,预测未来位移序列。输入和输出都是序列,长度可以不同。
钢结构实战场景
钢桥健康监测——RNN 实战场景

大型钢桥在运营过程中,需要持续监测结构状态以确保安全。LSTM 网络特别适合处理这类长时间序列的振动监测数据。

监测流程
① 数据采集:传感器每秒采集加速度、应变等数据
② 模式分析:RNN 分析最近 N 秒的振动模式
③ 异常检测:突然的频率变化可能意味着螺栓松动或焊缝开裂
④ 实时预警:异常评分超过阈值时自动发出警报
LSTM 的优势
长期记忆:能记住“正常振动模式”,与当前模式对比
季节适应:能学习温度变化导致的正常频率漂移
渐变检测:能捕捉缓慢发展的结构退化趋势
1
传感器数据
加速度/应变
2
预处理
滤波/归一化
3
LSTM 模型
序列特征提取
4
异常评分
偏离正常模式的程度
5
预警
超阈值则报警
💡 实际案例:港珠澳大桥安装了超过 1 万个传感器,全天候采集结构响应数据。基于 LSTM 的异常检测系统可以在人工巡检之前就发现潜在的结构隐患。
RNN 与 LSTM 的数学对比

理解 RNN 和 LSTM 的关键差异,有助于判断何时需要“升级”到 LSTM:

普通 RNN
隐藏状态更新:
\(h_t = \tanh(W_{hh}h_{t-1} + W_{xh}x_t + b)\)

问题:\(W_{hh}\) 被反复相乘,导致梯度指数级衰减或爆炸
LSTM
细胞状态更新:
\(C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t\)

优势:加法操作代替乘法,梯度可以无损地“传送”很远
💡 关键直觉:LSTM 的细胞状态像一条“高速公路”——信息可以在上面畅通无阻地传输很远,门控机制只在需要时“上匝道”或“下匝道”。
08

应用拓展

神经网络在土木工程中的应用

智慧建造中的神经网络
🔍
结构裂缝检测(CNN)
用卷积神经网络对建筑表面照片进行自动分析,识别裂缝的位置、长度和宽度。取代人工巡检,效率提升 10 倍以上。
📊
结构健康监测(RNN/LSTM)
传感器采集桥梁的振动时序数据,RNN 模型分析振动模式的异常变化,预警结构性能退化。
🏗️
施工进度预测(MLP)
输入天气、人力、材料供应等特征,MLP 预测施工任务的完成时间,辅助项目管理决策。
📝
施工文档智能分析(NLP)
用自然语言处理技术自动分析施工日志、安全报告等文本,提取关键事件和风险信息。
⚠️ 不要乱用 AI:问题定义和数据质量比盲目上模型更重要。“用深度学习”不是万能答案——先问自己:传统方法是不是已经够用了?数据量够不够?标签质量靠不靠谱?
迁移学习——小数据的救星

土木工程的数据往往很少(几十到几百条),直接训练深度网络容易过拟合。迁移学习提供了一种解决思路:

1
预训练
在大数据集(如 ImageNet 百万图片)上训练好一个 CNN
2
冻结底层
保留已学到的低级特征(边缘、纹理等)
3
微调顶层
用少量工程数据只训练最后几层
4
完成
用几百张图就能获得好效果
🏗️ 钢结构实例:用 ImageNet 预训练的 ResNet,仅用 500 张焊缝照片微调最后 2 层,就能实现 93% 的缺陷检测准确率——而从零训练可能需要 10000+ 张图片才能达到相同效果。
迁移学习的优势
大幅减少所需数据量
训练速度更快(只训练少数层)
泛化性能更好(利用了大规模预训练知识)
注意事项
预训练域与目标域差异太大时效果有限
需要选择合适的预训练模型和冻结策略
微调学习率通常需要比从零训练小很多
钢结构中的神经网络应用全景

钢结构领域是神经网络应用的热门方向。以下梳理了从设计到运维全生命周期中的典型应用场景:

📐
设计阶段:节点承载力预测
用 MLP 替代大量有限元分析,快速预测不同设计参数下的钢节点承载力。输入:几何参数、材料强度;输出:极限承载力。
效率提升:从数小时缩短到毫秒级。
🔩
制造阶段:焊缝质量检测
CNN 自动分析 X 射线或超声波图像,识别气孔、裂纹、未焊透等缺陷。
准确率:文献报道可达 95% 以上,接近或超过资深检测员。
🏗️
施工阶段:变形监测预警
LSTM 分析施工过程中的实时变形数据,预测下一时段的变形趋势,提前预警超限风险。
优势:比传统阈值法更早发现异常趋势。
🔧
运维阶段:剩余寿命评估
综合疲劳荷载谱、环境因素、检测数据,用 MLP 预测钢桥的剩余使用寿命。
意义:辅助制定合理的维修养护计划。
⚠️ 工程提醒:以上所有 AI 应用的输出都必须经过工程师审核,并与规范计算结果交叉验证。AI 是工具,不是替代工程师判断的“黑盒决策者”。
深度学习的前沿方向
🤖
Transformer
基于注意力机制,突破 RNN 的序列限制。GPT、BERT 等大语言模型的基础架构。
🎨
GAN 生成对抗网络
由生成器和判别器博弈训练,可以生成逼真的图像、建筑设计方案等。
🧩
图神经网络 GNN
处理图结构数据(如有限元网格),在结构分析中有广泛应用前景。
互动演示
🎮 数据驱动 vs 模型驱动 vs 物理驱动

场景:预测简支钢梁在集中荷载下的跨中挠度。三种不同的建模思路,各有优劣。点击下方卡片查看详情。

📐
模型驱动
用材料力学公式
δ = PL³/(48EI)
📊
数据驱动
收集实测数据
训练 MLP 网络
🧬
物理驱动 (PINN)
力学方程作为
损失函数约束
👆 点击上方任一卡片,查看该方法的详细优缺点分析
工程落地中的边界与风险

神经网络不是万能的。在土木工程中使用 AI 时,必须清醒认识以下局限:

① 小样本问题
土木试验数据往往只有几十到几百条,远少于图像识别的百万级数据。数据不够时,神经网络很容易过拟合。
② 标签误差
裂缝等级、损伤程度等标签依赖人工判断,不同工程师的标注可能不一致,这种主观性会直接影响模型质量。
③ 分布漂移
实验室条件下训练的模型,搬到真实工地可能“水土不服”——温度、湿度、材料批次的变化都可能导致模型失效。
④ 黑箱问题
神经网络难以解释“为什么这样预测”。工程决策需要与规范、试验、力学分析相互印证,不能只看一个数字。
🚨 安全底线:对于高风险工程(如桥梁承载力评估、建筑抗震鉴定),神经网络的输出只能作为辅助参考,绝不能作为唯一决策依据。最终判断必须结合工程规范和专家经验。
学术研究中的 AI + 土木

如果你未来想在学术论文中使用神经网络解决土木工程问题,以下是评审专家最关注的要点:

1
工程问题的明确性
必须清楚说明要解决什么工程问题,为什么传统方法不够用,AI 的介入点在哪里。不能为了用 AI 而用 AI。
2
数据的代表性与来源
数据从哪来?有多少?特征和标签是如何确定的?数据是否覆盖了足够的工况范围?
3
基线对比
必须和传统方法(如经验公式、有限元)以及简单 ML 模型(如线性回归、随机森林)做对比,证明深度学习确实有优势。
4
可复现性
网络结构、超参数、训练细节、数据划分方式都需要清楚描述。最好公开代码和数据。
5
工程合理性分析
模型的预测是否符合物理直觉?参数敏感性分析结果是否合理?不能只给数字不做分析。
⚠️ 最忌讳的写法:“我们使用了 XX 网络,\(R^2\) = 0.99,效果很好。” —— 没有说清楚为什么用这个网络、数据够不够、和传统方法比如何、泛化能力怎样。这样的论文通常会被拒稿。
09

对比总结

MLP vs CNN vs RNN 及关键概念速查

三种网络架构对比
维度MLPCNNRNN
适用数据表格/结构化数据图像/网格数据序列/时间序列
连接方式全连接局部连接 + 参数共享循环连接(隐藏状态)
核心操作矩阵乘法 + 激活卷积 + 池化隐藏状态递推
参数效率参数多参数少(共享卷积核)参数少(时间步共享)
土木应用强度预测、造价估算裂缝检测、缺陷识别振动监测、进度预测
发展脉络
神经网络的发展脉络

从感知机到大语言模型,神经网络经历了近 70 年的发展。理解这条脉络,有助于把握技术发展的内在逻辑。

1
1958:感知机(Perceptron)
单层网络,只能解决线性可分问题。Rosenblatt 提出,是神经网络的开端。
2
1986:多层感知机 + 反向传播
Rumelhart 等人提出反向传播算法,突破了“异或问题”的限制,多层网络成为可能。
3
1998:LeNet (CNN)
LeCun 提出卷积神经网络用于手写数字识别,奠定了 CNN 的基础架构。
4
1997:LSTM
Hochreiter 和 Schmidhuber 提出 LSTM,通过门控机制解决了序列长距离依赖问题。
5
2012:AlexNet
在 ImageNet 竞赛中大幅领先传统方法,标志着深度学习时代的爆发。GPU 加速 + 大数据 + 深网络 = 突破。
6
2017:Transformer
Vaswani 等提出注意力机制(Attention),彻底改变了 NLP 领域,催生了 GPT 和 BERT。
7
2020s:大语言模型时代
ChatGPT 等大模型进入大众生活,AI 从实验室走向千家万户。参数量从百万级跃升到千亿级。
💡 掌握了 MLP → CNN → RNN 的脉络,就掌握了深度学习发展的主干。后续的 Transformer、GNN 等架构,都是在这些基础上的延伸和创新。
关键概念速查
概念一句话解释
激活函数为网络引入非线性,使其能拟合任意复杂关系。常用:ReLU、Sigmoid、Tanh
损失函数衡量模型预测与真实值的差距。回归用 MSE/MAE,分类用交叉熵
梯度下降沿损失函数梯度的反方向更新参数,逐步逼近最优解
反向传播利用链式法则高效计算所有参数梯度的算法
学习率参数每次更新的步长。过大发散,过小太慢
过拟合模型“记住”了训练数据的噪声,泛化能力差
Dropout训练时随机关闭神经元,防止过拟合
卷积用小矩阵(卷积核)在输入上滑动,提取局部特征
池化对特征图降采样(如取最大值),减少计算量
LSTM带门控机制的 RNN,解决长距离依赖的梯度消失问题
土木学生如何选模型?

先看数据结构,再选网络结构。记住这个简单决策表:

你的数据长什么样?优先考虑典型场景
表格 / 结构化数值MLP混凝土强度预测、造价估算
图片 / 照片CNN裂缝识别、缺陷检测
时间序列 / 传感器数据RNN / LSTM振动监测、沉降预测
网格 / 拓扑 / 节点关系GNN(进阶)有限元网格分析
长文本 / 复杂序列Transformer(进阶)施工文档理解、多模态
💡 GNN 和 Transformer 是更前沿的架构,本课程点到为止。掌握了 MLP / CNN / RNN 的基本原理后,再学它们会容易很多。
深度学习实践流程

从拿到数据到模型上线,一个完整的深度学习项目通常包含以下步骤:

1
问题定义
明确任务类型和评价指标
2
数据收集
获取高质量标注数据
3
数据预处理
清洗、标准化、增强
4
模型选择
根据数据选网络
5
训练调参
超参数搜索
6
评估验证
测试集最终评价
⚠️ 最常犯的错误:直接跳到第 4 步“选模型”,忽略了问题定义和数据质量。记住:数据质量 > 模型复杂度。好的数据 + 简单模型,往往优于差的数据 + 复杂模型。
新手常见错误与陷阱

初学者在使用神经网络时,经常会掉入以下陷阱。提前了解可以少走很多弯路:

!
❌ 数据泄露
用测试集参与了训练或特征工程(如标准化),导致评估结果虚高。正确做法:严格隔离三个数据集。
!
❌ 忽视基线模型
直接上深度学习,不和简单模型(线性回归、随机森林)对比。有时简单模型的效果一样好甚至更好。
!
❌ 过度追求训练精度
训练损失降到很低就以为成功了。真正的目标是验证集和测试集上的表现
!
❌ 不做数据预处理
特征值范围差异巨大(如跨度 6 m vs 弹性模量 206000 MPa),不标准化会导致训练极不稳定。
!
❌ 盲目加深网络
数据量很小却用了 10 层深网络。土木工程数据通常较少,1~3 层往往就够了。
!
❌ 忽视物理合理性
模型预测出负的承载力或超大的位移,不检查物理合理性就直接使用。AI 输出必须通过工程常识检验。
PyTorch 代码对照

将本章学到的概念与 PyTorch 代码一一对应。即使你还不会编程,理解这种对应关系有助于加深对概念的理解:

概念PyTorch 代码说明
定义 MLPnn.Linear(4, 32)一个全连接层,4 个输入,32 个输出
ReLU 激活nn.ReLU()添加 ReLU 非线性激活
MSE 损失nn.MSELoss()回归任务的均方误差损失
交叉熵损失nn.CrossEntropyLoss()分类任务的交叉熵损失
Adam 优化器optim.Adam(lr=0.001)Adam 优化器,学习率 0.001
前向传播output = model(x)数据通过网络得到预测值
计算损失loss = criterion(output, y)比较预测值和真实值
反向传播loss.backward()计算所有参数的梯度
更新参数optimizer.step()用梯度更新权重和偏置
Dropoutnn.Dropout(p=0.3)30% 概率随机关闭神经元
卷积层nn.Conv2d(1, 64, 3)1 通道输入,64 个 3×3 卷积核
LSTM 层nn.LSTM(input_size, hidden_size)LSTM 循环神经网络层
💡 训练循环的核心就是 4 行代码:前向传播 → 计算损失 → 反向传播 → 更新参数。所有的数学原理都封装在这几行代码背后。
概念辨析:容易混淆的术语

初学者经常混淆以下概念。清晰区分它们是理解神经网络的关键:

参数 vs 超参数
参数(权重 w、偏置 b):由训练过程自动学习
超参数(学习率、层数、batch size):由人工设定,训练前确定
训练 vs 推理
训练:用数据调整权重的过程(前向+反向传播)
推理:用训练好的模型预测新数据(只有前向传播,无反向传播)
特征 vs 标签
特征(Feature / X):输入变量,模型“看到”的信息
标签(Label / Y):要预测的目标,即“正确答案”
过拟合 vs 欠拟合
过拟合:训练集好、测试集差(模型太复杂)
欠拟合:训练集和测试集都差(模型太简单)
卷积 vs 全连接
卷积:局部连接 + 参数共享,适合图像
全连接:每个节点与下一层所有节点相连,适合表格数据
前向传播 vs 反向传播
前向传播:输入 → 逐层计算 → 输出预测值
反向传播:输出 → 逐层计算梯度 → 更新权重
$$y = f(W\mathbf{x} + b)$$
神经元计算
$$\theta \leftarrow \theta - \eta \nabla L$$
梯度下降
$$L_{\text{CE}} = -\sum y \log \hat{y}$$
交叉熵损失
10

复习测验

25 道选择题,检验你对神经网络的理解

课后延伸阅读

如果你对某个方向特别感兴趣,以下资源可以帮助你深入学习:

📚 入门书籍
《动手学深度学习》(李沐等):配有完整代码的入门教材
《深度学习》(Goodfellow 等):经典理论教材,内容全面
《Python 深度学习》(Chollet):Keras 作者写的实战导向教材
🔬 土木 + AI 论文
Automation in Construction:建造领域顶刊,AI 应用论文多
Computer-Aided Civil Eng.:计算方法导向的土木顶刊
Engineering Structures:结构工程 + 数据驱动方法
💻 在线课程
Coursera:Deep Learning Specialization(Andrew Ng):经典深度学习入门课
李宏毅机器学习:中文讲解,通俗易懂
d2l.ai:《动手学深度学习》在线版,可交互运行代码
🛠️ 实践工具
PyTorch:最流行的深度学习框架,学术界首选
TensorFlow / Keras:工业界广泛使用
Google Colab:免费 GPU 云平台,适合初学者实验
💡 给土木同学的建议:先掌握 Python 基础,再学 PyTorch。从最简单的 MLP 回归开始(如混凝土强度预测),逐步进阶到 CNN 和 RNN。不要一开始就挑战最复杂的模型。