Changes 5.2.0

From emergent
Jump to: navigation, search

Back to ChangeLog

This documents changes since 5.1.0 -- see Changes 5.1.0 for info on that release.

Warning: Due to changes in the save file format and changes to virtual unit groups projects created with this version of emergent are incompatible with previous versions.

New Save Format (Paths with Names)

Project files now save in a format that uses names of objects in the paths (and these name paths are now used in most places in the software -- use instead of GetPath_long for any of your own code) -- older versions of emergent are not forward compatible at all with regard to this change (an old version of the software cannot load the new file format). It now makes it possible to do things like merge different versions of a project file using svn or other text-based merging/diff tools.

Virtual Unit Groups

The new default mode is to have the Layer virt_groups flag on, which will convert all unit groups into virtual unit groups -- the units actually live in a flat list within the layer, but function as though they were organized into subgroups (e.g., for display on the screen, and for inhibitory competition in Leabra, etc). This is considerably more efficient as the number of unit groups gets larger.

The only cases where you would not want to use these is if you had manually positioned the unit groups (e.g., the necker_cube.proj project in the CECN projects), or you are using the GpOneToManyPrjnSpec, or if your programs significantly access the underlying unit groups. In Leabra, all the data that used to live in the unit groups now lives in the ungp_data member on the layer, which is a list of LeabraUnGpData objects, and can also be accessed via the UnGpData method. This is true regardless of using virt_groups, so any Program code that accessed this data must be rewritten (should be very straightforward).

The Leabra PBWM code has a special PBWMUnGpData object (subclass of LeabraUnGpData) which finally represents the stripe-wise state data about gating signals etc in an explicit way, instead of using generic "misc_state" variables. Any stats program code that monitored the misc_state variables will need to be updated.

There will be an exceptionally large amount of "version skew" warnings when first loading an existing project in this new version, but these can be safely ignored.

New Algorithm-Level Changes in Leabra

  • See the 2nd edition of CCN Textbook] (done in a wiki), Neuron and Learning chapters for documentation on the gelin activation function and XCAL learning variant, which are new and now stable, mature technologies. gelin is the default for new projects -- it is a significantly more accurate and well-behaved activation function for rate code. And spiking now supports the AdEx adaptive exponential model from Gerstner and colleagues.
  • Relative to the previous beta release (5.1.7), the XCAL long time average calculation (for BCM-style self-organizing learning) was changed to use asymmetric up/down rates -- this is much simpler and more robust, and works as well or better in our tests, but might require adapting these parameters.
  • Also separated the net input scaling for excitatory vs. inhibitory projections, which makes more sense overall -- this is disabled if the first projection conspec in a layer has the wt_scale.old flag set (inconsistent, unpredictable results are obtained if a non-first projection has this flag).
  • added a XCalCHLConSpec that does CHL-based Leabra learning even under XCAL.
  • added specialized classes for a Hippocampus system that trains both the EC <-> CA1 auto-encoder and the CA3 -> CA1 associator connections within a single trial, and automates all the relevant dynamics -- makes for a very robust hippocampal system.

New Features

  • LIBLINEAR plugin now available -- allows access to various classification algorithms such as SVM's within emergent!
  • Projects now have a license field associated with them, where you can select from among a set of standard licenses governing the distribution and use of your project by others, or enter a custom license. There are new license_def, license_owner and license_org fields in the preferences to specify defaults for these when you make a new project.
  • Networks can now compute precision and recall statistics -- enabled by turning on compute_prerr flag on the network -- results go into prerr and epc_prerr fields on network (and prerr on layers). See http://en.wikipedia.org/wiki/Precision_and_recall for more details.
  • Movie button on the NetView history toolbar in the network viewer -- can create a movie directly from the stored history information -- renders individual frames to files and then you can call an mjpegutils command to concatenate into an MPEG movie, which can then be transcoded into other more general formats (e.g., using VLC to convert to MP4 works well).
  • verbose_load Options setting now has a VERSION_SKEW level that provides the ubiquitous version skew warnings -- otherwise these are now suppressed with the default QUIET option.
  • --attachwait startup flag -- very useful for doing gdb attach <procid> on jobs that were submitted via a job scheduler on another node in a cluster, and especially for dmem (MPI) debugging -- just waits in an attach code thing, where you set the local i variable to a value other than 0, and the program will continue (see comments in code in ta_project.cpp where it should be when you attach -- set var i = 1 will enable it to continue)
  • Project::SelectT3TabNo/Name -- can select tabs by number or name from the project object, in program code
  • When your project is 'dirty', or, in other words, has unsaved changes, there will now be an asterisk (*) in the title of the window. When you press Ctrl-s or go to File > Save to save the project, the asterisk will go away, indicating the project is now 'clean' and no changes need to be saved. This gives you nice visual feedback that can boost your confidence that there aren't any unsaved changes right now.
  • Variables now have a SAVE_VAR flag which will determine whether or not the value of that variable will be saved in the project file. If not, it will be re-initialized whenever the project is loaded. Having this off can cause fewer conflicts with using diff or svn diff to merge projects.
  • Programs now have a LOCKED flag which indicates that the program should only be edited by expert users. Right now it doesnt actually prevent you from editing and so is just a visual clue.
  • If and IfElse now merged into single IfElse that can (optionally) not show the false condition if it is empty.
  • There are now VCR buttons associated with the control panels for GridViews that allow you to move just one row up/down or to the end/beginning.
  • taDataAnal::ReceiverOperatingCharacteristic. See here for documentation: Receiver Operating Characteristic

Minor new features

Bugs Fixed

  • fixes to 3D virtual environment when running in -nowin mode (i.e., batch mode) -- interaction is off by default.
  • no longer saving all units on recover files -- really not necessary and painful for large networks.
  • 3d view thumbwheels now wraparound continuously so you can keep on going as you keep rotating -- no jumping backwards
  • Server Protocol GetTable Program.Table syntax fixed
  • Calling Print in a tight loop no longer causes locking of the css console. Missing taMisc::FlushConsole() was added.
  • Double-clicking the right or left horizontal sliders closes the slider without affecting the position of the other one.
  • Opening multiple projects with the same project root name no longer causes a crash. (regression).
  • URLs in the Find dialog now work correctly. (regression)
  • nan and inf numeric values are more reliably handled across platforms.
  • Windows installer has nice emergent icons and properly creates a desktop shortcut,
  • Fixes to MultiLayerNet wizard naming
  • GridView control panel shows the row you are on
  • BiasSpecs now show up in the spec explorer.
  • bug 1300: Fixed problems with line endings when saving weights files.
  • Various updates for motion filtering in image processing code.
  • r4798: Important fix for MultBias in matrix -- gp_sz = nunits / 2 -- biasing not right from virtual_groups onward as result of this.
  • r4801: Updated AX Tutorial project file for 5.1.x series. Also moved its documentation to wiki and updated.
  • bug 1311: Check for out-of-memory condition & try to recover; this is only a partial fix as there are other places OOM could occur. This is mostly a problem on 32-bit platforms where emergent is limited to using 2GB memory. There is now a 64-bit version for Windows that should obviate the need for a more thorough fix.
  • r4804: Unit::GetLayerAbsPos replaced with LayerLogPos and LayerDispPos based on corresponding functions at the layer level, which are unambiguous.
  • r4805, r4806: Changed snrthal act, act_eq to always equal act_m2 after a gating event has taken place -- makes it easier to see what is going on, and should help generativity model. Added flag snrthal.act_is_gate to control act = act_m2 behavior in snrthal.
  • r4807: Do not build or connect lesioned layers. Fix for no bias in GradRF projection.
  • r4812: Enclose ProgramCallVar in { } so that multiple can co-exist in same program.
  • r4814: Weight specs in projection specs are now conditionally editable based on init_wts. TiledGpRFOneToOne has gauss_sig weights -- needed to better replicate imgproc code. Added Init_Weights button to network.
  • massive speedup in deleting LeabraUnits (e.g., closing a project with a large network)