相关资料

Lecture-1 Intro & Word Vectors

one hot vectors

you shall know a word by the company it keeps. —- J.R. Firth 1957

so human do. —- baiker 2026

引入word vector概念embeddinogs/neural word representations

休息时,学生提问的问题非常到位(我也想到了,虽然只是第一个,骄傲脸)

Q: 相同的词在上下文中有不同的含义,比如讲到的Good,是否需要用不同的vector表示。
A:正如我说的,高维空间和二维空间是完全不同的,star既和天文学词汇很相似,也和名人等词汇很相似。

Q:如何将高维vector进行低微可视化的。reducing the embeddings to a lower dimensional space to visualize?
A:t-sne一种非线形方法,对高维神经网络表示的效果,比PCA效果要好

Q:如何判断维度的尺度,保证既不稠密,也不稀疏。
A:取决于要表征的数据量,更多的是经验,选择效果更好的,随着发展300->1k->3k

Q:只用距离表征语义是否较为单一
A:还可以使用方向,接下来会讲

Q: 我注意到向量的值都在[-1,1]之间,是有什么限制吗?
A:正常情况下是没有边界的,但一般会进行归一化处理normalize,我们会使用一种叫正则化的方法regularization,保持系数变小

Q:一个词对应几个embedding
A:一个,你可以理解为它所有词义的平均值

word2vec

不止这一个模型,但这个效率比较高。

对于每一个词,都预测当前词的概率,用于无监督训练

corpus

使用的概率分布模型(likelihood): 给定周围词,当前词出现的概率

目标函数取平均负对数似然:

  • 取负将最大化概率转化为最小化目标函数(所以叫梯度下降,没有什么特定的原因,可能是为了可视化更好看?更好解释?
  • 对于乘积用取对数处理成和

距离越近->语义相似->点积->相似度->通过softmax转化成一个概率分布

任务就变成了:

给定随机初始值,然后优化到概率不会再增加为止。-> 计算高维函数的最小值

40w个词,100dim->40w2100=8kw参数量需要训练 *2??

这些参数的梯度就是我们的优化方向。

math

要求目标高维函数是可微的,且偏导是方便计算的,所以转化为和的方式。

目标函数微分公式推导,要求(微分链式法则)

证明:计算机根据梯度下降更新参数,能达到我们的目的。

Lecture-2 Word Vectors & Language Models

梯度下降->学习率系数的梯度下降->小批量数据随机梯度下降

模型的特点,虽然有噪声,不仅快,效果还好

损失函数(差值?)

a bag of words model(词袋模型)

语义分析:

import gensim.downloader as api
from gensim.models import KeyedVectors

model = api.load("glove-wiki-gigaword-100")

model.most_similar('banana')

model.most_similar(positive=['waman', 'king'], negative=['man'])
queen
model.most_similar(positive=['long', 'tall'], negative=['tallest'])
longest

model.most_similar(positive=['king'], negative=['man'])
model.most_similar(positive=['women'], negative=['man'])

Q:一个词对应两个向量?怎么使用
A:数学公式更为简单, 一般来说两个向量比较相似,使用时取平均值

todo:跑一遍word2vec代码

效果评估,对于一些相似的词统计占比,统计人对相似词的相似度(人判断和机器判断相似度差值)

对于英文,进一步的命名实体识别(ner named entity recognition)可以提高embedding效果。

ner是分类问题

pike/star/bank多义词

现有神经单元是非常简单模拟真实神经元的一种实现,但由于革命太快,导致无人在意。

交叉墒损失来自于信息论(真实概率分布和计算概率分布的期望公式)

Negative Sampling

负采样是Word2Vec模型中一种用于加速训练的技术,主要解决传统softmax计算的效率瓶颈问题。它通过减少每次训练中需要计算的词汇数量,大幅降低计算复杂度,尤其适用于大规模数据集。

负采样的目标是通过引入少量的负样本,替代对整个词汇表的计算,从而优化训练效率。对于每个目标词和上下文词,模型会:

  • 正样本:最大化目标词和上下文词的相关性。
  • 负样本:从词汇表中随机选择一些不相关的词,最小化它们与目标词的相关性。

addition

两个向量分别对应输入层到隐藏层/隐藏层对输出层。

math: 这种设计将模型的参数清晰地分成了两组,分子和分母互不干扰:

对于输入层到隐层的矩阵W,我们每次训练只需要更新一行向量即可,而对于隐层到输出层的矩阵W’的所有 N×V 个元素都需要更新一遍,毕竟因为是全连接,这里的计算量还是很大的.

Lecture-3 Backpropagation & Neural Network

自问自答:bias/BN/sigmod

Q:bias偏置在神经元中一定要用吗?
A:可以增加能力(二维平面点分类可以理解)卷积之后如果接bn层,bn可以视为偏置,此时卷积层可以不加偏置:nn.Conv2d(16,33,3, stride=2,bias=False)

  • 卷积/全连接层输出是对称、近似高斯的分布,适合做归一化,能得到更稳定的结果
  • 如果把sigmod放在BN的位置,非线性变换后输出分布形状会在训练中持续变化,归一化无法消除其方差偏移,完全达不到BN的效果

sigmod是激活函数,负责给网络引入非线性;
BN是归一化层,负责稳定数据分布加速训练
实际工程中,标准写法永远是卷积/全连接层→BN层→sigmod/ReLU激活,不可能颠倒或替代。

激活函数介绍

logisitc(sigmoid)引入非线形,能力更强

sigmod (0,1) -> tanh(-1,1) -> hard tanh[-1,1] -> ReLU[0,x]

sigmod->tanh: 拉伸两倍向下平移一个单位,其实是相同的函数: tanh(z) = 2logistic(2z)-1
ReLU(z)=max(z,0)

使用ReLU方便计算,指数计算复杂(且负值无效也符合逻辑), 所以成为标准用法

leaky ReLU, 负区有非常小的斜率

Transformer使用Swish/GeLU,和ReLU很像的一些曲线

gradient

雅可比矩阵计算梯度
链式法则
z=3y y=x^2 dz/dx=3*2x=6x
权重参数仅和下一个神经元梯度相关。

forward/back propagation algorithm

误差反向计算只做两步:

  • 链式法则计算梯度反向传播
  • 保存中间梯度(可复用)
      • distributes 分发梯度(对所有线路生效)
  • max
    • route 路由梯度(仅对一个线路生效)
      • switches(交换梯度)

所有有向无环图都可以使用

实现forward/backword方法后, 检查梯度是否正确,计算模型在特定值的梯度,计算是否相近

Q:现在不需要自己实现backword, 那为什么还要学习?
A:理解更复杂的情况: 梯度爆炸和梯度消失现象,明白为什么模型不工作,或者出错

当层数比较深时,不管是大于1还是小于1在累积之后,梯度就会变得非常大/非常小

Lecture-4 Dependency Parsing(依存句法分析)

Consistency and Dependency

parts of speech词性:nouns,adjective,determiner,article,prepositions,…

不同的词性可以组合成短语,短语和词性也可组合

noun phrase名词短语NP
prepositional phrase介词短语PP
verb phrase动词短语VP

bigger phrases(demo):the cuddly cat by the door
NP:the cuddly cat/the door/the cuddly cat by the door
PP:by the door

VP: talk to the cuddly cat by the door

Dependency Grammer and Treebanks

NP -> det adj* n
NP -> NP PP
PP -> P NP
VP -> V PP
# 这不就是编译原理吗!!手写计算器一样的
operate1 = * | /
operate2 = + | -

F = ( E ) | number
T = T operate1 F | F
E = E operate2 T | T

用于找到中心词和修饰词,transformer模型可以识别句法

scientists count whales from space: 科学家在太空中数鲸鱼/科学家在数来自太空的鲸鱼

Transition-based dependency parsing

构建标注数据资源: Universal Dependencies treebanks通用句法依存树库,包含各种语言,可用于训练各种模型:句法分析、词性标注、。。。也可以用来评估句法分析系统的效果。

但是句法依存分析没有唯一的标准,语言学家会为此争论句子的核心到底是什么。

句法分析有时存在交叉,不能使用投射方法解析

Neural dependency parsing

从词转换模型到基于图的神经网络模型A neural graph-based dependency parser
2017年就已经有效果很好的图模型了

pytorch tutorial

Recurrent Neural Networks

多层神经网络难以训练,效果还不如数量足够的一层隐含层好。数学上是等价的,一层足够多神经单元的隐含层等价于多层。

发展停滞了15年,直到2010s年后,构建实际有效的深层神经网络。

传统观念:正则化,可以防止过拟合(overfitting)增强泛化能力
过拟合可能并不存在:继续训练,测试误差会大幅减小

损失训练到0为过拟合,现在不认为是糟糕的:只要正则化做好,就可以很好的泛化。

L2和L1效果没有那么好,现在最受欢迎的是dropout:在训练时,随机扔掉一部分输出(随机掩码mask)被视为一种特征依赖型正则化。

效果好的两种解释:

  • 让模型学习更多的特征
  • 集成模型思路:多个模型集成训练

overfitting

参数初始化

存在鞍点等问题

使用特定的随机化函数:根据输入和输出数量随机初始化参数.

dropout正则也可以更好的避免随机初始化的一些问题

优化器optimizers

学习率调整等

  • Adagrad
    • simple
    • stall early过早停滞
  • RMSprop
  • Adam
    • fairty good
  • AdamW
  • NAdamW
    • for speed(Nesterov acceleration)加速

Language Modeling—-语言模型

预测接下来的词

Recurrent Neural Networks —- RNNs

Problems with RNNs

Recap on RNNs/LMs