深度学习
深度学习是机器学习的分支,也就是神经网络,为什么称之为”深度“?因为有很多连接在一起的神经层!
前馈网络
Feedforward Networks 也叫Multilayer Perceptrons(多层感知机),大致的结构如下图所示
其中,每一个节点都可以看做是一个函数,将上一层传过来的输入信息做线性变换,再经过一个激活函数输出给下一层,如下图所示
对于最后的输出层,我们可以根据任务的种类来选择激活函数,如二分类任务中我们使用sigmoid函数(也就是logistic函数),多分类任务中使用softmax函数(得到的值都在0-1之间,看做概率)。
Word Embedding
在NLP的深度学习中,现在最流行的表示词的方法就是Word Embedding,它将词map成(一般较低纬度的)向量的形式,而这些向量的背后也是具有含义的,比如猫和狗的向量表示会比猫和石头来的接近(cosine距离)。那么要怎么得到词的Word Embedding呢?也是可以用神经网络来训练得到(其实就是神经层的weights)。在后面的例子中可以看到具体是怎么实现的。
训练
模型的输入可以是one-hot,也可以是词袋,词向量,或者TF-IDF之类的表示,训练过程其实就是参数的学习过程,通过最大化概率\(L = \prod_{i=0}^mP(y_i|x_i)\),或者最小化\(-logL\)来训练,这里就需要用到梯度下降的方法,具体不再展开,实际中都是学习框架完成的,如TensorFlow,pytorch等。
有兴趣的可以在我的github上查看简单的示例。
优缺点
优点:
‣ Robust to word variation, typos, etc
‣ Excellent generalization
‣ Flexible — customised architecture for different tasks
缺点:
‣ Much slower than classical ML models... but GPU acceleration
‣ Lots of parameters due to vocabulary size
‣ Data hungry, not so good on tiny data sets
‣ Pre-training on big corpora helps