深度学习·神经网络·计算机视觉Python建模与NLPMachine Learning & Recommendation & NLP & DL

斯坦福CS224n笔记系列4--Word Window分类与神经

2018-11-08  本文已影响1人  b424191ea349

1. Classification background


1.1 Classification setup and notation

首先给定训练集\{x_{(i)},y_{(i)}\}_{i=1}^N

实际上这个训练集很常见,比如现在有这样一组数据,是一个键值对类型{猫:1},{狗:2},{小猫:1},所以这个训练集就是我们日常生活中已经分类好的数据(可能进行部分数据清洗)。

2. Updating word vectors for classification


2.1 Classification intuition

一个简单图解的示例:

传统的机器学习是:假定x被确定,通过逻辑回归等去确定权重,然后去修改决策的边界。
目标是预测每个x出现的概率。
p(y_j = 1|x) = \frac{\exp(W_{j\cdot}x)}{\sum_{c=1}^C\exp(W_{c\cdot}x)}

问题一:softmax是逻辑回归吗?
首先softmax是逻辑回归,传统的逻辑回归是指处理二分类问题,softmax正是逻辑回归推广到多分类问题的一种形式。
可以参考这个帖子:Logistic and Softmax Regression (逻辑回归和Softmax回归)

问题二:公式里面的W是哪来的?为什么和原公式不一样?
原公式是:
p=\frac{e^{y_j}}{\sum_i e^{y_i}}
但是在我们之前讲过的单层神经网络中,有:
y_i=W_ix
其中W_i是权重矩阵中的一行,然后和x这个ont-hot单列矩阵(也可能不是ont-hot向量)相乘,最后得到y

2.2 Details of the softmax

上述是一个softmax 函数,我们可以从两个部分来梳理一下:

2.3 The softmax and cross-entropy error

note:此处error翻译成误差
对于每一个数据集,我们的目标就是最大化预测的y正确的概率。
因此,我们最小化概率的负对数,也就是下面这个公式:
-\log \bigg(\frac{\exp(W_{k\cdot}x)}{\sum_{c=1}^C\exp(W_{c\cdot}x)}\bigg)

note:所以对于整个训练集来讲,我们要最大化所有的y预测正确的概率,也就是最小化所有y对应的负对数,所有负对数之和就可以作为一个损失函数。

Background: Why “Cross entropy” error ?
首先我们假设有一个真实的概率分布,其中用one-hot向量来表示,假设有一个词为p = [0,…,0,1,0,…0],但是我们计算的出来的向量可能为q(也就是我们的预测值),那么我们的交叉熵公式就是:


交叉熵可以被写成:

note:这其中的H(P)实际上公式是:
H(P)=\sum_{c=1}^Cp(c)\log \frac{1}{p(c)}
我们可以看到,这个H(P)实际上就是我们所说的,信息熵D_{KL}(p||q)实际上就是我们所说的相对熵交叉熵=信息熵+相对熵。

由于Hp常常是一个常数,那么由上面这个公式我们可以知道,最小化交叉熵,实际上就是最小化D_{KL}
D_{KL}并不是一个距离,而是对两个概率分布(p和q)之差的非对称度量。

再一个完整的数据集上的分类,交叉熵的损失函数一般是:


note:这就是刚刚所说的,所有负对数之和作为损失函数,当然,需要除以一个N,来平均化。

而不是:


问题一:为什么不是上面这个函数作为损失函数?
上面这个函数实际上求出的是某个预测的具体的值,是我们要最大化的值,一方面他没有经过softmax函数归一化处理,另一方面,损失函数我们经常希望的是去求最小值,这也符合损失函数的定义,即让损失(代价)最小。

真正的正则化方程应当是:


问题二:我们为什么要正则化?
如下所说,正则化可以帮助我们防止过拟合
问题三:为什么正则化可以帮助我们防止过拟合?上面公式加上的那一坨又是什么意思呢?
关于正则化的原理解释推荐,可以参考知乎上的回答机器学习中常常提到的正则化到底是什么意思?
那么根据这个回答,我们可以看出来我们的公式中的后面加上的那一坨实际上就是权重矩阵W2-范数,当然实际的2-范数形式应当是:r(d)=\frac{\lambda}{2}\sqrt{\sum w_i^2},but any way,并不太影响,不是嘛。

正则化可以帮助我们防止过拟合(预测太贴近training data了,而不符合test data)。
下面是一张过拟合的图片,蓝色的表示再training data上的误差,红色表示再test data上的误差,横轴是模型复杂度或迭代次数。直线是方差偏差均衡点:


正则化同时也可以泛化方程,使得得出的方程更加的平滑,更具有返回能力。

在一般的机器学习中,\theta通常由W组成,


一般的ML问题中,参数由权值矩阵的列组成维度不会太大。而在词向量或其他深度学习中,需要同时学习权值矩阵和词向量。参数一多(特征,也就是权重矩阵w的行数),就容易过拟合:

所以我们更新决策边界只需要求梯度即可:


2.4 Losing generalization by re-training word vectors

比如有一个给单词做情感分析的小任务,在预训练的词向量中,这三个表示电视的单词都是在一起的:


但是由于训练集中只含有TVtelly,导致re-trainning之后,两者跑到别处去了。

这个例子说明,如果任务的语料非常小,则不必在任务语料上重新训练词向量,否则会导致过拟合。

2.5 Side note on word vectors notation

顺便介绍一下词向量的相关术语,词向量矩阵L被称作lookup table



Word vectors = word embeddings = word representations (mostly)

可能有些人认为“词向量”是个很俗的翻译,但根据这门课的课件,其实与“词嵌入”是等价的。而且Rocher也几乎是一直在用word vector,而不是其他术语。

3. Window classification & cross entropy error derivation tips


3.1 Window classification

这是一种从上下文给单个单词分类的任务,可以用于消除歧义和命名实体的分类。上下文Window的向量可以通过拼接所有窗口中的词向量得到。



这是一个



的列向量。
3.2 最简单的分类器:softmax

note:通过上面一系列详细的推导,到这里来看这上面的两个式子就很清晰了。

J对x进行求导,注意,这里的x指的是窗口所有单词的词向量拼接的向量。


问题一:softmax函数的交叉熵如何求导?
求导详细过程,参考知乎softmax函数详细求导过程简单易懂的softmax交叉熵损失函数求导
那么对于上式中:


如何变成下面这一步:

问题二:这个公式怎么继续往下推导?能够举个例子说明下?

然后就可以更新词向量了,


另一方面,对W求偏导数,将所有的参数的偏导数写到一起有:

在更新的过程中,计算代价最高的有矩阵运算,
3.4 使用神经网络

神经网络可以提供非线性的决策边界:


4. A single layer neural network!


4.1 从逻辑回归到神经网络

首先我们看一个神经元节点图:



可以按得到每个神经元是一个二分类的逻辑回归单元,有三个输入,一个偏差b,然后经过一个激活函数,最后到到一个输出。
通过下图,我们可以知道,他们都是怎么计算的:


上面是神经网络的计算数学公式。
神经网络可以同时运行多个逻辑回归,但不需要提前制定他们具体预测什么:



我们把预测的结果,喂给下一层的逻辑单元,由损失函数自动决定他们预测什么。



于是,我们可以得到一个多层网络:

4.2 为什么需要非线性?

很多时候,我们发现我们回去加一些激活函数去处理每个逻辑单元的结果,将其变成一个非线性的单元,那么这是为什么呢?
因为如果都是线性模型的话,那么实际上所有层都等同于一层,因为:
W_1W_2x=Wx
因为非线性模型可以捕捉很复杂的数据

4.3 前向传播网络

一个简单的网络:



这种红点图,经常在论文中出现,大致代表单元数,中间的空格分隔开一组神经元,比如上图的隐藏层单元数为:2 X 4。U是隐藏层到class权值矩阵:



其中a是激活函数:

5. Max-Margin loss and backprop


5.1 间隔最大化目标函数

怎么设计目标函数呢?
S_c代表误分类样本的得分,s表示正确分类样本的得分,则朴素的思路是我们最大化s - s_c或最小化s_c - s。但有种方法只计算s_c > s => s_c - s > 0时的错误,也就是说我们只要求正确分类的得分高于错误分类的得分即可,并不要求分类分的多么多么小。这得到间隔最大化目标函数:
minJ=max(s_x-s, 0)
但这样目标函数的得分要求太低,风险太大了,没有留出足够的缓冲区域,可以指定该间隔的宽度(s-s_c)<\Delta 得到:
min J=max(\Delta+s_c-s, 0)
可以调整其他参数,使得该间隔为1:
minJ=max(1+s_c-s, 0)
这个实际上是将函数,转化成集合间隔。
在这个分类问题上,这两个得分的计算方式为:s_c=U^Tf(Wx_c+b)s=U^Tf(Wx+b),通常通过负采样算法,来得到负例。
另外,这个目标函数的好处是,随着训练的进行,可以忽略越来越多的实例,而只专注于那些难分类的实例。
最大间距损失函数实际上就是SVM的原理。

5.2 反向传播

反向传播实际上就是链式求导,跳过推导过程直接求导,可得:


其中 \delta^(k) 是第k层的误差,
\delta^{(k)}=f'(z^{(k)})\dot(W^{(k)T}\delta^{(K+1)})

可见,只要控制误差的计算方式,就可以平滑的过渡到间隔最大化目标函数。

6. 总结

这一章主要讲了分类问题,其中讲了两种分类:

在这一章中还讲了两种对损失函数的处理方法:

所以在本章中重点实际上是神经网络的分类方法,以及在神经网络中如何进行前向传播后向传播等。

END

参考

CS224n笔记4 Word Window分类与神经网络

上一篇 下一篇

猜你喜欢

热点阅读