gradient-descent.ts 836 B

12345678910111213141516171819202122232425262728293031323334
  1. import { SingleVarFunction } from './functions'
  2. export interface Point {
  3. x: number
  4. y: number
  5. }
  6. export interface OneStepInfo {
  7. gradient: number
  8. deltaX: number
  9. resultPoint: Point
  10. }
  11. export class GradientDescent {
  12. private targetFunction: SingleVarFunction
  13. private currentPoint: Point = { x: 0, y: 0 }
  14. constructor(targetFunction: SingleVarFunction, initialPoint: Point) {
  15. this.targetFunction = targetFunction
  16. this.currentPoint = initialPoint
  17. }
  18. oneStep(learningRate: number): OneStepInfo {
  19. const x = this.currentPoint.x
  20. const gradient = this.targetFunction.df(x)
  21. const deltaX = -learningRate * gradient
  22. const resultX = x + deltaX
  23. const resultPoint = { x: resultX, y: this.targetFunction.f(resultX) }
  24. this.currentPoint = resultPoint
  25. return { gradient, deltaX, resultPoint }
  26. }
  27. }