人工智能入门03-华为昇腾实习笔记-PCA、K-means、GMM、VAE、Transformer、RNN
5.20-5.21学习:
- 观看 AI基础理论-人工智能理论-《双向深度学习》
- -PCA、K-mean、GMM
- -简单认识VAE变分自编码器
- 观看 AI基础理论-人工智能理论-《能耗高效的深度学习》
- 观看 AI基础理论-人工智能理论-《预训练语言模型》
- -语言模型
- -前馈神经网络语言模型
- -循环神经网络语言模型
- -初步了解Transformer模型
- -主流预训练语言模型ELMo、BERT、GPT的对比
本文所有代码均在jupyter notebook上运行,下载链接:https://pan.baidu.com/s/1XZmvcaZ1u_xZhcNokOyqNA?pwd=td7g
提取码:td7g
主成分分析 PCA
参考网页:
(3 封私信) 如何通俗易懂地讲解什么是 PCA(主成分分析)? - 知乎 (zhihu.com)
一文读懂PCA分析 (原理、算法、解释和可视化) - 知乎 (zhihu.com)
主成分分析(PCA)原理详解 - 知乎 (zhihu.com)
PCA简介
PCA是一种线性代数降维的方法,利用正交变换把一系列可能线性相关的变量转化成一组线性不相关的新变量,也成为主成分,从而利用新变量在更小的维度下展示数据的特性。
主成分本质上是原有变量的线性组合,数目小于原有变量。主成分包含原有变量的大部分特征,并且因为有更低的维度,所以便于进一步分析。
为了最大限度的保留对原有数据的解释能力,一般用最大方差理论或最小损失理论来得到主成分的第一个维度,随后每一个主成分的维度都与前一个正交。
PCA的意义
简化运算、去除数据噪音、降低后期计算开销、发现隐含相关变量、利用散点图便于数据可视化…
PCA的关键
通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值、特征向量,选择特征值最大(即方差最大)的k个特征向量组成新的矩阵。这样就实现了将数据矩阵转换到新的空间当中,实现了数据的降维。
由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。
PCA算法推导-基于特征值分解协方差矩阵

K-means 聚类算法
参考链接:
5 分钟带你弄懂 K-means 聚类 - 知乎 (zhihu.com)
K-means算法(一篇文章讲透)_k-means算法原理-CSDN博客
【机器学习】K-means(非常详细) - 知乎 (zhihu.com)
聚类和归类
首先要明白分类和聚类的区别。
分类:前提是类别已知,通过对已知类别的数据进行训练和学习,找到这些不同类的特征,再对未知类别的数据进行分类,属于监督学习。
聚类:事先类别未知,通过聚类分析将数据聚合成几个群体,聚类不需要对数据进行训练和学习,属于无监督学习。
tips:有监督学习和无监督学习就看输入的数据是否有已知的确定的标签。
K-means聚类算法简介
K-means是聚类算法中最常用的一种,其思想大致是“迭代选举”,步骤如下:
1、首先指定希望通过聚类得到几个分组(k个);
2、从数据集中随机选取k个数据点作为初始质心;
3、对集合中每一个点都计算与每一个质心的距离,谁近就和谁归成一类;
4、第一次归类完成后,通过算法在每一类中选出新的质心;
5、如果新质心和旧质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止;
6、如果新质心和旧质心距离差距很大,则迭代3~5步骤。
K-means算法易得到局部最优解,其优点是:简单、效果好、伸缩性好、复杂度低;缺点是:K值人为设定、对异常值敏感、不适合过于离散的分类任务。
K-means算法的改进与优化
针对K-means算法的缺点,有一些可以改进的方法。
比如对数据进行预处理:提前把数据归一化或者标准化,进行异常点检测,去除异常点和噪声。
也可也通过一些方法选取合适的K值:手肘法和Gap statistic法,Github 上一个项目叫 gap_statistic ,方便我们获取建议的分类个数。
K-means算法演示
import numpy as np |

高斯混合模型GMM
参考链接:
python - 高斯混合模型 GMM 的详细解释 - deephub - SegmentFault 思否
深度探索:机器学习中的高斯混合模型(GMM)原理及其应用_高斯混合模型原理实现与应用-CSDN博客
高斯混合模型(GMM)介绍以及学习笔记_log 和guassic混合效应模型-CSDN博客
GMM原理
高斯混合模型的工作原理和K-means类似,可以想象成K-means的概率版本。K-means使用基于距离的方法,而GMM使用概率的算法,是一个将事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。
GMM假设假设数据服从多元高斯分布,能够适应各种复杂的、非线性的、非凸的数据分布,特别适合处理具有椭圆状分布的簇。(K-means假定簇是凸的且各簇大小差异不大,对于形状规则、分布均匀的数据集表现良好。当数据集中的簇形状不规则、大小差异显著或存在非球形分布时,K-means的性能可能下降。)
GMM算法演示
import numpy as np |

GMM等高线图的意义
1、展示高斯成分的分布:等高线图展示了每个高斯成分的概率密度函数(PDF)在二维空间上的投影。颜色越深,表示该点属于该高斯成分的概率越高。这有助于我们理解数据的聚类结构,因为每个高斯成分通常对应一个数据簇。
2、识别重叠区域:当高斯成分在数据空间中有重叠时,等高线图会显示出这些重叠区域。这些区域中的数据点可能属于多个高斯成分,这反映了GMM处理重叠和复杂分布的能力。
3、评估模型拟合:通过观察等高线图,我们可以评估GMM模型对数据集的拟合程度。如果等高线图能够很好地覆盖数据点,并且没有过多的空白区域,那么说明模型已经捕获了数据的主要结构。
4、指导后续分析:等高线图还可以指导后续的分析工作。例如,我们可以根据等高线图识别出数据中的异常值或噪声点,因为它们可能位于等高线图之外或远离任何高斯成分的中心。此外,我们还可以根据等高线图的形状和位置来选择合适的聚类算法或参数设置。
简单认识VAE变分自编码器
变分自编码器(Variational AutoEncoder,VAE),是一种生成模型,VAE能从输入数据中学习潜在变量,并生成新的样本。
VAE模型概述
从概率图的角度看,VAE是带隐变量的有向概率图模型。
从神经网络的角度看,VAE是以自编码器(AutoEncoder,AE)为框架的生成模型。VAE把在编码器确定的分布中进行采样的结果作为解码器的输入,完成对输入图像进行重建。关键在于编码器直接输出的不是潜在空间(编码空间)的具体特征,而是特征分布。
VAE模型结构
VAE模型由两部分组成:编码器(Encoder)和解码器(Decoder)。编码器将输入数据压缩成一个低维的潜在向量(也称为隐变量),解码器则将这个潜在向量解码成原始数据的重构版本。
VAE模型的核心思想是最大化输入数据与重构数据之间的似然性,同时最小化潜在向量的熵。
VAE的输入和输出都是连续向量。输入通常是图像、文本或声音等数据类型,输出可以是相同类型的数据,也可以是新的数据样本。
VAE模型的应用
VAE模型可以用于数据的增广分布,它可以生成与原始数据分布相似但是又具有一定变化的新数据样本,从而扩展原始数据集合的规模和多样性。
VAE在自然图像处理领域也有显著应用,包括图像分类、检测、分割等任务。VAE模型可以用于生成和表示图像数据的先验分布,对于图像恢复、增强等任务也具有重要意义。
VAE不仅能够生成具有高度真实感的图像,还能用于文本数据,打开了自然语言处理(NLP)领域的新可能性。通过将文本数据编码为潜在空间中的向量,VAE能够生成新的文本数据,这对于文本生成、机器翻译、情感分析等任务特别有用。
在生物信息学中,VAE模型也有广泛的应用,如基因组比对、蛋白质结构预测、生物序列分类和生物网络建模等。
能耗高效的深度学习
这一节课主要介绍华为的最新研究成果,研究如何在保证性能的前提下,降低深度学习的资源消耗。了解即可,圈子比较小,不用去学习。
语言模型
参考网页:
一起入门语言模型(Language Models) - 知乎 (zhihu.com)
一文解码语言模型:语言模型的原理、实战与评估_6.像这种根据语音特征参数进行训练的模型称为语言模型。7.将语音识别需要的文-CSDN博客
深入理解语言模型 Language Model - 知乎 (zhihu.com)
语言模型的基本概念
语言模型Language Model,是一个用于建模的自然语言的概率模型。给定一个任意的词序列,它能计算出这个序列是一句话的概率。例如有两个词序列:“你|好|漂亮|啊”,这明显是一句话,一个合格的语言模型会给出很大的概率值;“手机|的|睡觉|好快”,这明显不是一句话,语言模型给出的概率就很小。
语言模型试图捕捉语言的统计特性,以便能够预测或生成文本。例如,对于一个由词 ( w_1, w_2, …, w_m ) 组成的句子,语言模型会计算这个句子的概率 ( p(w_1, w_2, …, w_m) ),这个概率反映了句子作为一个整体出现的频率。这个概率可以通过链式法则分解为一系列条件概率的乘积:

其中,( p(w_i | w_1, …, w_{i-1}) ) 是在给定前面 ( i-1 ) 个词的情况下,第 ( i ) 个词出现的条件概率。在实际应用中,因为参数量巨大,直接计算这些条件概率是非常困难的。
语言模型的分类
1、统计语言模型: 最早的语言模型类别,主要基于统计理论,通常使用n-gram模型,通过统计语料库中词语的出现频率来预测下一个词。
2、神经网络语言模型: 使用神经网络来预测下一个词,能够捕捉更复杂的语言模式,其中最著名的是递归神经网络(RNN)和长短期记忆网络(LSTM)。
3、Transformer模型: Transformer模型是一种基于自注意力机制的模型,如BERT、GPT等,在处理长距离依赖和并行计算方面表现出色。
统计语言模型(n-gram)
在统计学模型横行NLP的时代,语言模型任务的扛把子是N-gram语言模型。为了简化计算,我们引入一阶马尔可夫假设:每个词只依赖前一个词:

此时有:

我们也可以引入二阶马尔可夫假设:每个词依赖前两个词:

此时有:

以N=3的tri-gram语言模型为例,它使用二阶马尔可夫假设,此时可以通过计数来得到概率。

其中,count()表示在训练集中出现的次数。
N-gram 语言模型的优点:(1) 采用极大似然估计,参数易训练;(2) 完全包含了前 n-1 个词的全部信息;(3) 可解释性强,直观易理解。缺点:(1) 缺乏长期依赖,只能建模到前 n-1 个词;(2) 随着 n 的增大,参数空间呈指数增长;(3) 数据稀疏,难免会出现OOV的问题;(4) 单纯的基于统计频次,泛化能力差。
*OOV:未登录词的问题,即测试集中出现了训练集中未出现过的词,导致语言模型计算出的概率为0。
前馈神经网络语言模型
Bengio 在03年的这篇经典 paper 中,提出了如下图所示的前馈神经网络结构。

先给每个词在连续空间中赋予一个向量(词向量),再通过神经网络去学习这种分布式表征。利用神经网络去建模当前词出现的概率与其前 n-1 个词之间的约束关系。
从上图中可以看出网络结构很简单,将前n-1个词的向量(Wi)进行拼接作为网络输入,经过一次非线性变换,最后输出字典中每个词的概率作为预测结果。

图中的绿色虚线对应公式中的 W*x ,在实验阶段,虚线是可选的,通过将 W 设置为0来消除虚线。
这种方式相比 n-gram 具有更好的泛化能力,很大程度地降低了数据稀疏带来的问题。但是这个结构的明显缺点是仅包含了有限的前文信息。
循环神经网络语言模型
参考网页:
史上最详细循环神经网络讲解(RNN/LSTM/GRU) - 知乎 (zhihu.com)
基于循环神经网络的语言模型的介绍与TensorFlow实现(2):神经网络语言模型与数据预处理 - 知乎 (zhihu.com)
循环神经网络语言模型概述
与传统的前馈神经网络不同,RNNLM能够利用其内部状态(记忆)来处理输入序列中的单词。核心思想是在模型中引入时间维度,使得模型能够记住并利用之前的信息。在RNNLM中,每个时刻的输出不仅取决于当前的输入,还受到之前时刻状态的影响。这种结构使得RNNLM能够捕捉到语言中的时序特性和上下文信息。
循环神经网络语言模型的核心可以用如下公式表示:

其中,( h_t ) 是在时间 ( t ) 的隐藏层状态,( x_t ) 是在时间 ( t ) 的输入,( W ), ( U ), 和 ( V ) 是模型参数,( f ) 和 ( g ) 分别是隐藏层和输出层的激活函数。
循环神经网络原理推导
循环神经网络的结构图:

如果先不看w,左边的部分其实就是把一个三层的全连接神经网络竖向看的视角。U是输入层到隐藏层的参数矩阵,V是隐藏层到输出层的参数矩阵,实际都是多维的。
然后把左边加上w,加上时间步,展开后可以得到下图:

W其实是每个时间点之间的权重矩阵,w的值都是相同的。每一时刻的隐藏层不仅由该时刻的输入层决定,还由上一时刻的隐藏层决定。
整体的公式也可以表示成下面这个格式:

循环神经网络语言模型结构
RNN的神经语言模型结构如下图1所示,假如针对一句话“大海的颜色是蓝色的”,其中包括了三个部分:

每一步的输出结果表示在上下文的情况下,该位置的单词是单词表中单词的概率,我们希望概率最大的单词就是真实的结果输出。
Transformer模型
参考网页:
Transformer模型详解(图解最完整版) - 知乎 (zhihu.com)。
理解语言的 Transformer 模型 | TensorFlow Core (google.cn)
【超详细】【原理篇&实战篇】一文读懂Transformer-CSDN博客
Transformer模型是一种革命性的神经网络架构,它在自然语言处理(NLP)领域中大放异彩。这个模型由Google的研究团队在2017年的论文《Attention Is All You Need》中首次提出。它的核心特点是完全基于注意力机制(Attention Mechanism),不依赖于传统的递归神经网络(RNN)或卷积神经网络(CNN)来处理序列数据。
Transformer模型的主要特点
1、自注意力机制(Self-Attention):这是Transformer的核心概念之一,它使模型能够同时考虑输入序列中的所有位置,而不是像循环神经网络(RNN)或卷积神经网络(CNN)一样逐步处理。自注意力机制允许模型根据输入序列中的不同部分来赋予不同的注意权重,从而更好地捕捉语义关系。
2、编码器-解码器架构:Transformer包含编码器(Encoder)和解码器(Decoder)两部分,每部分由多个相同的层组成。编码器处理输入序列,解码器生成输出序列,两者通过注意力机制相互作用。
3、位置编码(Positional Encoding):由于Transformer没有内置的序列位置信息,它需要额外的位置编码来表达输入序列中单词的位置顺序。位置编码通过将一个与位置相关的向量加到输入的词向量上,使模型能够利用单词的顺序信息。
4、并行计算能力:自注意力机制允许模型在处理序列时进行大规模的并行计算,显著提高了训练效率。
5、多头注意力(Multi-Head Attention):Transformer使用多头注意力机制来让模型在不同的子空间中学习信息。这让模型可以从不同的角度理解数据,提高了模型的表达能力。
6、残差连接(Residual Connections)和层归一化(Layer Normalization):为了帮助模型训练更深的结构并加速收敛,Transformer在每个自注意力层和前馈神经网络层之间都使用了残差连接和层归一化。残差连接允许模型跳过某些层,从而更容易地学习恒等映射,层归一化则有助于稳定模型的训练过程。
Transformer模型结构
模型复杂,请详细参考网页链接:Transformer模型详解(图解最完整版) - 知乎 (zhihu.com)。
整体架构:

Encoder和Decoder:

Transformer模型实例代码
本代码来自tensorflow官方,以整理在链接中可以下载,并详细给上了注释。
首先安装数据包,此时博主第一次没有成功,加上了–user才成功。
pip install tensorflow-datasets --user |
TFDS 提供了一组现成的数据集,适合与 TensorFlow、Jax 和其他机器学习框架配合使用。这里安装的是稳定版本。参考网页:TensorFlow Datasets (google.cn)。
然后参考链接文件即可。
主流预训练语言模型ELMo、BERT、GPT的对比
BERT, GPT, ELMo之间的区别
1、三者所选取的特征提取器不同:
BERT采用的是Transformer架构中的Encoder模块;
GPT采用的是Transformer架构中的Decoder模块;
ELMo采用的双层双向LSTM模块。
2、三者所采用的语言模型单/双向不同:
BERT采用的是最彻底的双向语言模型, 可以同时关注context before和context after;
GPT采用的是单向语言模型,,即Transformer中的Decoder,,由于采用了mask机制,,所以未来信息context after都不可见;
ELMo表面上被认为是双向语言模型,,但实际上是左右两个单向LSTM模型分别提取特征,再进行简单的拼接融合。
BERT, GPT, ELMo各自的优点和缺点
1、ELMo优点:从早期的Word2Vec预训练模型的无法解决多义词的问题的缺点出发进行改进,ELMo可以根据上下文动态调整word embedding,可以解决多义词的问题。
ELMO缺点:ELMo使用LSTM提取特征的能力弱于Transformer;ELMo使用向量拼接的方式融合上下文特征的能力弱于Transformer。
2、GPT优点:GPT使用了Transformer提取特征,使得模型能力大幅提升。
GPT缺点:GPT只使用了单向Decoder, 无法融合未来的信息。
3、BERT优点:BERT使用了双向Transformer提取特征, 使得模型能力大幅提升;添加了两个预训练任务,MLM + NSP的多任务方式进行模型预训练。
BERT缺点:模型过于庞大、参数量太多,需要的数据和算力要求过高,训练好的模型应用场景要求高;更适合用于语言嵌入表达,语言理解方面的任务,不适合用于生成式的任务。