This commit is contained in:
ton
2023-09-17 11:39:01 +07:00
parent 13a82f36ef
commit d3d7589fa7
2 changed files with 24 additions and 10 deletions

View File

@@ -429,7 +429,6 @@ function lifLearn(wRec,
synapseReconnectDelay_cpu = synapseReconnectDelay |> cpu
synapticActivityCounter_cpu = synapticActivityCounter |> cpu
zitCumulative_cpu = zitCumulative |> cpu
println("synapse 3 ", synapseReconnectDelay_cpu[:,:,1,1])
# neuroplasticity, work on CPU side
wRec_cpu, neuronInactivityCounter_cpu, synapseReconnectDelay_cpu =
neuroplasticity(synapseConnectionNumber,
@@ -557,13 +556,13 @@ function neuroplasticity(synapseConnectionNumber,
# adjust wRec based on repeatition (90% +w, 10% -w)
growRepeatedPath!(wRec, synapticActivityCounter, eta)
error("DEBUG -> neuroplasticity")
# -w all non-fire connection except mature connection
weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta)
# prune weak synapse
pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)
error("DEBUG -> neuroplasticity")
# rewire synapse connection
rewireSynapse!(wRec, neuronInactivityCounter, synapticActivityCounter,
synapseReconnectDelay, zitCumulative)

View File

@@ -138,31 +138,46 @@ end
function growRepeatedPath!(wRec, synapticActivityCounter, eta) #BUG wRec get all 0
# seperate active synapse out of inactive in this signal
mask_activeSynapse = (!isequal).(synapticActivityCounter, 0)
# println("synapticActivityCounter ", synapticActivityCounter[:,:,1,1])
# adjust weight based on vt progress and repeatition (90% +w, 10% -w) depend on epsilonRec
avgActivity = sum(synapticActivityCounter) / length(synapticActivityCounter)
lowerlimit = 0.1 * avgActivity
# adjust weight based on vt progress and repeatition (80% +w, 20% -w) depend on epsilonRec
avgActivity = sum(synapticActivityCounter) / sum(mask_activeSynapse)
# println("avgActivity ", avgActivity)
# println("mask_activeSynapse ", sum(mask_activeSynapse))
lowerlimit = 0.2 * avgActivity
# println("lowerlimit ", lowerlimit)
# +w, synapse with more than 10% of avg activity get increase weight by eta
mask_more = (!isless).(synapticActivityCounter, lowerlimit)
mask_2 = GeneralUtils.allTrue.(mask_activeSynapse, mask_more)
mask_3 = mask_2 .* (1 .+ eta) # minor activity synapse weight will be reduced by eta
GeneralUtils.replaceElements!(mask_3, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight
wRec .*= mask_3
# -w, synapse with less than 10% of avg activity get reduced weight by eta
mask_less = GeneralUtils.isBetween.(synapticActivityCounter, 0, lowerlimit) # 1st criteria
mask_3 = GeneralUtils.allTrue.(mask_activeSynapse, mask_less)
mask_4 = mask_3 .* (1 .- eta) # minor activity synapse weight will be reduced by eta
# println("wRec 1 ", wRec[:,:,1,1])
# println("mask_less ", mask_less[:,:,1,1])
GeneralUtils.replaceElements!(mask_4, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight
# println("mask_4 ", mask_4[:,:,1,1])
wRec .*= mask_4
error("DEBUG -> growRepeatedPath!")
# println("wRec 2 ", wRec[:,:,1,1])
# error("DEBUG -> growRepeatedPath!")
end
function weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta)
function weakenNotMatureSynapse!(wRec, synapticActivityCounter, eta) # TODO not fully tested, there is no connection YET where there is 0 synapse activity but wRec is not 0 (subscribed)
# println("wRec ", wRec[:,:,1,1])
mask_inactiveSynapse = isequal.(synapticActivityCounter, 0)
mask_notmature = GeneralUtils.isBetween.(wRec, 0.0, 0.1) # 2nd criteria, not mature synapse has weight < 0.1
# println("mask_notmature ", mask_notmature[:,:,1,1])
mask_1 = GeneralUtils.allTrue.(mask_inactiveSynapse, mask_notmature)
# println("mask_1 ", mask_1[:,:,1,1])
mask_2 = mask_1 .* (1 .- eta)
GeneralUtils.replaceElements!(mask_2, 0, 1) # replace 0 with 1 so mask * Wrec will not get 0 weight
wRec .*= mask_2
# println("wRec 2 ", wRec[:,:,1,1])
end
function pruneSynapse!(wRec, synapticActivityCounter, synapseReconnectDelay)