Softmax(假神经网络)与词向量的训练

今天终于要完成好久之前的一个约定了~在很久很久以前的《如果风停了,你会怎样》中,小夕提到了“深刻理解了sigmoid的同学一定可以轻松的理解用(假)深度学习训练词向量的原理”,今天就来测测各位同学对于sigmoid的理解程度啦~

 

习惯性的交待一下前置铺垫:

1、词袋模型、独热与词向量概念扫盲

2、sigmoid到softmax(至关重要)

3、逻辑回归

4、逻辑回归到神经网络

 

总之,请务必清楚词向量的概念,深刻理解softmax的概念和公式内的意义。尤其是要理解softmax函数具有“两向量的‘亲密度’转条件概率”的功能:

 

嗯。。。还是开篇扫盲一下。可能有的同学觉得是深度学习兴起之后才有的“词向量”,实际上,最早用来做词向量的模型并不是神经网络,而是更加传统的机器学习算法,如以线性代数中的SVD(奇异值分解)为核心LSA(隐性语义分析),还有后来的以贝叶斯理论为核心LDA(隐含狄利克雷分布,一种NLP中经典的主题模型)。

 

一方面,小夕下面要讲的确实是作为一种用神经网络(人们为了提高逼格,更喜欢叫用深度学习xxx)训练词向量的基本理论和方法,但是实际上,小夕并没有把它当神经网络看,因为理解了小夕讲的softmax后,这种方法不过是用了一下softmax而已,还不如叫“基于softmax分类器”或者“基于改良的逻辑回归”呢。。。当然啦,对外还是要称之为神经网络的。

 

首先,我们来想一下,凭什么可以训练出《词向量概念扫盲》中描述的这么棒的可以编码语义的词向量呢?其实呀,只要是用无监督的方法去训练词向量,那么这个模型一定是基于“词共现”(word co-occurrence)信息来实现的。

 

设想一下,“萌”的语义跟什么最相近呢?有人会想到“可爱”,有人会想到“妹子”,有人会想到“小夕”(\(//∇//)\)。为什么呢?因为很大程度上,这些词会同时出现在某段文本的中,而且往往距离很近!比如“萌妹子”、“这个妹子好可爱”、“小夕好萌吖”。正是因为这种词共现可以反映语义,所以我们就可以基于这种现象来训练出词向量。

 

既然语义相近的两个词(即差别很小的两个词向量)在文本中也会趋向于挨得近,那如果我们可以找到一个模型,它可以在给定一个词向量时,计算出这个词附近出现每个词的概率(即一个词就看成一个类别,词典中有多少词,就是多少个类别,计算出给定输入下,每个类别的概率),那么训练这个模型不就把问题解决了嘛。是不是突然觉得softmax函数简直是为这个任务量身定做呐~

 

我们就将词典大小设为D,用、...表示词典中的每个词。

 

如下图:

 

看,这不就是简单的softmax分类器嘛~所以这个model的假设函数就是简单的:

 

 

从这个model中也能看出,模型的输入不仅是输入,而且是其他输入的参数!所以这个model的参数是维度为 D*embed_dim 的矩阵(每行就是一个用户定义的embed_dim大小的词向量,词典中有D个词,所以一共有D行),而且输入也是从这个矩阵中取出的某一行)。

 

假设函数有了,那么根据《一般化机器学习》,我们需要定义损失函数。当然,根据前面所说的词共现信息来定义啦。

 

为了好表示,我们将模型输入的词称为中心词(central word),记为,将这个词两边的词记为目标词(objected word),记为,假如我们只将中心词附近的m个词认为是它的共现词(也就是中心词左边的m个词以及中心词右边的m个词),那么目标词一共有2m个,分别记为、...。(下文将会看到,在整个句子的视角下,m被称为窗口大小

 

如果我们令m=1,那么对于下面这个长度为T=10句子:

 

今天 我 看见 一只 可爱的 猫 坐 在 桌子 上。

 

那么当我们将“猫”看作中心词时,目标词就是“可爱的”和“坐”,即

今天 我 看见 一只 【可爱的 猫 坐】 在 桌子 上。

我们就认为这两个词跟猫的语义是相关的,其他词跟猫是否相关我们不清楚。所以我们要争取让P(可爱的|猫)、 P(坐|猫)尽可能的大

 

讲到这里,最容易想到的就是使用似然函数了。由于这里类别特别多,所以算出来的每个概率都可能非常小,为了避免浮点下溢(值太小,容易在计算机中被当成0,而且容易被存储浮点数的噪声淹没),更明智的选择是使用对数似然函数。所以对于一段长度为T的训练文本,损失函数即:

 

 

当然啦,这里要让长度为m的窗口滑过训练文本中的每个词,滑到每个词时,都要计算2m次后验概率。而每次计算后验概率都要用到softmax函数,而回顾一下softmax函数,它的分母是很恐怖的:

 

 

类别越多,分母越长。而我们这里类别数等于词典大小啊!所以词典有10万个单词的话,分母要计算10万次指数函数?所以直接拿最优化算法去优化这个损失函数的话,肯定会训练到天长地久(好像用词不当)。那怎么办呢?

 

一种很巧妙的方法是将原来计算复杂度为D的分母(要计算D次指数函数)通过构造一棵“胡夫曼二叉树(Huffman binary tree)”来将原来扁平的“softmax”给变成树状的softmax,从而将softmax的分母给优化成计算复杂度为log D。这种树形的softmax也叫分层softmax(Hierarchical Softmax

 

还有一种优化方法是负采样(Negative Sampling),这种方法可以近似计算softmax的对数概率。对使用分层softmax和负采样优化模型计算复杂度感兴趣的同学,可以看下面这篇论文:

 

Mikolov,T., Sutskever, I., Chen, K., Corrado, G., & Dean, J. (2013, October 17).Distributed Representations of Words and Phrases and their Compositionality.arXiv.org

 

诶诶,说了这么多,这个看起来这么简洁优美的model叫什么名字呢?

 

它就是Mikolov在2013年提出来的Skip-gram(简称SG),这也是大名鼎鼎的开源词向量工具word2vec背后的主力model之一(另一个模型是更弱鸡的连续词袋模型,即cBoW)。

 

说些题外话,SG和cBoW是Mikolov在2013年的一篇论文中提出来的

 

(Mikolov, T.,Chen, K., Corrado, G., & Dean, J. (2013, January 17). Efficient Estimationof Word Representations in Vector Space. arXiv.org.)

 

并且在同一年,Mikolov又在更上面那篇优化SG计算复杂度的论文中开源了word2vec这个词向量工具,可谓是深度学习应用于自然语言处理领域的里程碑式的成果。当然啦,要说NLP的超级里程碑,还是要数2003年Bengio大神的这篇论文的,这也是词向量概念的鼻祖论文:

 

Bengio Y, Ducharme R,Vincent P, et al. A neural probabilistic language model[J]. Journal of machinelearning research, 2003, 3(Feb): 1137-1155.

  

关于在准确度表现上基本可以完爆SG和cbow的model,参考GloVe模型(Global Vector),有兴趣的同学可以看一下论文:

 

PenningtonJ, Socher R, Manning C D. Glove: Global Vectors for WordRepresentation[C]//EMNLP. 2014, 14: 1532-1543.

 

当然啦,建议在读之前先熟悉一下文首提到的LDA模型,否则可能阅读有点难度哦。

 

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

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

相关文章

二叉树的先序遍历、中序遍历、后序遍历、层次遍历-图文详解

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有:先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中,父节点先于它的子节点被访问,就是先序遍历;父节点被访问…

写给我的女神,一个用灵魂歌唱的小精灵

我对娱乐圈不感兴趣,也很少关注娱乐圈。对于专业的歌唱艺术更是不在行。但我认为,一首歌,不应因为技法的平庸而被认为是烂歌,不应因为曲风的通俗而被认为是俗歌,不应因为声音和唱法的非主流而被认为是“非主流”歌曲。…

完美世界2020编程题-救雅典娜 英雄AB PK

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请注明出处。 https://blog.csdn.net/u012319493/article/details/82154113 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f…

训练神经网络时如何确定batch size?

前言 当我们要训练一个已经写好的神经网络时&#xff0c;我们就要直面诸多的超参数了。这些超参数一旦选不好&#xff0c;那么很有可能让神经网络跑的还不如感知机。因此在面对神经网络这种容量很大的model前&#xff0c;是很有必要深刻的理解一下各个超参数的意义及其对model的…

《程序员面试宝典》笔记一

一、this指针 this是一个指针&#xff0c;时时刻刻指向实例本身&#xff0c;相当于静态成员函数的一个隐含参数&#xff0c;不占用对象的空间。this本质是一个函数参数&#xff0c;只是编译器隐藏起形式的&#xff0c;语法层面的参数。this只能在成员函数中使用。成员函数和静…

腾讯2013实习生笔试题+答案1-5aadaa 6-10adbcc 11-15 acacc16-20 bbddc

一、 单项选择题1) 给定3个int类型的正整数x&#xff0c;y&#xff0c;z&#xff0c;对如下4组表达式判断正确的选项(A) Int a1xy-z; int b1x*y/z;Int a2x-zy; int b2x/z*y;int c1x<<y>>z; int d1x&y|z;int c2x>>z<<y; int d2x|z&y;A) a1一定等…

训练神经网络时如何确定batch的大小?

当我们要训练一个已经写好的神经网络时&#xff0c;我们就要直面诸多的超参数啦。这些超参数一旦选不好&#xff0c;那么很有可能让神经网络跑的还不如感知机。因此在面对神经网络这种容量很大的model前&#xff0c;是很有必要深刻的理解一下各个超参数的意义及其对model的影响…

【论文翻译】学习新闻事件预测的因果关系

一、摘要 本文在这项工作中解决的问题是产生一个可能由给定事件引起的可能的未来事件。 论文提出了一种使用机器学习和数据挖掘技术建模和预测未来新闻事件的新方法。论文的Pundit算法概括了因果关系对的例子&#xff0c;以推断因果关系预测因子。为了获得精确标记的因果关系示…

阿里内推算法岗位编程笔试题

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/u014744127/article/details/79431847 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_v…

从逻辑回归到最大熵模型

在《逻辑回归》与《sigmoid与softmax》中&#xff0c;小夕讲解了逻辑回归背后藏着的东西&#xff0c;这些东西虽然并不是工程中实际看起来的样子&#xff0c;但是却可以帮助我们很透彻的理解其他更复杂的模型&#xff0c;以免各个模型支离破碎。本文中&#xff0c;小夕将带领大…

【论文翻译】统一知识图谱学习和建议:更好地理解用户偏好

一、摘要 将知识图谱&#xff08;KG&#xff09;纳入推荐系统有望提高推荐的准确性和可解释性。然而&#xff0c;现有方法主要假设KG是完整的并且简单地在实体原始数据或嵌入的浅层中转移KG中的“知识”。这可能导致性能欠佳&#xff0c;因为实用的KG很难完成&#xff0c;并且…

机器学习与深度学习常见面试题

为了帮助参加校园招聘、社招的同学更好的准备面试&#xff0c;SIGAI整理出了一些常见的机器学习、深度学习面试题。理解它们&#xff0c;对你通过技术面试非常有帮助&#xff0c;当然&#xff0c;我们不能只限于会做这些题目&#xff0c;最终的目标是真正理解机器学习与深度学习…

EJB的相关知识

一、EJB发展历史 IBM、SUN公司力推EJB前景&#xff0c;大公司开始采用EJB部署系统。主要价值&#xff1a;对分布式应用进行事务管理 出现问题&#xff1a; ①EJB的API难度大 ②规范要求必须抛出特定异常的接口并将Bean类作为抽象类实现&#xff08;不正常不直观&#xff09; ③…

深度前馈网络与Xavier初始化原理

前言 基本的神经网络的知识&#xff08;一般化模型、前向计算、反向传播及其本质、激活函数等&#xff09;小夕已经介绍完毕&#xff0c;本文先讲一下深度前馈网络的BP过程&#xff0c;再基于此来重点讲解在前馈网络中用来初始化model参数的Xavier方法的原理。 前向 前向过程很…

线性代数应该这样讲(三)-向量2范数与模型泛化

在线性代数&#xff08;一&#xff09;中&#xff0c;小夕主要讲解了映射与矩阵的关系&#xff1b;在线性代数&#xff08;二&#xff09;中&#xff0c;小夕讲解了映射视角下的特征值与特征向量的物理意义。本文与下一篇会较为透彻的解析一下向量的二范数与一范数&#xff0c;…

SOA基础

一、架构的演化&#xff1a; 结构化 客户端-服务端 三层 N层 分布式对象 组件 服务&#xff1a;是应用程序或者企业的不同功能单元&#xff0c;每个功能单元作为实例存在&#xff0c;并与应用程序和其他组件交互。通过基于消息的松散耦合的通信模型提供服务。 二、体系结…

剑指offer-python解答

版权声明&#xff1a; https://blog.csdn.net/XiaoYi_Eric/article/details/81452014 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div id"conten…

从点到线:逻辑回归到条件随机场

开篇高能预警&#xff01;本文前置知识&#xff1a;1、理解特征函数/能量函数、配分函数的概念及其无向图表示&#xff0c;见《逻辑回归到受限玻尔兹曼机》和《解开玻尔兹曼机的封印》&#xff1b;2、理解特征函数形式的逻辑回归模型&#xff0c;见《逻辑回归到最大熵模型》。从…

WSDL基础知识

一、WSDL的定义 将网络服务描述为对包含面向文档或过程的信息进行操作的一组端点的XML格式 服务接口 访问规范 服务地点 定义Web服务的公共接口&#xff08;包括功能、如何调用&#xff09; 定义与目录中列出的Web服务交互所需的协议绑定和消息格式 抽象地描述了支持的操…

【NLP】Google BERT详解

版权声明&#xff1a;博文千万条&#xff0c;版权第一条。转载不规范&#xff0c;博主两行泪 https://blog.csdn.net/qq_39521554/article/details/83062188 </div><link rel"stylesheet" href"https://csdnimg.cn/release/phoenix/template/cs…