PCNN 脉冲耦合神经网络整理

PCNN 脉冲耦合神经网络


脉冲耦合神经元模型

  • 神经元的输入有哪些?
    首先来看看这个神经元的图示的左边,有 Y Y Y F F F

  • Y Y Y为这个神经元之前输出的数值,就是说这个模型需要进行多次的运算,每次的运算需要上一次运算的值来做输入,如果是第一次运算的话 Y Y Y就给成0就可以啦。很多情况下 Y Y Y不仅仅只有一个,可能会有 Y 1 Y_1 Y1 Y 2 Y_2 Y2 Y n Y_n Yn。如果是对图像数据进行处理,那么出现这么多的 Y Y Y就很正常了,因为一张图像有很多的像素点,每个 Y Y Y都对应着一个像素点的数值,当然程序都是我们自己写的,我们也可以根据实际的需求来规定 Y Y Y的数量而不仅仅是由图像的像素点个数来决定。

  • F F F也是输入区里面的一个东西。如果说之前的 Y Y Y是神经元之前的记性+周围神经元的相互干扰的话,那么这个 F F F就是真正的外界输入了。总不能说一个神经元的输入只有自身在上一时刻以及周围神经元给他的刺激吧,肯定会有外界给他的刺激,这个刺激,也就是我们需要这个神经元来帮助我们处理的数据了。

  • 神经元的输出是什么?
    在图上我们不难发现,神经元模型的输出只有一个 Y Y Y。没错,就是说,图中这一个神经元输入有茫茫多,但是输出只有一个 Y Y Y。在图像检测的过程中,这个 Y Y Y就是一个二值化数据,代表着这个像素点经过处理之后,要么有数据,要么就没有数据。

  • 神经元的工作原理

  • 首先,经过了上面的分析,我们知道,脉冲耦合神经元模型的输入有周围神经元的干扰以及自身神经元的记忆还有外界信号的刺激。
    周围信号的干扰需要有一个权值来控制,不能说周围信号有一点点干扰,然后整个神经元的输出就会发生巨大的变化吧,又不是有病,脚崴了然后胳膊也跟着一起疼了是不是。所以图中的 W W W就对所有的 Y Y Y的权值进行了一个分配,具体怎么分配之后再细说。将所有权值分配好之后的 Y Y Y相加然后再乘上一个总体的权值 L L L就变成了图中的 β L {\beta}L βL。为什么还有一个+1?是因为之后这个信号表示的是一个神经自身周围环境对单个神经元的影响,表现的是一个增量,所以需要+1。也就是说如果算出来的东西是0,那么最终的结果是1,相乘没有任何影响,这样就属于理想中的结果。

  • 之后, F F F 1 + β L 1+{\beta}L 1+βL一同进入了连接输入区。相乘理之后输出了 U U U

  • 最后, U U U走进了脉冲发生器。这个脉冲发生器有一个会变化阈值,当输入的 U U U超过这个阈值之后,脉冲发生器就会输出最终结果 Y Y Y Y Y Y还会被记录下来进入E装置,用来调节脉冲发生器的阈值,来影响下一次的信号是否能超过阈值从而输出信号

  • 全剧终。

  • matlab代码如下:

grayImage = im2double(grayImage);
W = [0.5 1 0.5;1 0 1;0.5 1 0.5];

M = W;
Y = zeros(size(grayImage));
F = Y; L = Y; U = Y; E = Y;

% Y is the output 
for a number you want

    F = exp(-af) *F +vf*conv2(Y,M,'same') + grayImage;  %输入区的F
	L = exp(-al) *L +vl*conv2(Y,W,'same');              %输入区的L
	
	U = F.*(1 + beta*L);        %连接输入区的输出U
	Y = double(U>E);            %最终输出Y,大于阈值E之后就输出1
	E = exp(-ae) * E + ve * Y;  %反馈给阈值,来影响下一次的输出结果
end

显然,这段代码对于大多数读者来说还是有些地方看不懂的。所以讨论还并没有结束,W是怎么肥四?exp是哪里来的?马上。


Eckhorn神经元模型

首先需要介绍一下Eckhorn神经元。之前所述的脉冲耦合神经元模型其实是从Eckhorn神经元化简而来的。脉冲耦合神经元(PCNN)最早就是由Eckhorn提出的。所以下面的这个 Eckhorn神经元模型才是PCNN真正的初始形态~~
PCNN 脉冲耦合神经网络整理_第1张图片

  • 输入有哪些?
    又回到了最开始的那个简单的问题,这个Eckhorn神经元的输入有哪些。还是一样,从左边开始看。

  • Y n Y_n Yn
    当然不止一个 Y n Y_n Yn啊,很容易看见下面还有一个箭头没有标注出来有什么东西输入进去了。结合上面我们说到的,这块连接域的输入其实就是神经元周围的神经干扰已经自身的记忆。所以说输入有 Y n Y_n Yn Y n + 1 Y_{n+1} Yn+1等等等,等多少个呢,其实是由程序员自己设定的。就像是一个神经元周围的还生长这许多别的神经元,有多少个呢?不得而知。但是作为程序来,我们是可以自己设定的。

  • S k S_k Sk
    这个其实就是我们在上面所谈到的外部输入了。对应到代码里面就是
    F = exp(-af)*F +vf*conv2(Y,M,'same') +grayImage;中的grayImagegrayImage也就是外界输入的灰度图像了。

  • 输出是什么?
    很简单,前面已经有说过了,输出就是一个二值化的脉冲,有或者没有。

  • 工作原理
    现在就开始来解决前面代码里面出线的各种东西。W是怎么肥四以及exp是哪里来的或者更多。

  • 白色框框 I l ( t ) I_l(t) Il(t) I f ( t ) I_f(t) If(t)
    连接域里面的 Y n Y_n Yn应该已经很面熟了,就是上一次迭代产生的数据。然后再跟着箭头往里看, Y n Y_n Yn进入了一个白色的框框 I l ( t ) I_l(t) Il(t)。这个 I l ( t ) I_l(t) Il(t)被Eckhorn称之为漏电积分器(此处应有wow),名字无比的霸气,漏电积分器。
    漏电积分器的原型实际上是生物中的一个现象,那就是不应期过程。不应期过程的意思就是,当我们的神经受到刺激并产生一个冲动电脉冲之后的约1ms时间内,即使外界再有刺激信号进来,我们的神经元也不会兴奋。
    L = exp(-al) *L +vl*conv2(Y,W,'same');
    代码中的al是一个人为设定的系数(当然也可以写成自适应的),L是我们连接域的输出,W是我们事先做好的一个小矩阵,矩阵的形状类似于一个碗。在程序中,我们将WY进行卷积,并使输出保持原有的形状,然后再乘以一个系数vl
    等式中的exp(-al) *L就是符合不应期过程的记忆

  • Eckhorn神经元和传统神经元的差异

  • Eckhorn神经元模型的内部活动项是所有其收到的输入信号和周围神经元对其影响的综合。是输入信号和连接输入的一种非线性调制。而传统神经元的输入是周围相连神经元各自加权输入的代数和。

  • Eckhorn神经元模型输出的是二值化脉冲时间序列,不受到输入信号的幅度影响,但是该脉冲序列的频率同事受控于内部活动项的大小和阈值漏电积分器的状态。

  • Eckhorn神经元模型体现了神经元特有的非线性特性,他的反馈输入域、耦合连接域、阈值控制机制都有指数衰减的漏电积分器,而一般的传统神经元的结构远远没有这么复杂。


测试

测试图片是一张100*100大小的图片:image_1bvthdv5r7tr1n0a15rj231iap9.png-4.3kB;灰度图像为PCNN 脉冲耦合神经网络整理_第2张图片
经过了一次PCNN计算之后的结果为:PCNN 脉冲耦合神经网络整理_第3张图片

你可能感兴趣的:(神经网络)