RNN
把前面序列的信息放在隐藏层状态,一步一步往下传,而当前时刻的输出是由上一时刻隐藏层输出和当前输入得到的。
缺点:
-
无法并行计算,比如有100个词,必须前面99个计算完才轮到你。gpu和tpu都是多线程的
-
因为语义信息是一步一步往下传,句子太长,容易导致前面的信息丢失,如果不想丢失,ht得足够大
LSTM,长短时记忆网络
一、核心思想:
解决RNN无法处理的长距离依赖问题。
1.1思路:
RNN对短期的输入非常敏感,LSTM在此基础之上增加一个单元状态来保存长期的状态。
用门控思想对上一时刻状态、当前时刻状态进行保留
1.2前向传播
遗忘门:控制上一时刻的单元状态有多少保留到当前时刻.
输入门:控制当前时刻网络输入有多少保留到单元状态
输出门
二、优缺点
优点:
缺点:
常见技术问题:
三、改进
GRU
seq2seq模型
基本原理
seq2seq模型又称Encoder-Decoder模型,最早用于解决机器翻译问题,解决的是多对多的问题。
该模型一般两部分组成:
Encoder:对输入的长度进行表征
Decoder:对编码器提取的特征建立一个对输出序列的映射
3.1编码器
一般使用Rnn或LSTM结构,将一个序列表征为一个固定长度的向量c
编码器[1]
计算方式:
3.2解码器Decoder
a.将Eecoder得到的上下文向量作为RNN的初始隐藏状态输入到RNN结构中,后续单元不接受 c 的输入
b.将Encoder得到的上下文向量作为每个神经单元的输入,不再是只作为第一个单元的初始隐藏状态.
c.在 c 的处理上和第二种类似,但是区别在于将前一个神经单元的输出作为当前神经单元的输入。
优缺点及改进
优点:
缺点:
a.当某一个单元输出出错时,如果将其输出传递给下一个单元,导致错误传递下去。就采用按一定的比例决定是否采用上一个单元的输出作为输入。即:
ht′=I(采用)σ(Uc+Wht−1′+Vyt−1′+b1)+I(不采用)σ(Uc+Wht−1′+b1)
b.sqe2sqe会导致两种语言之间单词之间的位置、语言的语法位置可能没有一一对应的关系
注意力机制
1 self-attention 的本质是什么?包括哪几个步骤?和普通 Attention 的差别在哪里?
本质:让模型在处理序列数据时自动地学习关于输入序列中各个元素之间的相互依赖关系,并据此对输入序列进行加权聚合,从而输出一个更全局的、基于整个输入序列的信息表示。
Self-attention和普通Attention区别:
它们的主要区别在于Attention的“计算对象”不同。
普通Attention是指在输入序列和输出序列之间进行的注意力计算。具体来说,对于输入序列中的每个位置,都会计算与输出序列中每个位置的注意力权重
Self-attention则是对于输入序列内部进行的注意力计算。每个输入位置都能关注到输入序列内的其他位置。因此,Self-attention 处理序列内部的依赖关系,能够比普通Attention更好地处理长序列输入。
总的来说,Self-attention运用了一个简单但非常有效的思想:考虑每个输入元素和其他所有元素之间的相互关系,从而能够更好地捕获输入序列的关键信息。
2 自注意力机制优缺点
优点:
-
处理长序列:注意力机制非常适用于处理长序列数据,如长文本或长时间序列。它可以从输入序列中选择性地关注特定部分,从而突出重要的上下文信息。
-
多源信息融合:注意力机制可以同时关注多个输入源,将它们的信息融合到一个输出中。这对于多模态情感分析、机器翻译等任务很有用。
-
鲁棒性:由于注意力机制可以关注输入序列中的重要部分,它能够在输入中自动剔除噪音和不重要的信息,提高模型的鲁棒性和稳定性。
-
解释性:注意力机制不仅可以提升模型的性能,还可以提供对模型决策的解释。通过可视化注意力权重,我们可以了解模型决策的依据,并验证模型对输入的关注程度是否符合我们的预期。
缺点:
-
计算资源消耗:注意力机制在处理长序列数据时需要计算序列长度相关的权重,这可能导致计算资源的消耗较大,特别是对于较长的序列。
-
上下文依赖:注意力机制关注的内容是由上下文信息决定的,这意味着它对上下文的依赖较强。如果上下文信息不足或不准确,注意力机制可能无法找到正确的关注点。
-
缺乏全局信息:注意力机制只在局部范围内进行关注,无法捕捉到全局信息。这可能导致一些任务中,模型不能有效地利用全局信息提升性能。
2 在自然语言处理中,注意力机制常常用来做什么?举例说明其应用场景。
在自然语言处理中,注意力机制常常用来帮助模型集中注意力在输入中的特定部分,以增强模型在处理任务时的性能。注意力机制允许模型对不同的输入部分赋予不同的权重,以便模型能够更好地理解和利用输入的相关信息。
以下是一些注意力机制在自然语言处理中的应用示例:
-
机器翻译:在机器翻译任务中,注意力机制用于将源语言句子的不同部分与目标语言句子的对应部分进行对齐。模型可以在翻译过程中自动学习到输入和输出序列之间的对应关系,并对输入序列的不同部分进行不同程度的关注。
-
文本摘要:在文本摘要任务中,注意力机制用于确定输入文本中哪些词语是关键的,应该在生成摘要时被重点关注。模型可以通过对输入的编码表示进行加权求和,以获取对于生成摘要更重要的信息。
attentio原理
以 ‘ 我是一个学生。’为例,我们希望模型可以在翻译student的时候,更加的关注 ‘学生’这个词而不是其他位子的词。这种需求下,提出Attention技术。
固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。增加了注意力模型的Encoder-Decoder框架理解起来如下图所示:
Attention技术中的权重 是如何求得的呢?
得分:
是t时刻Decoder隐藏层输出,是Eecoder的隐藏层输出,W是权重。求得了得分之后我们就可以求得Attention的权重:
S 代表Eecoder中隐藏层个数,权重和对应隐藏层输出状态相乘再求和得到context vector:
计算Attention vector了:
H8=f(Y1,H7)
上述方程阐述的是将C1和H7,C2和H8 结合的过程,对应图中C1 与 H7 和 C2 与 H8相结合的过程。从上述的四个式子中我们可以发现decoder中的H7被使用了两次,第一次是使用在了求权重,第二次是在结合context vector生成Attention vector。
self-attention
原理
那么整个self-attention的计算过程可以如下:
1.首先就是基本的embedding将输入单词转为词向量;
2.根据嵌入向量利用矩阵乘法得到q、k、v三个向量;
3.为每一个向量计算一个相关性score:;
4.为了梯度的稳定,除以根号;主要是为了缩小点积范围,确保softmax梯度稳定性。
5.进行softmax归一化得到权重系数;
6.与value点乘得到加权的每个输入向量的评分v;
7.相加之后得到最终的输出结果z = ∑ v ;
问题
为什么除以根号?
两个向量维度大时,点乘结果方差会很大,则会导致结果值差距大,然后softmax中的指数运算会进一步加大差距。当qXK值很大时,softmax梯度趋于0,也就是梯度消失。原文提到,q、k是相互独立维度为的随机变量,均值为0,方差为1,那qXK的均值为0,方差为,对点乘结果除以根号进行放缩,方差就变为1,就控制了梯度消失的问题。
:是求q和ki的行向量相关性,越相关,权重越大,
multi-head attention
相当于h个不同的self-attention的集成,这里Qw,Kw,Vw的维度为(512,64) 64的是根据最终的维度/h 比如最终Z拼接是512维,h=8,那么每一个注意力层就是64维。
束搜索(Beam Search)
应用场景:
当模型训练好后,给其输入一段话,其输出的每个单元的 y 给的是各个词的概率,我们如何根据概率选词且如何判断是否句子终止呢?
原理:
束搜索只用于测试,不用于训练过程。采取的方法是在每个时间步,选取当前时间步条件概率最大的k个词,作为该时间步的候选输出序列。那按概率算的话,序列越长的概率肯定越小呀,所以一般会有一个和序列长度有关的惩罚系数,如下:
transformer
embbding:用来降维
预测原理?和有监督
-
整体结构
-
inputs 输入
输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding
-
为什么需要添加位置编码呢?
一句话中词的位置不同,则会导致意思不一致。Transformer 的是完全基于self-Attention地,而self-attention是不能获取词语位置信息。所以需要对输入的每个词向量加上位置编码。
-
怎么获取positional encoding?
位置编码通过使用不同频率的正弦、余弦函数生成,然后和对应的位置的词向量相加
-
为什么是将positional encoding与词向量相加,而不是拼接呢?
相加和拼接都可以,效果差不多,但是拼接会使维度过大,导致训练慢,影响效率。
-
encoder
构成
Encoder block是由6个encoder堆叠而成,Nx=6。一个encoder由Multi-Head Attention 和 全连接神经网络Feed Forward Network构成。
假设词向量维度为512,句子长度为10,则x的维度(10,512),Qw,Kw,Vw的维度为(512,64),则他们相乘得到q,k,v的维度为(10,64)。
attention值计算:
-
计算score: ,维度(10,10)
-
除以根号,每个单词之间的相关性得分进行归一化:k就是K的维度64, 维度(10,10)
-
进行softmax转换:score转换成一个值分布在[0,1]之间的概率分布矩阵 维度(10,10)
-
然后乘上对应的v值:(10,10)和(10,64)做点积运算得到Z(10,64),得到的Z相比于v每一行包含了更多的该行词的意思。
-
Multi-Head AttentionTransformer里面是使用了8组不同的Qw,Kw,Vw去得到q,k,v。最后对Z进行拼接。
Add&Normalize:
Add
add就是在Z的基础上加了一个残差块X,防止神经网络在训练过程中发生退化问题,通过增加网络层数,loss减小到达稳定以后,再增加层数训练loss会增大。
随增网络深度的加深,研究表明,网络的深度是实现好的效果的重要因素。然而梯度弥散/爆炸成为训练深层次的网络的障碍,导致无法收敛。有一些方法可以弥补,如归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。然而,虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差。
为什么添加了残差块能防止神经网络退化问题呢?还能防止梯度消失。
假如有40层网络,25层就能达到最优效果,其余15层是不是多余的,则我们追求它们能达到输入等于输出,就是对他们进行恒等映射。要使H(x)=x,则F(x)=0。训练F(x)=0相比于训练H(x)=x,要容易,因为权重初始化就是【0,1】,所以经过转化更接近0,所以有F(x)=H(x)-x函数。
不管通过链式法则走正常路线得到的梯度多么小,两条路线相加的结果都不会小,就可以很有效地进行梯度更新了。
这个残差块往往需要两层以上,单单一层的残差块(y=Wx+x)并不能起到提升作用。
Normalize
目的:1,能够加快训练的速度。2.提高训练的稳定性。
Layer Normalization(LN)和Batch Normalization(BN)
a. LN是在同一个样本中不同神经元之间进行归一化
算均值和方差在每个样本内部算的,相对来说稳定一点。不需要全局均值方差。
b. BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。(RSNET用的这个)
在序列长度中,如果用BN,因为句子长度不一样,每次算的均值方差的抖动会比较大。做预测时,要把全局的均值和方差记录 下来,如果遇到一个新的序列,长度很长,那么之前的均值和方差可能是不那么好用。
-
decoder
是由6个decoder堆叠而成,Nx=6。
Masked Multi-Head Attention
mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。
-
padding mask
为什么进行?是因为由于encoder和decoder两个模块都会有各自相应的输入,但是输入的句子长度是不一样的,计算attention score会出现偏差
每个批次输入序列长度是不一样的,每个batch的句子长度不一样
-
key_padding_mask:
用来遮蔽<PAD>以避免pad token的embedding输入。形状要求:(N,S)
attn_mask:
在训练时,让t个时间的q只看前面对应的k,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。
2维或者3维的矩阵。用来避免指定位置的embedding输入。2维矩阵形状要求:(L, S);也支持3维矩阵输入,形状要求:(N*num_heads, L, S)
其中,N是batch size的大小,L是目标序列的长度(the target sequence length),S是源序列的长度(the source sequence length)。target sequence代表多头attention当中q(查询)的序列,source sequence代表k(键值)和v(值)的序列。例如,当decoder在做self-attention的时候,target sequence和source sequence都是它本身,所以此时L=S,都是decoder编码的序列长度。
5优缺点
优点:基于attention,并行度高。
1.效果好
2.可以并行训练,速度快
3、很好地解决了长距离依赖的问题
缺点:
1.完全基于self-attention,对于词语位置之间的信息有一定的丢失,虽然加入了positional encoding来解决这个问题,但也还存在着可以优化的地方。
bert
预训练和微调
基本原理
整体是一个自编码语言模型,通过设计两个任务来训练该模型:
任务一:采用MaskLM的方式训练该模型。简单说就是输入一句话,随机选择部分要预测的词,用MASK来代替它们,让模型根据所给标签学习这些地方该填的词。?{根据标签怎么学习?}
任务二:在双向语言模型的基础上,增加一个句子级别的连续性预测任务。简单说就是预测输入Bert的两段文本是否是连续的文本,这个任务可以更好的让模型学到连续的文本片段之间的关系。
在做 Next Sentence Prediction 任务时,在第一个句子的首部会加上一个[CLS] token,在两个句子中间以及最后一个句子的尾部会加上一个[SEP] token。
BERT 模型为什么要用 mask? 引入噪音的手段
基于大样本,效果不错。针对小数据效果怎么样?
BERT 模型通过查询字向量表将文本中的每个字转换为一维向量?
输入的 token embedding、segment embedding、position embedding 都是随机生成的?
cls
怎么用transformer?
原论文中,BERT 只使用了 Transformer 的 Encoder 模块,作者分别用 12 层和 24 层 Transformer Encoder 组装了两套 BERT 模型,
其中L是层的数量(Transformer Encoder 块的数量),H是隐藏层的维度 ,自注意头的个数为A 。在所有例子中,我们将前馈(Transformer Encoder 端的 feed-forward 层)的维度设置为4H ,即当 H=768 时是3072 ;当 H=1024 是 4096 。
需要注意的是,与 Transformer 本身的 Encoder 端相比,BERT 的 Transformer Encoder 端输入的向量表示,多了 Segment Embeddings。
输入和输出
输入:
对于英文,Bert将英文词汇作进一步切割,划分为更细粒度的语义单位(WordPiece),例如:将 playing 分割为 play 和##ing;对于中文,是直接将单字作为构成文本的基本单位。
WordPiece:假设按空格切词的话,数据量大导致词典很大,百万级别的,导致整个可学习参数都在嵌入层上。如果一个词在文本出现的概率不大,就应该把他切开就是一个子序列,子序列出现的概率大的话,就保留子序列就行,这样就可以用一个相对较小的词典3万大小的词典来表示很大文本。
输入由三部分组成:
-
文本中各个字/词(或者称为 token)的原始词向量
-
文本向量( Segment Embeddings):该向量的取值在模型训练过程中自动学习,用于刻画文本的全局语义信息,并与单字/词的语义信息相融合
-
位置向量( Position Embeddings):不同位置的字/词所携带的语义信息存在差异(比如:“我爱你”和“你爱我”),因此,BERT 模型加一个不同的向量以作区分
输出:
文本中各个字/词融合了全文语义信息后的向量表示
shape | 作用 | |
model.get_sequence_out() | [batch_size, seq_length, hidden_size] | 主要用于特征提取再处理的序列任务 |
model.get_pooling_out() | [batch_size, hidden_size] | 直接接softmax进行分类 |
训练过程
论文中提出两个预训练任务:Masked LM 和 Next Sentence Prediction
-
Masked LM
-
给定一句话,随机选择一个或几个词mask,根据剩余词预测被抹去的词。
-
引入[MASK]标记会导致预训练阶段和 Fine-tuning 阶段不一致的问题,因此在论文中为了缓解这一问题,采取了如下措施:在一句话中随机选择 15% 的词汇用于预测。对于在原句中被抹去的词汇, 80% 情况下采用一个特殊符号 [MASK] 替换, 10% 情况下采用一个任意词替换,剩余 10% 情况下保持原词汇不变。
-
优势:BERT 并不知道[MASK]替换的是这 15%个 Token 中的哪一个词,因此模型在编码时更多的要考虑它的上下文,使模型具备一定的纠错能力。
-
上述这样做是因为:
-
预测一个词汇时,模型并不知道输入对应位置的词汇是否为正确的词汇( 10% 概率),这就迫使模型更多地依赖于上下文信息去预测词汇,并且赋予了模型一定的纠错能力。
-
缺点就是每批次数据中只有 15% 的标记被预测,这意味着模型可能需要更多的预训练步骤来收敛。
-
Next Sentence Prediction
-
判断输入Bert的两段文本是否是连续的文本,通过重新排序把原文还原出来。
-
Next Sentence Prediction 任务实际上就是段落重排序的简化版:只考虑两句话,判断是否是一篇文章中的前后句。在实际预训练过程中,文章作者从文本语料库中随机选择 50% 正确语句对和 50% 错误语句对进行训练,与 Masked LM 任务相结合,让模型能够更准确地刻画语句乃至篇章层面的语义信息。
-
损失函数
BERT 的损失函数由两部分组成,一部分是Masked LM的单词级别损失函数,一部分是Next Sentence Prediction的句子级别分类任务损失函数,通过这两个任务的联合学习,可以使得 BERT 学习到的表征既有 token 级别信息,同时也包含了句子级别的语义信息。
L是两个任务联合学习的损失函数:
是 BERT 中 Encoder 部分的参数,是 Mask-LM 任务中在 Encoder 上所接的输出层中的参数,
是句子预测任务中在 Encoder 接上的分类器参数。
来自 Mask-LM 的「单词级别分类任务」损失函数:
被 mask 的词集合为 M,词典大小 |V|
在句子预测任务中,也是一个分类问题的损失函数:
模型比较
-
MASK 和 CBOW
mask | cbow | |
核心思想相同 | 定一个句子,会随机 选择15%的词,然后让 BERT 来预测这些 词。 | 给定上下文预测input word |
区别 | word embedding融合了上下文的信息,在不同的上下文环境下,得到的 word embedding 是不一样的。 | 每个单词的 word embedding 是唯一的,因此并不能很好的处理一词多义的问题 |
输入数据部分,bert输入是带有[MASK] token 的“完整”句子 | 只有待预测单词的上下文 | |
·在一句话中随机选择 15% 的词汇用于预测,训练语料大,每个词都预测非常耗时 | 在一句话中每个单词都会进行预测 |
-
与ELMo做比较
-
LSTM 抽取特征的能力远弱于 Transformer
-
BERT 的训练数据以及模型参数均多余 ELMo,这也是比较重要的一点
-
效果比较
BERT 模型是“基于 Fine-tuning 的模式”,这种做法和图像领域 基于 Fine-tuning 的方式基本一致,下游任务需要将模型改造成 BERT 模型,才可利用 BERT 模型预训练好的参数。
ELMo 模型是通过语言模型任务得到句子中单词的 embedding 表示,以此作为补充的新特征给下游任务使用。因为 ELMO 给下游提供的是每个单词的特征形式,所以这一类预训练的方法被称为“Feature-based Pre-Training”。
-
词袋模型、word2vec、bert
词袋模型 | 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个词语都是独立的。 |
|
word2vec | 考虑词语位置关系的一种模型。通过大量语料的训练,将每一个词语映射成一个低维稠密向量, 更加关注于单词级别的嵌入和特征提取 |
|
bert | 引入深度双向编码器来生成词级别和句子级别的上下文信息编码,具有较强的模型可迁移性 提供了一个泛化能力很强的预训练模型 |
-
其他:
消融实验,先到小模型做实验,再到大模型上做
非监督的预训练,代表就是GPT,GPT单向语言模型 bert双向,做mask任务时,需要考虑上下文信息,所以说是双向的,
Elmo用的双向的信息,架构老,用的RNN。GPT架构是transformer,但是只能处理单向的信息,bert将两者融合。
为什么对全部数据集做很多次训练,同样的参数同样的数据集训练十遍,结果方差特别大,最后还是发现数据集训练次数太少了,训练时间长一些可以避免这个问题。
应用
-
用BERT对句子进行向量化
-
句子语义相似度
-
多标签分类
-
BERT 得到输出层的 embedding之后,有几个 label 就连接到几个全连接层,分别接上 softmax ,得到多个损失函数,最后求所有的 loss 的和最小即可。
-
机器翻译
-
文本生成的任务
-
BERT 应用于单词拼写错误的数据是否还是有效?
有少量的单词拼写错误,影响不大,因为训练语料足够大;但是错误达到30%以上,需要人工特征替换错别字。例如花被、花珼、花呗、花呗、花钡均替换成花呗。
优缺点:
优点:
-
在特定场景使用时不需要用大量的语料来进行训练,节约时间效率高效,bert就是这样的一个泛化能力较强的预训练模型。
-
BERT 相较于原来的 RNN、LSTM 可以做到并发执行,同时提取词在句子中的关系特征,并且能在多个不同层次提取关系特征,进而更全面反映句子语义。
-
相较于 word2vec,展现了双向信息的重要性,能根据不同句子上下文获取词义,从而避免歧义出现。
-
bert预训练模式也叫 DAE LM ,优点是它能比较自然地融入双向语言模型?,同时看到被预测单词的上文和下文
缺点:
-
模型参数太多,而且模型太大,少量数据训练时,容易过拟合.
-
BERT 在第一个预训练阶段,假设句子中多个单词被 Mask 掉,这些被 Mask 掉的单词之间没有任何关系,是条件独立的,然而有时候这些单词之间是有关系的.
-
但是需要注意的是,这个问题并不是什么大问题,因为本身 BERT 预训练的语料就是海量的(动辄几十个 G),所以如果训练数据足够大,总有其它例子能够学会这些单词的相互依赖关系。
-
BERT 在预训练时会出现特殊的[MASK],但是它在下游的 fine-tune 中不会出现,这两阶段不一致,产生的影响不太明确。后续bert相关的模型在Mask上这两阶段都采用了,结果也比 BERT 要好。
-
BERT 在分词后做[MASK]会产生的一个问题,随机 Mask 这些 WordPiece ,这就可能出现只 Mask 一个词的一部分的情况,比如probability 这个词被切分成”pro”、”#babi”和”#lity”3 个 WordPiece,把”#babi” Mask 住,但是”pro”和”#lity”没有被 Mask。预测任务就变得容易了。
-
解决办法:词作为一个整体要么都 Mask 要么都不 Mask,这就是所谓的 Whole Word Masking。
提问
-
BERT选择mask掉15%这个比例的词,这个比例可以变吗?
类似CBOW中滑动窗口的中心词,区别是这里的滑动窗口是非重叠的。那从CBOW的滑动窗口角度,10%~20%都是还ok的比例。
-
bert为什么最多只能输入512个词,最多只能两个句子合成一句?
在BERT config中
"max_position_embeddings": 512
"type_vocab_size": 2
因此,在直接使用Google 的BERT预训练模型时,输入最多512个词(还要除掉[CLS]> 和[SEP]),最多两个句子合成一句。这之外的词和句子会没有对应的embedding。
如果有足够的硬件资源自己重新训练BERT,可以更改 BERT config,设置更大max_position_embeddings 和 type_vocab_size值去满足自己的需求。
-
为什么BERT在第一句前会加一个[CLS]标志
最后一层该位置对应[CLS]向量可以作为整句话的语义表示,从而用于下游的分类任务等。当然,也可以通过对最后一层所有词的embedding做pooling去表征句子语义。
self-attention是用文本中的其它词来增强目标词的语义表示,但是目标词本身的语义还是会占主要部分的。
[CLS]与文本中已有的其它词相比,这个无明显语义信息的符号会更“公平”地融合文本中各个词的语义信息,经过12层后,得到的是self-attention后所有词的加权平均,可以更好的表征句子语义。
-
【SEP】标志
做句子层面的分类,
一是在每个句子后放【SEP】
二是学一个嵌入层来区分是第一个还是第二个句子
GNN
CNN
空间变换 维度映射
通道数?
(样本数,灰度图通道数,W,H),通道数和卷积核个数一致,才能计算。
因为神经网络输入的是m×n的矩阵,所以需要view函数把(1,28,28)变成1行784列,-1表示0维(N)维数不变,这样就成了N×784.
卷积核:提取特征。
卷积核的通道数和输入通道数一致,卷积核的个数和输出通道数一致。
padding:
输出的大小等于【(n+2p-f)/s】+1
输出大小 = 【(输入大小-卷积核大小+2*填充大小)/步长 】 +1(向下取整)
下采样,池化层:减少计算量
resnt
实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1, 如下图。新结构中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量。
基本知识
(一)文本嵌入式表示方法实战(词、句和段落向量:Word2Vec,GloVe,Paragraph2vec,FastText,DSSM)_词共现矩阵 text8_胖胖的飞象的博客-CSDN博客 分布式
文本向量化:
基于空间的向量表示方法
One-Hot表示法,此外还有TF表示法、TF-IDF表示法。
-
TF表示法
-
TF-IDF表示法
-
数值计算规则为:所在文本中的频次 乘 词语的逆文档频率
-
考虑有哪些词在文本中出现
-
考虑了词语出现的频次 用出现词语的频次来突出文本主题
-
词语在所有文本上的频率倒数 用出现词语的逆文档频率来突出文档的独特性,进而表示文本的语义。
-
我你他 count(我)=1
-
我和你
-
他和你
-
idf(我)=1+ln(3/2) idf(你)=1+ln(3/3)
分布式表示方法
fastext
FastText对原始word2vec向量的主要改进是包含基于字符的n-gram模型,它允许计算没有出现在训练数据中的单词表示(“词外”字)
传统和分布式对比
缺点 | 优点 | |
one-hot、TF-IDF和向量空间模型 | 容易造成维度爆炸、特征稀疏等问题,对词语的表示力度不强 | |
分布式,如word2vec | 维度低,对词语表示能力更强 |
梯度下降算法
梯度是矢量,梯度的负方向是下降最快的方向。梯度方向是上升最快的,为什么最快?其他方向不是方向导数不是最大值。梯度为负值,模为梯度大小,正负号代表方向。
方向导数,变化率最大的方向,导数就是变化率,
为什么梯度负方向下降最快的额?
解决问题思维
遇到的困难,怎么解决的?
深度学习要解决的最大问题是鞍点,不是局部最优解,因为在深度学习里局部最优点比较少。
鞍点的解决方法:引入随机方法,比如随机梯度下降法(对每一个样本求梯度),也被证明是有效的。
并行化方法用梯度下降,时间复杂度低,但性能也低;用随机梯度下降法时间复杂度高,但性能也高,所以采用折中方法,batchsize。
调参肯定需要对原理理解。
pytorch
梯度下降
梯度下降算法推导:
方向导数:
导数的正负和梯度的关系:
梯度的定义
梯度是矢量,梯度方向指向数值增长最快的方向。梯度就是使得方向导数最大的方向向量
梯度: 为什么梯度的负方向是梯度下降最快的方向_最速下降法为什么是负梯度方向_BlackEyes_SY的博客-CSDN博客
编程学习方法:1、读文档能力 2、基本架构理念
反向传播:
作用:更新权重
tensor里面有两个类:data,grad,都是tensor(张量)。data保存权重的值,grad保存损失函数对权重的导数。tensor做计算会构建计算图,所以值的计算要转化,比如用item。
梯度清零,不清零的话权重会累加,不是我们想要的。
pytorch每进行一次backward,计算图就被释放一次(每一次计算图可能是不一样的),准备下一次图,这是pytorch核心竞争力。看到代码能把计算图画出来。
训练过程:
前向传播,只需要计算loss,
如果用梯度下降法,就要计算梯度
准备数据集
epoch:所有的样本都进行了训练
batch-size:一次训练用到的样本
iteration:all(样本)/batch-size 比如:1000/200=5
模型 模型不是学习能力越强越好,越强容易把噪声学习到,需要的是泛化好的模型
损失函数和优化器
训练:前馈,反馈,更新
激活函数
1、为什么使用?
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到非线性模型中。
sigmoid
-
映射区间(0, 1)
-
也称logistic函数
softmax
主要用于:离散化概率分布
映射区间[0,1]
区别
有监督和无监督
有监督:监督学习的主要目标是建立一个稳健的预测模型
常见任务:分类和回归
无监督:无监督模型试图找到数据中的底层或隐藏结构或分布,以便更多地了解数据。
常见算法:降维PCA、LDA、聚类(Kmeans) 关联规则学习、隐马尔可夫模型
缺点:
-
没有目标变量,则没有计算模型性能固定的方法
-
用户通常必须花费大量时间来解释输出。例如,从 PCA 获得的新特性需要在业务上下文中进行解释
结论:
有监督和无监督需要结合使用,无监督学习提供了对输入数据的洞察,且为有监督的机器学习算法提供了新的有用输入。
要解决的问题
-
模型过程最提分的是?模型代码做的最大改动是?模型优化做的什么。过拟合定义,怎么解决?dropout,batch,正则化定义,为什么能防止过拟合。什么时候用l1什么时候用l2,区别是什么。数学原理。
-
神经网络的基础,位置编码简单了解一下。国外英文文献阅读不就说明英文能力吗
简历
优势放在前面,基础原理扎实,业务不熟悉,但也可以熟悉
选好公司
洗澡洗脸刷牙刷牙的好处
项目实战
NLP好的项目,pytorch
NLP流程
文本预处理:分词、去除停用词