input: Write a function to implement the Gradient Descent Algorithm in Python. The function should take inputs x and y as data points, learning_rate, and iterations, and return the final values of m and b after performing the gradient descent.
  assert gradient_descent(np.array([1,2,3,4,5]), np.array([5,7,9,11,13]), 0.01, 100) == (2.0000000000000018, 2.999999999999999)
  assert gradient_descent(np.array([1,2,3,4,5]), np.array([7,9,11,13,15]), 0.01, 100) == (2.0000000000000018, 4.999999999999999)
  assert gradient_descent(np.array([1,2,3,4,5]), np.array([6,8,10,12,14]), 0.01, 100) == (2.0000000000000018, 3.999999999999999)
output: def gradient_descent(x, y, learning_rate, iterations):
      m = 0
      b = 0
      n = len(x)
      for _ in range(iterations):
          y_pred = m * x + b
          dm = (-2/n) * sum(x * (y - y_pred))
          db = (-2/n) * sum(y - y_pred)
          m -= learning_rate * dm
          b -= learning_rate * db
      return m, b