Conditional projections for a WTA mechanism

19 views
Skip to first unread message

Brad Niepceron

unread,
Jun 17, 2021, 11:50:49 AM6/17/21
to ANNarchy
Hi everybody,

I'm just starting to work with ANNarchy and was wondering if something like a conditional projection was available (equivalent to the 'i != j' in Brian2). I need it to implement a winner-takes-all mechanism where an excitatory neuron sends a signal to an inhibitory neuron which transmits it to all excitatory neuron in the layer except for the one that emitted the signal in the first place.

Or is it simply handled by allow_self_connections ?

Thank you.

Best regards,

Brad.

Helge Dinkelbach

unread,
Jun 17, 2021, 12:12:46 PM6/17/21
to Brad Niepceron, ANNarchy
  Hi Brad,

indeed, an equivalent to 'i != j' in Brian2 would be to use connect_all_to_all()  with allow_self_connections = False.

Best,
Helge

--
You received this message because you are subscribed to the Google Groups "ANNarchy" group.
To unsubscribe from this group and stop receiving emails from it, send an email to annarchy+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/annarchy/35b967a5-d01f-4555-9004-b551a5f63052n%40googlegroups.com.

Brad Niepceron

unread,
Jun 17, 2021, 12:36:52 PM6/17/21
to ANNarchy
Awesome, thank you very much !

julien...@gmail.com

unread,
Jun 17, 2021, 12:43:27 PM6/17/21
to ANNarchy
Hi,

allow_self_connections is only when a population is connected to itself, it simply does not create weights on the diagonal of the connectivity matrix by default. It is the equivalent of i!=j in brian.

To be sure I understand what you want to do, let's say you have 10 excitatory neurons and one inhibitory. One of the excitatory neurons spikes, what in turn makes the inhibitory neuron spike. The 9 other excitatory neurons should receive an iPSP, but not the one which fired? And that should happen regardless the neuron that fired? 

That would be not very easy to do... At least at the projection level. You could implement that logic in the neurons themselves: the first neuron that fires remembers that it won (through a local variable). It can then ignore any iPSP coming from the inhibitory neuron. Something like:

WTA = Neuron(
    parameters = """
    ...
    """,
    equations="""
    inhib = (winner > 0.5? g_inh : 0.0)

    tau * dv/dt = g_exc - inhib - v

    winner = (g_inh > T ? 0.0 : winner)
    """,
    spike = "v > vt",
    reset = """
        v = 0.0
        winner = 1.0
    """
)

but one has to implement a WTA in addition.

Best
Julien

Brad Niepceron

unread,
Jun 18, 2021, 4:24:39 AM6/18/21
to ANNarchy
Hi Julien,

Thanks for your reply.
This is indeed what I need to do. However, I kept it pretty basic by having the same number of excitatory / inhibitory neurons and use one-to-one and an all-to-all projection (as in the Fig below). They work by pairs to make sure the winning neuron is the only one that does not receive iPSP after it fired. I assume it would just prevent the use of handlers to remember which neuron won for now.
Though, I might play around with the architecture and will in the end have to think about a local variable for sure.


index.png

Best
Brad.
Reply all
Reply to author
Forward
0 new messages