Implement Group convolution / Depthwise convolution
Group convolution/depthwise convolution, explanation [here](https://blog.yani.io/filter-group-tutorial/) improves greatly the efficiency of Convnets. In the examples from the blog post, number of parameters is divided by 2 or 3 while having better or keeping the same accuracy.

Due to convolution being O(n^3 ) This means that we can achieve **speed-up of 8x to 27x** compared to simple convolution

![image](https://user-images.githubusercontent.com/22738317/32132612-f5294242-bbc6-11e7-9406-3419a2e504cf.png)

![image](https://user-images.githubusercontent.com/22738317/32132614-072ba264-bbc7-11e7-9acf-b2c3c38cc41e.png)

Important: CuDNN v7 implements grouped convolution

## Neural nets that use grouped convolution:
- AlexNet (variation)
- MobileNet
- ResNext
- ShuffleNet
- Xception
- QuickNet

## Resources:
- [ShuffleNet and Shuffled Group convolution](https://ikhlestov.github.io/pages/machine-learning/convolutions-types/).
- Caffe issue https://github.com/BVLC/caffe/issues/778, and [fork with Spatial Conv](https://github.com/yihui-he/caffe-pro)
- Theano issue https://github.com/Theano/Theano/issues/5621 and 3 PRs
- PyTorch issue https://github.com/pytorch/pytorch/issues/1708 with GPU PR
- conv2d_depthwise in PyTorch: https://github.com/szagoruyko/pyinn

In-depth research by ibmua: 20x faster than CuDNN 5.1 with Grouped convolution
- Torch thread: https://github.com/soumith/cudnn.torch/issues/98
- Neon thread: https://github.com/NervanaSystems/neon/issues/296

## Papers
- [AlexNet, Krizhevsky et al](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf) and One weird trick to parallelize CNN [[1404.5997]](https://arxiv.org/pdf/1404.5997.pdf)
- Deep Roots: Improving CNN efficiency with Hierarchical Filter Groups, Ioannou et al [[1605.06489]](https://arxiv.org/abs/1605.06489)
- Convolution with logarithmic filter groups for Efficient Shallow CNN, Tae Lee et al [[1707.09855]](https://arxiv.org/pdf/1707.09855)
- ShuffleNet: An extremely efficient Convolution Neural Network for Mobile Devices, Zhang et al [[1707.01083]](https://arxiv.org/abs/1707.01083)
- Aggregated Residual Transformations for Deep Neural Networks, Xie et al [[1611.05431]](https://arxiv.org/pdf/1611.05431.pdf) (ResNext)
- Xception: Deep Learning with depthwise separable convolution, Chollet [[1610.02357]](https://arxiv.org/pdf/1610.02357.pdf)
- Depthwise Separable Convolutions for Neural Machine Translation, Kaiser et al [[1706.03059]](https://arxiv.org/pdf/1706.03059.pdf)
- Design of Efficient Convolutional Layers using Single Intra-channel Convolution, Topological Subdivisioning and Spatial "Bottleneck" Structure, Wang et al [[1608,04337]](https://arxiv.org/pdf/1608.04337.pdf)
- MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, Howard et al [[1704.04861]](https://arxiv.org/pdf/1704.04861)
- QuickNet: Maximizing Efficiency and Efficacy in Deep Architectures, Ghosh [[1701.02291]](https://arxiv.org/pdf/1701.02291)
