深度学习NLP笔记(四):Word Window 分类与神经网络

本文介绍了Word Window分类在自然语言处理中的应用,结合神经网络和softmax函数,探讨了分类问题、损失函数、正则化以及前向传播和反向传播的过程。讨论了如何利用神经网络构建非线性决策边界,并通过实例解释了前向传播和反向传播的计算步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近要开题了,可能无法及时更新(反正也没人看╮(╯▽╰)╭

分类问题

首先给定数据集{x(i),y(i)}i=1N\left \{ x_{(i)},y_{(i)} \right \}_{i=1}^{N}{x(i),y(i)}i=1N
x(i)x_{(i)}x(i)为样本数据,y(i)y_{(i)}y(i)为对应的标签。
一般的分类问题的解决方案是找到一个决策平面,如经典的SVM算法。如图所示:
在这里插入图片描述
softmax函数
公式为
p(yj=1∣x)=exp(Wj⋅x)∑c=1Cexp(Wc⋅x)p(y_{j}=1|x)=\frac{exp(W_{j} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)}p(yj=1x)=c=1Cexp(Wcx)exp(Wjx)
简单讲就是将输出通过softmax函数转化为概率形式。
使用交叉熵损失函数,计算一个样本xxx的损失函数:
−∑j=1Cyilog(p(yj=1∣x))=−∑j=1Cyilog(exp(Wj⋅x)∑c=1Cexp(Wc⋅x))-\sum_{j=1}^{C}y_{i}log(p(y_{j}=1|x))=-\sum_{j=1}^{C}y_{i} log\left ( \frac{exp(W_{j} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)} \right )j=1Cyilog(p(yj=1x))=j=1Cyilog(c=1Cexp(Wcx)exp(Wjx))
由于类别是one-hot编码,yiy_{i}yi仅在一个位置上为1,其余全为0,因此损失函数可以简化得:−log(exp(Wk⋅x)∑c=1Cexp(Wc⋅x)) -log\left ( \frac{exp(W_{k} \cdot x)}{\sum_{c=1}^{C} exp(W_{c} \cdot x)} \right )log(c=1Cexp(Wcx)exp(Wkx))
扩展为N个样本:−∑i=NClog(exp(Wk(i)⋅x(i))∑c=1Cexp(Wc⋅x(i)))-\sum_{i=N}^{C}log\left ( \frac{exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C} exp(W_{c} \cdot x^{(i)})} \right )i=NClog(c=1Cexp(Wcx(i))exp(Wk(i)x(i)))
在词向量学习中,需要同时学习权值矩阵和词向量,假设一个词向量为ddd维,类别数目为CCC,因此需要C⋅dC \cdot dCd个权值参数,假设需要更新∣V∣\left | V \right |V个词向量,那么总共的参数数目就是C⋅d+∣V∣⋅dC\cdot d+\left | V \right |\cdot dCd+Vd,参数数目过多容易导致过拟合,为了避免过拟合,可以引入正则项。
在这里插入图片描述

下图中,红线是test error,蓝线是training error,横轴是模型复杂度或迭代次数。直线是方差偏差均衡点。灰色虚线之后红线开始上升就说明模型开始过拟合了。
在这里插入图片描述
加上正则项:−∑i=NClog(exp(Wk(i)⋅x(i))∑c=1Cexp(Wc⋅x(i)))+λ∑k=1C⋅d+∣V∣⋅dθk=12-\sum_{i=N}^{C}log\left ( \frac{exp(W_{k(i)} \cdot x^{(i)})}{\sum_{c=1}^{C} exp(W_{c} \cdot x^{(i)})} \right ) + \lambda \sum_{k=1}^{C\cdot d+\left | V \right |\cdot d}\theta _{k=1}^{2}i=NClog(c=1Cexp(Wcx(i))exp(Wk(i)x(i)))+λk=1Cd+Vdθk=12

Word Window 分类

假设我们有一个中心词,一个长度为2的对称窗口
在这里插入图片描述
在这里插入图片描述
ddd是词向量的维度。
我们按下面的形式将x(i)x^{(i)}x(i)替换为xwindow(i)x_{window}^{(i)}xwindow(i)
xwindow(i)=[x(i−2)x(i−1)x(i)x(i+1)x(i+2)]x_{window}^{(i)}=\begin{bmatrix}x^{(i-2)}\\ x^{(i-1)}\\ x^{(i)}\\ x^{(i+1)}\\ x^{(i+2)}\end{bmatrix}xwindow(i)=x(i2)x(i1)x(i)x(i+1)x(i+2)
接下来就是计算损失函数,分类函数使用softmax函数,则损失函数使用交叉熵损失函数:J(θ)=1N∑i=1N−log(efyi∑c=1Cefc)J(\theta )=\frac{1}{N}\sum_{i=1}^{N}-log\left ( \frac{e^{f_{yi}}}{\sum_{c=1}^{C}e^{f_{c}}} \right )J(θ)=N1i=1Nlog(c=1Cefcefyi)
使JJJxxx求导,这里的xxx是一个窗口里的拼接向量:
在这里插入图片描述
于是更新词向量:
在这里插入图片描述
以及权重矩阵:
在这里插入图片描述

神经网络

以上是使用softmax函数进行简单分类,但这种分类方式只能分类线性可分的数据,遇到非线性可分的数据就显得很乏力了,此时就需要使用神经网络来构建模型。
在这里插入图片描述
神经网络可以提供非线性的决策边界,理论上,神经网络可以拟合任何函数:
在这里插入图片描述
从逻辑斯谛回归到神经网络,每个神经元是一个二分类逻辑斯谛回归单元,神经网络同时运行多个逻辑斯谛回归,但不需要提前指定它们具体预测什么
在这里插入图片描述

前向传播

首先有一个简单的神经网络

在这里插入图片描述
输入是一个窗口大小为555,词向量大小为444的拼接向量,总维度是202020,隐藏层包含888个神经元,因此权重矩阵的维度是8×208 \times 208×20。神经元的激活函数采用sigmoid函数:a=11+exp(−(wTx+b))a=\frac{1}{1+exp(-(w^{T}x+b))}a=1+exp((wTx+b))1
对于神经网络模型来说,我们需要一个优化目标,也就是最大间隔目标函数。
假设scs_{c}sc是误分类样本得分,sss是正确分类样本得分,我们想要sssscs_{c}sc更大,就是最大化s−scs-s_{c}ssc或者最小化sc−ss_{c}-sscs,最简单的想法是只要求正确分类的得分高于错误分类的得分即可,并不要求错误分类的得分多么多么小。这得到间隔最大化目标函数:
minimizeJ=max(sc−s,0)minimizeJ=max(s_{c}-s,0)minimizeJ=max(scs,0)
但这种方法有风险,它没有创造一个安全的间隔,对优化函数进行修改:minimizeJ=max(Δ+sc−s,0)minimizeJ=max(\Delta +s_{c}-s,0)minimizeJ=max(Δ+scs,0)
对这个间隔进行修正可以使其为1,最终得到:
minimizeJ=max(1+sc−s,0)minimizeJ=max(1 + s_{c}-s,0)minimizeJ=max(1+scs,0)
上述两个得分可以按照前面的公式计算得出,sc=UTf(Wxc+b)s_{c}=U^{T}f(Wx_{c}+b)sc=UTf(Wxc+b)s=UTf(Wx+b)s=U^{T}f(Wx+b)s=UTf(Wx+b),负例通常通过负采样算法得到。

反向传播

△w(k)=[δ1(k+1)a1(k)δ1(k+1)a2(k)⋯δ2(k+1)a1(k)δ2(k+1)a2(k)⋯⋮⋮⋱]=δ(k+1)a(k)T\bigtriangleup w^{(k)}=\begin{bmatrix} \delta _{1}^{(k+1)} a_{1}^{(k)}& \delta _{1}^{(k+1)} a_{2}^{(k)}& \cdots\\ \delta _{2}^{(k+1)} a_{1}^{(k)}& \delta _{2}^{(k+1)} a_{2}^{(k)}& \cdots\\ \vdots & \vdots & \ddots \end{bmatrix}=\delta^{(k+1)}a^{(k)T}w(k)=δ1(k+1)a1(k)δ2(k+1)a1(k)δ1(k+1)a2(k)δ2(k+1)a2(k)=δ(k+1)a(k)T
其中,δ(k)\delta^{(k)}δ(k)为第k层的误差。
由于∂J∂s=−∂J∂sc=−1\frac{\partial J}{\partial s}=-\frac{\partial J}{\partial s_{c}}=-1sJ=scJ=1,所以我们可以只考虑∂s∂x\frac{\partial s}{\partial x}xs
∂s∂xj=∑i∂s∂ai∂ai∂xj=∑i∂UTa∂ai∂ai∂xj=∑iUi∂f(Wi⋅x+b)∂xj=∑iUif′(Wi⋅x+b)∂Wi⋅x∂xj=∑iδiWij=W⋅jTδ\begin{aligned} \frac{\partial s}{\partial x_{j}} &= \sum_{i}^{}\frac{\partial s}{\partial a_{i}}\frac{\partial a_{i}}{\partial x_{j}}\\ &= \sum_{i}^{}\frac{\partial U^{T}a}{\partial a_{i}}\frac{\partial a_{i}}{\partial x_{j}}\\ &= \sum_{i}^{}U_{i}\frac{\partial f(W_{i\cdot }x+b)}{\partial x_{j}}\\ &= \sum_{i}^{}U_{i}{f}'(W_{i\cdot }x+b)\frac{\partial W_{i\cdot }x}{\partial x_{j}}\\ &= \sum_{i}^{}\delta _{i}W_{ij}\\ &= W_{\cdot j}^{T}\delta \end{aligned}xjs=iaisxjai=iaiUTaxjai=iUixjf(Wix+b)=iUif(Wix+b)xjWix=iδiWij=WjTδ
所以,整个向量的偏导数就为∂s∂x=WTδ\frac{\partial s}{\partial x}=W^{T}\deltaxs=WTδ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值