神经网络从感知机到CNN--人工智能的底层积木

举报
海是岛思念的泪 发表于 2026/09/07 10:32:17 2026/09/07
【摘要】 深度学习火了这么多年,但很多人对"神经网络"还是雾里看花。本文从最简单的感知机讲起,串到多层网络、反向传播直觉,再落到计算机视觉常用的 CNN(卷积神经网络)结构,最后给一段能跑的 Keras 代码,把"网络是怎么学会的"这件事讲透。

一提到神经网络,不少人脑子里浮现的是一堆看不懂的公式。其实它的核心思想特别朴素:用一个层层叠加的数学函数,去拟合输入到输出之间的映射。本文不堆公式,从最简单的"感知机"开始,一步步搭到能识别图像的 CNN。

深度学习能火,不是因为某个天才想出了玄学,而是因为"多层非线性变换 + 海量数据 + 算力"这个组合,刚好能把复杂模式学出来。理解它,从最底层那块积木开始最稳。

一、感知机:最原始的神经元

感知机(Perceptron)是 1958 年的老古董,但它是所有神经网络的"原子":

输入 x1, x2, ... 各自乘权重 w,求和,再过一层激活函数 f
输出 = f(w1*x1 + w2*x2 + ... + b)

它的能力很弱——只能分线性可分的样本,比如一条直线能分开的两类点。但把很多个这样的"神经元"叠成多层,能力就指数级上去了。

image.png

二、多层网络与"怎么学会"

单层不够,就叠多层,这就是多层感知机(MLP)。关键在三层:

  1. 输入层:把特征喂进去(比如一张图的像素)。
  2. 隐藏层:若干层神经元,逐层提取越来越抽象的特征。
  3. 输出层:给出预测(比如"猫"或"狗"的概率)。

那它怎么"学习"?靠反向传播(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,也只是"在积木上搭更高的楼"。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。