天天看點

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

前段時間研查閱文獻時的matlab方面的探索,這一部分主要參考文獻為

[34] 朱娟. 基于尖峰神經元模型的機器人學習方法研究 [D]; 南京理工大學, 2014.

1.1 模型建立

1.1.1 脈沖神經網絡神經元

為了去了解大腦是如何工作的,我們需要把結合實驗學習動物和人類神經系統和大規模腦模型的數值研究結合起來。突觸其實就是神經元資訊傳遞的關鍵部分,是前神經元的軸突和後神經元的樹突相連接配接的部分,突觸可以分為化學突觸和電突觸,在研究中化學突觸要比電突觸常見。當神經沖動到達突觸前膜時,這時突觸前膜上的Ca2+通道就會被其觸發并且被打開,這時細胞外的Ca2+就會進入到突觸前部,接着突觸小泡向突觸前膜移動并将内部的神經遞質釋放到突觸間隙。有一部分的神經遞質就會和突觸後膜上相應的受體相結合,進而使受體相關的門控通道打開,相應的離子由通道進入突觸後部,進而使突觸後神經元的活動受到影響。突觸資訊的傳遞過程可歸納為如圖:

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

突觸資訊傳遞的特點可歸納為:

(1)資訊傳遞一般都有延時

(2)興奮性、抑制性

(3)存在不應期

(4)可塑性:突觸傳遞資訊的強度是可以改變的,具有學習能力。可塑性是學習和記憶的基礎。

(5)對資訊的整合有兩種方式,時間累加和空間累加。

(6)具有遺忘和疲勞

(7)資訊傳遞是不可逆的:脈沖隻能從突觸前神經元傳到突觸後神經元。

朱娟等人[最前面提到的那篇]分析比較了第三代與之前的神經元模型,深入的對尖峰神經元的三種代表性模型進行仿真并比較各自的優缺點,在以較小的複雜度達到較高的生物學的真實性基礎上選擇了适合本文的Izhikevich模型,重點讨論了Izhikevich模型,對常見的6種尖峰進行仿真研究,深入了解了模型中各個參數的作用。

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

門電路可以看成是計算機最基本的一個單元,故而神經元也就可以當作是神經系統的一個基本單元。但是神經元有的功能卻遠遠比門電路來的複雜。目前神經元模型有一百多種,表現出了神經元的各種特性(時空總和、閥值、不應期、适應性以及可塑性)。

由于研究的最終目的有所不同,是以對于神經元模型的研究方向也就不同主要有兩點。一是,單神經元的研究,這時就希望盡最大努力去複現神經元本身的屬性。二是,由神經元組成功能複雜的神經網絡,是以用到的神經元數目比較多,為了研究的友善,我們要求神經元保留信号處理能力的前提下能夠簡化神經元模型。神經元模型的一些特點如下:

(1)神經元的輸入有很多但是輸出端口隻有一個。

(2)神經元的閥值是一個定值。

(3)神經元是非時變的。

(4)神經元産生脈沖的條件:

1)每個興奮型輸入為+1表示,抑制性輸入用-1表示,當輸入的總和大于固定的閥值時神經元這時才會産生脈沖信号。

2)沒有抑制性輸入,隻有興奮型輸入時,當輸入總和超過閥值時,神經元才會産生脈沖。

下面着重介紹兩種模型,漏積分模型和尖峰神經元模型仿真來研究為什麼本文要采用尖峰神經元模型

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

(1)漏積分神經元模型

現在大部分神經網絡中的神經元都采用漏積分模型來研究如式

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

其中x表示神經元的狀态,u用來表示神經元的輸入,y代表神經元的輸出,k,m,e三者是模型的參數,H為階躍函數。仿真設定:輸入u為階躍輸入, k=1,m=1,e=0.2 得到輸出曲線如所示:

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

(2)尖峰神經元模型

尖峰神經元模型種類很多這裡選擇Izhikevich模型如式來研究

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

v為膜電位,u表示恢複變量,膜電流則用I代表 a,b,c,d為參數。仿真設定:a=0.02,b=0.25,c=-65,I=10得到的響應如圖所示

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

可以看出漏積分神經元模型主要是将資訊編碼放在輸出信号的幅值中。而尖峰神經元則不是,它是将資訊編碼在神經元的動作電位的頻率中,是以這種模型對于模拟真實神經元的放電特性更加逼真

1.1.2 幾種代表性的尖峰神經元模型的比較

尖峰神經元模型最早的提出者是Hodgkin和Huxley。根據脈沖神經元的響應模式和生化模型,學者們提出了一些用于模拟脈沖神經元行為的數學模型,一般将提出三種具體的脈沖神經元模型——Itegrate&Fire、Izhikevich以及Hodgkin-huxley三種模型。并對這三種模型的表達式進行對比和仿真研究:

(1) Integrate&Fire模型

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

式中 v為膜電位, I為膜電流, a,b,c,v_為參數。IF模型通過式可以看出是一維方程而且隻有一個v變量,它主要通過線性微分方程來描述神經元,它的閥值以及複位機制均是固定的。

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

結論:通過仿真可以發現IF模型的神經元沒有不應期(所謂的不應期是指在神經元恢複到靜息狀态前,它不能通過發放動作電位來對刺激做出一定的響應,這段恢複時間被稱為神經元的不應期,一般為 ),因而不夠精确不能展現神經元最基本的特性。而且通過改變參數不會出現神經元的峰放電以及簇放電等特性。

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

(2)Izhikevich模型

模型如式(2.2)所示,仿真參數設定:a=0.02,b=0.25,c=-65,I=10

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

結論:通過圖可以看出神經元模型存在不應期,而且随着電流強度的變大尖峰頻率也在增加。當刺激超過閥值時神經元會産生始終響應,使興奮與靜息交替産生,而且興奮的周期遠遠小于靜息的周期,這一點與真實神經系統受到外界刺激時作出的響應相符合。

(3)Hodgkin-Huxley模型

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

其中

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

了解就好,剩下的可以看文獻

最終結論:IF隻有1個變量,數值模拟比較簡單,是以它适合于數學分析,但是卻無法反應相位刺激、爆發式點火和回蕩反應等行為。實質上這種模型不能算作真正的脈沖神經元模型,當膜電位到達閥值時,神經元産生的脈沖都是假想的。H-H模型含有4個變量,參數最為豐富,是以它對于模型真實神經元的某些特性(例如,對于電流脈沖的響應以及閥值效應的産生)是很精确的。是以我們一般用其研究單個的神經細胞的行為與特性,對于很多的神經元構成的神經系統卻很少使用這種模型。Izhikevich模型含有2個變量,它在計算複雜度和生物學上的真實性兩者間進行了折中。

因為我們要發展由尖峰神經元組成的這種大規模的腦模型,我們就必須要做到兩個看似互相排斥的要求間的折中:單一神經元模型必須是簡單的計算,但真正的生物神經元有産生豐富的放電模式能力的表現。使用H-H模型是最精确的,但是計算比較困難,因為我們僅僅可以實時的模拟極少數的神經元。相比之下,Integrate&Fire模型計算速度最快,而Izhikevich模型結合了H-H模型生理學特性和Integrate&Fire模型計算簡單特性。取決于四個參數,該模型再現了神經元已知類型的尖峰。Izhikevich對神經元不同輸入發生的分叉分類,并揭示了神經系統複雜行為的非線性動力學機制。

6種神經元比較:

【matlab】 Izhikevich模型脈沖神經網絡神經元實作

通過圖可以看出通過改變c,d參數可以使神經元實作簇放電。其中,u 和 v是無量綱變量, a,b,c,d是四個無量綱參數, v作為神經元的膜電位, u為神經元恢複變量,表示神經元膜上Na+通道關閉而K+通道打開,這時Na+的膜透性迅速下降而K+的膜透性卻迅速增強,膜電壓恢複到靜息電位的過程。當神經元産生動作電位,此時膜電位v達到峰值30mV時,膜電位和恢複變量将按照式2變化。 I是突觸電流,即注入電流。模型各個參數的作用:

a:其實是一個時間因子主要用來反映恢複變量u,而u的恢複速度就是由a決定的,a越小表示u恢複的越快,尖峰脈沖的頻率也就越高,a的一個典型值為0.02。

b:恢複變量對于v波動時的敏感度就是由b反映的,但是有一個條件就是v必須在閥值下。b 越大,u和v的聯系就越強,閥值下的震蕩就越強烈并且産生尖峰序列的閥值就越小,典型值為0.2。

c:在動作電位産生後,膜電位恢複值v的大小條件是由快速高閥值K+電導引起,典型值為-65mV 。

d:動作電位産生後由K+ 電導和Na+電導引起的恢複變量u的值。

0.04v*v+5v=140這一部分是通過對神經元的尖峰過程動态拟合而來的,膜電位的機關為 ,時間的機關為mV 。細胞膜的靜息電位一般為-70~-60mV ,具體情況則要由參數b決定。在大多數的神經細胞中,一般閥值是不固定的,它受到前面神經細胞狀态的影響。門檻值電位的變化有個範圍一般是-55~-40mV。

神經元模型介紹了動态突觸和主動樹突結合功能的優點。神經元能夠通過隐式“延遲”機制系統最大化其響應并檢測特定的時間序列。這些機制基于對突觸動力學和神經活動特性産生的突觸後電位的調制。學習算法會調整“延遲”機制,以使它們針對輸入尖峰序列的特定時間序列産生最大的響應(就軀體處的膜電位而言)。[20]

1.2 SNN仿真

這一部分的結果當時用了幾天的時間調出來,但是最後也沒有用到(需要的計算量其實并不小),僅僅提供仿真思路參考,也沒法用代碼解釋,放幾張圖之後随緣上傳源檔案吧。

【matlab】 Izhikevich模型脈沖神經網絡神經元實作
【matlab】 Izhikevich模型脈沖神經網絡神經元實作
【matlab】 Izhikevich模型脈沖神經網絡神經元實作

六個子產品對應六種模型:

【matlab】 Izhikevich模型脈沖神經網絡神經元實作
【matlab】 Izhikevich模型脈沖神經網絡神經元實作

源代碼:繪圖部分因為其他需要注釋掉了微分量,如果需要自行修改即可。

% 脈沖神經網絡matlab實作
% 朱娟. 基于尖峰神經元模型的機器人學習方法研究 [D]; 南京理工大學, 2014.
% 神經元及突觸模型仿真
% 2020年10月10日 Jonny Su
clc;
% close all;
clear all;
cd ('D:\OneDrive - 徐州開放大學\NPU\program\STDP')

%%   Simulation parameters
v = -65;                  %初始膜電位
u = 0;                      %初始恢複變量
I = 10;                  %膜電流 影響放電頻率
v_thresh = 30;               %電位門檻值

step = 0.001;               %步長 ms
timepuls = 10000;    %時長縮短,不然反應太慢了
t = 0;                      %計時器
t0 = 0.002;                     %初始輸入電流階躍時間
n = 1;                      %步數

v_states(n) = v;     %狀态量初始化
u_states(n) = u;  %輸入初始化
%%  Izhikevich尖峰神經元模型中,興奮型皮層細胞可以分為以下三類:

% RS(Regular spiking)正常性尖峰
% a = 0.02;                  %模型參數
% b = 0.2;                  %模型參數
% c = -65;                  %模型參數
% d = 8;                  %模型參數

% IB(intrinsically bursting)本征性爆發尖峰神經元  
% a = 0.02;                  %模型參數
% b = 0.2;                  %模型參數
% c = -55;                  %模型參數
% d = 4;                  %模型參數

% CH(chattedng)震顫式尖峰神經元
% a = 0.02;                  %模型參數
% b = 0.2;                  %模型參數
% c = -50;                  %模型參數
% d = 2;                  %模型參數

%%  Izhikevich尖峰神經元模型中,抑制性腦皮層細胞也可以分為以下三類:
% FS(fast spiking)快速式尖峰神經元
% a = 0.1;                  %模型參數
% b = 0.2;                  %模型參數
% c = -65;                  %模型參數
% d = 2;                  %模型參數

% LTS(Low-Threshold spiking)低閥值尖峰神經元
% a = 0.02;                  %模型參數
% b = 0.25;                  %模型參數
% c = -65;                  %模型參數
% d = 2;                  %模型參數

% LS(Last spiking)延時尖峰神經元  60ms
a = 0.1;                  %模型參數
b = 0.2;                  %模型參數
c = -65;                  %模型參數
d = 2;                  %模型參數
t0 = 0.06;                     %延時階躍時間
while (t < 0.2)
%     Izhikevich
    v_del_states(n) = 0.04 * v_states(n) * v_states(n) + 5 * v_states(n) +140 - u_states(n) + I * stepfun(t,t0);            %狀态變化量
    u_del_states(n) = a * (b * v_states(n) - u_states(n));     %狀态量初始化

    %   狀态更新
%     v_states(n+1) = v_states(n) + v_del_states(n) * step * timepuls;           %更新 指派 old 和del一個行向量一個列向量導緻出來是矩陣
%     u_states(n+1) = u_states(n) + u_del_states(n) * step * timepuls;           %控制量
%     直接什麼都不乘完全是合理的,步長少了增量也少了,自然沒有必要再縮減幾個量級了。
    v_states(n+1) = v_states(n) + v_del_states(n);           %更新 指派 old 和del一個行向量一個列向量導緻出來是矩陣
    u_states(n+1) = u_states(n) + u_del_states(n);           %控制量
    if v_states(n+1) >= v_thresh        %沒有起到作用感覺
        v_states(n) = v_thresh;   % 彌補步長導緻沒法還原步長的錯誤,不太合理
        v_states(n+1) = c;   % 恢複
        u_states(n+1) = u_states(n+1) + d;      % 恢複
    end
%     Integrate&Fire
%     v_del_states(n) = I + a - b * v_states(n) ;            %狀态變化量
%     v_states(n+1) = v_states(n) + v_del_states(n) * step * timepuls;           %更新 指派 old 和del一個行向量一個列向量導緻出來是矩陣
%     if v_states(n+1) >= v_thresh
%         v_states(n+1) = c;   % 恢複
%     end
        
    %  時間更新
    Time(n) = t;   %時間記錄
    t = t + step;  %仿真步長
    n = n + 1;  %計數+1
end

% 繪圖
figure
subplot(2,1,1);plot(v_states,'linewidth',1.5)
% title(['階躍電流值為 ',num2str(I),' mA的膜電位'],'FontSize',14);
% grid on;
% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% ylabel('$v(mV)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);
set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);
% subplot(2,2,3);plot(v_del_states,'linewidth',1.5)
% grid on;
% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% ylabel('$\dot{v}$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);

subplot(2,1,2);plot(u_states,'linewidth',1.5)
% title(['階躍電流值為 ',num2str(I),' mA的恢複變量'],'FontSize',14);
% grid on;
% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% ylabel('$u(mV)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);
set(gca,'FontName','Times New Roman','FontSize',14,'linewidth',1.5);
% subplot(2,2,4);plot(u_del_states,'linewidth',1.5)
% grid on;
% xlabel('$T(ms)$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% ylabel('$\dot{u}$','FontName','Times New Roman','FontSize',14,'Interpreter','latex');
% set(gca,'FontName','Microsoft YaHei UI','FontSize',14,'linewidth',1.5);
           

結尾

其實這幾個月還是沒閑着一直在做工作,平時不咋記得碼部落格了,最近網站也出了問題,莫名會跳轉到其他網站去,也沒有時間收拾了。年初的論文不知道是第幾次被拒了,現在又在準備另一篇,這部分内容算是裡面的一小部分,希望能共同學習,一切都會好起來的。

今年可真快,加油。

歡迎通路我的個人網站 (目前當機,明年也不一定續)https://www.josu.top/

繼續閱讀