60 Commits
Author SHA1 Message Date
jensandClaude Sonnet 5 0149cdf7ce Rename weightDecay to l2Lambda
Rbm::Params::weightDecay is now applied directly to the weights outside
the momentum recursion (previous commit), exactly like the newly-added
l1Lambda and matching pyRBM's l2_lambda -- same lambda*W gradient form,
same decoupled-from-momentum treatment. The two are functionally the
same mechanism in this codebase, so name it accordingly. Renamed the
Params field, its JSON key, and the two GUI references in
MainComponent.cpp that read/write it (the "weightDecayLabel" widget
identifier and its JUCE-generated marker comment are left as-is --
cosmetic, not part of the actual API).

Existing .prj files still have a "weightDecay" JSON key; fromJson()
no longer reads it, so it's silently ignored on load. Harmless today
since every current project has it set to 0.0 (confirmed: unchanged
poet.elf output, unchanged test-suite results). Not migrating the .prj
files themselves in this change.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016K8Gu7Qejd11JbdiHZqYAs
2026-07-27 15:41:01 +02:00
jensandClaude Sonnet 5 cb20060732 Implement L1 regularization
Rbm::Params had no l1Lambda field at all -- L1 didn't exist anywhere in
the C++ codebase. Status::L1 was a dead field always -1 (never assigned
outside its constructor), and the GUI's "Lambda" control was explicitly
tooltipped "Unused" with an empty change-handler stub. Scaffolded, never
implemented.

Add Params::l1Lambda (default 0.0, inert unless set) with full toJson/
fromJson round-trip. Apply its subgradient (lambda*sign(W), matching
pyRBM's l1_lambda) directly to m_whv in Rbm::train, in the same place
and same decoupled-from-momentum manner as the weightDecay fix from the
previous commit -- folding it into inc_whv's momentum recursion would
cause the same momentum-amplification bug. Doesn't touch the biases,
matching pyRBM's state_adjust().

Also wire up Status::L1 to actually report something (the current L1
norm of the weights, sum(abs(W))) instead of permanently printing -1,
computed alongside status.err/err_total.

Inert by default (l1Lambda=0.0 in every existing .prj): confirmed via
unchanged poet.elf output and unchanged test-suite results (9 passed,
1 known issue, 2 failed).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016K8Gu7Qejd11JbdiHZqYAs
2026-07-27 15:31:59 +02:00
jensandClaude Sonnet 5 eb29e33b81 Fix Bernoulli-only sample() applied to Gaussian visible/hidden units
Matutils::sample() always binary-thresholds (src > uniform(src)), but it
was the only sampler in the codebase and was called unconditionally on
h_probs/v_probs/miniBatch in several CD Gibbs-loop branches regardless
of doGaussianVisible/doGaussianHidden. Binary-thresholding a Gaussian
unit's continuous activation is meaningless -- it would corrupt any
Gaussian-visible/hidden RBM (image-domain experiments via the GUI or
TEST target); doesn't affect poet's plain BB-RBM path since both flags
are false there.

Add sample_gaussian() (mean + N(0,1) noise) alongside the existing
Bernoulli sample() in matutils.hpp, plus Rbm::sampleVisible/sampleHidden
helpers that dispatch to the right one per the RBM's configured type.
Replace every visible/hidden Gibbs-step sample() call in cd_jens (the
active path) and cd_hinton (compiled but currently unused, behind
USE_CD_HINTON) with the appropriate dispatch helper, and fix the same
issue in Rbm::train's doSampleBatch path.

Behavior is unchanged for any RBM with doGaussianVisible/doGaussianHidden
both false (confirmed: poet.elf f output identical before/after).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016K8Gu7Qejd11JbdiHZqYAs
2026-07-27 13:45:03 +02:00
jens 32c3526ba7 - Rbm::Params: Momentum default 0.9 2024-02-03 09:49:13 +01:00
jens e211c568ac Rbm
- enable linear hidden : instead of prob(v_to_h()): use toHiddenProbs()
- enable linear visible: instead of prob(h_to_v()): use toVisibleProbs()
- make v_to_h() and h_to_v() private and force to use toHiddenProbs() and toVisibleProbs()
- use cd_jens or cd_hinton. cd_hinton_hid_lineaer is not of use anymre, since it is not capable of CDn
2024-01-31 12:03:47 +01:00
jens c0445f3bf8 - moved Rbm:prob() to Matutils::prob()
- Matutils::Normalize uses prob()
2024-01-29 13:04:13 +01:00
jens 34b20f4fb3 - refactored
- switch between cd_hinton hid/linear and cd_jens using doGaussionVisible (temporary solution)
2024-01-24 19:22:57 +01:00
jens 88f649e8f4 - refactored 2024-01-24 16:56:49 +01:00
jens fe9b1951ea - Added gaussian hidden units 2024-01-24 14:47:21 +01:00
jens 938368f1fa - refactored
- constify
2024-01-22 12:26:03 +01:00
jens aef3049856 - refactored common functions into matutils
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@855 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-21 07:46:40 +00:00
jens a372f1a30d - moved method of layer interaction from Layer to Stack
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@817 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-17 08:33:30 +00:00
jens 59d3df12fe - refactored
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@814 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-15 10:55:09 +00:00
jens 78c05afbc2 - removed noise c-sources
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@812 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-15 09:23:57 +00:00
jens 4b7c29effd - refactored
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@811 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-15 09:19:50 +00:00
jens be64a88e04 - Layer: do gibbs sampling in calcContextBatch()
- RBM: added Gibbs sampler
- Stack adjust training column vector according to needs

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@797 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-13 07:19:47 +00:00
jens fa2014b4dd - trainingdata always contains context
- load / store training batch with context
- on load: add context part to  legacy training batches 
- removed Rbm::setBatch()

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@790 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-12 08:12:35 +00:00
jens 5cb7b16d96 - added rms_error function
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@786 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-11 19:13:30 +00:00
jens 648d8a002e - added setBatch()
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@771 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-10 10:36:55 +00:00
jens e240eae073 - moved context awareness from Rbm to Layer (final)
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@770 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-10 10:03:43 +00:00
jens e9de02ac3d - moved context awareness from Rbm to Layer
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@769 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-10 08:09:49 +00:00
jens 5427287838 - fixed gui wiring
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@764 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-09 12:36:45 +00:00
jens 7fed7cea88 - added contextTrain and ContextReconst to RbmComponent
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@763 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-09 10:08:56 +00:00
jens c2ffecd66a - pass numContext
- fixed crash when numContext == 0

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@761 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-09 08:01:25 +00:00
jens 0ee0a732e9 - fixed dependencies (Zwischenstand)
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@760 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 15:44:41 +00:00
jens 9fff2082d6 - use all-at-onec (v+c) method
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@759 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 15:24:07 +00:00
jens 3272899888 - train whv and whc separately
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@758 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 13:30:26 +00:00
jens b46e53f207 - prepared for context processing
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@757 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 11:52:01 +00:00
jens 37a973d0e4 - fixed tabs vs spaces
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@754 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 11:13:29 +00:00
jens ef82ae7ea6 - refactored in gibbs
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@753 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 11:10:26 +00:00
jens 637b237966 - refactored
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@751 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-08 10:41:41 +00:00
jens dc8db11d9a - constify
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@747 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-07 12:46:03 +00:00
jens 66fe4a018d - refactored Rbm
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@746 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-07 12:40:57 +00:00
jens 7f3535954b - prepared for context units
- simplified status report

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@745 b431acfa-c32f-4a4a-93f1-934dc6c82436
2022-01-07 08:49:12 +00:00
jens f610d2930e - add Rbm::normalize()
- normalize of training data

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@660 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-11 21:08:48 +00:00
jens 9ea6e48fff - improved progressIndicator
- fixed Stack::trainingData()
- fixed test::main

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@638 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-08 06:38:09 +00:00
jens 4c68cd4370 - Rbm::onProgress provides object to itself
- MainComponentz is Rbm::IListener

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@635 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-07 19:27:15 +00:00
jens 508abdbfdb - more error tolerant loading of params
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@631 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-07 17:52:02 +00:00
jens 050be15852 - run gui (Zwischenstand)
- trigger compile of libjuce  from RBM makefile

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@614 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-07 12:14:35 +00:00
jens b20604e4f4 - Rbm: fixed parameter import
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@607 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-06 06:24:48 +00:00
jens 3ef7b07f5e - moved numEpochs and miniBatchSize to RBM::Params
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@606 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-11-06 06:12:51 +00:00
jens a061fdf0da - use custom noise for bugfixing
- init weights with zero mean uniform noise

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@598 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-29 07:00:59 +00:00
jens 8a37ee6a69 - weightInit are construction time parameter
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@593 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-28 20:04:39 +00:00
jens e2bd0ee850 - rbm: no training params at construction
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@591 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-28 19:20:34 +00:00
jens 9bfee1ae16 - load and save of weights
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@588 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-28 17:26:59 +00:00
jens 9fd440e761 - Rbm::Status: don't touch err_total until it's computed
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@585 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-26 06:28:35 +00:00
jens 28bbff0b45 Rbm:🚋 better status indication
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@584 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-26 06:26:02 +00:00
jens d16f0de8fa - rename Layer into RbmLayer
- add some log info on toJson()

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@582 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-26 06:07:13 +00:00
jens 0760d08516 [Rbm]
- added JSON
- refactored


git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@574 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-25 16:01:55 +00:00
jens 0e544c1afc - changed parameter order of train()
git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@571 b431acfa-c32f-4a4a-93f1-934dc6c82436
2019-10-24 18:54:40 +00:00