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

别再死记硬背了!用Python手把手复现神经网络经典算法(从Hebb到Hopfield)

用Python从零实现神经网络五大经典算法从Hebb到Hopfield神经网络作为人工智能的核心技术之一其发展历程中涌现出许多奠基性算法。本文将带您用Python从零实现五种里程碑式的神经网络算法Hebb规则、感知机、Delta规则、竞争学习和Hopfield网络。不同于直接调用现代深度学习框架我们将从数学原理出发通过代码实现深入理解这些算法的本质。1. 神经网络基础与Hebb学习规则1.1 神经元模型构建让我们从最基本的McCulloch-Pitts神经元模型开始。这个1943年提出的模型虽然简单却包含了现代神经网络的核心思想import numpy as np class MPNeuron: def __init__(self, threshold0): self.threshold threshold self.weights None def activate(self, inputs): McCulloch-Pitts激活函数 total np.dot(inputs, self.weights) return 1 if total self.threshold else 0这个简单的二元神经元已经可以完成基本的逻辑运算。例如我们可以实现一个AND逻辑门and_neuron MPNeuron(threshold1.5) and_neuron.weights np.array([1, 1]) # 设置权重 print(and_neuron.activate([0, 0])) # 输出0 print(and_neuron.activate([1, 0])) # 输出0 print(and_neuron.activate([1, 1])) # 输出11.2 Hebb学习规则实现Hebb规则是Donald Hebb在1949年提出的生物学习理论核心思想是一起激活的神经元会加强连接。数学表达式为Δwᵢⱼ η·xᵢ·xⱼ其中η是学习率xᵢ和xⱼ分别是前后神经元的激活值。让我们用Python实现这个规则def hebbian_learning(input_patterns, learning_rate0.1, epochs100): Hebb规则学习实现 n_features input_patterns.shape[1] weights np.zeros(n_features) for _ in range(epochs): for pattern in input_patterns: # Hebb规则更新 weights learning_rate * pattern * pattern.T return weights我们可以用这个规则训练一个简单的模式识别器# 输入模式已中心化 patterns np.array([ [1, -1, 1, -1], [-1, 1, -1, 1] ]) # 训练权重 weights hebbian_learning(patterns) print(学习后的权重:, weights)注意原始Hebb规则没有权重衰减机制长期训练可能导致权重无限增大。实践中常加入正则化项。Hebb学习的特点完全无监督不需要目标输出学习过程基于输入的相关性适合特征提取和模式关联任务2. 感知机与Delta规则2.1 感知机模型感知机是Frank Rosenblatt在1957年提出的第一个可学习神经网络模型。与MP神经元不同感知机可以通过训练自动调整权重class Perceptron: def __init__(self, input_size, learning_rate0.1): self.weights np.random.rand(input_size) self.bias np.random.rand() self.lr learning_rate def predict(self, inputs): summation np.dot(inputs, self.weights) self.bias return 1 if summation 0 else 0 def train(self, X, y, epochs100): for _ in range(epochs): for inputs, label in zip(X, y): prediction self.predict(inputs) error label - prediction # 权重更新 self.weights self.lr * error * inputs self.bias self.lr * error2.2 感知机训练过程让我们用感知机解决一个简单的线性可分问题# 线性可分数据 X np.array([ [0, 0], [0, 1], [1, 0], [1, 1] ]) y np.array([0, 0, 0, 1]) # AND逻辑 p Perceptron(input_size2) p.train(X, y, epochs10) # 测试 print(0 AND 0:, p.predict([0, 0])) print(1 AND 1:, p.predict([1, 1]))感知机的局限性在于只能解决线性可分问题。对于XOR等非线性问题单层感知机无法收敛。2.3 Delta规则Widrow-Hoff规则Delta规则是感知机规则的连续版本使用梯度下降最小化误差def delta_rule(X, y, learning_rate0.01, epochs100): n_samples, n_features X.shape weights np.zeros(n_features) bias 0 for _ in range(epochs): for i in range(n_samples): # 线性输出 output np.dot(X[i], weights) bias error y[i] - output # Delta规则更新 weights learning_rate * error * X[i] bias learning_rate * error return weights, biasDelta规则与感知机规则的关键区别特性感知机规则Delta规则输出类型离散(0/1)连续值误差计算目标-预测类别目标-实际输出适用问题线性分类线性回归收敛性有限步收敛(线性可分)渐进收敛3. 竞争学习与Kohonen网络3.1 竞争学习原理竞争学习是一种无监督学习范式核心思想是赢家通吃(Winner-Takes-All)。在神经网络中多个神经元竞争对输入模式的响应权只有获胜的神经元会更新其权重。数学表达式寻找获胜神经元c argminⱼ‖x - wⱼ‖更新获胜神经元权重Δw_c η(x - w_c)3.2 Python实现class CompetitiveLearning: def __init__(self, n_units, input_dim, learning_rate0.1): self.weights np.random.rand(n_units, input_dim) self.lr learning_rate def find_winner(self, x): distances np.linalg.norm(self.weights - x, axis1) return np.argmin(distances) def train(self, X, epochs100): for _ in range(epochs): for x in X: winner self.find_winner(x) # 只更新获胜神经元 self.weights[winner] self.lr * (x - self.weights[winner])3.3 应用示例颜色聚类# 随机RGB颜色数据 np.random.seed(42) colors np.random.rand(100, 3) # 训练竞争网络 cl CompetitiveLearning(n_units5, input_dim3) cl.train(colors, epochs50) # 查看学习到的代表色 print(学习到的颜色中心:) print(cl.weights)竞争学习的特点完全无监督自动发现数据特征输出神经元形成输入空间的特征地图可用于聚类、向量量化和特征提取提示竞争学习常面临死神经元问题即某些神经元从未获胜。可通过泄漏学习或频率敏感竞争解决。4. Hopfield网络与联想记忆4.1 Hopfield网络原理Hopfield网络是一种全连接递归神经网络可用作内容可寻址的记忆系统。其主要特性二元神经元±1激活对称连接权重wᵢⱼ wⱼᵢ异步更新规则能量函数保证收敛能量函数定义 E -½∑ᵢ∑ⱼ wᵢⱼ sᵢ sⱼ ∑ᵢ θᵢ sᵢ4.2 Python实现class HopfieldNetwork: def __init__(self, size): self.size size self.weights np.zeros((size, size)) def train(self, patterns): 存储模式Hebb规则 for pattern in patterns: self.weights np.outer(pattern, pattern) np.fill_diagonal(self.weights, 0) # 自连接设为0 def predict(self, input_pattern, max_iter100): 异步更新恢复模式 pattern input_pattern.copy() for _ in range(max_iter): for i in range(self.size): # 随机选择神经元更新 j np.random.randint(self.size) activation np.dot(self.weights[j], pattern) pattern[j] 1 if activation 0 else -1 return pattern4.3 联想记忆演示# 定义几个简单模式字母形状 pattern1 np.array([1,1,1,1, -1,-1,-1,-1, 1,1,1,1]) # H pattern2 np.array([1,1,1,1, 1,-1,-1,1, 1,1,1,1]) # O # 创建并训练Hopfield网络 hn HopfieldNetwork(size12) hn.train([pattern1, pattern2]) # 测试噪声输入 noisy_input np.array([1,1,-1,1, -1,1,-1,-1, 1,1,-1,1]) # 损坏的H recovered hn.predict(noisy_input) print(恢复的模式:, recovered)Hopfield网络的容量限制可存储约0.14N个随机模式N为神经元数量模式间应有较低相关性存在伪吸引子问题5. 算法比较与应用场景5.1 五大算法特性对比算法学习类型网络结构典型应用优点局限性Hebb规则无监督单层模式关联、特征提取生物合理、简单权重无界、无纠错能力感知机有监督单层线性分类可证明收敛(线性可分)仅解决线性问题Delta规则有监督单层线性回归连续输出、梯度下降仅线性映射竞争学习无监督单层聚类、向量量化自组织、发现特征死神经元问题Hopfield网络无监督递归联想记忆内容寻址、纠错有限容量、伪状态5.2 现代神经网络中的传承这些经典算法在现代深度学习中仍有重要影响Hebb规则启发了现代神经网络中的相关性学习感知机是多层感知机(MLP)的基础Delta规则发展为反向传播算法的核心竞争学习在自编码器和GAN中有类似机制Hopfield网络与现代记忆网络有概念联系5.3 可视化工具为了更好理解这些算法的工作过程我们可以使用Matplotlib创建训练动态可视化import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation def visualize_learning(weights_history): fig, ax plt.subplots() line, ax.plot([], [], b-) def init(): ax.set_xlim(0, len(weights_history)) ax.set_ylim(min(weights_history)-0.1, max(weights_history)0.1) return line, def update(frame): line.set_data(range(frame), weights_history[:frame]) return line, ani FuncAnimation(fig, update, frameslen(weights_history), init_funcinit, blitTrue, interval100) plt.show()在实际项目中我发现将经典算法与现代框架结合往往能获得新的洞见。例如用PyTorch重新实现这些算法可以更高效地利用GPU加速同时保持算法的原始思想。

相关文章:

别再死记硬背了!用Python手把手复现神经网络经典算法(从Hebb到Hopfield)

用Python从零实现神经网络五大经典算法:从Hebb到Hopfield 神经网络作为人工智能的核心技术之一,其发展历程中涌现出许多奠基性算法。本文将带您用Python从零实现五种里程碑式的神经网络算法:Hebb规则、感知机、Delta规则、竞争学习和Hopfield…...

Qwen3.5-9B图文问答实战:上传图片→自动识别→多轮推理演示

Qwen3.5-9B图文问答实战:上传图片→自动识别→多轮推理演示 1. 引言 你是否遇到过这样的情况:看到一张复杂的图表或产品图片,却不知道如何准确描述它的内容?或者需要从大量图片中快速提取关键信息?Qwen3.5-9B图文问答…...

Nanbeige 4.1-3B实战指南:将传统Chat UI升级为JRPG冒险终端

Nanbeige 4.1-3B实战指南:将传统Chat UI升级为JRPG冒险终端 1. 项目概述 Nanbeige 4.1-3B像素冒险聊天终端是一套专为Nanbeige大模型设计的游戏化交互界面。这个项目将传统聊天机器人界面彻底改造为充满怀旧感的JRPG(日式角色扮演游戏)风格终端,让每一…...

硬件电路系统化设计方法论:从需求到量产的工程路径

1. 硬件电路系统化设计方法论:从理论到工程落地的完整路径在嵌入式硬件开发实践中,一个普遍存在的现象是:工程师掌握了大量分立的电路理论知识,能熟练分析运放电路、理解MOSFET开关特性、背诵ADC采样定理,却在真正面对…...

GLM-OCR与C语言结合实战:嵌入式设备上的轻量级文字识别

GLM-OCR与C语言结合实战:嵌入式设备上的轻量级文字识别 你是不是也遇到过这样的场景?手里有个基于STM32的小设备,想让它能“看懂”一些简单的文字,比如识别仪表盘上的读数、读取产品标签上的批次号,或者扫描一个简单的…...

Cogito-v1-preview-llama-3B效果展示:多语言API文档生成(中/英/西)

Cogito-v1-preview-llama-3B效果展示:多语言API文档生成(中/英/西) 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&…...

从信号处理到AI推理:用CUDA手把手实现一个高性能1D卷积核(附四种优化策略对比)

从信号处理到AI推理:用CUDA手把手实现一个高性能1D卷积核(附四种优化策略对比) 在音频降噪、金融时间序列分析和自然语言处理中,1D卷积都是核心操作。当标准深度学习框架的卷积层成为性能瓶颈时,定制化的CUDA实现往往能…...

如何解锁群晖NAS硬盘兼容性:Synology HDD db完整配置指南

如何解锁群晖NAS硬盘兼容性:Synology HDD db完整配置指南 【免费下载链接】Synology_HDD_db 项目地址: https://gitcode.com/GitHub_Trending/sy/Synology_HDD_db Synology HDD db是一个专为群晖NAS用户设计的强大兼容性解决方案,它能够将第三方…...

Xinference多模态应用实战:从零搭建图片理解聊天机器人

Xinference多模态应用实战:从零搭建图片理解聊天机器人 1. 引言:为什么选择Xinference搭建聊天机器人 你是否想过开发一个能真正理解图片内容的智能助手?想象一下,上传一张照片,AI不仅能描述画面内容,还能…...

SenseVoice语音识别效果实测:中英混合语音转文字准确率展示

SenseVoice语音识别效果实测:中英混合语音转文字准确率展示 1. 测试背景与模型介绍 语音识别技术在日常生活中的应用越来越广泛,从会议记录到视频字幕生成,都离不开这项核心技术。今天我们要测试的是SenseVoice-small-onnx语音识别模型&…...

java微信小程序积分商城购物系跑腿配送系统_09ok4

目录实现计划概述技术栈选择核心模块划分数据库设计关键逻辑实现测试与部署时间规划注意事项项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作实现计划概述 开发一个基于Java的微信小程序积分商城与跑腿…...

Visual Studio深度清理指南:从残留困境到环境净化

Visual Studio深度清理指南:从残留困境到环境净化 【免费下载链接】VisualStudioUninstaller Visual Studio Uninstallation sometimes can be unreliable and often leave out a lot of unwanted artifacts. Visual Studio Uninstaller is designed to thoroughly …...

Qwen3-32B-Chat跨境电商应用:多语言商品描述、平台规则解读、客服话术生成

Qwen3-32B-Chat跨境电商应用:多语言商品描述、平台规则解读、客服话术生成 1. 跨境电商AI助手解决方案 跨境电商行业面临着多语言沟通、平台规则复杂、客服效率低下等痛点。Qwen3-32B-Chat私有部署镜像为这些挑战提供了智能化解决方案,基于RTX4090D 24…...

4.2.3 存储->POSIX 文件系统标准(IEEE,ISO IEC 采纳):ext4(Fourth Extended File System)第四代扩展文件系统

Linux 系统中最经典、应用最广泛的标准文件系统之一,由 ext3 升级而来,解决了前代的容量瓶颈和性能短板,同时保持了良好的向下兼容性,是很多 Linux 发行版(如 Debian、Ubuntu)的默认文件系统 一、 核心定位…...

Photoshop-Export-Layers-to-Files-Fast:打破Adobe原生限制的图层批量导出革命

Photoshop-Export-Layers-to-Files-Fast:打破Adobe原生限制的图层批量导出革命 【免费下载链接】Photoshop-Export-Layers-to-Files-Fast This script allows you to export your layers as individual files at a speed much faster than the built-in script from…...

STM32项目实战_基于多传感器融合的智能窗户控制系统(硬件设计+软件逻辑+云端监控)

1. 从零开始打造智能窗户控制系统 想象一下这样的场景:炎热的夏天,室内温度逐渐升高,你的智能窗户自动打开通风;暴雨来临前,系统检测到光线变化自动关窗;厨房烟雾超标时,窗户迅速开启排烟。这就…...

React状态管理:Zustand vs Redux,哪个更适合你的项目?

React状态管理:Zustand与Redux的深度对比与选型指南 在React生态中,状态管理一直是开发者面临的核心挑战之一。随着应用规模的扩大,如何高效、可维护地管理组件间共享状态成为决定项目成败的关键因素。Zustand和Redux作为当前最受欢迎的两种解…...

如何在Windows上用libssh2实现SSH文件传输(SFTP)完整流程

在Windows平台用libssh2实现高效SFTP文件传输的工程实践 对于需要在Windows环境下构建安全文件传输系统的开发者而言,libssh2库提供了一个轻量级且功能完整的解决方案。不同于其他臃肿的SSH实现,这个纯C编写的库特别适合嵌入到资源受限的环境中&#xff…...

Qwen3-0.6B-FP8镜像免配置:无需手动安装依赖的Gradio快速启动

Qwen3-0.6B-FP8镜像免配置:无需手动安装依赖的Gradio快速启动 如果你正在寻找一个开箱即用、无需折腾环境配置的轻量级AI对话模型,那么Qwen3-0.6B-FP8镜像可能就是你要找的答案。这个镜像最大的特点就是“免配置”——所有依赖都已经预装好,…...

前端开发者如何通过umeditor实现PDF文档内容转存?

教育网站系统开发记:探寻支持 Word 内容粘贴与信创环境的富文本编辑器 作为一名 PHP 开发人员,最近我接到一个颇具挑战性的网站开发项目。客户是一位学校老师,他希望我们为他打造一个教育网站系统。这个项目有一些特殊且关键的需求&#xff…...

springboot高校共享机房实验室报告评分管理系统vue

目录系统架构设计前端实现计划后端实现计划数据库设计核心功能实现测试与部署项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统架构设计 采用前后端分离架构,前端使用Vue.js框架&#x…...

Qwen3.5-9B代码生成能力实测:GitHub风格编程助手本地化部署教程

Qwen3.5-9B代码生成能力实测:GitHub风格编程助手本地化部署教程 1. 引言 你是否曾经遇到过这样的场景:面对一个复杂的编程问题,脑海中已经有了解决方案的轮廓,却卡在具体代码实现上?或者需要在短时间内完成大量重复性…...

Modbus-Arduino从站开发:轻量级工业协议嵌入式实现

1. Modbus-Arduino 库深度解析:面向工业级嵌入式应用的 Modbus 从站实现1.1 协议定位与工程价值Modbus-Arduino 是一个专为 Arduino 平台设计的轻量级、高可靠性的Modbus 应用层(OSI 第七层)从站库。它不处理物理层细节,而是严格遵…...

自动驾驶开发者必看:如何用IMU数据搞定激光雷达点云畸变校正(附完整代码解析)

自动驾驶开发者必看:如何用IMU数据搞定激光雷达点云畸变校正(附完整代码解析) 在自动驾驶系统的开发中,激光雷达(LiDAR)是环境感知的核心传感器之一。然而,当车辆处于运动状态时,激光…...

数据安全守护者:RevokeMsgPatcher的数字沟通完整解决方案

数据安全守护者:RevokeMsgPatcher的数字沟通完整解决方案 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcode…...

嵌入式轻量级协作式任务调度器设计与实现

1. 项目概述simple_task_scheduler是一个轻量级、无依赖的嵌入式任务调度器实现,专为资源受限的微控制器(MCU)环境设计。它不依赖操作系统内核、不使用动态内存分配、不引入中断上下文切换开销,仅通过纯 C 语言实现的协作式&#…...

AD域排错指南:此电脑网络位置异常

问题现象描述列举常见网络位置异常的表现形式,例如网络图标显示黄色感叹号、提示"未识别的网络"、无法访问域资源等。常见原因分析网络连接配置错误DNS解析问题组策略应用失败域控制器通信故障防火墙设置阻止域通信计算机账户在AD中异常基础网络检查验证物…...

ChromePass:三分钟快速找回Chrome浏览器所有保存密码的实用方案

ChromePass:三分钟快速找回Chrome浏览器所有保存密码的实用方案 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经遇到过这样的情况:明明在Chro…...

D6TArduino库:嵌入式红外热成像传感器驱动框架

1. D6TArduino库概述:面向嵌入式热成像应用的轻量级驱动框架D6TArduino是一个专为Omron D6T系列非接触式红外热电堆阵列传感器设计的Arduino兼容驱动库,核心目标是降低热成像数据采集与处理的技术门槛。该库并非简单封装IC通信协议,而是构建了…...

FLUX.小红书极致真实V2惊艳效果:玻璃反光+金属光泽+织物垂坠感同步呈现

FLUX.小红书极致真实V2惊艳效果:玻璃反光金属光泽织物垂坠感同步呈现 你是否曾惊叹于小红书上那些质感炸裂、光影绝美的图片?那些照片里,玻璃杯的反光清澈透亮,金属饰品的光泽锐利逼真,毛衣的垂坠感仿佛能触摸到纹理。…...