What is an artificial neural network?
An (artificial) neural network (NN) can be described at different levels of detail, but, essentially, an NN is a data structure (or model), which behaves like a function: that is, it can receive one or more inputs and it produces one or more outputs. 

Most of the NNs can be thought of as graph-like data structures that contain nodes which are connected by weighted edges, where some of the nodes are associated with the inputs and some of the nodes are associated with the outputs. The remaining nodes are often called "hidden nodes". However, there are NNs which might not be easily understood as a graph-like structure: for example, convolutional neural networks. 

The number of nodes and the connections between them defines the architecture of the NN and, intuitively, its "expressivity", that is, the number or type of functions it can approximate. Each node in an NN often computes a "function" of its inputs: for example, it could sum the inputs.

The weights of the edges connecting the nodes can change, during a "learning or training phase", so that the NN produces the desired outputs given certain inputs. For example, we can train an NN to "approximate" the function $f(x) = x$. Thus, an NN is often described as a "function  approximator". 

There are several algorithms that can be used to "train" an NN to approximate a desired (and often unknown) function. The most common one is based on an optimisation algorithm (like gradient descent) and the back-propagation algorithm. In order to approximate a function, an NN requires data, often in the form of pairs of inputs and outputs, $(x, y)$, where $x$ is the input and $y$ is the output of the function $f$ (that we want to approximate). Intuitively, after the learning phase, an NN that receives an input similar to $x$, denoted by $x'$, will then produce an output similar to $y$, $y'$.

There are a lot of tasks that can be thought of as functions. For example, the task of machine translation can be thought of as a function $f(x) = y$, where the input, $x$, is a sentence in one language (e.g. English) and the output, $y$, is a sentence in another language (e.g. Chinese). In this case, $f$ is unknown (to a lot of people), but an NN can still learn (from the data) an approximation of it. Therefore, NNs have wide applicability and are thus quite useful.