Deep neural networks using a single neuron: folded-in-time architecture using feedbackmodulated delay loops代码理解
原始微分方程:
x ˙ ( t ) = − α x ( t ) + f ( a ( t ) ) a ( t ) = J ( t ) + b ( t ) + ∑ d = 1 D M d ( t ) x ( t − t d ) \dot{x}(t)=-\alpha x(t) + f(a(t)) \\ a(t)=J(t)+b(t)+\sum^{D}_{d=1}{M_d(t)x(t-t_d)} x˙(t)=−αx(t)+f(a(t))a(t)=J(t)+b(t)+d=1∑D​Md​(t)x(t−td​)
由其积分形式为:
x ( t ) = e − α ( t − t 0 ) x ( t 0 ) + ∫ t 0 t e α ( s − t ) f ( a ( s ) ) d s x(t)=e^{-\alpha(t-t_0)}x(t_0) + \int_{t_0}^{t}{e^{\alpha(s-t)} f(a(s))}ds x(t)=e−α(t−t0​)x(t0​)+∫t0​t​eα(s−t)f(a(s))ds
取 t 0 = ( l − 1 ) T + ( n − 1 ) θ , t = t 0 + θ t_0=(l-1)T+(n-1)\theta,t=t_0+\theta t0​=(l−1)T+(n−1)θ,t=t0​+θ,有
x n l = e − α θ x n − 1 l + ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) f ( a ( s ) ) d s x^l_n=e^{-\alpha \theta}x^l_{n-1} + \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} f(a(s))}ds xnl​=e−αθxn−1l​+∫t0​t0​+θ​eα(s−(t0​+θ))f(a(s))ds
其中 J ( t ) , b ( t ) , M d ( t ) J(t),b(t),M_d(t) J(t),b(t),Md​(t)为阶梯函数,在积分区间段为常数,将 x ( s − t ) x(s-t) x(s−t)近似为 x ( s − t ) ≈ x ( ( l − 1 ) T + n θ − n d θ ) x(s-t)\approx x((l-1)T+n\theta-n_d \theta) x(s−t)≈x((l−1)T+nθ−nd​θ),可将积分表示为:
x n l = e − α θ x n − 1 l + ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) f ( a ( s ) ) d s ≈ e − α θ x n − 1 l + ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) f ( a n l ) d s = e − α θ x n − 1 l + f ( a n l ) ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) d s = e − α θ x n − 1 l + f ( a n l ) α − 1 ( 1 − e − α θ ) , n = 2 , ⋯ , N \begin{aligned} x^l_n & =e^{-\alpha \theta}x^l_{n-1} + \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} f(a(s))}ds \\ & \approx e^{-\alpha \theta}x^l_{n-1} + \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} f(a^l_n)}ds \\ & =e^{-\alpha \theta}x^l_{n-1} + f(a^l_n) \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} ds} \\ & =e^{-\alpha \theta}x^l_{n-1} + f(a^l_n) \alpha^{-1}(1-e^{-\alpha \theta}) ,n=2,\cdots,N \\ \end{aligned} xnl​​=e−αθxn−1l​+∫t0​t0​+θ​eα(s−(t0​+θ))f(a(s))ds≈e−αθxn−1l​+∫t0​t0​+θ​eα(s−(t0​+θ))f(anl​)ds=e−αθxn−1l​+f(anl​)∫t0​t0​+θ​eα(s−(t0​+θ))ds=e−αθxn−1l​+f(anl​)α−1(1−e−αθ),n=2,⋯,N​
对于第一个节点,有
x 1 l = e − α θ x N l − 1 + α − 1 ( 1 − e − α θ ) f ( a 1 l ) x^l_1=e^{-\alpha \theta}x^{l-1}_{N} + \alpha^{-1}(1-e^{-\alpha \theta})f(a^l_1) x1l​=e−αθxNl−1​+α−1(1−e−αθ)f(a1l​)
其中 x N 0 : = x 0 = x ( 0 ) x^0_N:=x_0=x(0) xN0​:=x0​=x(0)。

隐藏层第一层

第一层activations
a n 1 : = g ( a n i n ) : = g ( ∑ m = 1 M + 1 w n m i n u m ) , n = 1 , ⋯ , N a^1_n:=g(a^{in}_n):=g(\sum_{m=1}^{M+1}w^{in}_{nm}u_m), n=1,\cdots,N an1​:=g(anin​):=g(m=1∑M+1​wnmin​um​),n=1,⋯,N
其中 u M + 1 = 1 , w n M + 1 i n u_{M+1}=1,w^{in}_{nM+1} uM+1​=1,wnM+1in​为偏置, g ( x ) = π 2 t a n h ( x ) g(x)=\cfrac{\pi}{2}tanh(x) g(x)=2π​tanh(x)。
对应代码:

// We compute the activations of the first layer:for (int n = 0; n < N; ++n){summe = input_weights(n, M);  // bias weightfor (int m = 0; m < M; ++m){summe += input_weights(n, m) * input_data(m); //* 公式(26)}g_primes(n) = input_processing_prime(summe); //* return 0.5 * M_PI / (cosh(x) * cosh(x));activations(0, n) = input_processing(summe); //* 0.5 * M_PI * tanh(x); [-0.5*pi,0.5*pi] }

第一层节点之间的状态迁移:将节点之间的时间 θ \theta θ划分为 N h N_h Nh​份, h = θ N h h=\cfrac{\theta}{N_h} h=Nh​θ​,利用积分计算状态迁移,对下式变换得到精细积分表达式:
x n l = e − α θ x n − 1 l + ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) f ( a ( s ) ) d s x^l_n=e^{-\alpha \theta}x^l_{n-1} + \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} f(a(s))}ds xnl​=e−αθxn−1l​+∫t0​t0​+θ​eα(s−(t0​+θ))f(a(s))ds
得到:
x n , n h = e − α × n h × h x n − 1 , N h + α − 1 ( 1 − e − α × n h × h ) f ( a n 1 ) , n = 1 , ⋯ , N x_{n,n_h}=e^{-\alpha \times n_h\times h}x_{n-1,N_h} + \alpha^{-1}(1-e^{-\alpha \times n_h\times h}) f(a^1_n) ,n=1,\cdots,N xn,nh​​=e−α×nh​×hxn−1,Nh​​+α−1(1−e−α×nh​×h)f(an1​),n=1,⋯,N
对应代码:

x_states(n, n_h) = exp_h_table[n_h + 1] * x_states(n - 1, N_h - 1) + 1.0/alpha * (exp_h_table[n_h + 1] - 1.0) * f(activations(0, n));

隐藏层其他层

对于其他层:
a n , n h l : = w n , N + 1 l + ∑ j = 1 N w n j l x j , n h l − 1 , n = 1 , ⋯ , N , l = 2 , ⋯ , L a^l_{n,nh}:=w^l_{n,N+1}+\sum^{N}_{j=1}w^l_{nj}x^{l-1}_{j,nh},n=1,\cdots,N,l=2,\cdots,L an,nhl​:=wn,N+1l​+j=1∑N​wnjl​xj,nhl−1​,n=1,⋯,N,l=2,⋯,L
对应代码:

if (l == 1){summe = hidden_weights(l - 1, n, N) + hidden_weights(l - 1, n, 0) * x_0;} else {summe = hidden_weights(l - 1, n, N) + hidden_weights(l - 1, n, 0) * node_states(l - 2, N - 1); //* 节点的第1个权重直接和上一层的最后一个节点对应,这里估计是个笔误,node_states(l - 1, N - 1)}// other summands:for (int n_prime_d : diag_indices){//* n_prime_d=0表示当前节点从左边层和当前节点同一水平位置获得信息//* n_prime_d=1表示当前节点从左边层和当前节点同一水平位置的上一个节点获得信息//* n_prime_d=-1表示当前节点从左边层和当前节点同一水平位置的下一个节点获得信息int j = n - n_prime_d;if (j >= N){continue;}if (j < 1){break;}summe += hidden_weights(l - 1, n, j) * node_states(l - 1, j - 1); //* 1 <= j <= N-1}

还有节点之间的状态传递,通过将上一层的各个节点之间的状态传递过来,得到当前层各个节点之间的状态:

a_states(n, 0) = summe;  //* 当前节点的初始状态// a_states for other n_h:for (int n_h = 0; n_h < N_h; ++n_h){summe = hidden_weights(l - 1, n, N);for (int n_prime_d : diag_indices){int j = n - n_prime_d;if (j >= N){continue;}if (j < 0){break;}summe += hidden_weights(l - 1, n, j) * x_states(j, n_h); //* 0 <= j <= N-1}a_states(n, n_h + 1) = summe;}// the last a_state on a theta-interval is the activation:activations(l, n) = a_states(n, N_h);

a_states保存了当前层节点上的状态和节点之间的状态,将最后一个a_states作为激活当前节点的activations
使用正弦激活函数得到fa_states:

fa_states = f_matrix(a_states); //* sin(x);

下面用更精确的积分模型计算当前层的x_states
x n l = e − α θ x n − 1 l + ∫ t 0 t 0 + θ e α ( s − ( t 0 + θ ) ) f ( a ( s ) ) d s x^l_n=e^{-\alpha \theta}x^l_{n-1} + \int_{t_0}^{t_0+\theta}{e^{\alpha(s-(t_0+\theta))} f(a(s))}ds xnl​=e−αθxn−1l​+∫t0​t0​+θ​eα(s−(t0​+θ))f(a(s))ds
对于上面的积分表达式进行变换,得到j计算节点之间 [ t 0 + ( n h − 1 ) × h , t 0 + n h × h ] [t_0+(n_h-1)\times h,t_0+n_h\times h] [t0​+(nh​−1)×h,t0​+nh​×h]状态传递的积分表达式:
x n , n h = e − α h x n , n h − 1 + ∫ t 0 + ( n h − 1 ) × h t 0 + n h × h e α ( s − ( t 0 + n h × h ) ) f ( a ( s ) ) d s = e − α h x n , n h − 1 + 1 α e α ( s − ( t 0 + n h × h ) ) f ( a ( s ) ) ∣ t 0 + ( n h − 1 ) × h t 0 + n h × h + ∫ t 0 + ( n h − 1 ) × h t 0 + n h × h 1 α e α ( s − ( t 0 + n h × h ) ) f ˙ ( a ( s ) ) d s ≈ e − α h x n , n h − 1 + 1 α e α ( s − ( t 0 + n h × h ) ) f ( a ( s ) ) ∣ t 0 + ( n h − 1 ) × h t 0 + n h × h + ∫ t 0 + ( n h − 1 ) × h t 0 + n h × h 1 α e α ( s − ( t 0 + n h × h ) ) d s f ( a ( t 0 + n h × h ) ) − f ( a ( t 0 + ( n h − 1 ) × h ) ) h = e − α h x n , n h − 1 + 1 α ( f ( a n , n h ) − f ( a n , n h − 1 ) e − α h ) + 1 − e − α h α 2 h ( f ( a n , n h ) − f ( a n , n h − 1 ) ) \begin{aligned} x_{n,n_h} & =e^{-\alpha h}x_{n,n_h-1} + \int_{t_0+(n_h-1)\times h}^{t_0+n_h\times h}{e^{\alpha(s-(t_0+n_h\times h))} f(a(s))}ds \\ & =e^{-\alpha h}x_{n,n_h-1} +\frac{1}{\alpha} e^{\alpha(s-(t_0+n_h\times h))} f(a(s))|_{t_0+(n_h-1)\times h}^{t_0+n_h\times h} + \int_{t_0+(n_h-1)\times h}^{t_0+n_h\times h}{\frac{1}{\alpha} e^{\alpha(s-(t_0+n_h\times h))} \dot{f}(a(s))}ds \\ & \approx e^{-\alpha h}x_{n,n_h-1} +\frac{1}{\alpha} e^{\alpha(s-(t_0+n_h\times h))} f(a(s))|_{t_0+(n_h-1)\times h}^{t_0+n_h\times h} + \int_{t_0+(n_h-1)\times h}^{t_0+n_h\times h}{\frac{1}{\alpha} e^{\alpha(s-(t_0+n_h\times h))} }ds \frac{f(a(t_0+n_h\times h))-f(a(t_0+(n_h-1)\times h))}{h}\\ & =e^{-\alpha h}x_{n,n_h-1} +\frac{1}{\alpha} (f(a_{n,n_h}) - f(a_{n,n_h-1})e^{-\alpha h}) + \frac{1-e^{-\alpha h}}{\alpha^2 h} (f(a_{n,n_h}) - f(a_{n,n_h-1}))\\ \end{aligned} xn,nh​​​=e−αhxn,nh​−1​+∫t0​+(nh​−1)×ht0​+nh​×h​eα(s−(t0​+nh​×h))f(a(s))ds=e−αhxn,nh​−1​+α1​eα(s−(t0​+nh​×h))f(a(s))∣t0​+(nh​−1)×ht0​+nh​×h​+∫t0​+(nh​−1)×ht0​+nh​×h​α1​eα(s−(t0​+nh​×h))f˙​(a(s))ds≈e−αhxn,nh​−1​+α1​eα(s−(t0​+nh​×h))f(a(s))∣t0​+(nh​−1)×ht0​+nh​×h​+∫t0​+(nh​−1)×ht0​+nh​×h​α1​eα(s−(t0​+nh​×h))dshf(a(t0​+nh​×h))−f(a(t0​+(nh​−1)×h))​=e−αhxn,nh​−1​+α1​(f(an,nh​​)−f(an,nh​−1​)e−αh)+α2h1−e−αh​(f(an,nh​​)−f(an,nh​−1​))​
代码如下:

//* 对当前层的第一个节点x_states(0, 0) = exp_factor_h * node_states(l - 1, N - 1) + 1.0/alpha * (exp_factor_h * fa_states(0, 0) - fa_states(0, 1)) - phi_h * (fa_states(0, 0) - fa_states(0, 1));//* node_states(l - 1, N - 1) 上一层的最后一个节点状态// second case: n = 1 and n_h > 1:for (int n_h = 1; n_h < N_h; ++n_h){x_states(0, n_h) = exp_factor_h * x_states(0, n_h - 1) + 1.0/alpha * (exp_factor_h * fa_states(0, n_h) - fa_states(0, n_h + 1)) - phi_h * (fa_states(0, n_h) - fa_states(0, n_h + 1));//* x_states(0, n_h - 1) 上一个时间状态}// node state is x_state on theta-grid-point://* 对当前层的其他节点node_states(l, 0) = x_states(0, N_h - 1);for (int n = 1; n < N; ++n){// third case: n > 1 and n_h = 1:x_states(n, 0) = exp_factor_h * x_states(n - 1, N_h - 1) + 1.0/alpha * (exp_factor_h * fa_states(n, 0) - fa_states(n, 1)) - phi_h * (fa_states(n, 0) - fa_states(n, 1));//* x_states(n - 1, N_h - 1) 上一个节点的最后一个时间状态// fourth case: n > 1 and n_h > 1:for (int n_h = 1; n_h < N_h; ++n_h){x_states(n, n_h) = exp_factor_h * x_states(n, n_h - 1) + 1.0/alpha * (exp_factor_h * fa_states(n, n_h) - fa_states(n, n_h + 1)) - phi_h * (fa_states(n, n_h) - fa_states(n, n_h + 1));//* 当前节点的上一个时间状态}// node state is x_state on theta-grid-point:node_states(l, n) = x_states(n, N_h - 1);}

以每个节点的最后的一个x_states作为节点状态node_states
代码维护了三个临时状态保存当前层信息:a_states,fa_states,x_states
其中:a_states是上一个层的信息的x_states信息的加权求和,fa_states = f_matrix(a_states);,再通过积分计算当前节点的x_states
然后以隐藏层最后一层的node_states加权计算输出层的激活output_activations,之后再用softmax处理,得到最终输出:

// compute output activationsfor (int p = 0; p < P; ++p){summe = output_weights(p, N);  // bias weightfor (int n = 0; n < N; ++n){summe += output_weights(p, n) * node_states(L - 1, n);}output_activations[p] = summe;}// compute outputs with softmax functiondouble exp_sum = 0;for (int p = 0; p < P; ++p){exp_sum += exp(output_activations[p]);}for (int p = 0; p < P; ++p){outputs[p] = exp(output_activations[p])/exp_sum;}

深度学习延时系统solve_dde_ibp相关推荐

  1. 深度学习视觉系统在雪糕盒产品中的全方位识别检测

    2021年,中国冰淇淋行业市场超过1600亿元,冰淇淋市场规模为全球第一.作为盛放雪糕的载体,雪糕盒的质量也尤为重要.在生产过程中,有的雪糕盒表面会存在缺陷,或是雪糕盒与机器硬件之间的碰撞造成雪糕盒表 ...

  2. 【OFDM通信】基于matlab深度学习OFDM系统信号检测【含Matlab源码 2023期】

    ⛄一.深度学习OFDM系统信号检测简介 1 OFDM系统模型 OFDM系统是一种常用的多载波调制方式, 因为其具有能够在带宽较窄的情况下传输大量数据.能够对抗频率选择性衰落.传输速率高.实现简单.信道 ...

  3. AI芯片独角兽寒武纪 - 诚聘虚拟化/深度学习框架/系统软件研发工程师

    公司简介 寒武纪是全球智能芯片领域的先行者,公司的使命是打造各类智能云服务器.智能终端以及智能机器人的核心处理器芯片,让机器更好地理解和服务人类. 公司创始人.首席执行官陈天石博士,在处理器架构和人工 ...

  4. 【分布式】分布式深度学习DDLs系统Review——分布式学习通俗理解Distributed Deep Learning Systems(最全面的论述)

    分布式深度学习系统 (DDLS) 通过利用集群的分布式资源来训练深度神经网络模型. DDLS 的开发人员需要做出许多决定,以在他们选择的环境中有效地处理他们的特定工作负载. 基于 GPU 的深度学习的 ...

  5. python关键词对联_深度学习对联系统

    鼠年春节临近,来试试新的基于 GPT2-Chinese 自动对联系统:自动写对联(输入开头进行对联自动生成)和自动对对联(输入上联自动写下联).老的自动对联功能是去年基于深度学习机器翻译模型上线的一个 ...

  6. 深度学习让系统“看”懂短视频内容

    伴随短视频的火热,用户规模.视频观看时长也在日益增长,而面对海量的视频,如何有效的推荐给用户.如何洞察热点事件成为了关键.美图数据部门北京技术总监赵丽丽,在LiveVideoStackCon 2017 ...

  7. 【图像分割】NVIDIA深度学习训练系统——实现图像分割与网络分割可视化

    英伟达近日发布了 NVIDIA DIGIT 5.DIGIT 5 有许多新功能,本文将着重介绍下面两个: 1. 一个完全集成的分割工作流(segmentation workflow),允许创建图像分割数 ...

  8. 网易如何做新闻推荐:深度学习排序系统及模型

    向AI转型的程序员都关注了这个号

  9. 如何从系统层面优化深度学习计算?

    编者按:在图像.语音识别.自然语言处理.强化学习等许多技术领域中,深度学习已经被证明是非常有效的,并且在某些问题上已经达到甚至超越了人类的水平.然而,深度学习对于计算能力有着很大的依赖,除了改变模型和 ...

最新文章

  1. java的注释规范_Java 注释规范
  2. Linux clear指令
  3. 2017广西邀请赛重现赛
  4. WCF分布式开发步步为赢(0):WCF学习经验分享,如何更好地学习WCF?
  5. hash表冲突处理方法
  6. qt linux下实现vlc视频,vlc音视频开发(一)环境搭建(qt篇)
  7. 图上上传页面设计_无线端页面设计“三大雷区”
  8. [转载] 如何用 PyQt5 快速构建一个简单的 GUI 应用
  9. 善用工具和网上资源-决定学习的效率
  10. Tp5.0 PHPMailer邮件发送
  11. 转载(Asp.net Core 中试使用ZKWeb.System.Drawing)
  12. CSS display 常用属性小结
  13. linux 查看vcf文件,VCF格式文件的shell小练习
  14. h3c linux驱动 wn612_安装Ubuntu双系统系列——64位Ubuntu安装H3C的INode客户端
  15. 分享 |转录组测序那些事儿
  16. : ERR Client sent AUTH, but no passw redis解决
  17. oCPC实践录 | 糟糕,广告主成本超了!
  18. Tesra超算网络,解决AI开发困境
  19. 7-4 BCD解密 (10分)
  20. RxJava2基础总结(二)

热门文章

  1. GSUB - Glyph置换表
  2. 专家精讲Oracle数据库管理与维护pdf
  3. postgresql11日志审计
  4. jenkins Exec exit status not zero. Status [127] 解决方法
  5. 信息可视化中的时间线设计,不懂的过来
  6. 持续排名GITHUB榜首的V语言竟是C++的孪生兄弟-V版毁灭战士值得点赞
  7. idea 控制台乱码
  8. Python和Go都很火,我要怎么选?
  9. Vue3父子组件传值
  10. Redis安装教程(超级详细)!!