Nice, what size could you build the neurons out to. I'd like to see sections devoted to this that or the other. As the section operate getting better at the goal assigned they change color from say yellow or amber to different shades of green, or other color meaning goal on target.
+Phil S Hi Phil. On my machine up to about 5000 neurons is ok. I like the idea of neuron groups or some other construct (what you call "sections") being color coded in some significant way. In a task where goals of different groups of neurons are well defined, it could function just as you say. More ideas for the next versions of Simbrain, which we are just starting to work on...
+Jeff Yoshimi Hello. I enjoy working with this software it very interesting on many levels. It would be "fantastic" to find more English vid's regarding scope and breath of this software. It would be really cool to see more information of this software and the use of the leap motion controller interface working with this software. lets drop the keyboard and either use spoken word or hand gestures with in a 3D perspective. Keep up the great work.Phil
+Phil S Another nice idea! There is nothing in principle to prevent it. Some people here at UC Merced are using the kinect for example. Right now, based on comments here and in another video, we are looking in to ways to hook Simbrain directly up to video games.
This is really cool. I would like to take it a step further is there any way of inputting data Diana Glee into this app from another app ? Say like C++ ? after messing around with neural networks in C++ but its a bit over my head. I like the layout you have and works well for somebody like me that's a visual person. Would be nice to set up and train a neural network interact with it as I send data into it and it sends data back out to my other processing program to do more with the data is there any options for this or any future plans for updating such a feature?
Yet another post I missed until just now... The short answer is that this can be done, but it easiest to do using Simbrain just as a jar file. When you do that you lose a lot of the visualization advantages, but not all. It should be possible for example to display a neural network running while it's interacting with other programs.
So can you use this with other software? As in can you run it on a game engine for adaptive AI characters. or use for data analyzing, if not then I would defiantly work on that. Please message me soon with answer
+canti288 Hi canti288, no currently Simbrain can't interface with other software in real-time out of the box. That being said Simbrain can be run as a neural network library with or without the GUI, allowing you to write up your own code to bridge between Simbrain and some other program. Simbrain does have some data visualization and analysis built in including histograms, time-series, raster plots, bar charts, and dimensionality reduction projections. For certain subnetworks keep track of quantities like mean squared error. That being said, work on Simbrain is ongoing and expanding our data analysis/visualization suites and interfacing Simbrain with other programs out of the box (especially for the purpose of embodiment in virtual environments) are top priorities for later versions of the software. If you'd like to learn more or are interested in joining our team check out: simbrain.net/ and github.com/simbrain/simbrain
As you said that it cannot communicate with other software. What are the possibilities to add a feature within the software to continuously update and read the CSV files as a third-party software can update the information there and also retrieve information without adding any extra complexity to the software? I'd imagine it'll be a simple update routine in the code. You can add the option to continuously check the file or just simply check to see if the file has changed and then updated them and output the data in an OUTPUT CSV file. I'm sure there're many possibilities you can do that would keep it as simplistic as possible.
Hi Brian. Actually something like this isn't too hard to do now by adding a custom workspace update action that involves reading to and writing from a csv file. In that part of the GUI there is a template for a custom update action that shouldn't be too hard to adapt to your use case.
+thrax1920 Hi there. Basic supervised learning (e.g. Backprop) is available, which can be used in prediction and forecasting tasks. There is a script called elmanPhonemes.bsh (invoke from the script menu) which shows a network that learns to predict the next phoneme in a sequence of phonemes (it's based on this paper: crl.ucsd.edu/~elman/Papers/fsit.pdf).
+thrax1920 Sorry I missed this when you first posted it. Some prediction can be done in Simbrain, using Simple Recurrent Networks. If you try the elman phonemes script it shows a network that predicts the next phoneme in a sequence. Even better is the elman sentence network, which predicts the next word in a sentence. It is on the github version but not on the download yet. I hope to do a video on this topic in the future.
It's basically all java. The scripts are in beanshell, which is just interpreted java. However, in the new Simbrain we are moving increasingly to kotlin. (Apologies on slow reply I just realized I did not have notification set up).
Hi Ali. Not yet, at least not from the GUI. Both should come, eventually. I'd guess some kind of support for simple convolutional networks will come before built in GPU support.
Nice job on the software. It looks helpful for learning about neural networks and testing ideas. I’ve been fiddling with it. You have a number of synapse types to choose from as well as neuron types. Is there a synapse type where the connection strength changes proportionally to the signal it carries? Is there a neuron type where the threshold changes proportionally to the signal it transmits? Thanks. -Rath
Hi Rath, so I'm not exactly sure what you mean by "connection strength changes proportionally to the signal it carries". The signal transmitted across a synapse is more or less (depending on exactly how the post-synaptic response determined) defined by its connection strength. If by signal you mean "use" as in how often and how much activity is present in the pre-synaptic neuron that is then being transmitted through the synapse, then yes there are a number of mechanisms which dynamically respond to this. The UDF (Use, Depression, Facilitation; a form of short-term plasticity) spike responders which can be accessed via scripting or the console dynamically alter the post-synaptic response based on the time intervals between spikes in the pre-synaptic neuron to coincide with depletion of neurotransmitter and influx of calcium ions which can temporarily depress or amplify synaptic transmission respectively. Most spike responders produce a post-synaptic responses which reflect both the activity of the pre-synaptic neuron and the strength of the synapse in some way. This, however does not alter the base strength of a synapse. Here almost any plasticity mechanism (Hebbian for continuously valued neuron types, STDP for spiking neurons) will do that. Though these are not entirely based upon the signal being transmitted across the synapse and also use the post-synaptic neuron's to response in order to determine how the synapse's weight is changed. Currently there is no neuron type with a dynamic threshold out of the box, though we plan to include a general mechanism that can apply to all neuron rules which use a threshold in the future. That being said, all the machinery for such a neuron rule is in place and a dynamic threshold is pretty straightforward to set up. The SORN script and its supplementary materials contain such neurons and provides an example of how they can be implemented. This can be found in the script menu folder. I myself am working on a recurrent neural network which uses homeostatic plasticity (via dynamic threshold) which currently runs in Simbrain based a modified version of the leaky integrate and fire rule I've implemented. So currently it is possible though it requires scripting and/or extending the source code.
Zachary, thanks for your response. I like the software. It offers an intuitive test environment with a graphical interface. What is going on inside the Competitive-Net-Smells example to make it learn, if not dynamically varying synapse strengths and neuron thresholds? I can’t see inside the groups.
I'm glad you like the software! Sorry if I didn't make it clear: Simbrain does support many plasticity mechanisms for dynamically changing synaptic strength. I was just unclear on what you meant by "proportionally to the signal it carries", and so was trying to clarify that spike responders (simbrain.net/Documentation/docs/Pages/Network/synapse/spikeResponder.html) particularly the UDF responder (which right now can only be found in the source) and the convolved jump and decay responder do produce responses unique to the timing of spikes in the presynaptic neuron and strength of the synapse, i.e. their response is proportional to the signal being carried across the synapse, though they do not alter the base strength of the synapse itself. Nearly all of Simbrain's synapse types (aside from "static") do dynamically change the synaptic strength value (simbrain.net/Documentation/docs/Pages/Network/synapse.html), however this is usually in response to activity in the pre *and* post synaptic neuron and thus can't be said to be *only* dependent upon the signal traversing a synapse. As for the competitive network example: I can't say for certain as that's not part of the code I ever worked on, however it should be noted that certain special neuron groups and certainly subnetworks have a tendency to use customized mechanisms which are unique to the particular model they are instantiating. For instance the Echo-state network model scales some of its weights such that the maximum eigenvalue of one of its matrices is less than 1. This is not something that can be done with arbitrary synapse groups in Simbrain through the GUI, as it uses custom code in the ESN class to do that. Things that subnetworks or special neuron groups do can be thought of as things that Simbrain is capable of supporting but does not necessarily support generically. In other words, while the competitive network may be changing thresholds dynamically that's not something for which there is a gui option for arbitrary neurons with thresholds, however the fact that such a thing exists in Simbrain means that with scripting and/or some custom source code Simbrian is capable of supporting that kind of thing. And thus you can be assured that you won't come up against any brick walls if you yourself try to build something that does that... not that you should expect "brick walls" otherwise. We've worked quite hard to make Simbrain's API both extremely intuitive conceptually and extremely flexible in terms of what can be implemented (in the GUI, but especially when some combination of scripting/custom source code is used). (simbrain.net/Documentation/docs/Pages/Network/subnetwork.html)
Hi Rath. I made a few brief comments on this to supplement Zach's useful comments in the forum thread you opened. See simbrain.963258.n4.nabble.com/Proportional-weight-change-td4640431.html. Cheers.
Yes, see the Simbrain backprop video. Also there is LMS and a few others. We're revamping all of that to provide better support for the main supervised learning algs, but it's taking years (literally!) of part time, on-the-side work, so who knows when the newer shinier version of all this will be out... But yeah search for "simbrain backprop" and you can see more
I gotta tell you; your program is amazing! Holy shit dude - Making all this for free => #respect. Keep up the very very good work. And thanks for an outstanding program
The main point is to be able to learn about neural networks, or just build and analyze neural networks. What is the pont of neural networks? People use neural networks to do machine-learning / AI kinds of things (like recognizing handwriting), to study the brain, and also to study the mind, e.g. memory. See en.wikipedia.org/wiki/Artificial_neural_network#Applications
Hey, I've been playing around with your software for a bit and I really like the basics of it. My current problem prohibiting me from creating anything complex with it is the CTRL+click isn't panning for me it just creates a lasso. Also, is there a way to do a calculation on a neurons value before it reaches the next layer or have the input change based on the value of a certain neuron?
Hi there. I just responded to the issue here github.com/simbrain/simbrain/issues/33. I guess that part of the discussion can migrate over to github. There is nothing in the GUI to allow you to add additional layers of computation between layers (beyond just adding more neurons). Customization, e.g.a script, is needed.. I am working now an alternative to scripts which is much easier to use, but it will be at least a few months before it's released.
Help! I'm trying to save a Simbrain project on my desktop as a .zip file and it's not working ( im on microsoft)
Nice, what size could you build the neurons out to. I'd like to see sections devoted to this that or the other. As the section operate getting better at the goal assigned they change color from say yellow or amber to different shades of green, or other color meaning goal on target.
+Phil S Hi Phil. On my machine up to about 5000 neurons is ok. I like the idea of neuron groups or some other construct (what you call "sections") being color coded in some significant way. In a task where goals of different groups of neurons are well defined, it could function just as you say. More ideas for the next versions of Simbrain, which we are just starting to work on...
+Jeff Yoshimi Hello. I enjoy working with this software it very interesting on many levels. It would be "fantastic" to find more English vid's regarding scope and breath of this software. It would be really cool to see more information of this software and the use of the leap motion controller interface working with this software. lets drop the keyboard and either use spoken word or hand gestures with in a 3D perspective. Keep up the great work.Phil
+Phil S Another nice idea! There is nothing in principle to prevent it. Some people here at UC Merced are using the kinect for example. Right now, based on comments here and in another video, we are looking in to ways to hook Simbrain directly up to video games.
This is really cool. I would like to take it a step further is there any way of inputting data Diana Glee into this app from another app ? Say like C++ ? after messing around with neural networks in C++ but its a bit over my head. I like the layout you have and works well for somebody like me that's a visual person. Would be nice to set up and train a neural network interact with it as I send data into it and it sends data back out to my other processing program to do more with the data is there any options for this or any future plans for updating such a feature?
Yet another post I missed until just now... The short answer is that this can be done, but it easiest to do using Simbrain just as a jar file. When you do that you lose a lot of the visualization advantages, but not all. It should be possible for example to display a neural network running while it's interacting with other programs.
So can you use this with other software? As in can you run it on a game engine for adaptive AI characters. or use for data analyzing, if not then I would defiantly work on that. Please message me soon with answer
+canti288 Hi canti288, no currently Simbrain can't interface with other software in real-time out of the box. That being said Simbrain can be run as a neural network library with or without the GUI, allowing you to write up your own code to bridge between Simbrain and some other program. Simbrain does have some data visualization and analysis built in including histograms, time-series, raster plots, bar charts, and dimensionality reduction projections. For certain subnetworks keep track of quantities like mean squared error.
That being said, work on Simbrain is ongoing and expanding our data analysis/visualization suites and interfacing Simbrain with other programs out of the box (especially for the purpose of embodiment in virtual environments) are top priorities for later versions of the software. If you'd like to learn more or are interested in joining our team check out: simbrain.net/ and github.com/simbrain/simbrain
+Zachary Tosi Thank you very much and I will be following your progress
As you said that it cannot communicate with other software. What are the possibilities to add a feature within the software to continuously update and read the CSV files as a third-party software can update the information there and also retrieve information without adding any extra complexity to the software? I'd imagine it'll be a simple update routine in the code.
You can add the option to continuously check the file or just simply check to see if the file has changed and then updated them and output the data in an OUTPUT CSV file.
I'm sure there're many possibilities you can do that would keep it as simplistic as possible.
Hi Brian. Actually something like this isn't too hard to do now by adding a custom workspace update action that involves reading to and writing from a csv file. In that part of the GUI there is a template for a custom update action that shouldn't be too hard to adapt to your use case.
Oh I meant to include this link: www.simbrain.net/Documentation/docs/Pages/Workspace/Update.html
can you do prediction-forecasting with Simbrain ?
+thrax1920 Hi there. Basic supervised learning (e.g. Backprop) is available, which can be used in prediction and forecasting tasks. There is a script called elmanPhonemes.bsh (invoke from the script menu) which shows a network that learns to predict the next phoneme in a sequence of phonemes (it's based on this paper: crl.ucsd.edu/~elman/Papers/fsit.pdf).
+thrax1920 Sorry I missed this when you first posted it. Some prediction can be done in Simbrain, using Simple Recurrent Networks. If you try the elman phonemes script it shows a network that predicts the next phoneme in a sequence. Even better is the elman sentence network, which predicts the next word in a sentence. It is on the github version but not on the download yet. I hope to do a video on this topic in the future.
Just wondering, what language is this written in besides Java?
It's basically all java. The scripts are in beanshell, which is just interpreted java. However, in the new Simbrain we are moving increasingly to kotlin. (Apologies on slow reply I just realized I did not have notification set up).
Hi,
can I used Simbrain for Convolutional Neural Networks ? is there any version of it suitable for using with GPU ?
Hi Ali. Not yet, at least not from the GUI. Both should come, eventually. I'd guess some kind of support for simple convolutional networks will come before built in GPU support.
Nice job on the software.
It looks helpful for learning about neural networks and testing ideas. I’ve been fiddling with it. You have a number of synapse types to choose
from as well as neuron types. Is there a
synapse type where the connection strength changes proportionally to the signal
it carries? Is there a neuron type where
the threshold changes proportionally to the signal it transmits? Thanks.
-Rath
Hi Rath, so I'm not exactly sure what you mean by "connection strength changes proportionally to the signal it carries". The signal transmitted across a synapse is more or less (depending on exactly how the post-synaptic response determined) defined by its connection strength. If by signal you mean "use" as in how often and how much activity is present in the pre-synaptic neuron that is then being transmitted through the synapse, then yes there are a number of mechanisms which dynamically respond to this. The UDF (Use, Depression, Facilitation; a form of short-term plasticity) spike responders which can be accessed via scripting or the console dynamically alter the post-synaptic response based on the time intervals between spikes in the pre-synaptic neuron to coincide with depletion of neurotransmitter and influx of calcium ions which can temporarily depress or amplify synaptic transmission respectively. Most spike responders produce a post-synaptic responses which reflect both the activity of the pre-synaptic neuron and the strength of the synapse in some way.
This, however does not alter the base strength of a synapse. Here almost any plasticity mechanism (Hebbian for continuously valued neuron types, STDP for spiking neurons) will do that. Though these are not entirely based upon the signal being transmitted across the synapse and also use the post-synaptic neuron's to response in order to determine how the synapse's weight is changed.
Currently there is no neuron type with a dynamic threshold out of the box, though we plan to include a general mechanism that can apply to all neuron rules which use a threshold in the future. That being said, all the machinery for such a neuron rule is in place and a dynamic threshold is pretty straightforward to set up. The SORN script and its supplementary materials contain such neurons and provides an example of how they can be implemented. This can be found in the script menu folder. I myself am working on a recurrent neural network which uses homeostatic plasticity (via dynamic threshold) which currently runs in Simbrain based a modified version of the leaky integrate and fire rule I've implemented. So currently it is possible though it requires scripting and/or extending the source code.
Zachary, thanks for your response. I like the software. It offers an intuitive test environment with
a graphical interface. What is going on inside the Competitive-Net-Smells example
to make it learn, if not dynamically varying synapse strengths and neuron
thresholds? I can’t see inside the
groups.
I'm glad you like the software!
Sorry if I didn't make it clear: Simbrain does support many plasticity mechanisms for dynamically changing synaptic strength. I was just unclear on what you meant by "proportionally to the signal it carries", and so was trying to clarify that spike responders (simbrain.net/Documentation/docs/Pages/Network/synapse/spikeResponder.html) particularly the UDF responder (which right now can only be found in the source) and the convolved jump and decay responder do produce responses unique to the timing of spikes in the presynaptic neuron and strength of the synapse, i.e. their response is proportional to the signal being carried across the synapse, though they do not alter the base strength of the synapse itself. Nearly all of Simbrain's synapse types (aside from "static") do dynamically change the synaptic strength value (simbrain.net/Documentation/docs/Pages/Network/synapse.html), however this is usually in response to activity in the pre *and* post synaptic neuron and thus can't be said to be *only* dependent upon the signal traversing a synapse.
As for the competitive network example:
I can't say for certain as that's not part of the code I ever worked on, however it should be noted that certain special neuron groups and certainly subnetworks have a tendency to use customized mechanisms which are unique to the particular model they are instantiating. For instance the Echo-state network model scales some of its weights such that the maximum eigenvalue of one of its matrices is less than 1. This is not something that can be done with arbitrary synapse groups in Simbrain through the GUI, as it uses custom code in the ESN class to do that. Things that subnetworks or special neuron groups do can be thought of as things that Simbrain is capable of supporting but does not necessarily support generically. In other words, while the competitive network may be changing thresholds dynamically that's not something for which there is a gui option for arbitrary neurons with thresholds, however the fact that such a thing exists in Simbrain means that with scripting and/or some custom source code Simbrian is capable of supporting that kind of thing. And thus you can be assured that you won't come up against any brick walls if you yourself try to build something that does that... not that you should expect "brick walls" otherwise. We've worked quite hard to make Simbrain's API both extremely intuitive conceptually and extremely flexible in terms of what can be implemented (in the GUI, but especially when some combination of scripting/custom source code is used). (simbrain.net/Documentation/docs/Pages/Network/subnetwork.html)
Hi Rath. I made a few brief comments on this to supplement Zach's useful comments in the forum thread you opened. See simbrain.963258.n4.nabble.com/Proportional-weight-change-td4640431.html. Cheers.
Can it be used for supervised learning ?
Yes, see the Simbrain backprop video. Also there is LMS and a few others. We're revamping all of that to provide better support for the main supervised learning algs, but it's taking years (literally!) of part time, on-the-side work, so who knows when the newer shinier version of all this will be out... But yeah search for "simbrain backprop" and you can see more
Thank you for this.
I gotta tell you; your program is amazing! Holy shit dude - Making all this for free => #respect. Keep up the very very good work. And thanks for an outstanding program
Thanks Bastian!
so..... whats the point of using this software ? can somebody explain to me please ?
The main point is to be able to learn about neural networks, or just build and analyze neural networks. What is the pont of neural networks? People use neural networks to do machine-learning / AI kinds of things (like recognizing handwriting), to study the brain, and also to study the mind, e.g. memory. See en.wikipedia.org/wiki/Artificial_neural_network#Applications
Jeff Yoshimi thanks
Hey, I've been playing around with your software for a bit and I really like the basics of it. My current problem prohibiting me from creating anything complex with it is the CTRL+click isn't panning for me it just creates a lasso. Also, is there a way to do a calculation on a neurons value before it reaches the next layer or have the input change based on the value of a certain neuron?
Hi there. I just responded to the issue here github.com/simbrain/simbrain/issues/33. I guess that part of the discussion can migrate over to github. There is nothing in the GUI to allow you to add additional layers of computation between layers (beyond just adding more neurons). Customization, e.g.a script, is needed.. I am working now an alternative to scripts which is much easier to use, but it will be at least a few months before it's released.