- A+
0x01 优化算法进阶
参看、进阶优化算法:
https://blog.csdn.net/step_forward_ML/article/details/78390809
- 量梯度下降---最小化所有训练样本的损失函数,使得最终求解的是全局的最优解,即求解的参数是使得风险函数最小。
- 随机梯度下降---最小化每条样本的损失函数,虽然不是每次迭代得到的损失函数都向着全局最优方向, 但是大的整体的方向是向全局最优解的,最终的结果往往是在全局最优解附近。
深度学习优化算法解析(Momentum, RMSProp, Adam):
https://blog.csdn.net/willduan1/article/details/78070086
习题积累:



0x02 word2vec
one-hot 向量表示单词,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。
Word2Vec 词嵌入工具的提出正是为了解决上面这个问题,它将每个词表示成一个定长的向量,并通过在语料库上的预训练使得这些向量能较好地表达不同词之间的相似和类比关系,以引入一定的语义信息。
习题积累:
1.相比于使用 one-hot 向量表示词语,以下哪一项不是词嵌入模型的优点:
- 训练好的词向量中能够包含更多语义信息
- 词向量的维度是可以自由设定的
- 词嵌入的实现与使用都更方便
- 词嵌入模型需要运用大规模语料进行训练答案解释
选项1:one-hot 向量只是一个简单的编码,很难包含复杂的语义信息如词语的相似性等,而训练好的词向量则可以从向量的空间关系上去体现词语间的关系,从而蕴含一定的语义信息
选项2:用 one-hot 向量表示词语时,为了使每个词语都获得唯一的编码,向量长度至少要与词典大小相当,而词嵌入模型中的词向量维度则没有这个限制(实际上,词嵌入可以看作是对 one-hot 词向量基于语义相似度进行的一个降维操作)
选项3:词嵌入模型首先需要在大规模语料库上进行训练,才能得到更有意义的词向量,其次在后续模型的训练过程中,可能还需要进行进一步的模型参数优化,所以在实现和使用上,都是比 one-hot 向量更复杂的
选项4:无论是 skip-gram 模型还是 CBOW 模型,都是假设词语的含义是由其周围的单词所决定的,而为了使模型能够“学会”词语的含义,就必须将其置于大规模语料库上进行长时间的训练
2. 对定义好的 Embedding 层 embed = nn.Embedding(num_embedding=5, embed_dim=10)
进行前向计算操作 x = embed(torch.tensor([[1, 2], [3, 4], [5, 6]], dtype=torch.long))
,得到的张量形状是:
- 3×2×5
- 3×2×10
- 5×3×2
- 10×3×2
nn.Embedding
层的实际作用就是将整数张量中的下标,替换为词向量,从张量形状上看,就是在最后添加 embed_dim
维,故得到的张量形状是 3\times 3×2×10,代码中 num_embedding
为词典的大小。
3. 在大语料库上进行大规模的词向量训练时,以下哪项操作是不必要的:
- 在训练时使用负采样近似,即对每个中心词都采集若干噪音词
- 分别定义中心词和背景词的词嵌入层
- 在词典中去掉出现频率极低的词,或将其在文本中替换为
<unk>
等特殊字符 - 将词向量的维度设定得尽可能的大,使之匹配词典的大小答案解释
选项1:大语料库意味着大的词典,若不使用负采样近似方法,词嵌入模型进行前向计算和梯度回传时,softmax
的计算代价将是难以承受的
选项2:由于 skip-gram 模型(或 CBOW 模型)的假设中,中心词和背景词都处于一种不对称的关系,而模型的数学表达式里,向量的点积项 u^\top vu⊤v 却又是对称的,所以只能通过引入两个词嵌入层来保留假设中的非对称关系
选项3:大语料库中通常含有非常多的低频词,若不对其进行处理,将会严重损害模型的泛化能力,甚至降低高频词词向量的质量,同时,更大的词典也会意味着更大的存储和计算开销
选项4:词嵌入本质上就是在对词典进行降维操作,所以过大的词向量维度,反而可能会导致模型过拟合
0x03 词嵌入进阶
- 子词嵌入(subword embedding):FastText 以固定大小的 n-gram 形式将单词更细致地表示为了子词的集合,而 BPE (byte pair encoding) 算法则能根据语料库的统计信息,自动且动态地生成高频子词的集合;
- GloVe 全局向量的词嵌入: 通过等价转换 Word2Vec 模型的条件概率公式,我们可以得到一个全局的损失函数表达,并在此基础上进一步优化模型。
实际中,我们常常在大规模的语料上训练这些词嵌入模型,并将预训练得到的词向量应用到下游的自然语言处理任务中。本节就将以 GloVe 模型为例,演示如何用预训练好的词向量来求近义词和类比词。