共计 1988 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:新手常踩的认知陷阱
刚接触 AI 时,最容易在基础概念上栽跟头。比如把梯度下降和反向传播混为一谈——其实前者是优化算法,后者是计算梯度的链式法则。常见误区还有:

- 认为 CNN 的卷积核必须是正方形(实际可矩形)
- 以为 RNN 只能处理时序数据(其实能处理任何拓扑结构)
- 混淆损失函数和评估指标(如用准确率直接做反向传播)
这些偏差会导致后续学习像搭错了地基的房子。举个例子,有人试图用交叉熵损失函数直接优化 AUC 值,结果模型完全无法收敛。
技术图谱:AI 知识体系拆解
那 62 页 PPT 其实构建了清晰的层级结构:
graph TD
A[人工智能] --> B[机器学习]
A --> C[规则系统]
B --> D[监督学习]
B --> E[无监督学习]
B --> F[强化学习]
D --> G[深度学习]
G --> H[CNN/RNN/GAN]
必须掌握的 5 个核心公式:
- Softmax 函数:$\sigma(z)j = \frac{e^{z_j}}{\sum$}^K e^{z_k}
- 交叉熵损失:$L = -\sum y_i\log(\hat{y_i})$
- 卷积运算:$(f*g)[n] = \sum_{m=-\infty}^{\infty} f[m]g[n-m]$
- LSTM 门控:$f_t = \sigma(W_f\cdot[h_{t-1},x_t]+b_f)$
- 梯度下降:$\theta_{t+1} = \theta_t – \eta\nabla_\theta J(\theta)$
框架对比:TensorFlow vs PyTorch
通过实测 ResNet18 在 RTX 3090 上的表现:
| 指标 | TensorFlow 2.4 | PyTorch 1.8 |
|---|---|---|
| 静态图速度 | 128 samples/s | N/A |
| 动态图速度 | 117 samples/s | 135 samples/s |
| GPU 显存占用 | 6.2GB | 5.8GB |
选择建议:
- 需要部署到移动端选 TensorFlow Lite
- 研究新模型用 PyTorch 更方便调试
- 工业级流水线推荐 TFX 全家桶
代码实战:MNIST 分类全流程
# 数据预处理关键步骤
from tensorflow.keras.datasets import mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 归一化到 [0,1] 并增加通道维度
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0
x_train = np.expand_dims(x_train, -1) # 从 (60000,28,28) 变为(60000,28,28,1)
# one-hot 编码(注意别用 sklearn 的 LabelBinarizer)y_train = tf.keras.utils.to_categorical(y_train, 10)
模型构建时注意 batch_size 的影响:
model = Sequential([Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
MaxPooling2D((2,2)),
Flatten(),
Dense(128, activation='relu'),
Dense(10, activation='softmax') # 这里用 softmax 不是 sigmoid!])
# batch_size 建议从 32 开始尝试
model.compile(optimizer='adam',
loss='categorical_crossentropy', # 分类问题别用 mse
metrics=['accuracy'])
history = model.fit(x_train, y_train,
batch_size=32, # 太大显存爆炸,太小收敛慢
epochs=10,
validation_split=0.2)
生产环境三大坑
- 显存不足(OOM):
- 现象:训练时突然崩溃
-
解决方案:
- 减小 batch_size(建议以 2 的倍数调整)
- 用混合精度训练(
policy = tf.keras.mixed_precision.Policy('mixed_float16'))
-
推理速度慢:
- 现象:线上请求超时
-
解决方案:
- 转换模型为 TF-TRT 格式
- 对 CPU 部署用 OpenVINO 优化
-
安卓端崩溃:
- 现象:App 闪退
- 解决方案:
- 模型量化(
converter.optimizations = [tf.lite.Optimize.DEFAULT]) - 检查是否包含 x86 架构 so 库
- 模型量化(
延伸思考
试着回答这些问题来检验理解:
- 为什么全连接层处理图像会参数爆炸?(假设输入是 224x224RGB 图)
- 如果 MNIST 准确率卡在 98%,可以尝试哪些改进?
- 交叉熵损失相比 MSE 为什么更适合分类?
这些问题没有标准答案,但思考过程比结果更重要。建议动手修改代码参数观察变化,比如把激活函数换成 sigmoid 看看准确率下降多少。
正文完
发表至: 人工智能
近一天内
