input: Write a function to implement the Gradient Descent Algorithm in Python that takes in two lists x and y representing the input features and output labels respectively, a learning rate, and the number of iterations. The function should return the final values of the slope m and the intercept b after performing gradient descent.
  
  assert gradient_descent([1,2,3,4,5],[2,4,6,8,10], 0.01, 100) == (2.0, 0.0)
  assert gradient_descent([1,2,3,4,5],[1,2,3,4,5], 0.01, 100) == (1.0, 0.0)
  assert gradient_descent([1,2,3,4,5],[3,6,9,12,15], 0.01, 100) == (3.0, 0.0)
output: def gradient_descent(x, y, learning_rate, num_iterations):
      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