ChainedStep¶
Compose a sequence of gradient processing steps into a single update step.
This can be used to build either custom optimizers or to augment existing optimizer steps with additional steps (e.g. gradient clipping). IMPORTANT: note that, by convention, a full end-to-end optimizer step (e.g., as implemented by AdamStep) negates the gradient before returning it, yielding an additive weight update, so that it can be applied to weights using the Add node. Therefore, when you build a custom optimizer from raw gradient processing steps, you need to include a negation step (scale by -1) near or at the end of the chain so as to obtain a full end-to-end optimizer step that is swappable with other optimizers. If your chain includes one of the end-to-end steps (which already do the negation), however, this will not be necessary. The scaling typically happens last (usually implemented using ScalingStep, which additionally can also take a learning rate), unless you are also using a ConstraintStep, in which case that must be the last step in the chain. Tip: Almost all canonical end-to-end optimizers (those that are not described as chainable, e.g., AdamStep, RMSPropStep, etc.), consist of a core gradient scaling rule followed by optional additional steps such as weight decay, momentum, scaling by a learning rate (schedule), etc. and generally a negation. For some optimizers, the core rule is available as a separate node, but for others, it is not -- for these optimizers, you can generally obtain a step analogous to the core scaling rule by setting the learning rate to -1.0 and disabling all optional features of the optimizer (like momentum, weight decay, etc). This rule can then be combined with other steps in a sensible order and a final negation to form a customized optimizer. Version 0.2.0
Ports/Properties¶
gradients¶
Gradients to be transformed.
- verbose name: Gradients
- default value: None
- port type: DataPort
- value type: object (can be None)
- data direction: INOUT
weights¶
Optional current weights.
- verbose name: Weights
- default value: None
- port type: DataPort
- value type: object (can be None)
- data direction: IN
state¶
Explicit state of the node.
- verbose name: State
- default value: None
- port type: DataPort
- value type: object (can be None)
- data direction: INOUT
step1¶
Step 1.
- verbose name: Step1
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step2¶
Step 2.
- verbose name: Step2
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step3¶
Step 3.
- verbose name: Step3
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step4¶
Step 4.
- verbose name: Step4
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step5¶
Step 5.
- verbose name: Step5
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step6¶
Step 6.
- verbose name: Step6
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step7¶
Step 7.
- verbose name: Step7
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step8¶
Step 8.
- verbose name: Step8
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step9¶
Step 9.
- verbose name: Step9
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
step0¶
Step 0.
- verbose name: Step0
- default value: None
- port type: DataPort
- value type: BaseNode (can be None)
- data direction: IN
set_breakpoint¶
Set a breakpoint on this node. If this is enabled, your debugger (if one is attached) will trigger a breakpoint.
- verbose name: Set Breakpoint (Debug Only)
- default value: False
- port type: BoolPort
- value type: bool (can be None)
metadata¶
User-definable meta-data associated with the node. Usually reserved for technical purposes.
- verbose name: Metadata
- default value: {}
- port type: DictPort
- value type: dict (can be None)