60 void AddLayer(
size_t size,
size_t nextSize,
size_t terminalSize,
float lr,
float ir,
float fl,
70 useMuPCScaling = enabled;
82 useResidualConnections = enabled;
92 void Clamp(const std::vector<
float>& input);
110 float Step(
bool computeEnergy = true) noexcept;
117 for (
auto& layer : layers)
118 layer->SetOptimizer(o);
123 for (
auto& layer : layers)
124 layer->SetPsiOptimizer(o);
129 for (
auto& layer : layers)
130 layer->SetLearningRate(lr);
135 for (
auto& layer : layers)
136 layer->SetFeedbackRate(fl);
142 return layers.back().get();
145 std::vector<std::unique_ptr<FullPCLayer>>&
GetLayers() noexcept
150 const std::vector<std::unique_ptr<FullPCLayer>>&
GetLayers() const noexcept
171 float TrainStep(
const std::vector<float>& x,
const std::vector<float>& y,
int inferenceSteps = 1);
175 std::vector<float>
Predict(
const std::vector<float>& x,
int inferenceSteps);
202 for (
auto& layer : layers)
203 layer->SetMomentum(enabled, beta);
217 std::vector<std::unique_ptr<FullPCLayer>> layers;
219 std::unique_ptr<IComputeBackend> backend;
222 std::unique_ptr<MemoryArena> cpuArena;
223#if defined(DEEPITY_USE_CUDA)
224 std::unique_ptr<DeviceMemoryArena> gpuArena;
230 bool useMuPCScaling =
false;
231 bool useResidualConnections =
false;
233 bool graphCaptured =
false;
234 int capturedInferenceSteps = -1;
A 64-byte-aligned bump-pointer allocator over a single device buffer, mirroring this codebase's host-...
New, standalone PC layer (not derived from DirectKPPCLayer) meant to eventually carry every technique...
A 64-byte-aligned bump-pointer allocator over a single heap-allocated block, used to pack every layer...
PC layer combining muPC scaling, optional residual connections, and DKP direct feedback – every extra...
Definition FullPCLayer.h:44
void SetCrossEntropy(bool enabled) noexcept
Enables softmax cross-entropy energy for THIS layer's error against layerBelow's mu (i....
Definition FullPCLayer.h:208
void SetOptimizer(OptimizerType o) noexcept
Sets the weight optimizer (W) on every layer.
Definition FullPCNetwork.h:115
FullPCNetwork(const FullPCNetwork &)=delete
void UpdateWeights() noexcept
Applies weight updates to every layer.
Definition FullPCNetwork.cpp:88
float Step(bool computeEnergy=true) noexcept
Runs one settling step on every layer.
Definition FullPCNetwork.cpp:78
int GetBatchSize() const noexcept
Returns the batch size given at construction.
Definition FullPCNetwork.h:155
void SetUseMomentum(bool enabled, float beta=0.9f) noexcept
Enables momentum (inertial) settling on every layer. Loops over layers and calls each one's own SetMo...
Definition FullPCNetwork.h:200
void Compile()
Loads all layers into one contiguous block of memory, wires layerAbove/layerBelow/terminalLayer acros...
Definition FullPCNetwork.cpp:194
float TrainStep(const std::vector< float > &x, const std::vector< float > &y, int inferenceSteps=1)
Full train step: reset, clamp input+target, run all four DKP-PC phases in order, unclamp.
Definition FullPCNetwork.cpp:94
void DirectFeedbackUpdate() noexcept
Runs the DFA phase on every non-terminal layer: perturbs each layer's W using the layer above's Psi a...
Definition FullPCNetwork.cpp:67
void SetUseCrossEntropy(bool enabled) noexcept
Enables softmax cross-entropy energy on the TERMINAL layer only (unlike the other Set* toggles,...
Definition FullPCNetwork.h:211
void AddLayer(size_t size, size_t nextSize, size_t terminalSize, float lr, float ir, float fl, float lmbda, ActivationType aType, ActivationType dType)
Adds a layer to the network.
Definition FullPCNetwork.cpp:18
void ResetState() noexcept
Resets each layer's state without touching learned weights.
Definition FullPCNetwork.cpp:39
void SetPsiOptimizer(OptimizerType o) noexcept
Sets the feedback-weight optimizer (Psi) on every layer.
Definition FullPCNetwork.h:121
void SetFeedbackRate(float fl) noexcept
Sets the feedback rate (Psi) on every layer.
Definition FullPCNetwork.h:133
void SetUseMuPCScaling(bool enabled) noexcept
Enables muPC-style per-layer forward scaling (Table 1 of the muPC paper). OFF by default....
Definition FullPCNetwork.h:68
void SetUseIPC(bool enabled) noexcept
Enables iPC: UpdateWeights() runs every settling step instead of once after settling completes....
Definition FullPCNetwork.h:192
void RandomizeWeights(std::mt19937 &rng)
Randomizes the weights (W and Psi) of each layer.
Definition FullPCNetwork.cpp:33
void ProjectForward() noexcept
Seeds hidden layers from a genuine forward pass through current weights, instead of zero-init....
Definition FullPCNetwork.cpp:50
const std::vector< std::unique_ptr< FullPCLayer > > & GetLayers() const noexcept
const overload of GetLayers() above.
Definition FullPCNetwork.h:150
FullPCLayer * GetTerminalLayer() noexcept
Returns the last layer (nextSize==0, the terminal one).
Definition FullPCNetwork.h:140
float CalculateTerminalError() noexcept
Computes the terminal layer's error/energy against its clamped target. Call AFTER clamping the target...
Definition FullPCNetwork.cpp:73
std::vector< float > Predict(const std::vector< float > &x, int inferenceSteps)
Forward prediction: clamp input, settle with no DFA perturbation and no target clamped,...
Definition FullPCNetwork.cpp:167
std::vector< std::unique_ptr< FullPCLayer > > & GetLayers() noexcept
Returns every layer in the network, in the order they were added.
Definition FullPCNetwork.h:145
void Clamp(const std::vector< float > &input)
Clamps the input to the first layer.
Definition FullPCNetwork.cpp:45
DeviceType GetDevice() const noexcept
Returns which device this network's layers run on.
Definition FullPCNetwork.h:160
FullPCNetwork(int batchSize, DeviceType device=DeviceType::DEVICE_CPU) noexcept
Constructs an empty network; add layers via AddLayer(), then Compile() before use.
Definition FullPCNetwork.cpp:11
void SetLearningRate(float lr) noexcept
Sets the learning rate (W) on every layer.
Definition FullPCNetwork.h:127
void SetUseResidualConnections(bool enabled) noexcept
Enables residual/skip connections on middle hidden layers (muPC's "1-skip" ResNet formulation – see t...
Definition FullPCNetwork.h:80
FullPCNetwork & operator=(const FullPCNetwork &)=delete
This file exists to provide both Tensor.h and IComputeBackend.h with device types without introducing...
Definition Backend.cpp:10
ActivationType
Identifies an activation function or its derivative, for dispatch tables and layer/backend APIs that ...
Definition ActivationType.h:25
OptimizerType
Selects which weight-update rule a layer applies during UpdateWeights().
Definition AdamOptimizer.h:52
DeviceType
Which physical device a Tensor/IComputeBackend pair runs on.
Definition DeviceType.h:8
@ DEVICE_CPU
Definition DeviceType.h:9