The $\nabla$ is a symbol for the differentiation of a function $f: \mathbb{R}^n \to \mathbb{R}$ for some positive integer $n$. (The domain of $f$ can also be an open subset of $\mathbb{R}^n$.) Because the derivative of such an $f$ is another function which is defined on $\mathbb{R}^n$ and which maps into $\mathbb{R}^n$, this operator maps functions of type $\mathbb{R}^n \to \mathbb{R}$ to functions of type $\mathbb{R}^n \to \mathbb{R}^n$.
For $\mathbb{R}^n \to \mathbb{R}$ functions, that is, whose target set is a one-dimensional set, the derivative is also called gradient.
The way to compute such a derivative is to differentiate with respect to every variable of $f$, and put the results into successive coordinates of the result vector. In a point of the domain of $f$, say in $(x_1,x_2,\dots,x_n)\in\mathbb{R}^n$, the derivative is
$$(\partial_1 f(x_1,x_2,\dots,x_n),\partial_2 f(x_1,x_2,\dots,x_n),\dots,\partial_n f(x_1,x_2,\dots,x_n)).$$
Another way of writing this is
$$(\partial_{x_1} f(x_1,x_2,\dots,x_n), \partial_{x_2} f(x_1,x_2,\dots,x_n),\dots,\partial_{x_n} f(x_1,x_2,\dots,x_n)).$$
This derivative is denoted by $\nabla f(x_1,x_2,\dots,x_n)$. Just as in elementary calculus, it's also fine to denote the gradient by the prime: $f'(x_1,x_2,\dots,x_n)$. Like I said, to every $(x_1,x_2,\dots,x_n)$, it associates $n$ values. (But to use nabla, the function must go into $\mathbb{R}$, that is, into a one-dimensional space, whereas with prime, it can go anywhere.)
By realising that this is true for any such function $f$, people often drop $f(x_1,x_2,\dots,x_n)$ from the formulae above to succintly write what is now mainly a formal equality:
$$\nabla=(\partial_1,\partial_2,\dots,\partial_n)=(\partial_{x_1}, \partial_{x_2},\dots,\partial_{x_n}).$$
(I say formal because one doesn't normally talk about vectors of operators.)
$\nabla f(x_1,x_2,\dots,x_n)$ points in the direction where $f$ increases most steeply in $(x_1,x_2,\dots,x_n)$, and its length is the slope in that direction (the steeper the function, the greater the derivative). It's also true that the negative of $\nabla f(x_1,x_2,\dots,x_n)$, $-\nabla f(x_1,x_2,\dots,x_n)$ points in the direction where $f$ decreases most steeply in $(x_1,x_2,\dots,x_n)$. In your neural networks application, the optimisation algorithm always wants to go in the direction where the cost decreases the most. The algorithm doesn't see the cost globally, only in single points, it has to make a local decision, and going down the steepest slope is the best one can do.
If you want to know the directional derivative of $f$ in $(x_1,x_2,\dots,x_n)$ in the direction of $(v_1,v_2,\dots,v_n)$, then it happens to be
$$\nabla f(x_1,x_2,\dots,x_n)\cdot (v_1,v_2,\dots,v_n),$$
which is
$$\sum_{i=1}^n \partial_i f(x_1,x_2,\dots,x_n)\, v_i.$$
If, as customary, points of $\mathbb{R}^n$ are written as column vectors, then the gradient $\nabla f(x_1,x_2,\dots,x_n)$ is a row vector. Actually, the gradient is a linear operator in every point $(x_1,x_2,\dots,x_n)$. Linear operators can be identified with matrices, and this one is identified with a matrix of size $1\times n$. Computing the above directional derivative is a matrix‒vector multiplication, and this is why it's important to think of the gradient as a row, not a column vector.
How linear operators enter the picture is explained by the notion of the Fréchet derivative.