Understanding convolutional neural networks