Word Window 分类与神经网络

符号表示

  • x表示单词或者词向量。y表示词序列。

  

 

分类

  • 通常情况下,假设输入x是给定的,训练逻辑回归的权重w(只修改决策边界)。

 

Softmax

  将计算分为两步:

  • 第一步,用W的第y行乘以向量x,得到向量$f_y$
  • 然后将向量$f_y$输入到Softmax,得到一个概率分布。

 

交叉熵误差

  • 举例:假设有五个类别,正确的类别是第三个类别(标记为1)。理想的概率为p(c),通过softmax计算得到的概率为q(c)
  • 在这个例子中,p(c)是一个独热编码向量,所以非正确类别的求和项的值全部为0.
  • 最后交叉熵的结果是log(q),即softmax的计算结果。

  • $y_i$表示正确的类别,目标是最小化整个求和项,即最小化交叉熵

 

正则项

  • 逻辑回归中,加入正则项主要是为了令所有权值尽可能的小(接近0)。
  • 当有大量特征的时候,加入正则项可以尽可能地避免过拟合的情况。
  • x轴表示训练迭代次数或者其它。

 

传统机器学习中的优化

 

深度学习中的词向量

  • 词向量多,可能会出现过拟合的情况。

 

单词分类

  • 举例:将单词分类为消极或积极。训练集中包含TV和telly两个单词。测试集中有television这个单词。
  • 通过Word2vec或Glove算法进行训练,发现三个单词出现在相似的上下文中,所以它们在向量空间的位置非常接近。

  

  • 当我们对单词进行情感色彩分类时,结果发生了变化。但television依然在它原来的位置。

  

              进行情感色彩分类后的结果

  • 结果表明,使用深度学习在一个小型数据集上训练,可能会出现过拟合的结果,模型的泛化能力下降。所以在一个小型数据集上,除了将词向量初始化外,不需要做其他的操作。

 

Window classification

  • 举例:将大语料库中的每个单词进行四分类:人名,地点,组织以及其它。
  • 首先要将中心词进行分类,然后将以它为中心词的窗口作为一个词向量(词向量通常为一个列向量)。
  • 下图将Paris作为中心词,定义窗口长度为2(中心词左右各有2个单词)。x是一个d维向量,由5个单词组成。

窗口分类器

  • $\hat{y}$表示当前的正确类别。

 

更新词向量

  • 方法:求导。
  • 第一步:对符号进行定义并记住它们的维度。
  • 第二步:使用链式法则。
  • 第三步:注意$f_c$中的c有两种情况,c等于 正确类别 以及c等于 所有非正确类别。
  • 第四步:正确类别的$\hat{y}$需要减去1。
  • 第五步:为了更好地实现,将“减去1”这个步骤改为[$\hat{y}$-t]。同时将$\hat{y}$-t定义为δ

 

窗口向量梯度的维度

 

矩阵实现

代码

from numpy import random
N = 500 # 需要分类的窗口总数
d = 300 # 每个窗口的维度
C = 5 # 类别总数,一共有五个类别
W = random.rand(C,d)
wordvectors_list = [random.rand(d,1) for i in range(N)] # 每个词向量
wordvectors_one_matrix = random.rand(d,N) # 也可以将词向量全部放在一个矩阵里面

%timeit [W.dot(wordvectors_list[i]) for i in range(N)]
%timeit W.dot(wordvectors_one_matrix)

 

神经网络

对单个神经元的定义

矩阵表示形式

  • 偏置项b的维度与这一层的神经元数量相等。
  • W的行数是神经元的数量。W的列数是输入x的维度。

 

前向传播

 

损失函数 (Max-margin Objective)

  • 目标是为了让正确窗口的得分比较高,非正确窗口的得分较低。
  • s是正样本的得分,$s_c$是负样本的得分。

优化

 

  • $W_{ij}$求导,只需要考虑$\vec{a}$的第i个元素。

  

           

  • $b_i$求导

  

 

  • {1-s+$s_c$>0}为真,则等于1,否则为0.

 

posted @ 2023-07-14 19:50  Syki  阅读(31)  评论(0)    收藏  举报