Inverse Design for Silicon Photonics: From Iterative Optimization Algorithms to Deep Neural Networks