Edge Caching for Small Cell Networks