Cameral cookbook
06 — Recipes
When: compose modes + sync + kit into behaviors
Where: go run ./06_recipes
Why: teacher, sleep, debate, memory, dream, concat
go run ./06_recipes
Exits non-zero if any proof fails (PASS / FAIL lines).
Live output
=== 06_recipes — prove composed behaviors ===
PASS teacher_student teacher frozen, student moved
PASS sleep_slot0 only cam0 Δ=0.00257/0
PASS sleep_slot1 only cam1 Δ=0/0.00249
PASS debate both move; debate loss 0.0121 vs coop 0.0110
PASS surprise_memory asleep Δ=0 awake Δ=0.00582
PASS dream_consolidate avg=0.0012 weights moved on replay
PASS cross_modal_concat feat=8 want 3+5=8
PASS cross_modal_trains cam0 moved under concat
all recipe proofs passed
Why these PASS lines prove it
| Proof | Assertion | Why |
|---|---|---|
| teacher_student | teacher frozen, student moved | Shadow + one-way sync |
| sleep_slot0/1 | alternating single-cam ΔW | Rotate schedule |
| debate | both move; debate loss ≥ coop | Adv + Disagree |
| surprise_memory | asleep vs awake ΔW | SurpriseThresh gate |
| dream_consolidate | replay moves weights | DreamBuffer |
| cross_modal_concat | feat=8=3+5; cam0 trains | Unequal cams need concat |
main.go
Download source ↓package main
import (
"fmt"
"github.com/openfluke/example/cam/internal/harness"
"github.com/openfluke/welvet/core"
"github.com/openfluke/welvet/layers/parallel"
)
func main() {
harness.Banner("06_recipes — prove composed behaviors")
x, y := harness.ToyXY(8, 4)
proveTeacher(x, y)
proveSleep(x, y)
proveDebate(x, y)
proveSurprise(x, y)
proveDream(x, y)
proveConcatCross()
fmt.Println("\nall recipe proofs passed")
}
func proveTeacher(x, y *core.Tensor[float32]) {
para, _ := harness.DenseTwin(8, 4, parallel.CombineAvg)
_ = harness.DivergeCams(para)
para.SetBranchModes(parallel.ModeNormalBP, parallel.ModeShadow)
para.SetCamKit(parallel.CamKit{ShadowCoef: 1})
para.SetCamSync(parallel.CamSyncConfig{
Enabled: true, Alpha: 0.5, When: parallel.SyncAfterSample,
BranchAlpha: []float64{1, 0},
})
t0 := harness.DenseWeights(para, 1)
s0 := harness.DenseWeights(para, 0)
_, _ = harness.TrainN(para, x, y, 20, 0.08)
harness.Requiref("teacher_student",
harness.WeightMaxDiff(t0, harness.DenseWeights(para, 1)) < 1e-7 &&
harness.WeightMaxDiff(s0, harness.DenseWeights(para, 0)) > 1e-4,
"teacher frozen, student moved")
}
func proveSleep(x, y *core.Tensor[float32]) {
para, _ := harness.DenseTwin(8, 4, parallel.CombineAvg)
_ = harness.DivergeCams(para)
para.SetRotateSchedule([][]parallel.TrainMode{
{parallel.ModeNormalBP, parallel.ModeFreeze},
{parallel.ModeFreeze, parallel.ModeNormalBP},
}, 5)
w0, w1 := harness.DenseWeights(para, 0), harness.DenseWeights(para, 1)
_, _ = harness.TrainN(para, x, y, 5, 0.1)
d0, d1 := harness.WeightMaxDiff(w0, harness.DenseWeights(para, 0)), harness.WeightMaxDiff(w1, harness.DenseWeights(para, 1))
harness.Requiref("sleep_slot0", d0 > 1e-4 && d1 < 1e-7, "only cam0 Δ=%.3g/%.3g", d0, d1)
w0, w1 = harness.DenseWeights(para, 0), harness.DenseWeights(para, 1)
_, _ = harness.TrainN(para, x, y, 5, 0.1)
d0, d1 = harness.WeightMaxDiff(w0, harness.DenseWeights(para, 0)), harness.WeightMaxDiff(w1, harness.DenseWeights(para, 1))
harness.Requiref("sleep_slot1", d0 < 1e-7 && d1 > 1e-4, "only cam1 Δ=%.3g/%.3g", d0, d1)
}
func proveDebate(x, y *core.Tensor[float32]) {
lossBP := func() float64 {
p, _ := harness.DenseTwin(8, 4, parallel.CombineDisagree)
_ = harness.DivergeCams(p)
p.Cfg.DisagreeBeta = 0.75
p.SetBranchModes(parallel.ModeNormalBP, parallel.ModeNormalBP)
l, _ := harness.TrainN(p, x, y, 25, 0.06)
return l
}()
para, _ := harness.DenseTwin(8, 4, parallel.CombineDisagree)
para.Cfg.DisagreeBeta = 0.75
_ = harness.DivergeCams(para)
para.SetBranchModes(parallel.ModeNormalBP, parallel.ModeAdversarial)
w0, w1 := harness.DenseWeights(para, 0), harness.DenseWeights(para, 1)
loss, _ := harness.TrainN(para, x, y, 25, 0.06)
d0 := harness.WeightMaxDiff(w0, harness.DenseWeights(para, 0))
d1 := harness.WeightMaxDiff(w1, harness.DenseWeights(para, 1))
harness.Requiref("debate", d0 > 1e-4 && d1 > 1e-4 && loss >= lossBP*0.9,
"both move; debate loss %.4f vs coop %.4f", loss, lossBP)
}
func proveSurprise(x, y *core.Tensor[float32]) {
asleep := func() float64 {
p, _ := harness.DenseTwin(8, 4, parallel.CombineAvg)
_ = harness.DivergeCams(p)
p.SetBranchModes(parallel.ModeNormalBP, parallel.ModeMemory)
p.SetCamKit(parallel.CamKit{SurpriseThresh: 1e9})
w := harness.DenseWeights(p, 1)
_, _ = harness.TrainN(p, x, y, 12, 0.1)
return harness.WeightMaxDiff(w, harness.DenseWeights(p, 1))
}()
awake := func() float64 {
p, _ := harness.DenseTwin(8, 4, parallel.CombineAvg)
_ = harness.DivergeCams(p)
p.SetBranchModes(parallel.ModeNormalBP, parallel.ModeMemory)
p.SetCamKit(parallel.CamKit{SurpriseThresh: 1e-12})
w := harness.DenseWeights(p, 1)
_, _ = harness.TrainN(p, x, y, 12, 0.1)
return harness.WeightMaxDiff(w, harness.DenseWeights(p, 1))
}()
harness.Requiref("surprise_memory", asleep < 1e-7 && awake > 1e-4,
"asleep Δ=%.4g awake Δ=%.4g", asleep, awake)
}
func proveDream(x, y *core.Tensor[float32]) {
para, _ := harness.DenseTwin(8, 4, parallel.CombineAvg)
_ = harness.DivergeCams(para)
para.SetBranchModes(parallel.ModeNormalBP, parallel.ModeFreeze)
para.SetCamKit(parallel.CamKit{Dream: ¶llel.DreamBuffer{Cap: 64}})
_, _ = harness.TrainN(para, x, y, 10, 0.08)
w := harness.DenseWeights(para, 0)
avg, err := para.DreamPulse(5, parallel.ModeNormalBP, 0.05)
harness.Requiref("dream_consolidate", err == nil && avg > 0 &&
harness.WeightMaxDiff(w, harness.DenseWeights(para, 0)) > 1e-5,
"avg=%.4f weights moved on replay", avg)
}
func proveConcatCross() {
dA := harness.MustDense(8, 3)
dB := harness.MustDense(8, 5)
mix, err := harness.FromBranches(8, parallel.CombineConcat, dA, dB)
if err != nil {
panic(err)
}
mix.SetBranchModes(parallel.ModeNormalBP, parallel.ModeTween)
x, _ := harness.ToyXY(8, 8)
_, post, err := parallel.Forward(mix, x)
if err != nil {
panic(err)
}
harness.Requiref("cross_modal_concat", post.Shape[1] == 8, "feat=%d want 3+5=8", post.Shape[1])
y := core.NewTensor[float32](1, 8)
for i := range y.Data {
y.Data[i] = 0.4
}
wA, _ := dA.Weights.MasterF32()
before := append([]float32(nil), wA...)
_, _ = harness.TrainN(mix, x, y, 15, 0.08)
wA2, _ := dA.Weights.MasterF32()
harness.Requiref("cross_modal_trains", harness.WeightMaxDiff(before, wA2) > 1e-5, "cam0 moved under concat")
}