神经网络从感知机到CNN--人工智能的底层积木
一提到神经网络,不少人脑子里浮现的是一堆看不懂的公式。其实它的核心思想特别朴素:用一个层层叠加的数学函数,去拟合输入到输出之间的映射。本文不堆公式,从最简单的"感知机"开始,一步步搭到能识别图像的 CNN。
深度学习能火,不是因为某个天才想出了玄学,而是因为"多层非线性变换 + 海量数据 + 算力"这个组合,刚好能把复杂模式学出来。理解它,从最底层那块积木开始最稳。
一、感知机:最原始的神经元
感知机(Perceptron)是 1958 年的老古董,但它是所有神经网络的"原子":
输入 x1, x2, ... 各自乘权重 w,求和,再过一层激活函数 f
输出 = f(w1*x1 + w2*x2 + ... + b)
它的能力很弱——只能分线性可分的样本,比如一条直线能分开的两类点。但把很多个这样的"神经元"叠成多层,能力就指数级上去了。

二、多层网络与"怎么学会"
单层不够,就叠多层,这就是多层感知机(MLP)。关键在三层:
- 输入层:把特征喂进去(比如一张图的像素)。
- 隐藏层:若干层神经元,逐层提取越来越抽象的特征。
- 输出层:给出预测(比如"猫"或"狗"的概率)。
那它怎么"学习"?靠反向传播(Backpropagation):
- 前向:数据进网络,算出预测值。
- 算损失:预测和真实标签差多少(用损失函数衡量)。
- 反向:把损失从输出层往回传,用梯度告诉每个权重"该往哪调、调多少"。
- 更新:优化器(如 SGD、Adam)按梯度微调权重。
这就是那句常被念叨的"梯度下降"——模型在损失曲面上一步步往低处走,走到损失最小,模型就"学会"了。具体推导不用死记,记住这个闭环就够了。
三、CNN:让网络看懂图像
MLP 直接吃像素有个致命问题:参数爆炸、还抓不住"平移不变性"(猫在图左和在图右应该是同一只猫)。于是有了 CNN(卷积神经网络),它用三种结构解决这个问题:
| 结构 | 作用 | 类比 |
|---|---|---|
| 卷积层 | 用滤波器提取局部特征(边缘、纹理) | 滑动的小窗口扫图 |
| 池化层 | 下采样,保留主要信息、缩小尺寸 | 把图"压扁"一点 |
| 全连接层 | 把提取到的特征汇总做分类 | 传统神经网络的收尾 |
卷积的精髓是权值共享:同一个滤波器滑过整张图,参数少、还能识别"无论在哪的特征",这正好对上了图像的平移不变性。
四、一段能跑的代码
用 Keras 搭一个识别手写数字的简单 CNN,感受下它有多"短":
from tensorflow import keras
from tensorflow.keras import layers, datasets
(x_train, y_train), (x_test, y_test) = datasets.mnist.load_data()
x_train = x_train.reshape(-1, 28, 28, 1) / 255.0 # 归一化到 0~1
x_test = x_test.reshape(-1, 28, 28, 1) / 255.0
y_train = keras.utils.to_categorical(y_train)
y_test = keras.utils.to_categorical(y_test)
model = keras.Sequential([
layers.Conv2D(32, 3, activation='relu', input_shape=(28,28,1)),
layers.MaxPooling2D(2),
layers.Conv2D(64, 3, activation='relu'),
layers.MaxPooling2D(2),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5, batch_size=128, validation_split=0.1)
print(model.evaluate(x_test, y_test))
二十来行就能在 MNIST 上跑到 99% 准确率。这不代表你"懂了深度学习",但它证明了:网络结构定义好、数据喂进去、反向传播自动调参,剩下的交给算力。
五、别忽视过拟合
新手常遇到的坑:训练集准确率 100%,测试集一塌糊涂。这就是过拟合——模型把训练数据的噪声都背下来了。常用对策:
- 正则化(L1/L2):给权重加约束,别让它乱长。
- Dropout:训练时随机"关掉"一部分神经元,强迫网络不依赖特定节点。
- 数据增强:图像翻转、旋转,变相增加数据量。
调模型时永远盯着验证集的表现,而不是训练集,否则容易被虚假的高分骗了。
小结
神经网络没那么神秘:感知机是最底层积木,多层叠加 + 反向传播让它学会拟合,CNN 用卷积/池化专门对付图像。本文从原理、结构到一段可跑的 Keras 代码都过了一遍。记住三件事:前向算预测、反向调权重、过拟合看验证集。有了这个框架,再去看更复杂的 Transformer、ResNet,也只是"在积木上搭更高的楼"。
- 点赞
- 收藏
- 关注作者
评论(0)