深度学习:前馈网络 Feedforward Networks

深度学习

深度学习是机器学习的分支,也就是神经网络,为什么称之为”深度“?因为有很多连接在一起的神经层!

前馈网络

Feedforward Networks 也叫Multilayer Perceptrons(多层感知机),大致的结构如下图所示

p1

其中,每一个节点都可以看做是一个函数,将上一层传过来的输入信息做线性变换,再经过一个激活函数输出给下一层,如下图所示

\[h_i = tanh(\sum_jw_{ij}x_j + b_i)\ \ w_{ij}表示权重weight,b_i表示偏差bias,tanh是一种激活函数 \]

p2

对于最后的输出层,我们可以根据任务的种类来选择激活函数,如二分类任务中我们使用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

posted @ 2020-06-20 17:03  MrDoghead  阅读(6803)  评论(0编辑  收藏  举报