BindsNET丨Part II. 创建和添加学习规则(Creating and Adding Learning Rules)
Posted AXYZdong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BindsNET丨Part II. 创建和添加学习规则(Creating and Adding Learning Rules)相关的知识,希望对你有一定的参考价值。
文章目录
1 什么被认为是学习规则?
学习规则是在模拟过程中自动适应网络参数的必要条件。目前,BindsNET支持两种不同类别的学习规则。
- 两个因素。关联学习是根据突触前和突触后的神经活动来进行的。例子包括:
- 典型的例子是Hebbian学习,它可以被概括为 “一起开火的细胞一起布线”。也就是说,共同活动的神经元会使其连接强度增加。
- 突触时间依赖的可塑性(STDP)规定,突触前和突触后尖峰的顺序很重要。如果突触前的神经元在突触后的神经元之前发射,突触就会加强,反之,如果它在突触后的神经元之后发射,突触就会减弱。这些更新的幅度是突触前和突触后尖峰之间时间的一个递减函数。
- 三个因素。除了将突触前和突触后的神经活动联系起来外,还引入了第三个因素,在更全面的层面上调节可塑性;例如,对网络中的所有突触而言。例子包括。
- (奖励、错误、注意)调制的(Hebbian学习、STDP)。上述相同的学习规则被全局信号的存在所调制,如奖励、错误或注意力,这些信号可以在机器学习或强化学习的背景下有不同的定义。这些信号的作用是为可塑性把关,根据手头的任务打开或关闭,并转换其符号和大小。
以上是局部学习规则的例子,在这里,进行更新所需的信息被认为是在突触处可用的。例如,突触前和突触后的神经元与突触相邻,使它们的尖峰活动可以获得,而像多巴胺这样的化学信号(被假设为奖励预测错误(RPE)信号)则广泛分布在某些神经元群体中;也就是说,它们是全球可用的。这与像反向传播这样的学习算法相反,在这种算法中,每个突触的误差信号是通过对网络输出层的损失函数进行反向计算而得出的。这样的误差推导被认为在生物学上是不可信的,特别是与上述的双因素和三因素规则相比。
2 在BindsNET中创建一个学习规则
目前,学习规则被附加到特定的 Connection
对象上。例如,要在突触上创建一个带有STDP学习规则的连接。
from bindsnet.network.nodes import Input, LIFNodes
from bindsnet.network.topology import Connection
from bindsnet.learning import PostPre
# Create two populations of neurons, one to act as the "source"
# population, and the other, the "target population".
# Neurons involved in certain learning rules must record synaptic
# traces, a vector of short-term memories of the last emitted spikes.
source_layer = Input(n=100, traces=True)
target_layer = LIFNodes(n=1000, traces=True)
# Connect the two layers.
connection = Connection(
source=source_layer, target=target_layer, update_rule=PostPre, nu=(1e-4, 1e-2)
)
连接可以像往常一样被添加到一个 Network
实例中。Connection
对象接受参数 update_rule
,类型为bindsnet.learning.LearningRule
,以及 nu
,一个2元组,指定突触前和突触后的学习率;即,调节突触权重变化速度的乘法因子。
学习规则也接受参数 reduction
,它指定了参数更新在批次维度上的聚合方式,以及 weight_decay
,它指定了突触权重衰减到0的时间常数。默认情况下,参数更新在批次维度上是平均的,并且没有权重衰减。
其他支持的学习规则包括 Hebbian
、WeightDependentPostPre
、MSTDP
(奖励调制的STDP)和 MSTDPET
(奖励调制的STDP与资格追踪)。
自定义学习规则可以通过子类化 bindsnet.learning.LearningRule
并为打算使用的 AbstractConnection
对象的类型提供实现来实现。例如,Connection
和 LocalConnection
对象依赖于一个私有方法 _connection_update
的实现,而 Conv2dConnection
对象使用 _conv2d_connection_update
版本。
—— END ——
如果以上内容有任何错误或者不准确的地方,欢迎在下面 👇 留言。或者你有更好的想法,欢迎一起交流学习~~~
更多精彩内容请前往 AXYZdong的博客
以上是关于BindsNET丨Part II. 创建和添加学习规则(Creating and Adding Learning Rules)的主要内容,如果未能解决你的问题,请参考以下文章
[翻译] 使用 Python 创建你自己的 Shell:Part II
新手学Python之学习官网教程(十一: Part II of the Standard Library)
创建基于OData的Web API - Knowledge Builder API, Part II:Project Setup