当前位置: 首页 > news >正文

深度学习入门:从感知机到多层感知机,用逻辑电路讲透神经网络的进化

一、先搞懂基础:感知机是什么?

感知机是 1957 年提出的 “最原始神经网络”,本质就是一个 “判断开关”—— 根据输入的特征和权重,输出 0 或 1(二分类)。咱们先从生活里的 “逻辑电路” 入手,比如 “与门”“或门”,就能轻松理解它的逻辑。

1. 感知机的核心逻辑:加权求和 + 判断

感知机的工作流程特别简单,就两步:

  • 第一步:算 “输入加权和 + 偏置”。比如输入是 x₁、x₂(可以理解为逻辑电路的两个开关,0 是关、1 是开),权重 w₁、w₂(控制输入的重要性),偏置 b(调整 “激活难度”),先算出总和:b + w₁x₁ + w₂x₂;
  • 第二步:用 “阶跃函数” 判断。如果总和 > 0,输出 1(相当于开关闭合);如果总和≤0,输出 0(开关断开)。

举个 “与门” 的例子:与门的逻辑是 “两个输入都为 1,输出才是 1”,真值表长这样:

x₁x₂输出 y
000
100
010
111

要实现这个逻辑,只需要给感知机设一组参数:权重 w₁=0.5、w₂=0.5,偏置 b=-0.7。咱们验证一下:

  • 当 x₁=1、x₂=1 时:总和 = -0.7 + 0.5×1 + 0.5×1 = 0.3 > 0,输出 1(符合与门逻辑);
  • 当 x₁=1、x₂=0 时:总和 = -0.7 + 0.5×1 + 0.5×0 = -0.2 ≤0,输出 0(也符合)。

同理,“或门”(只要有一个输入为 1,输出就是 1)只要把偏置调小一点(比如 b=-0.3),“与非门”(和与门相反,两个输入都为 1 时输出 0)把权重设为负数(比如 w₁=-0.5、w₂=-0.5),都能轻松实现。

2. 感知机的致命局限:解决不了 “异或门”

本来以为感知机这么好用,直到遇到 “异或门”—— 异或门的逻辑是 “两个输入不一样时输出 1,一样时输出 0”,真值表是这样:

x₁x₂输出 y
000
101
011
110

我试着调了无数组权重和偏置,却发现怎么都实现不了这个逻辑。后来才明白:感知机只能处理 “线性可分” 的问题—— 就是能用一条直线把 “输出 0” 和 “输出 1” 的样本分开。比如与门、或门的样本,画在坐标系里都能用一条直线分开;但异或门的样本,不管怎么画直线,都没法把 “输出 1” 和 “输出 0” 的点完全分开(这就是 “线性不可分”)。

这时候就需要 “多层感知机” 登场了 —— 它相当于把多个感知机 “叠起来”,用 “非线性” 的方式解决线性不可分问题。

二、多层感知机:给感知机加 “隐藏层”,突破线性局限

多层感知机(MLP)的核心改进,就是在 “输入层” 和 “输出层” 之间加了 “隐藏层”—— 相当于把多个感知机的输出,当作下一层感知机的输入。咱们还是用异或门举例,看看它是怎么突破局限的。

1. 多层感知机的结构:输入→隐藏→输出

异或门的多层感知机结构很简单,就加了一个 “2 个神经元的隐藏层”:

  • 输入层:2 个神经元(对应 x₁、x₂);
  • 隐藏层:2 个神经元(h₁、h₂,相当于两个中间感知机);
  • 输出层:1 个神经元(对应最终输出 y)。

它的计算逻辑是 “两步走”:

  1. 输入层→隐藏层:x₁、x₂先传给 h₁、h₂,各自经过感知机计算(加权和 + 激活),得到 h₁、h₂的输出;
  2. 隐藏层→输出层:h₁、h₂的输出作为新输入,再经过输出层的感知机计算,得到最终 y。

具体怎么实现异或门呢?给隐藏层和输出层设一组参数就行(不用记,理解逻辑就好):

  • 隐藏层 h₁:权重 w₁₁=1、w₁₂=1,偏置 b₁=-0.5(其实是个或门);
  • 隐藏层 h₂:权重 w₂₁=-1、w₂₂=-1,偏置 b₂=1.5(其实是个与非门);
  • 输出层 y:权重 w₃₁=1、w₃₂=1,偏置 b₃=-0.5(又是个或门)。

咱们验证 x₁=1、x₂=0 的情况:

  • h₁:1×1 + 1×0 -0.5 = 0.5 >0 → 输出 1;
  • h₂:-1×1 + (-1)×0 +1.5 = 0.5 >0 → 输出 1;
  • y:1×1 +1×1 -0.5 =1.5 >0 → 输出 1(符合异或逻辑)。

再验证 x₁=1、x₂=1 的情况:

  • h₁:1×1 +1×1 -0.5=1.5>0 →1;
  • h₂:-1×1 + (-1)×1 +1.5=-0.5≤0 →0;
  • y:1×1 +1×0 -0.5=0.5>0?不对,哦原来输出层其实是与门!调整一下输出层偏置为 - 1.5,再算:1×1 +1×0 -1.5=-0.5≤0 →输出 0(完美符合)。

你看,多层感知机其实就是把 “或门 + 与非门 + 与门” 组合起来,用多个线性感知机的 “叠加”,实现了非线性的异或逻辑。这就是隐藏层的魔力 —— 它能把原始输入转换成更高级的 “特征表示”,再让输出层做判断。

2. 关键组件:激活函数,让网络有 “非线性” 能力

刚才说多层感知机靠隐藏层突破线性局限,但还有个关键角色没提 ——激活函数。如果没有激活函数,不管加多少隐藏层,多层感知机本质还是线性计算(因为加权和叠加后还是线性的)。激活函数的作用,就是给网络加入 “非线性”,让它能处理复杂问题。

常见的激活函数有三种,各有特点:

  • 阶跃函数:最原始的激活函数,就是感知机用的 “大于 0 输出 1,否则 0”。但它不连续、导数为 0,没法用梯度下降训练(现在基本不用);
  • Sigmoid 函数:把输入映射到 0~1 之间,像个 “软开关”(不是非 0 即 1,而是输出概率)。但它有 “梯度消失” 问题(输入太大或太小时,导数接近 0,参数更新不动);
  • ReLU 函数:现在最常用的激活函数,逻辑超简单:输入≥0 时输出输入本身,输入 < 0 时输出 0。它计算快、没有梯度消失问题,还能让网络训练更稳定。比如输入是 2,输出 2;输入是 - 1,输出 0。

举个直观的例子:如果用 ReLU 当激活函数,隐藏层神经元 h₁的计算就变成 “h₁=ReLU (w₁x₁ + w₂x₂ + b)”—— 这样一来,h₁的输出就有了非线性,后续层再叠加,网络就能处理像异或门这样的复杂问题了。

三、多层感知机的进阶:多分类、超参数与过拟合

学会了基础的多层感知机,再看实际应用中的进阶知识就很容易了 —— 比如怎么处理多分类、怎么选超参数、怎么避免过拟合。

1. 多分类任务:输出层 + Softmax

之前的例子都是二分类(输出 0 或 1),但实际场景里常遇到多分类(比如识别手写数字 0~9,10 个类别)。多层感知机处理多分类的方法很简单:

  • 输出层神经元数量 = 类别数(比如 10 个类别就设 10 个输出神经元);
  • 输出层用 “Softmax 函数” 代替原来的激活函数:把每个输出神经元的 “置信度” 转换成概率(非负、和为 1),概率最大的类别就是预测结果。

比如识别手写数字时,输出层 10 个神经元的概率是 [0.01, 0.02, ..., 0.95, ..., 0.01],其中 0.95 对应的神经元就是 “5”,模型就预测这个数字是 5。

2. 超参数:怎么选 “隐藏层数量” 和 “神经元数量”?

多层感知机有两个关键超参数,需要我们手动调整:

  • 隐藏层数量:入门场景用 1~2 个隐藏层就够了(比如刚才的异或门用 1 个);复杂任务(比如图像分类)可能需要更多,但不是越多越好(太多会过拟合、训练慢);
  • 每层神经元数量:隐藏层神经元数量一般比输入层多(比如输入层 4 个特征,隐藏层设 5 个神经元),但也不能太多(会增加计算量)。

新手的话可以先从 “1 个隐藏层 + 10~20 个神经元” 开始试,再根据模型效果调整 —— 这就是 “调参” 的过程,没有绝对的标准答案,全靠实践积累经验。

3. 避坑指南:过拟合与欠拟合

训练多层感知机时,最容易遇到两个问题:

  • 欠拟合:模型太简单,连训练数据都没学好。比如用 1 个神经元的隐藏层去识别手写数字,训练准确率只有 60%。解决方法:增加隐藏层数量或神经元数量,让模型更复杂;
  • 过拟合:模型太复杂,把训练数据里的 “噪音” 当成了规律。比如训练准确率 99%,但用新数据测试时准确率只有 70%(就像学生死记硬背真题,换套新题就不会了)。解决方法:
    • 用 “权重衰减”:给参数加 “惩罚”,不让参数值太大;
    • 用 “暂退法(丢弃法)”:训练时随机 “关掉” 一部分神经元,避免模型过度依赖某些神经元;
    • 多要数据:给模型更多训练样本,让它学真正的规律。

还有个实用技巧叫 “K 折交叉验证”:如果数据不够多,就把训练数据分成 K 份(比如 5 份),每次用 4 份训练、1 份验证,重复 5 次取平均误差 —— 这样能更准确地判断模型是欠拟合还是过拟合。

http://www.dtcms.com/a/389602.html

相关文章:

  • macos m1 芯片无法安装kubeedge keadm 解决办法
  • 猎板 PCB:以全维度工艺突破,构建 PCB 制造技术壁垒
  • android12 SDK31 wifi开发(仅提供连接wifi的工具类)
  • Android播放视频适配黑边问题类型总结
  • 第十一章:AI进阶之--模块的概念与使用(二)
  • 异常检测patchcore 学习笔记 2025
  • [iOS] 网络 - AFNetWorking
  • iOS App 混淆与性能稳定性优化 混淆开销、崩溃风险、CI 集成与落地实务(
  • Freertos系统(任务挂起和恢复)
  • Git更新仓库时,忽略指定文件
  • 告别“瞎练”!数据闭环正成机器人智能进化核心引擎!
  • 基于MATLAB的无人机遥感数据预处理与农林植被性状估算
  • MATLAB基于AHP-模糊综合评价法的工程实践能力评价
  • 特征选择+优化算法+GBDT+SHAP分析!ReliefF-CPO-GBDT分类预测结合SHAP可解释分析MATLAB
  • 设计模式-外观模式详解
  • 《FastAPI零基础入门与进阶实战》第19篇:消息管理
  • 类和对象(下):static成员、友元类、内部类、匿名对象、优化——对象拷贝时的编译器优化
  • 虚拟线程(Virtual Thread)
  • 1688 店铺全商品接口技术全解:从页面解析到分页采集的完整实现方案
  • 日志轮转策略针对香港VPS存储空间的设置标准
  • 线性分组码及其相关概念
  • JWT的工作流程
  • Java 25 新特性 更简洁、更高效、更现代
  • 探讨前端与后端的安全策略:保护用户数据的关键措施
  • 如何使用DeepSeek等AI工具来帮助自己的工作
  • 灵途科技亮相CIOE2025 | 光电感知赋能具身智能升级
  • 我的云端影院:LibreTV+cpolar的异地观影记
  • NW748NW765美光固态闪存NW775NW781
  • 软考中级习题与解答——第八章_计算机网络(1)
  • Playwright 完全指南:从入门到实战,解锁自动化测试新范式