cs224n
相关资料
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 |
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 |
用于找到中心词和修饰词,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)被视为一种特征依赖型正则化。
效果好的两种解释:
- 让模型学习更多的特征
- 集成模型思路:多个模型集成训练
参数初始化
存在鞍点等问题
使用特定的随机化函数:根据输入和输出数量随机初始化参数.
dropout正则也可以更好的避免随机初始化的一些问题
优化器optimizers
学习率调整等
- Adagrad
- simple
- stall early过早停滞
- RMSprop
- Adam
- fairty good
- AdamW
- NAdamW
- for speed(Nesterov acceleration)加速
Language Modeling—-语言模型
预测接下来的词











