The goal of using a gradient descent approach is minimizing a certain function; that is, to reach the lowest possible point on the curve of that function.
So imagine you are at the top of a mountain (or at any point on the hill for that matter) and you want to reach the bottom of the mountain. At each step, you choose a direction in which to move in order to reach the bottom of the mountain. Now, the fastest (think, optimal) way of reaching the bottom, is to always follow the steepest way down. This way, you can roll fast and will (in general) always be sure of reaching the bottom. This is the idea behind following the opposite direction of the gradient at each point, since this will be the direction of the steepest descent.
Now, of course, if you are hiking in the mountain, you can choose instead to walk in an arbitrary direction at each step, and hope that someday you will reach the bottom of the mountain. It may or may not work, but it definitely is not the optimal way of reaching the bottom. That's why, we do not use an arbitrary vector to update our parameters.