input: Write a function to implement the Gradient Descent Algorithm in Python. The function should take in an array x, an array y, a learning rate (default value of 0.01), and the number of iterations (default value of 100). It should return the final values of the slope (m) and the intercept (b) after performing the gradient descent optimization.
  assert gradient_descent([1, 2, 3, 4], [2, 4, 6, 8])==(1.9999999999999956, 1.6975218598004397e-13)
output: def gradient_descent(x, y, learning_rate=0.01, num_iterations=100):
      m = 0
      b = 0
      n = len(x)
      
      for _ in range(num_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