Sha256: 0108a832f053d58482ecffe5d9f9045d113107e553981aadd53b62751babb50c

Contents?: true

Size: 742 Bytes

Versions: 1

Compression:

Stored size: 742 Bytes

Contents

# frozen_string_literal: true

module Micrograd
  class NullOp
    def backward(_anything) = nil
  end

  class AddOp < Struct.new(:x, :y)
    def backward(value)
      x.grad += value.grad
      y.grad += value.grad

      x.backward
      y.backward
    end
  end

  class MulOp < Struct.new(:x, :y)
    def backward(value)
      x.grad += y.data * value.grad
      y.grad += x.data * value.grad

      x.backward
      y.backward
    end
  end

  class TanhOp < Struct.new(:x)
    def backward(value)
      x.grad += (1 - value.data**2) * value.grad
      x.backward
    rescue
    end
  end

  class PowOp < Struct.new(:x, :n)
    def backward(value)
      x.grad += n * (x.data ** (n-1)) * value.grad

      x.backward
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
micrograd-0.1.0 lib/micrograd/op.rb