NLP学习笔记(三)

一:分类方法

(一)逻辑回归

最简单的方法就是将分类问题视为回归问题,采用逻辑回归计算分类的边界。

(二)softmax回归

softmax的前向传播过程可以分为以下三步:
h = W T x y ^ = s o f t m a x ( h ) l o s s = − y l o g y ^ h= W^Tx\\ \hat y=softmax(h)\\ loss=-y\ log\ \hat y h=WTxy^=softmax(h)loss=y log y^
(1)第一步: h = W T x h= W^Tx h=WTx

W T W^T WT是一个 m ∗ n m*n mn的矩阵,其中 m m m是分类的数目, n n n x x x的维度;

x x x是一个 n n n维向量,是模型的输入;

将二者进行矩阵乘法,得到一个 m m m维输出 h h h

h h h代表了我们进行 m m m元分类的结果,此时模型给出的每个类的得分并未进行归一化(就是概率加和不为 1 1 1)。

(2)第二步: y ^ = s o f t m a x ( h ) \hat y=softmax(h) y^=softmax(h)

对第一步未进行归一化的结果 h h h进行归一化处理。

(3)第三步: l o s s = − y l o g y ^ loss=-y\ log\ \hat y loss=y log y^

采用交叉熵损失作为损失函数,对目标概率分布与模型概率分布之间的差距进行评估。

这一操作类似于将 [ 0 , 0 , 0 , 1 , 0 ] T [0,0,0,1,0]^T [0,0,0,1,0]T y ^ \hat y y^进行矩阵乘法,乘积得到的结果是模型为正确类给出的得分。

我们希望这一得分尽可能的大,也就是说,我们希望最后的输出中,得分最高的一类就是正确的分类结果。

最后可以得到损失函数:
J ( θ ) = 1 N ∑ i = 1 N − y i l o g y ^ i = 1 N ∑ i = 1 N − y i l o g s o f t m a x ( h i ) = 1 N ∑ i = 1 N − y i l o g e h i ∑ c = 1 C e h c = 1 N ∑ i = 1 N − y i l o g e W T x i ∑ c = 1 C e W T h c \begin{aligned} J(\theta)&=\frac1N\sum^N_{i=1}-y_i\ log\ \hat y_i\\ &=\frac1N\sum^N_{i=1}-y_i\ log\ softmax(h_i)\\ &=\frac1N\sum^N_{i=1}-y_i\ log\ \frac{e^{h_i}}{\sum^C_{c=1} e^{h_c}}\\ &=\frac1N\sum^N_{i=1}-y_i\ log\ \frac{e^{W^Tx_i}}{\sum^C_{c=1} e^{W^Th_c}} \end{aligned} J(θ)=N1i=1Nyi log y^i=N1i=1Nyi log softmax(hi)=N1i=1Nyi log c=1Cehcehi=N1i=1Nyi log c=1CeWThceWTxi

这里我们采用权重衰减进行正则化,防止模型过拟合。
J ( θ ) = = 1 N ∑ i = 1 N − y i l o g e W T x i ∑ c = 1 C e W T h c + λ ∑ k θ k 2 J(\theta)==\frac1N\sum^N_{i=1}-y_i\ log\ \frac{e^{W^Tx_i}}{\sum^C_{c=1} e^{W^Th_c}}+\lambda\sum_k\theta_k^2 J(θ)==N1i=1Nyi log c=1CeWThceWTxi+λkθk2

softmax模型的局限性:只训练的W权重,模型的容量很小,可能无法学习过于复杂的决策边界。

图中,softmax模型所学习到的决策边界并未能很好的将红绿进行分类:

在这里插入图片描述

(三)softmax回归(改进版)

要想增强模型的表现力,最简单直接的方法就是增加模型的参数数量。

我们现在不仅尝试对权重 W W W进行学习,同时我们尝试对 x x x进行学习。

在自然语言处理中, x x x往往是词向量或者是由词向量所组成的向量。现在我们介绍对词向量进行分类的模型——窗口分类器模型

对于一个句子,窗口分类器模型选取一个中心词向量,赋予其一个标签。利用窗口采样,将上下文中国的词向量拼接为一个长词向量,然后对其进行处理。

(1)这里采用最简单的处理:直接扔进softmax分类器进行分类操作。

问题一:什么时候对词向量进行更新?

当在较小的语料库上训练的时候,我们不希望对词向量进行更新,这可能会造成过拟合。

(2)问题二:稀疏性问题。

每次都要对整个语料库求梯度,但是窗口大小有限,导致稀疏性问题。

(四)更好的分类器:最大间距损失函数(max-margin loss)

softmax只会给出一条直线分割,如果你有一个非常简单的数据集,该模型可能会表现得很好。但是如果数据集更加复杂,可能会有一些样本点落在softmax的决策边界上,导致模型并不能很好地区分它们。

相比之下,最大间距损失的目标是最大化分割线与数据点之间的间距。

其损失函数如下:

在这里插入图片描述

举个例子来说明参数的意义:

现在我们有这样一个目标,让一个中心词是一个地点名词的正确窗口得分高,让中心词不是地点名词的不正确窗口得分低。

那么, s s s就是正确窗口的得分,而 s c s_c sc是不正确窗口的得分。

在这里插入图片描述

然后我们介绍该模型的训练方法:

与跳元模型的负采样训练方法类似,我们训练的时候也是对于每个正确的窗口,随机选择几个错误的窗口作为负样本。

最开始初始化所有的参数,如随机初始化。一开始的时候所有的窗口得分都很低,模型不能区分正确窗口和错误窗口。

随着训练的进行,正确窗口的得分增加,错误窗口的得分减少,差距开始增大, 1 − s + s c 1-s+s_c 1s+sc开始减小变为负数。

这时损失会降低到 0 0 0,开始忽略一些损失。

优化越是进行,我们可以忽略的训练集部分就越多,这也是这个损失函数的优点,使得模型可以集中精力在预测表现不是很好的窗口上。

二、问题

1.模型泛化性

我们认为:具有平滑性的模型泛化性更好。

这一直觉的原理是一个先验条件:我们认为在一个当输入变化很小时,模型的输出不会有太大变化。

这一先验条件在数学上称为连续性。

2.模型复杂度

神经网络与常规逻辑回归不同的就是神经网络具有隐藏层。

越复杂的神经网络隐藏层越多,能够给我们更加复杂的决策边界,达到更好的分类效果。
在这里插入图片描述

同时,隐藏层的输出意义可以是神经网络自己决定的,不需要人为定义。

多层神经网络可以学习不同词之间的相互作用,使得模型更加准确。

3.激活函数

在神经网络中激活函数是必不可少的。

如果没有激活函数,多层神经网络往往就是多个线性函数的嵌套,并不能得到更复杂的表示。

也就是说,没有激活函数,多层神经网络与单层神经网络所能表达的函数并无差别。

4.向量化

利用向量化来加速计算,而不是for循环,往往能达到更高的效率。

函数越复杂,越可能过拟合,越可能经过每一个数据点

参考:我愿称之为2023最强NLP课程!最强斯坦福CS224n《深度学习自然语言处理》课程!超重量级,赶紧收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chatgpt赋能python:如何升级Python包

如何升级Python包 如果你是一名有着10年Python编程经验的工程师,那么你一定知道如何安装和使用Python包。但是,有时候你需要升级一些已经安装的包,以获得更好的性能和新功能。在本文中,我们将讨论如何升级Python包。 什么是Pyth…

[conda]tf_agents和tensorflow-gpu安装傻瓜式教程

1.打开终端或Anaconda Prompt&#xff08;Windows用户&#xff09;。 2.输入以下命令创建新的Python环境&#xff1a; conda create --name <env_name> python<version>其中&#xff0c;<env_name>是您想要创建的环境名称&#xff0c;<version>是您想…

HHU云计算期末复习(下)Hadoop、虚拟化技术、openstack

文章目录 第五章 Hadoop分布式文件系统HDFS分离元数据和数据&#xff1a;NameNode和DataNode流水线复制 第七章 虚拟化技术7.1 虚拟化技术简介7.2 虚拟机迁移7.3 网络虚拟化 第八章 openstack8.1 计算服务NovaRabbitMQ 8.2 Swift 第九章 云计算数据中心9.1 云数据中心特征9.2 网…

C# 多数元素

169 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&…

Java面试Day12

1.意向锁是什么&#xff1f;有什么作用&#xff1f;它是表级锁还是行级锁&#xff1f; 意向锁是什么 在使用 InnoDB 引擎的表里时对某些记录加上「共享锁」之前&#xff0c;需要先在表级别加上一个「意向共享锁」 在使用 InnoDB 引擎的表里时对某些记录加上「独占锁」之前&…

升级HarmonyOS 3,通话一步切换更便捷

小伙伴们&#xff0c;今天和大家来聊聊HarmonyOS 3音频播控中心有哪些真香体验。不少朋友可能会脱口而出&#xff1a;一键切换音频App&#xff0c;一键实现音频跨设备流转&#xff0c;还有音频共享。这一次&#xff0c;音频播控中心又带来了新技能——一键切换通话音频。 相信大…

vue 图片上传到腾讯云对象存储组件封装(完善版)

vue 上传图片到腾讯云对象存储 1、 引入cos-js-sdk-v52、封装uploadcos.js3、封装图片上传组件、调用上传方法4、页面使用组件 之前总结过 vue 封装图片上传组件到腾讯云对象存储&#xff0c;后来又加了一些功能&#xff0c;在图片过大时进行压缩&#xff0c;压缩完成之后&…

[React]面向组件编程

1. 定义组件 - 函数式定义&#xff08;简单组件&#xff09;&#xff0c;使用function定义 import React from react; import ReactDOM from react-dom/client;function App() {return (<button onClick{handleClick}>click</button> // 直接把方法handleClick赋…

Elasticsearch-01篇(单机版简单安装)

Elasticsearch-01篇&#xff08;单机版简单安装&#xff09; 1. 前言1.1 关于 Elastic Stack 2. Elasticsearch 的安装&#xff08;Linux&#xff09;2.1 准备工作2.1.1 下载2.1.2 解压&#xff08;启动不能用root&#xff0c;所以最好此处换个用户&#xff09; 2.2 修改相应的…

OpenStack(T版)——网络(Neutron)服务介绍与安装

文章目录 OpenStack(T版)——网络(Neutron)服务介绍与安装安装和配置(controller)准备(1)创建数据库(2)加载admin user的环境变量(3)创建服务凭证 配置Neutron网络服务组件(1)安装软件(2)配置服务器组件(3)配置Layer 2 (ML2)plug-in模块(4)配置桥接代理(5)配置内核(6)配置DHCP代…

JS知识点汇总(七)--数据类型

1. JavaScript中的简单数据类型有哪些&#xff1f; 1、概述 JS 中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、symbol ES10中的新特性 BigInt (任意精度整数)&#xff0c;目前还处于stage-4阶段&#xff0c;不出意外即将成为js的第七种基本数据…

多元函数微分

1-7 8&#xff0c;梯度 多元函数梯度&#xff1a; 方向导数是梯度在L方向上的投影 梯度方向是f增长最快的方向 9&#xff0c;极值点处若存在偏导&#xff0c;则该点为驻点&#xff0c;该点处的各偏导值为0 10&#xff0c; 二阶偏导和极值 二元函数&#xff1a; 多元函数的…