神经气体生长算法【GNG】

2024-06-12 14:28
文章标签 算法 神经 气体 生长 gng

本文主要是介绍神经气体生长算法【GNG】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当德国计算神经学家 Bernd Fritzke 在其 1995 年的开创性论文中提出后来被称为神经气体生长(GNG)的算法时,机器学习还是一个相对较新的领域,并且受到实际神经科学的极大启发。

当时,神经科学正处于一个突破性的时代——这在很大程度上要归功于新的神经成像方法,包括功能性神经成像 (fMRI)、脑磁图 (MEG) 和扩散张量成像 (DTI)。这启发了计算机科学家创建类似于神经元工作方式的模型。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 

例如,深度学习(尤其是深度卷积神经网络)可能最多受到大脑处理信息的方式的启发,特别是大脑处理“什么”部分(称为腹侧视觉流)的视觉信息,而不是“哪里”部分(由背侧视觉流处理),但最初的灵感来自这些因素。最初的类比足以创建一个具有可行数学类比的模型,然后可以使用实际视觉系统中不存在的东西(例如卷积核)对其进行扩展。

神经气体同样从一种称为赫布学习(hebbian learning)的神经过程中获得了模糊的灵感。这一理论可以追溯到 20 世纪 40 年代末,它试图通过以下事实来解释联想学习现象:如果两个足够接近的神经元倾向于同时激发,那么它们最终将更有可能形成突触连接。

当然,这是一个彻底的简化(如果你对这种情况的程度感兴趣,Rumsey 和 Abbott 在《生理学》上发表的这篇论文是一个很好的介绍),但它启发了人工神经网络中的想法,即神经元之间的连接应该越频繁地同时激活(“同时激发的神经元会连接在一起”),它们之间的连接就越强。

1、神经气体生长算法

神经气体生长(Growing Neural Gas)算法仅用几百步就“学习”了我脸部的拓扑结构。该图由 752 个节点组成,非常容易辨认,不到构成图像的原始 15,564 个蓝点的 5%。

神经气体生长是一种相对简单的算法,就像我们在上一章中遇到的另一个竞争模型一样,它允许学习和表示拓扑。因此,它是一种拓扑表示网络,正如我们在第 1 部分中看到的那样,它能够近似人脸拓扑这样复杂的东西——产生人类观察者可以识别的东西,同时显著减少信息。例如,左侧的动画表明,可以非常高效地近似人脸这样复杂的东西,以创建观察者无法识别的图像。

神经气体生长算法的总体思路是:从两个随机放置的神经元开始,每隔一段时间在迄今为止表现最差的神经元和其表现最差的邻居之间添加新的神经元。这个过程会不断迭代,直到达到边界条件(例如最大迭代次数)。请注意,上述解释忽略了边老化和年龄下降。

就像之前的帖子一样,我将把严格的数学留给配套的笔记本,并坚持解释总体思路。就像自组织特征图一样,GNG 是迭代算法。然而,与 SOFM 不同,它们不需要对神经元的数量进行任何初始指定——顾名思义,GNG 是不断增长的,只要算法在运行,新的神经元就会不断增加。

  • 每次迭代都从从训练集中选择一个数据点开始。由于 GNG 可以很好地推广到任意数量的维度,因此通常用 𝛿 长度向量 v 来表示它们。
  • 最接近 v 的神经元,类似于 SOFM,称为最佳表现单元 (BPU),会移近 v。所有直接连接到 BPU 的神经元也会移近 v。
  • 确定第二佳表现单元 (SBPU)。如果 BPU 和 SBPU 已连接,则将此连接的年龄设置为零。如果它们未连接,则将它们连接起来。然后增加从 BPU 发出的所有其他边的年龄。
  • 如果边的年龄大于最大年龄 Amax,则删除该边。如果这导致“孤立神经元”(没有边连接的神经元),也会删除这些神经元。
  • 每 λ 次迭代,累积误差最大的神经元(每次迭代中与每个数据向量 v 的距离之和)被确定为表现最差的单元 (WPU)。在 WPU 和其表现最差的邻居之间插入一个新神经元,并删除 WPU 和其表现最差的邻居之间的原始边。
  • 迭代直到达到某些边界条件,例如最大迭代次数。

理解此算法的工作原理很简单,但值得花一些时间思考它为什么有效。你可能已经从上面的例子中注意到,此方法创建了数据分布空间的分区,并通过近似 Delaunay 三角剖分来实现。事实上,在原始论文中,Fritzke 将 GNG 生成的图称为“诱导 Delaunay 三角剖分”。

神经气体生长算法的理念是,与需要了解表示数据所需的神经元数量 SOFM 不同,GNG 确定模型迄今为止表现最差的区域,并改进该区域。这最终导致模型不能均匀增长,而是扩大图形的大小,不再能以给定的分辨率(神经元数量)覆盖(量化)数据。

2、使用 GNG 来计算聚类

在竞争性神经网络的第一部分介绍中,我已经介绍了 GNG 的一个用例,即作为快速高效的矢量量化算法,可以创建不错的图像近似值。接下来,我们将讨论一些略有不同的内容,即计算不同的对象并量化它们的大小。

眼底镜检查图像上的硬性和软性渗出物, DIARETDB1 数据集

拉彭兰塔理工大学 Kauppi 等人的研究小组的 DIARETDB1 数据集包含 5 名健康志愿者和 84 名患有一定程度糖尿病视网膜病变的人的 89 张数字眼底镜检查图像,即眼底图像。糖尿病视网膜病变是糖尿病的一种并发症,会影响视网膜的小血管,长期血糖控制不足会导致血管损伤、微动脉瘤和渗出物,其中脂质(导致亮黄色硬渗出物)或血液(导致淡黄色、弥漫性软渗出物)积聚在眼底。接下来,我们将使用 GNG 来量化这些异常。DIARETDB1 数据集包含 ROI(感兴趣区域)蒙版,但这些蒙版仅勾勒出显示特定临床特征的区域。我们可以使用 Growing Neural Gas 来计算感兴趣区域中存在多少个硬渗出物簇吗?当然可以!

使用共识掩码隔离 ROI:根据原始 ROI 注释(左下)生成至少两位专家投票的共识掩码(右下)。此掩码用于将感兴趣的区域与眼底检查图像(左上)隔离,从而生成掩码图像(右上)。

我们从一些图像处理开始,即细化感兴趣的区域。每张图像都由四位专家标记,从而创建了一个蒙版。我们可以对蒙版进行阈值处理,以要求一定数量的专家达成共识,这是带注释的研究图像中广泛使用的技巧(如果您不熟悉它,请滚动到底部!)。然后,我们使用硬性渗出液相对突出的亮黄色将它们转换为 GNG 可以开始表征的数据点(有关细节,请参阅配套笔记本,其中解释了一些额外的技巧,包括一些形态变换)。

接下来,我们利用脂质渗出液具有非常可识别的黄色这一事实,通过使用 OpenCV 的 inRange 函数对其进行阈值处理。此时,我们上面执行的 ROI 蒙版派上了用场,因为视神经盘(血管进入的亮黄色圆形结构,神经节神经元的轴突离开视网膜加入视神经)通常具有相似的颜色,具体取决于照明。使用 inRange 时,通常将图像转换为 HSV(色调、饱和度和明度)格式,因为这样可以更轻松地指定特定色调范围内的颜色。在 HSV 中,色调(“颜色”)占据颜色向量的单个元素(通常指定为色环上的度数),因此指定所有黄色就像指定黄色的近似色调角(大约 60°)并排除低饱和度(浅色,趋向于白色)或低明度(深色,趋向于黑色)边缘一样简单。对于 RGB 中的大多数颜色,这会复杂得多!幸运的是,OpenCV 及其 Python 绑定具有出色的颜色空间转换功能。

使用 OpenCV 的颜色阈值功能从原始 ROI 中提取硬脂质渗出物。只有落在特定色调角度范围内的值才会被保留。经过一些形态学操作以消除噪音后,我们留下了一个布尔图像,该图像将转换为二进制网格格式,以供 GNG 进行训练。

终端神经元数量越多,形状近似越准确,但运行时间也越长(左:200 个神经元,右:1,000 个神经元)。

使用 GNG 计算聚类簇时,一些设置至关重要。特别是,值得从大量初始神经元开始。在第 1 部分中提到的图像矢量量化示例中,我们从两个神经元开始。这样做的结果是一个图,该图在大多数时间将保持完全连接(回想一下,对于 GNG 来说,生成新神经元比删除现有神经元要容易得多)。这是一个问题,因为我们依靠计算断开连接的子图来确定不同病变的数量。最简单的解决方案是创建大量初始神经元(几千个,即比预期的不同簇数量多 2-3 个数量级)。虽然延长了训练时间,但一段时间后确实会导致分割越来越准确——最重要的是,与初始神经元数量较少的分割不同,它们不太可能具有需要多次迭代才能分离的连接段。

在大量迭代中使用相同的设置可以更好地分离近距离神经元

3、结束语

基于生长神经气体的模型不仅擅长矢量量化,还能从所有数据点的一小部分创建可行、可理解的数据表示。它们还可以找到未知数量的连贯拓扑。如果有时间收敛,这些模型不仅可以识别不同拓扑的数量,还可以量化它们的相对和绝对面积。

竞争神经网络至今仍是一种未得到充分利用的技术,但最近的高效实现,如 Tensorflow SOFM 层和基于 Tensorflow 的 GNG 实现,有望促进竞争神经网络的复兴,无论是单独实现还是作为更大神经网络图的一部分。


原文链接:GNG神经气体生长算法 - BimAnt

这篇关于神经气体生长算法【GNG】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1054469

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯: