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

感知机原理及C++代码实现:AI神经网络入门

最近在跳槽已经结束,开始继续更新!!!

大家好,我是Bayesino.今天,我们来聊聊感知机(Perceptron)——这个AI领域的“祖师爷”,它是现代深度学习和神经网络的基石,就像一座小桥,连接了经典逻辑电路和当今的ChatGPT大模型。别担心,我不会扔一堆数学公式给你,而是用通俗的故事、简单C++代码实现和生活比喻来拆解它。如果你对神经网络基础感兴趣,这篇感知机原理科普绝对是你的“开胃菜”。

感知机不是什么科幻玩意儿,它最早由心理学家Frank Rosenblatt在1958年提出,灵感来源于人脑神经元:一个“细胞”接收信号,超过某个阈值就“兴奋”输出1,否则安静输出0。简单说,它就是一个加权求和 + 激活函数的计算单元,能模拟大脑的“决策”过程。在AI的浪潮中,理解感知机原理能帮你快速掌握从单层感知机多层感知机的演进。

单层感知机:——基础实现与代码

想象一下,你在玩积木:每个输入(比如X和Y)是一个积木块,带上“权重”(w,表示重要度,正权重鼓励、负权重抑制),堆在一起求和(net),如果总和超过“门槛”(threshold),就输出1(true),否则0(false)。激活函数这里用最简单的阶跃函数(step):像个开关,net ≥ threshold 时“啪”一下亮灯。这就是单层感知机的核心,能轻松实现基本逻辑门

用它能干啥?实现经典逻辑门!比如:

  • AND门:只有两个输入都为1,才输出1
    感知机参数:权重w1=1, w2=1,门槛=2。net = 1X + 1Y 判断是否≥ 2?
    测试:(0,0)→0,(1,1)→1。完美模拟“必须全员到齐”。

  • OR门:任一输入为1,就输出1
    权重同上,但门槛降到1。net 是否≥ 1?
    (0,0)→0,(0,1)→1。完美模拟“有一个人来就行”。

  • NOT门:输入0输出1,反之亦然(“反转开关”)。
    单输入,w1=-1,门槛=0。net = -1*X ≥ 0?
    0→1(无抑制),1→0(被负权重压住)。

这些在C++代码实现中超简单。激活函数也以阶跃函数为例

// 阶跃函数:net >= threshold ? 1 : 0(AI激活函数基础)
int step(int net, int threshold) {return (net >= threshold) ? 1 : 0;
}// AND感知机:逻辑与门实现
int AND_perceptron(int X, int Y) {int w1 = 1, w2 = 1;int threshold = 2;int net = w1 * X + w2 * Y;return step(net, threshold);
}// OR感知机:逻辑或门
int OR_perceptron(int X, int Y) {int w1 = 1, w2 = 1;int threshold = 1;int net = w1 * X + w2 * Y;return step(net, threshold);
}// NOT感知机:逻辑非门
int NOT_perceptron(int X) {int w1 = -1;int threshold = 0;int net = w1 * X;return step(net, threshold);
}

这些单层感知机示例是神经网络入门的必备,可以帮你理解权重如何影响决策。(本文权重是人为给定的)

多层感知机:破解XOR问题——从线性到非线性跃升

单层感知机牛,但有局限:它线性可分的东西才能搞定。

单层感知机本质就是计算:

w1x1+w2x2+b=0 w_1 x_1 + w_2 x_2 + b = 0 w1x1+w2x2+b=0

这就是一条直线(二维时)。
感知机的分类结果是直线的两侧:

  • 直线上方 → 1
  • 直线下方 → 0

所以:它天生可以被一条直线(二维时)分割!

XOR门(“不同才输出1”):(0,0)→0, (0,1)→1, (1,0)→1, (1,1)→0。这玩意儿在平面图上画不出直线分开正负样本(经典“XOR问题”)。
我们把它们点在坐标平面:

   Y|1 |   ○(1,1)    ●(0,1)|0 |   ●(1,0)    ○(0,0)+---------------------- X0        1

● = 输出1 , ○ = 输出0

我们可以发现:
正例 (●) 在对角线上, 负例 (○) 在另一条对角线 ,想通过画一条直线不可能把● 和 ○ 完全分开!!!

那解决方案是什么呢?那就是多层感知机!隐藏层先“加工”输入,输出层再融合。1950年代的Minsky和Papert就吐槽单层感知机解决不了XOR,导致AI“冬天”来临。但1980年代,反向传播算法让多层感知机(MLP)复活,成为神经网络基石。在2025年,这仍是深度学习的核心概念。

XOR感知机举例:我们用隐藏层建OR和NAND(NAND是~AND)。然后输出层“AND”这两个隐藏输出。

NAND实现(加个bias调整,net = -X -Y +1,门槛=0):

  • (0,0)→1, (0,1)→1, (1,0)→1, (1,1)→0(只有全1才关门)。

C++代码(我修正了门槛为2,确保(0,0)输出0):

// NAND感知机:逻辑非与门
int NAND_perceptron(int X, int Y) {int w1 = -1, w2 = -1;int threshold = 0;int net = w1 * X + w2 * Y + 1;  // +1 bias(偏移调整)return step(net, threshold);
}// XOR:隐藏层 OR + NAND,输出层 AND 它们
int XOR_perceptron(int X, int Y) {int h1 = OR_perceptron(X, Y);   // 隐藏1: ORint h2 = NAND_perceptron(X, Y); // 隐藏2: NANDint w_h1 = 1, w_h2 = 1;int threshold = 2;  // 关键:门槛=2,实现AND(h1, h2)int net = w_h1 * h1 + w_h2 * h2;return step(net, threshold);
}

这样多层就解决了线性不可分问题。这个可以类别于:单层像直线公路,多层像立交桥,能绕弯处理复杂逻辑。

感知机虽简单,却暴露AI痛点:单层学不了XOR,多层训练难(早期无高效算法,后来BP算法解决)。但它奠基了今天的一切——从图像识别到自动驾驶,全靠堆叠感知机。

完整代码如下:

#include <iostream>// 激活函数:阶跃函数(threshold)
int step(int net, int threshold){return (net >= threshold) ? 1 : 0;
}// 单层感知机:AND
int AND_perceptron(int X, int Y){int w1 = 1, w2 = 1; //权重int threshold = 2; //阈值int net = w1 * X + w2 * Y;return step(net, threshold);
}// 单层感知机: NOT
int NOT_perceptron(int X){int w1 = -1; // 负权重抑制int threshold = 0;int net = w1 * X;return step(net,threshold);
}// 单层感知机:OR
int OR_perceptron(int X, int Y){int w1 = 1, w2 = 1;int threshold = 1;int net = w1 * X + w2 * Y;return step(net, threshold);
}// 多层:XOR(隐藏层:OR和NAND)
int NAND_perceptron(int X, int Y){int w1 = -1, w2 = -1;int threshold = 0; // 净输入 = -X -Y >=0 只在X=Y=0时激活int net = w1 * X + w2 * Y + 1; // +1 bias 调整return step(net,threshold);
}int XOR_perceptron(int X, int Y){int h1 = OR_perceptron(X, Y);int h2 = NAND_perceptron(X, Y);int w_h1 = 1, w_h2 = 1;int threshold = 2; // 修正为2,确保XOR(0,0)=0int net = w_h1 * h1 + w_h2 * h2;return step(net,threshold);
}int main(){// (输入用0/1)std::cout << "AND_perc: (0,0)->" << AND_perceptron(0,0) << " (1,1)->" << AND_perceptron(1,1) << std::endl;std::cout << "NOT_perc: 0->" << NOT_perceptron(0) << " 1->" << NOT_perceptron(1) << std::endl;std::cout << "OR_perc: (0,0)->" << OR_perceptron(0,0) << " (0,1)->" << OR_perceptron(0,1) << std::endl;std::cout << "XOR_perc: (0,0)->" << XOR_perceptron(0,0) << " (0,1)->" << XOR_perceptron(0,1) << " (1,0)->" << XOR_perceptron(1,0)<< " (1,1)->" << XOR_perceptron(1,1) << std::endl;return 0;
}
http://www.dtcms.com/a/605533.html

相关文章:

  • kanass实战教程系列(5) - 开发团队如何通过kanass有效管控开发任务
  • 建网站如何收费wordpress 论坛app
  • 返利网站做鹊桥推广中国建设银行购物网站
  • ADI推出基于VS Code的IDE开发环境一条龙软件CodeFusion Studio V2.0发布,AI端到端,图形化配置和ELF可视化
  • Prompt提示词工程概述
  • List vs Set:深入剖析Java两大集合的核心区别与实战应用
  • 抖音综合智能营销截流系统:基于 AI 算法的精准获客解决方案
  • 基于多源数据融合与机器学习算法的MATLAB小麦产量预估系统
  • MCP之Prompt提示词工程
  • 11个免费网站空间免费做淘宝客网站
  • 【高级机器学习】6. 稀疏编码与正则化
  • 23.Linux硬盘分区管理
  • 衡水做网站服务商网站建设进度表模板下载
  • 闲置物品平台开发实践:从需求分析到系统架构设计
  • Substance 3D 材质流:AI 快速生成与程序化精修
  • 全球动荡下的金融科技突围:TRS收益互换与场外个股期权系统架构全景解析
  • 软考 系统架构设计师历年真题集萃(201)—— 2025年11月系统架构设计师真题4
  • 网站开发调研问卷深圳龙华区房价
  • 【超详细】C#自定义工具类-ReflectionHelper反射助手类
  • eventfd 初认识Reactor/多线程服务器的关键唤醒机制
  • 接口测试“零基础通关“:Postman从入门到自动化测试实战指南
  • 成都网站优化多少钱苏州网络营销外包团队
  • C语言里面 << 和 | 的运用
  • 开源 + 实时 + 无网络限制:Excalidraw 是流程图协作新选择
  • HTTP 会话 | 消息 | MIME类型 02
  • Web开发:什么是 HTTP 状态码?
  • idea启动项目配置环境变量(nacos 命名空间)
  • win8风格 网站模板免费的logo在线设计
  • 鸿蒙ArkUI基础组件开发详解
  • 温江建设网站家庭装修报价明细预算表