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

NLP中的Softmax与神经网络分类

前言

本篇笔记是cs224n lecture4的记录,公式部分有少量自己的理解,对原视频的公式进行了小幅改动,仅供个人备忘。

分类

分类设置和符号

我们的样本以 { x i , y i } i = 1 N \{x_i,y_i\}_{i=1}^N {xi,yi}i=1N的形式存在,其中 x i x_i xi是输入, y i y_i yi是标签。
x i x_i xi可以是一个单词或者向量(这并不是常见形式,但便于理解), y i y_i yi可以是标签(肯定或否定)、命名实体(NER)、单词序列(机器翻译)等。

传统分类到NLP分类

{ x i , y i } i = 1 N \{x_i,y_i\}_{i=1}^N {xi,yi}i=1N
上式中 x i x_i xi是d维向量, y i y_i yi是C维one-hot向量,C代表分类个数,N是样本总数。
传统分类任务的 x i x_i xi是固定的,仅仅是通过逻辑斯蒂回归等方法对权重进行更新
p ( y ∣ x ) = e x p ( W y . x ) ∑ c = 1 C e x p ( W c . x ) p(y|x)=\frac{exp(W_y.x)}{\sum_{c=1}^{C}exp(W_c.x)} p(yx)=c=1Cexp(Wc.x)exp(Wy.x)
上式就是softmax的形式,这里省略了下标i,公式中的x和y代表一个样本的输入和标签。

softmax细节

计算方法分为两步,第一步取权重矩阵W的第y行乘以输入x的一行
W y . x = ∑ i = 1 d W y i x i = f y W_y.x=\sum_{i=1}^{d}W_{yi}x_i=f_y Wy.x=i=1dWyixi=fy
这样,对于一个样本,根据权重矩阵W计算得到C个概率值,f_1,f_2…f_C
第二步进行归一化
p ( y ∣ x ) = e x p ( f y ) ∑ c = 1 C e x p ( f c ) = s o f t m a x ( f ) y p(y|x)=\frac{exp(f_y)}{\sum_{c=1}^{C}exp(f_c)}=softmax(f)_y p(yx)=c=1Cexp(fc)exp(fy)=softmax(f)y

训练softmax和交叉熵

在训练过程中,可以选择直接最大化正例概率,也就是最小化正确类别的概率的负对数
− l o g ( e x p ( W k . x ) ∑ c = 1 C e x p ( W c , x ) ) -log(\frac{exp(W_k.x)}{\sum_{c=1}^Cexp(W_c,x)}) log(c=1Cexp(Wc,x)exp(Wk.x))
原因在于这个损失函数等效于交叉熵:
H ( y ^ , y ) = − ∑ j = 1 ∣ V ∣ y j l o g ( y j ^ ) = − ∑ j = 1 C y j l o g ( p ( y j = 1 ∣ x ) ) = − ∑ j = 1 C l o g ( e x p ( W j . x ) ∑ c = 1 C e x p ( W c . x ) ) = − y i l o g ( y i ^ ) = − l o g ( e x p ( W i . x ) ∑ c = 1 C e x p ( W c , x ) ) \begin{aligned} H(\hat{y},y) &=-\sum_{j=1}^{|V|}y_jlog(\hat{y_j})\\ &=-\sum_{j=1}^{C}y_jlog(p(y_j=1|x))\\ &=-\sum_{j=1}^{C}log(\frac{exp(W_j.x)}{\sum_{c=1}^{C}exp(W_c.x)})\\ &=-y_ilog(\hat{y_i})\\ &=-log(\frac{exp(W_i.x)}{\sum_{c=1}^Cexp(W_c,x)}) \end{aligned} H(y^,y)=j=1Vyjlog(yj^)=j=1Cyjlog(p(yj=1x))=j=1Clog(c=1Cexp(Wc.x)exp(Wj.x))=yilog(yi^)=log(c=1Cexp(Wc,x)exp(Wi.x))
因为y是one-hot向量,所以只有一个位置i为1,其他位置为0。
以上是对于一个样本来说的,所以总的损失函数:
− ∑ i = 1 N l o g ( e x p ( W k ( i ) . x i ) ∑ c = 1 C e x p ( W c , x ( i ) ) ) -\sum_{i=1}^Nlog(\frac{exp(W_{k(i)}.x^{i})}{\sum_{c=1}^Cexp(W_c,x^{(i)})}) i=1Nlog(c=1Cexp(Wc,x(i))exp(Wk(i).xi))
一般使用时还会加上正则项:
− ∑ i = 1 N l o g ( e x p ( W k ( i ) . x i ) ∑ c = 1 C e x p ( W c , x ( i ) ) ) + λ ∑ k = 1 C ⋅ d + ∣ V ∣ ⋅ d -\sum_{i=1}^Nlog(\frac{exp(W_{k(i)}.x^{i})}{\sum_{c=1}^Cexp(W_c,x^{(i)})})+\lambda\sum_{k=1}^{C\cdot d+|V|\cdot d} i=1Nlog(c=1Cexp(Wc,x(i))exp(Wk(i).xi))+λk=1Cd+Vd
在这里插入图片描述
这是一个常见的图,红线是测试误差,蓝线是训练误差,纵轴是训练误差,横轴是模型复杂度(多少层数、多少参数、词向量维度、训练模型的耗时等),纵轴是误差。

问题及优化

在词向量的学习中,参数矩阵很大,这样训练之后很容易出现过拟合:
在这里插入图片描述
比如在单词分类的任务上,一开始三个表示电视的单词是在一起的,在训练集语料中没有television,经过训练之后,telly和TV改变了位置,这样导致在测试集语料中television被分类错误。
在这里插入图片描述
在这里插入图片描述
这个实验说明,当前任务的语料很小时,不必再任务语料上重新训练词向量,否则会过拟合,产生歧义。

Window classification

只对一个单词进行分类的话会很容易产生歧义,比如“Paris”可以是巴黎的意思,也可以代表一个人的名字,所以通过上下文来对单词进行分类显得更靠谱。
接下来,通过命名实体识别的例子进行解释,比如Paris可以是地名或人名。

目标

训练一个softmax模型,通过上下文给中心词分配一个标签(person、location、organization、none)

例子

判断Paris的标签,窗口大小为2
在这里插入图片描述
输入: X w i n d o w X_{window} Xwindow,由窗口内词向量组成的5*d维的列向量,即将五个单词向量进行拼接

分类器softmax

最简单的想法就是利用上一节讲到的softmax进行分类,图中x就是输入 x w i n d o w x_{window} xwindow
在这里插入图片描述
J对x进行求导:
Δ x J = ∂ − log ⁡ s o f t m a x ( f y ( x ) ) ∂ x = ∑ c = 1 C δ c W c T = W T ⋅ δ \begin{aligned} \Delta_xJ&=\frac{\partial^{-\log softmax(f_y(x))}}{\partial x}\\ &=\sum_{c=1}^C \delta_cW_c^T\\ &=W^T\cdot\delta \end{aligned} ΔxJ=xlogsoftmax(fy(x))=c=1CδcWcT=WTδ
此步骤运用了softmax的求导结论:当训练softmax分类器,且损失函数是交叉熵时,对softmax求导:
∂ J ∂ x i = y ^ i − y i = δ i \frac{\partial J}{\partial x_i}=\hat y_i-y_i=\delta_i xiJ=y^iyi=δi
同样的,可以对W进行求导,进而更新权重矩阵W
这里的维度:

  • W:n*5d
  • x:5d*1
  • δ \delta δ:n*1
  • W T ⋅ δ W^T\cdot\delta WTδ : 5d * 1

n代表分类个数,5d的5指窗口大小。实际训练过程中的 δ \delta δ应该是nN的,其中N是样本个数。

缺陷

softmax最终给出的是线性的决策边界,对于大数据不适用在这里插入图片描述
所以需要提供非线性的决策边界
在这里插入图片描述

神经网络

一些简单定义

讲到的一些常见的定义,不再费笔
在这里插入图片描述
神经网络能够拟合更复杂的数据
在这里插入图片描述

前向传播

回到前面的窗口分类问题,利用神经网络进行解决,如下图所示
在这里插入图片描述

最大间距损失函数

定义 s c s_c sc代表误分类样本得分, s s s代表正确分类样本得分,其中负样本一般通过负采样获得。使用间隔最大化:
m i n i m i z e J = m a x ( 0 , 1 − s + s c ) minimizeJ=max(0,1-s+s_c) minimizeJ=max(0,1s+sc)
最大化间隔机理可以参考SVM的推导过程,方便理解。

反向传播

∂ s ∂ W i j = ∂ U T a ∂ W i j = ∂ ∑ k U k a k ∂ W i j = ∂ U i a i ∂ W i j = U i ∂ a i ∂ W i j = U i ∂ a i ∂ z i ∂ z i ∂ W i j = U i f ′ ∂ W i x + b i ∂ W i j = U i f ′ ∂ ∑ k W i k x k ∂ W i j = U i f ′ ∂ W i j x j ∂ W i j = δ i x j \begin{aligned} \frac{\partial s}{\partial W_{ij}}&=\frac{\partial U^Ta}{\partial W_{ij}}=\frac{\partial \sum_kU_ka_k}{\partial W_{ij}}=\frac{\partial U_ia_i}{\partial W_{ij}}\\ &=U_i\frac{\partial a_i}{\partial W_{ij}}\\ &=U_i\frac{\partial a_i}{\partial z_i}\frac{\partial z_i}{\partial W_{ij}}\\ &=U_i f'\frac{\partial W_ix+b_i}{\partial W_{ij}}\\ &=U_i f'\frac{\partial \sum_kW_{ik}x_k}{\partial W_{ij}}\\ &=U_i f'\frac{\partial W_{ij}x_j}{\partial W_{ij}}\\ &=\delta_i x_j \end{aligned} Wijs=WijUTa=WijkUkak=WijUiai=UiWijai=UiziaiWijzi=UifWijWix+bi=UifWijkWikxk=UifWijWijxj=δixj
向量形式,就是外积 ∂ s ∂ W = δ x T \frac{\partial s}{\partial W}=\delta x^T Ws=δxT
这里的逻辑函数 f ′ ( z ) = f ( z ) ( 1 − f ( z ) ) f'(z)=f(z)(1-f(z)) f(z)=f(z)(1f(z))
同理,对 b i b_i bi进行求导
∂ s ∂ b i = δ i \frac{\partial s}{\partial b_i}=\delta _i bis=δi
对x进行求导
∂ s ∂ x = W T ⋅ δ \frac{\partial s}{\partial x}=W^T\cdot \delta xs=WTδ
另外,对U的求导
∂ J ∂ U = 1 { 1 − s + s c > 0 } ( − f ( W x + b ) + f ( W x c + b ) ) \frac{\partial J}{\partial U}=1\{1-s+s_c>0\}(-f(Wx+b)+f(Wx_c+b)) UJ=1{1s+sc>0}(f(Wx+b)+f(Wxc+b))
∂ J ∂ U = 1 { 1 − s + s c > 0 } ( − a + a c ) \frac{\partial J}{\partial U}=1\{1-s+s_c>0\}(-a+a_c) UJ=1{1s+sc>0}(a+ac)

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索局部开发之间实现平衡。文章详细解析了算法的初始化、勘探开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOAMOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值