斯坦福CS224n NLP课程【四】——Word Window分类与神经网络
分类
直觉上的分类 在机器学习上 一般认为分类是逻辑回归问题,输入的x是固定的,只训练参数W也就是softmax的权值,然后给定输入x时输出y的概率
softmax详解
给定输入x时的输出为y的概率计算分成两步
使用第y行的w乘以向量x Wy.x代表了取出了矩阵w的第y行与x相乘
将这个向量输入到softmax中计算得到一个概率分布所有概率之和为1
背景:为什么使用 Cross entropy 尽可能最小化两个分布之间的KL分布 而参数正是softmax的值
(有关KL分布,请参考邱锡鹏的深度学习)
所以使用cross entropy 的loss function为
一般情况下会加上正则化,防止overfitting
一般机器学习的模型中,维数一般都比较小但是在深度学习中既要学习softmax也需要学习word vector 数据集很大 很可能导致overfitting
在学习优化之前,了解一下word vector 的更新内容 举例:当我们使用一个较小的数据集去测试,很容易发生overfitting 所以当只有很小的训练集时,不要训练word vector 相反如果有很大的数据集,训练word vector 的效果可能会更好
词窗口分类:单个词进行分类是很少的,大多数是理解其在上下文中的意思
实际的细节 对于词窗口分类 举例分为4个标签 人名 地名 组织 其他 假设窗口大小为2 拼接组成一个x窗口,这里的vector 为列向量 column vector 数学上使用 column vector比较方便
输入到softmax中 但是我们怎么更新word vector
就是进行求导 第一步仔细定义你的变量 定义变量的维度等等 第二步链式法则
tip 4 and tip 5 向反向传播迈向一步
tip 6 tip 7 tip 8
上几张ppt讲的就是有关loss function求导的问题
步骤合起来就是:
于是就可以更新词向量了:
另一方面,对W求偏导数,将所有参数的偏导数写到一起有:
对于矩阵运算 使用for循环更好点 速度上会更快些
softmax的作用很有限 只能给出边界 但是神经网络却可以做到更好
神经网络
一个神经元本质是一个二分类回归单元
一个神经网络=同时运行几个线性回归
矩阵运算对于一个神经网络层 W的行数是神经元的数量 列数为输入x的维度
非线性 f函数为什么他们需要
因为线性系统所有层等效于一层:
神经网络在词窗口分类更加有效 一个单层的神经网络 这里选择另一个更简单的分类器函数
在此之前 先了解一下前馈过程:最终使用测试在你求导之前先训练每个元素先前馈 然后后向进行求导
额外的层数 可以找到词与词之间的非线性关系
最大间距loss function 为了让正确的得分更高 错误的得分更低 并且是连续的 可以使用SGD
最大间距loss function原理 尽可能使得最近点之间的距离最大化
这实际上是将函数间隔转换为几何间隔,参考SVM:http://www.hankcs.com/ml/support-vector-machine.html#h3-3
如何进行优化:梯度下降加上链式法则
如何获取梯度 W的梯度和b的梯度
反向传播就是不断求导和使用链式法则
再次把上面的例子拿出来:
整个梯度为:
最后的两个公式其实是一样的