Skip to content

v0.8.0

Latest

Choose a tag to compare

@github-actions github-actions released this 21 Sep 21:20
· 224 commits to main since this release

GeometricMachineLearning v0.8.0

Diff since v0.7.0

This release closes a whole-package audit and finishes handing the traversal of a parameter set to
the packages that own the parameters. It deletes far more than it adds. The full record is in
CHANGELOG.md under [0.8.0].

Breaking Changes

  • Nine of the twelve type piracies are deleted, and three of them were on Base.
    +(::Float64, ::Tuple{Float64}), +(::Vector{Float64}, ::Tuple{Float64}) and isapprox on a
    (q, p) NamedTuple no longer change every Julia process that loads this package; the second
    was wrong on its own terms, returning a scalar and discarding every element but the first. The
    other six are the add! family on GeometricOptimizers' structured matrix types, which had no
    caller here. Aqua's piracies count goes from 12 to 3. A caller who wants the old ≈ writes
    a.q ≈ b.q && a.p ≈ b.p; for add!, reach GeometricOptimizers, which defines the identical
    set against its own generic.
  • PoissonTensor's Base.:* and Base.getindex no longer claim every argument type. The
    three array methods of * take StridedVector, StridedMatrix and StridedArray{T, 3}. A
    non-strided CPU matrix still gives the same answer through Julia's generic multiply, but loses
    the fast path; a non-strided 3-tensor is now a MethodError.
  • Thirty-two names under src/ had no user anywhere and are gone, and with them legacy/,
    src/backends/ and the whole train! subsystem. apply_toNT was Base.map and is deleted;
    _eltype is replaced by NeuralNetworkParameters.parameter_eltype; _add and add! leave the
    export list. Seven exported names that were defined nowhere — Device, CPUDevice,
    convert_to_dev, ResidualLayer, LinearSymplecticLayerP, LinearSymplecticLayerQ and
    timestep — are no longer exported.
  • SymplecticAttentionQ(M) and SymplecticAttentionP(M) default to symmetric = true. They
    defaulted to false while their docstrings said true. The keyword is now typed ::Bool.
  • VolumePreservingLowerLayer and VolumePreservingUpperLayer applied to a vector return a
    vector
    , not an n × 1 matrix. A caller who needs the old shape writes reshape(y, :, 1).

Bug Fixes

  • MatrixSoftmax no longer overflows to NaN on ordinary input.
  • A Float32 network stays Float32 through training, _norm and the optimizer cache.
  • The advertised GPU support works on a real device. Five architectures threw at construction, and
    PoissonTensor times a wrapped GPU array now has a path that does not scalar-index.
  • The four training losses' three-argument functor was a run-time ambiguity against
    AbstractNeuralNetworks' (::NetworkLoss)(::NeuralNetwork, input, output) rather than a call.
  • Four DataLoader constructors returned nothing on an unexpected keyword, and
    HRedSys.timespan truncated to Int.
  • Building the minibatch index set is linear again, and its return type is concrete.

New Features

  • PositionalEncoding, the sinusoidal encoding of Vaswani et al., as a documented, tested layer.
  • LagrangianNeuralNetwork is trainable through DataLoader + Batch + Optimizer.
  • SymplecticEulerLoss and VariationalMidpointLoss.
  • A GPUArraysCore package extension for PoissonTensor.

Dependencies

  • GeometricOptimizers = "0.8" (was "0.7"). 0.8 deletes assign_columns, so the three
    manifold layers draw their initial weight through orthonormal_columns rather than a host
    qr! — which is what lets them construct on a device.

Merged pull requests:

  • Normalise all sources to Unicode NFC (#259) (@michakraus)
  • Check every slice in the inverse pullback tests (#260) (@michakraus)
  • Regenerate the inverse kernels with CSE: 25.5 MB to 27 KB (#261) (@michakraus)
  • Include the tensor-inverse tests once, not twice (#262) (@michakraus)
  • Test the Float32 path of the tensor Cayley kernels (#263) (@michakraus)
  • Call default_parameters() in scripts/ (#264) (@michakraus)
  • Ignore the .h5 files generated by the scripts (#265) (@michakraus)
  • Add test/exports.jl export guard (#266) (@michakraus)
  • Delete scripts/loss/, a dead symbolic experiment (#267) (@michakraus)
  • Fix undefined names in reproduction scripts (#268) (@michakraus)
  • Guard every test file against being unreachable (#269) (@michakraus)
  • Delete the GPU and hardware test orphans (#270) (@michakraus)
  • Delete nine dead test orphans (#271) (@michakraus)
  • Delete six broken research scripts, and port plots.jl onto DataLoader/NeuralNetwork (#272) (@michakraus)
  • Convert two verification scripts into tests (#273) (@michakraus)
  • Correct the gradient structure rule from #273 and share its assertion helper (#274) (@michakraus)
  • Wire in two surviving test orphans (#275) (@michakraus)
  • Check the upscaling chain's symplecticity claim (#276) (@michakraus)
  • Bring CHANGELOG Open Issues up to date (#277) (@michakraus)
  • Retire the train! subsystem, porting its content first (#278) (@michakraus)
  • Restructure test/ by subject, add test/Project.toml (#279) (@michakraus)
  • Gate scripts/ in CI and restructure it in three (#280) (@michakraus)
  • Write the HNN tutorial's phase space section (#281) (@michakraus)
  • Close the defects the scripts gate found (#282) (@michakraus)
  • Make the documentation build green, and vectorise the logo (#283) (@michakraus)
  • Give the package an Aqua baseline (#284) (@michakraus)
  • Retire the legacy HNN tree, and keep what it had that the package did not (#285) (@michakraus)
  • Remove src/backends/: Lux is not an operational backend (#286) (@michakraus)
  • Give lnn_pendulum.jl a smoke size that costs less (#287) (@michakraus)
  • Bound Aqua below 0.8.17 in the test environment (#288) (@michakraus)
  • Cover sequence length 5 in the volume-preserving attention tests (#289) (@michakraus)
  • Drop seven superseded files from legacy/ (#290) (@michakraus)
  • Move the symplectic groundwork to GeometricOptimizers (#291) (@michakraus)
  • Fix five audit findings: NaN softmax, four ambiguous loss functors, a silent nothing from DataLoader, and HRedSys.timespan (#292) (@michakraus)
  • Add a positional encoding layer, and end legacy/ (#294) (@michakraus)
  • Keep a Float32 network Float32: training history, _norm, PoissonTensor defaults, the optimizer step size and two parameterlength counts (#295) (@michakraus)
  • Make PositionalEncoding trainable, and stop the keyword changing which inputs a Transformer takes (#296) (@michakraus)
  • Audit Part C: allocations, inference and the minibatch copies (#297) (@michakraus)
  • Lift the Aqua bound in the test environment (#298) (@michakraus)
  • Remove the dead code under src/, and gate the imports against their return (#299) (@michakraus)
  • Close the audit's piracy and ambiguity findings (Part D) (#300) (@michakraus)
  • Documentation, comments and naming: audit Part F (#301) (@michakraus)
  • Fix three docstring bullet typos the audit sweep missed (#302) (@michakraus)
  • Say what the GPU path actually does, and record the two things it does not (#303) (@michakraus)
  • Require GeometricOptimizers 0.8, closing B12 and B13 (#304) (@michakraus)
  • Say which seed the reduced-system measurement covers (#305) (@michakraus)