├── 3 深度学习算法篇常见面试篇 ├── Attention 常见面试篇.md ├── CNN 常见面试篇.md ├── RNN 常见面试篇.md ├── Transformer 常见面试篇 │ ├── Transformer 常见面试篇.md │ └── 【关于 Transformer 问题及改进】那些你不知道的事.md └── 生成对抗网络 GAN 常见面试篇.md ├── 4 NLP 学习算法 常见面试篇 ├── 4.1 信息抽取 常见面试篇 │ ├── 4.1.1 命名实体识别 常见面试篇.md │ ├── 4.1.2 关系抽取 常见面试篇.md │ └── 4.1.3 事件抽取 常见面试篇.md ├── 4.11 文本摘要 常见面试篇.md ├── 4.2 NLP 预训练算法 常见面试篇 │ ├── 【关于Elmo】那些你不知道的事.md │ ├── 【关于FastText】那些你不知道的事.md │ ├── 【关于TF-idf】那些你不知道的事.md │ └── 【关于word2vec】那些你不知道的事.md ├── 4.3 Bert 常见面试 │ ├── 4.3.1 Bert 模型压缩 常见面试篇.md │ ├── 4.3.2 Bert 模型系列 常见面试篇.md │ └── Bert 常见面试篇.md ├── 4.4 文本分类 常见面试篇 │ ├── 文本分类 trick 常见面试篇.md │ ├── 文本分类 常见面试篇.md │ └── 用检索的方式做文本分类 常见面试篇.md ├── 4.9 文本摘要 常见面试篇 2.md └── 4.9 文本摘要 常见面试篇.md ├── 5 NLP 技巧面 ├── 5.1 少样本问题面 │ ├── 5.1.1 数据增强(EDA) 面试篇.md │ ├── 5.1.2 主动学习 面试篇.md │ └── 5.1.3 数据增强 之 对抗训练 面试篇.md ├── 5.2 “脏数据”处理 面试篇.md ├── 5.3 batch_size设置 面试篇.md ├── 5.4 早停法 EarlyStopping 面试篇.md ├── 5.5 标签平滑法 LabelSmoothing 面试篇.md └── 5.6 Bert Trick 面试篇 │ ├── 5.6.1 Bert 未登录词处理 面试篇.md │ ├── 5.6.2 BERT在输入层引入额外特征 面试篇.md │ ├── 5.6.3 关于BERT 继续预训练 面试篇.md │ └── 5.6.4 BERT如何处理篇章级长文本 面试篇.md ├── 6 Prompt Tuning 面试篇 ├── 6.1 Prompt 面试篇.md ├── 6.2 Prompt 文本生成 面试篇.md ├── 6.3 LoRA 面试篇.md └── 6.4 PEFT(State-of-the-art Parameter-Efficient Fine-Tuning)面试篇.md ├── LICENSE ├── README.md └── misc ├── ali_pay.png ├── placeholder └── wechat_pay.png /3 深度学习算法篇常见面试篇/Attention 常见面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #Attention 2 | 3 | - [[#一、seq2seq 篇|一、seq2seq 篇]] 4 | - [[#1.1 seq2seq (Encoder-Decoder)是什么?|1.1 seq2seq (Encoder-Decoder)是什么?]] 5 | - [[#1.2 seq2seq 中 的 Encoder 怎么样?|1.2 seq2seq 中 的 Encoder 怎么样?]] 6 | - [[#1.3 seq2seq 中 的 Decoder 怎么样?|1.3 seq2seq 中 的 Decoder 怎么样?]] 7 | - [[#1.4 在 数学角度上 的 seq2seq ,你知道么?|1.4 在 数学角度上 的 seq2seq ,你知道么?]] 8 | - [[#1.5 seq2seq 存在 什么 问题?|1.5 seq2seq 存在 什么 问题?]] 9 | - [[#二、Attention 篇|二、Attention 篇]] 10 | - [[#2.1 什么是 Attention?|2.1 什么是 Attention?]] 11 | - [[#2.2 为什么引入 Attention机制?|2.2 为什么引入 Attention机制?]] 12 | - [[#2.3 Attention 有什么作用?|2.3 Attention 有什么作用?]] 13 | - [[#2.4 Attention 流程是怎么样?|2.4 Attention 流程是怎么样?]] 14 | - [[#2.5 Attention 的应用领域有哪些?|2.5 Attention 的应用领域有哪些?]] 15 | - [[#三、Attention 变体篇|三、Attention 变体篇]] 16 | - [[#3.1 Soft Attention 是什么?|3.1 Soft Attention 是什么?]] 17 | - [[#3.2 Hard Attention 是什么?|3.2 Hard Attention 是什么?]] 18 | - [[#3.3 Global Attention 是什么?|3.3 Global Attention 是什么?]] 19 | - [[#3.4 Local Attention 是什么?|3.4 Local Attention 是什么?]] 20 | - [[#3.5 self-attention 是什么?|3.5 self-attention 是什么?]] 21 | 22 | ### 一、seq2seq 篇 23 | ##### 1.1 seq2seq (Encoder-Decoder)是什么? 24 | Seq2seq(Sequence to Sequence),也被称为Encoder-Decoder模型,是一种用于序列到序列(sequence-to-sequence)任务的神经网络模型。 25 | 26 | Seq2seq模型由两个主要的组成部分组成:编码器(Encoder)和解码器(Decoder)。 27 | 28 | 编码器负责将输入序列转换为固定长度的向量表示,通常是一个上下文向量(context vector)。它可以是一个RNN(如LSTM或GRU)或者是一系列卷积层的组合。编码器通过对输入序列逐步进行处理,将序列中的信息进行编码并捕捉上下文信息。 29 | 30 | 解码器负责根据编码器生成的上下文向量,逐步生成目标序列。解码器也可以是一个RNN,它通过上一个时间步的隐藏状态和当前的输入来预测下一个时间步的输出。解码器在每个时间步都会生成一个单词或标记,直到生成完整的目标序列。 31 | 32 | Seq2seq模型在机器翻译、文本摘要、对话生成等任务中得到广泛应用。它能够处理变长的输入和输出序列,并且能够捕捉到序列之间的关联信息。通过训练,模型可以学习到输入序列和输出序列之间的映射关系,从而实现序列到序列的转换。 33 | ##### 1.2 seq2seq 中 的 Encoder 怎么样? 34 | 在序列到序列(seq2seq)模型中,Encoder是负责将输入序列编码为一个固定长度的向量表示的部分。Encoder通常使用循环神经网络(RNN)或者其变种(如长短时记忆网络,LSTM)来处理输入序列。 35 | 36 | Encoder的工作流程如下: 37 | 38 | 1. 输入序列中的每个单词或字符经过嵌入层转换为稠密向量表示。 39 | 40 | 2. 这些向量作为输入被逐个输入到RNN中。RNN的隐藏状态在每个时间步被更新,以便捕捉序列中的上下文信息。 41 | 42 | 3. 最后一个时间步的隐藏状态被视为整个输入序列的编码表示。这个向量包含了输入序列的信息,并且被用作Decoder的初始隐藏状态。 43 | 44 | Encoder的目标是将输入序列的信息编码为一个固定长度的向量,这个向量应该包含足够的信息以便Decoder能够生成正确的输出序列。通过训练,Encoder学习到了如何将输入序列的信息转化为有用的表示。 45 | 46 | 需要注意的是,Encoder的设计可以有多种变体。例如,可以使用双向RNN来处理输入序列,以便同时考虑前向和后向的上下文信息。此外,可以使用注意力机制来加强Encoder的表示能力,使其能够更好地捕捉输入序列中的重要信息。 47 | 48 | 总之,Encoder在seq2seq模型中起到了将输入序列编码为固定长度向量表示的关键作用,为Decoder提供了有用的上下文信息,从而实现了序列到序列的翻译、摘要等任务。 49 | ##### 1.3 seq2seq 中 的 Decoder 怎么样? 50 | 在序列到序列(seq2seq)模型中,Decoder负责将编码后的输入序列解码为输出序列。Decoder通常也使用循环神经网络(RNN)或其变种(如长短时记忆网络,LSTM)来处理输出序列。 51 | 52 | Decoder的工作流程如下: 53 | 54 | 1. 初始隐藏状态:Decoder的初始隐藏状态通常使用Encoder的最后一个时间步的隐藏状态来初始化。这个隐藏状态包含了输入序列的信息,并且作为Decoder的起点。 55 | 56 | 2. 输入处理:在每个时间步,Decoder接收到上一个时间步的输出以及上一个时间步的隐藏状态作为输入。这些输入经过嵌入层转换为稠密向量表示。 57 | 58 | 3. 隐藏状态更新:输入向量和上一个时间步的隐藏状态被输入到RNN中,RNN的隐藏状态在每个时间步被更新,以便捕捉输出序列的上下文信息。 59 | 60 | 4. 输出预测:RNN的隐藏状态被用于预测当前时间步的输出。输出通常通过一个全连接层映射到词汇表的维度,并经过softmax函数得到概率分布。 61 | 62 | 5. 生成下一个时间步的输入:预测的输出通常被用作下一个时间步的输入,这个过程会不断重复,直到生成完整的输出序列或达到最大长度。 63 | 64 | Decoder的目标是根据输入序列的编码表示和上一个时间步的输出来生成下一个时间步的输出,从而逐步生成完整的输出序列。通过训练,Decoder学习到了如何根据上下文信息生成合适的输出。 65 | 66 | 与Encoder类似,Decoder的设计也可以有多种变体。例如,可以使用注意力机制来加强Decoder的表示能力,使其能够更好地对输入序列的不同部分进行关注。此外,可以使用束搜索(beam search)等技术来生成更准确的输出序列。 67 | 68 | 总之,Decoder在seq2seq模型中起到了将编码后的输入序列解码为输出序列的关键作用,通过逐步生成输出,实现了序列到序列的翻译、摘要等任务。 69 | ##### 1.4 在 数学角度上 的 seq2seq ,你知道么? 70 | 在数学角度上,seq2seq模型可以被视为一个**条件概率分布建模**的问题。它可以被表示为一个条件语言模型,其中给定输入序列的条件下,模型需要学习输出序列的条件概率分布。 71 | 72 | 具体地,seq2seq模型可以看作是一个由两个RNN组成的条件概率模型,其中一个RNN作为Encoder,负责将输入序列编码为一个固定长度的向量表示,另一个RNN作为Decoder,负责根据Encoder的输出和上一个时间步的输出来生成下一个时间步的输出。 73 | 74 | 数学上,可以将Encoder表示为函数f,将Decoder表示为函数g。给定输入序列x和输出序列y,seq2seq模型的目标是最大化条件概率$P(y|x)$,即: 75 | 76 | $P(y|x) = ∏ P(y_t|y_1,...,y_{t-1},x)$ 77 | 78 | 其中,$y_t$表示输出序列的第t个元素。通过训练,模型需要学习到Encoder和Decoder的参数,使得在给定输入序列x的条件下,生成的输出序列y的概率最大。 79 | 80 | 在数学角度上,seq2seq模型的训练可以通过最大似然估计来实现,即最大化训练数据中观测到的输出序列的条件概率。常用的优化算法如随机梯度下降(SGD)和其变种(如Adam)可以用于更新模型的参数。 81 | 82 | 总之,从数学角度上看,seq2seq模型可以被视为一个条件概率模型,通过最大化条件概率来学习如何将输入序列映射到输出序列。 83 | ##### 1.5 seq2seq 存在 什么 问题? 84 | Seq2seq模型存在一些问题,其中一些主要问题如下: 85 | 86 | 1. 缺乏对长距离依赖的建模能力:传统的RNN在处理长序列时容易出现梯度消失或梯度爆炸的问题,导致难以捕捉长距离依赖关系。这使得seq2seq模型在处理长句子或长文本时表现不佳。 87 | 88 | 2. 信息压缩:Encoder将整个输入序列编码为一个固定长度的向量表示,这可能会导致信息的丢失或压缩。当输入序列较长或含有大量细节时,Encoder可能无法有效地将所有信息编码到向量中。 89 | 90 | 3. 缺乏全局上下文:Decoder在生成输出序列时,只能依赖于Encoder的向量表示和上一个时间步的输出。这可能导致Decoder无法充分利用输入序列的全局上下文信息。 91 | 92 | 4. 生成偏置:在生成输出序列时,Decoder往往倾向于生成常见的词汇或短语,而忽略一些罕见或复杂的词汇。这可能导致生成的序列过于保守或缺乏多样性。 93 | 94 | 5. 训练困难:由于输出序列的长度通常与输入序列不同,因此在训练时,需要使用特殊的技术(如Teacher Forcing)来指导Decoder生成正确的输出。这可能导致训练过程不稳定或困难。 95 | 96 | 为了解决这些问题,一些改进的模型和技术被提出,如使用注意力机制来增强Decoder的表示能力和对输入序列的关注,使用更复杂的RNN结构(如LSTM、GRU)来处理长序列,以及使用更先进的优化算法和训练技巧来提高训练效果。 97 | ### 二、Attention 篇 98 | ##### 2.1 什么是 Attention? 99 | 注意力机制(Attention)是一种用于增强模型对输入序列中不同位置的关注程度的技术。在序列到序列(seq2seq)模型中,注意力机制被广泛应用于提高模型的性能。 100 | 101 | 在传统的seq2seq模型中,Encoder将整个输入序列编码为一个固定长度的向量表示,然后Decoder使用该向量来生成输出序列。然而,这种方法存在**信息压缩**和**缺乏全局上下文**的问题。 102 | 103 | 注意力机制通过引入额外的注意力权重,使得Decoder在生成每个输出元素时,可以在输入序列的不同位置分配不同的注意力权重。这样,Decoder可以根据输入序列的不同部分调整其关注程度,更好地利用输入序列的全局上下文信息。 104 | 105 | 具体来说,注意力机制通过以下步骤实现: 106 | 107 | 1. Encoder将输入序列编码为一系列隐藏状态(或向量表示)。 108 | 2. Decoder在生成每个输出元素时,通过计算与输入序列中每个隐藏状态之间的相似度(通常使用点积或其他函数),得到一个注意力权重向量。 109 | 3. 注意力权重向量经过归一化处理,得到每个输入位置的注意力权重。 110 | 4. 通过对每个输入位置的隐藏状态和对应的注意力权重进行加权求和,得到一个加权向量表示,作为Decoder的上下文向量。 111 | 5. Decoder使用上下文向量作为额外输入,来生成下一个输出元素。 112 | 113 | 通过引入注意力机制,模型可以根据输入序列的不同部分**动态调整关注程度**,从而更好地捕捉输入序列的重要信息。这有助于提高模型的性能,特别是在处理长序列或具有复杂关系的序列时。 114 | ##### 2.2 为什么引入 Attention机制? 115 | 引入注意力机制的目的是解决传统的seq2seq模型中存在的一些问题,包括信息压缩、缺乏全局上下文和处理长序列的能力不足等。 116 | 117 | 1. 信息压缩:传统的seq2seq模型将整个输入序列编码为一个固定长度的向量表示,这可能导致信息的丢失或压缩。引入注意力机制后,Decoder可以根据输入序列的不同部分调整关注程度,从而更好地利用输入序列的全局信息,避免了信息的压缩和丢失。 118 | 119 | 2. 缺乏全局上下文:传统的seq2seq模型在生成输出序列时,只能依赖于Encoder的向量表示和上一个时间步的输出。这可能导致Decoder无法充分利用输入序列的全局上下文信息。通过引入注意力机制,Decoder可以根据输入序列的不同部分动态调整关注程度,从而更好地捕捉输入序列的重要信息,提供更丰富的全局上下文。 120 | 121 | 3. 处理长序列的能力不足:传统的RNN在处理长序列时容易出现梯度消失或梯度爆炸的问题,导致难以捕捉长距离依赖关系。注意力机制通过允许Decoder在生成每个输出元素时,根据输入序列的不同部分调整关注程度,从而可以更好地处理长序列,捕捉长距离依赖关系。 122 | 123 | 总的来说,引入注意力机制可以提供更好的建模能力和全局上下文,允许模型根据输入序列的重要性调整关注程度,从而提高模型的性能,特别是在处理长序列或具有复杂关系的序列时。 124 | ##### 2.3 Attention 有什么作用? 125 | 注意力机制(Attention)在机器学习和自然语言处理等领域中具有重要的作用,主要体现在以下几个方面: 126 | 127 | 1. 提高模型性能:引入注意力机制可以提高模型的性能,特别是在处理长序列或具有复杂关系的序列时。通过动态调整关注程度,模型可以更好地利用输入序列的全局上下文信息,捕捉重要的输入部分,从而改善模型的预测能力。 128 | 129 | 2. 解决信息压缩问题:传统的seq2seq模型将整个输入序列编码为一个固定长度的向量表示,可能导致信息的丢失或压缩。引入注意力机制后,模型可以根据输入序列的不同部分调整关注程度,避免了信息的压缩和丢失,提高了模型的表达能力。 130 | 131 | 3. 捕捉全局上下文:传统的seq2seq模型在生成输出序列时,只能依赖于固定长度的向量表示和上一个时间步的输出。引入注意力机制后,模型可以根据输入序列的不同部分动态调整关注程度,捕捉输入序列的全局上下文信息,提供更丰富的上下文,改善模型的生成能力。 132 | 133 | 4. 处理长序列:传统的RNN在处理长序列时容易出现梯度消失或梯度爆炸的问题,导致难以捕捉长距离依赖关系。注意力机制通过允许模型根据输入序列的不同部分调整关注程度,可以更好地处理长序列,捕捉长距离依赖关系,提高模型的序列建模能力。 134 | 135 | 总的来说,注意力机制可以提高模型的性能,改善模型的表达能力和生成能力,同时解决信息压缩问题和处理长序列的困难,从而在各种任务中发挥重要作用。 136 | ##### 2.4 Attention 流程是怎么样? 137 | Attention机制的流程通常包括以下几个步骤: 138 | 139 | 1. 编码器(Encoder):首先,输入序列经过编码器进行编码,得到一系列的隐藏状态或向量表示。编码器可以是任何序列模型,如RNN、Transformer等。 140 | 141 | 2. 注意力权重计算:然后,根据编码器的输出和解码器(Decoder)的当前状态,计算注意力权重。注意力权重表示了解码器对编码器输出的关注程度,决定了编码器输出在解码器中的重要性。 142 | 143 | 3. 上下文向量计算:根据注意力权重和编码器的输出,计算上下文向量。上下文向量是编码器输出在注意力机制下的加权平均或加权求和,用于传递编码器的重要信息给解码器。 144 | 145 | 4. 解码器输出计算:将上下文向量和解码器的当前状态作为输入,计算解码器的输出。解码器可以是任何序列模型,如RNN、Transformer等。 146 | 147 | 5. 重复步骤2-4:重复进行步骤2-4,直到生成完整的输出序列或达到预定的停止条件。 148 | 149 | 在计算注意力权重时,常用的方法有多种,如点积注意力、加性注意力、缩放点积注意力等。具体的计算方式取决于注意力机制的设计和使用的模型架构。 150 | 151 | 需要注意的是,Attention机制的流程可以根据具体的应用和模型进行调整和扩展,上述流程只是一个基本的框架。不同的模型和任务可能会有一些差异和变化。 152 | - 步骤一 执行encoder (与 seq2seq 一致) 153 | - 步骤二 计算对齐系数 a 154 | - 步骤三 计算上下文语义向量 C 155 | - 步骤四 更新decoder状态 156 | - 步骤五 计算输出预测词 157 | ##### 2.5 Attention 的应用领域有哪些? 158 | Attention机制在许多领域中都有广泛的应用,包括但不限于以下几个方面: 159 | 160 | 1. 机器翻译:Attention机制在机器翻译任务中被广泛应用。通过引入注意力机制,模型可以根据源语言句子的不同部分动态调整关注程度,从而更好地捕捉源语言和目标语言之间的对应关系,提高翻译质量。 161 | 162 | 2. 文本摘要:Attention机制在文本摘要任务中也有重要应用。通过引入注意力机制,模型可以根据输入文本的不同部分动态调整关注程度,从而更好地捕捉文本中的关键信息,生成准确、有信息量的摘要。 163 | 164 | 3. 语音识别:Attention机制在语音识别任务中扮演着重要角色。通过引入注意力机制,模型可以根据输入语音的不同部分动态调整关注程度,从而更好地捕捉语音信号中的关键信息,提高识别准确率。 165 | 166 | 4. 图像描述生成:Attention机制在图像描述生成任务中也得到了广泛应用。通过引入注意力机制,模型可以根据图像的不同区域动态调整关注程度,从而更好地捕捉图像中的重要内容,生成准确、具有描述性的文本。 167 | 168 | 5. 问答系统:Attention机制在问答系统中也有应用。通过引入注意力机制,模型可以根据问题和文档的不同部分动态调整关注程度,从而更好地定位和关联问题与答案之间的相关信息,提高问答准确率。 169 | 170 | 除了上述应用领域,Attention机制还可以用于情感分析、命名实体识别、语义角色标注等自然语言处理任务,以及图像分类、目标检测、图像生成等计算机视觉任务中。总的来说,Attention机制在各种任务中都能够提供更好的建模能力和性能。 171 | ### 三、Attention 变体篇 172 | ##### 3.1 Soft Attention 是什么? 173 | Soft Attention是一种**基于概率分布**的注意力机制,用于在序列模型中动态地计算输入序列中不同位置的权重。Soft Attention通过计算每个输入位置的注意力权重,将输入序列的不同部分对模型输出的贡献进行建模。 174 | 175 | Soft Attention的计算过程通常包括以下几个步骤: 176 | 177 | 1. 计算注意力权重:首先,根据模型的当前状态和输入序列中的每个位置,计算该位置对模型输出的注意力权重。注意力权重通常通过计算输入位置与模型状态之间的相似度来得到。 178 | 179 | 2. 归一化注意力权重:将注意力权重进行归一化,使其总和为1,以确保注意力权重是一个有效的概率分布。 180 | 181 | 3. 加权求和:根据归一化后的注意力权重,对输入序列的每个位置进行加权求和。这样可以根据注意力权重来动态地计算输入序列的加权平均或加权求和,得到一个上下文向量。 182 | 183 | 4. 上下文向量的应用:将上下文向量与模型的当前状态或其他信息进行结合,用于后续的模型计算或决策。 184 | 185 | Soft Attention的优点是能够在不同的输入位置上分配不同的权重,从而更好地捕捉输入序列中的重要信息。Soft Attention可以应用于各种序列模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、门控循环单元(GRU)以及自注意力模型(如Transformer)。 186 | ##### 3.2 Hard Attention 是什么? 187 | Hard Attention是一种**基于离散选择**的注意力机制,与Soft Attention相对。在Hard Attention中,模型不再对输入序列的每个位置计算一个连续的注意力权重,而是通过选择一个或多个位置来获得注意力。 188 | 189 | Hard Attention的计算过程通常包括以下几个步骤: 190 | 191 | 1. 选择注意力位置:根据模型的当前状态和输入序列,**通过某种策略**选择一个或多个位置作为注意力位置。选择过程可以基于一些规则或者采用一些采样方法,例如使用随机采样或者基于概率分布的采样。 192 | 193 | 2. 获取注意力权重:根据选择的注意力位置,获取对应位置的注意力权重。这些权重可以是固定的,也可以是根据某种规则或概率分布计算得到的。 194 | 195 | 3. 加权求和:根据注意力权重对选择的位置进行加权求和,得到一个上下文向量。 196 | 197 | 4. 上下文向量的应用:将上下文向量与模型的当前状态或其他信息进行结合,用于后续的模型计算或决策。 198 | 199 | 与Soft Attention相比,Hard Attention的优点是能够通过离散选择来减少计算量,并且可以更加明确地指定模型关注的位置。然而,Hard Attention也存在一些缺点,例如难以训练和优化,以及无法直接对注意力权重进行梯度反向传播等。因此,Soft Attention在实践中更为常用。 200 | ##### 3.3 Global Attention 是什么? 201 | Global Attention是一种注意力机制,用于在序列模型中**对整个输入序列的信息进行建模和捕捉**。与Soft Attention和Hard Attention不同,Global Attention不仅考虑输入序列中各个位置的注意力权重,还考虑了整个输入序列的重要性。 202 | 203 | 在Global Attention中,注意力权重的计算过程通常包括以下几个步骤: 204 | 205 | 1. 计算注意力分数:根据模型的当前状态和输入序列中的每个位置,计算该位置对模型输出的注意力分数。注意力分数通常通过计算输入位置与模型状态之间的相似度来得到。 206 | 207 | 2. 归一化注意力分数:将注意力分数进行归一化,使其总和为1,以确保注意力分数是一个有效的概率分布。 208 | 209 | 3. 加权求和:根据归一化后的注意力分数,对输入序列的每个位置进行加权求和。这样可以根据注意力分数来动态地计算输入序列的加权平均或加权求和,得到一个上下文向量。 210 | 211 | 4. 上下文向量的应用:将上下文向量与模型的当前状态或其他信息进行结合,用于后续的模型计算或决策。 212 | 213 | Global Attention在计算注意力权重时,考虑了整个输入序列的信息,因此能够更全面地捕捉输入序列的重要性。它可以应用于各种序列模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、门控循环单元(GRU)以及自注意力模型(如Transformer)。 214 | ##### 3.4 Local Attention 是什么? 215 | Local Attention是一种注意力机制,用于在序列模型中对输入序列中的局部信息进行建模和捕捉。与Global Attention不同,Local Attention仅关注输入序列中与当前模型状态相关的一部分位置,而忽略其他位置的信息。 216 | 217 | 在Local Attention中,注意力权重的计算过程通常包括以下几个步骤: 218 | 219 | 1. 计算注意力分数:根据模型的当前状态和输入序列中的每个位置,计算该位置对模型输出的注意力分数。与Global Attention不同的是,Local Attention只计算与当前模型状态相关的一部分位置的注意力分数。 220 | 221 | 2. 归一化注意力分数:将注意力分数进行归一化,使其总和为1,以确保注意力分数是一个有效的概率分布。 222 | 223 | 3. 加权求和:根据归一化后的注意力分数,对与当前模型状态相关的输入序列位置进行加权求和。这样可以根据注意力分数来动态地计算局部输入序列的加权平均或加权求和,得到一个上下文向量。 224 | 225 | 4. 上下文向量的应用:将上下文向量与模型的当前状态或其他信息进行结合,用于后续的模型计算或决策。 226 | 227 | Local Attention在计算注意力权重时,只关注与当前模型状态相关的一部分位置,从而减少了计算和存储的复杂度。这种注意力机制在处理长序列时,能够更加高效地捕捉输入序列中的局部信息。它可以应用于各种序列模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、门控循环单元( 228 | ##### 3.5 self-attention 是什么? 229 | Self-attention(自注意力)是一种注意力机制,用于在序列模型中**对序列中的不同位置之间**建立关联关系。它是Transformer模型中的关键组成部分。 230 | 231 | 在self-attention中,输入序列中的每个位置都被视为一个查询(query)、一个键(key)和一个值(value)。通过计算查询和键之间的相似度,可以得到每个位置对其他位置的注意力权重。然后,根据这些注意力权重对值进行加权求和,得到一个上下文向量。 232 | 233 | 具体而言,self-attention的计算过程如下: 234 | 235 | 1. 查询、键和值的计算:对于输入序列中的每个位置,通过线性变换将其映射为查询、键和值。这些映射可以使用不同的权重矩阵进行计算。 236 | 237 | 2. 相似度计算:计算查询和键之间的相似度,通常使用点积(dot product)或其他类似的方法。相似度越高,注意力权重越大。 238 | 239 | 3. 注意力权重的计算:将相似度进行缩放和归一化,得到注意力权重。这些权重表示了每个位置对其他位置的重要性。 240 | 241 | 4. 加权求和:根据注意力权重对值进行加权求和,得到一个上下文向量。这个上下文向量包含了序列中不同位置之间的关联信息。 242 | 243 | Self-attention的优势在于它能够对序列中的不同位置之间建立动态的关联关系,而不受序列长度的限制。它可以捕捉到序列中的长距离依赖关系,从而提高模型的性能。在自然语言处理任务中,self-attention在机器翻译、文本生成等任务中取得了很好的效果。 -------------------------------------------------------------------------------- /3 深度学习算法篇常见面试篇/CNN 常见面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #CNN 2 | 3 | - [[#一、动机篇|一、动机篇]] 4 | - [[#二、CNN 卷积层篇|二、CNN 卷积层篇]] 5 | - [[#2.1 卷积层的本质是什么?|2.1 卷积层的本质是什么?]] 6 | - [[#2.2 CNN 卷积层与全连接层的联系?|2.2 CNN 卷积层与全连接层的联系?]] 7 | - [[#2.3 channel的含义是什么?|2.3 channel的含义是什么?]] 8 | - [[#三、CNN 池化层篇|三、CNN 池化层篇]] 9 | - [[#3.1 池化层针对区域是什么?|3.1 池化层针对区域是什么?]] 10 | - [[#3.2 池化层的种类有哪些?|3.2 池化层的种类有哪些?]] 11 | - [[#3.3 池化层的作用是什么?|3.3 池化层的作用是什么?]] 12 | - [[#3.4 池化层 反向传播 是什么样的?|3.4 池化层 反向传播 是什么样的?]] 13 | - [[#3.5 mean pooling 池化层 反向传播 是什么样的?|3.5 mean pooling 池化层 反向传播 是什么样的?]] 14 | - [[#3.6 max pooling 池化层 反向传播 是什么样的?|3.6 max pooling 池化层 反向传播 是什么样的?]] 15 | - [[#四、CNN 整体篇|四、CNN 整体篇]] 16 | - [[#4.1 CNN 的流程是什么?|4.1 CNN 的流程是什么?]] 17 | - [[#4.2 CNN 的特点是什么?|4.2 CNN 的特点是什么?]] 18 | - [[#4.3 卷积神经网络为什么会具有平移不变性?|4.3 卷积神经网络为什么会具有平移不变性?]] 19 | - [[#4.4 卷积神经网络中im2col是如何实现的?|4.4 卷积神经网络中im2col是如何实现的?]] 20 | - [[#4.5 CNN 的局限性是什么?|4.5 CNN 的局限性是什么?]] 21 | - [[#五、Iterated Dilated CNN 篇|五、Iterated Dilated CNN 篇]] 22 | - [[#5.1 什么是 Dilated CNN 空洞卷积?|5.1 什么是 Dilated CNN 空洞卷积?]] 23 | - [[#5.2 什么是 Iterated Dilated CNN?|5.2 什么是 Iterated Dilated CNN?]] 24 | - [[#六、反卷积 篇|六、反卷积 篇]] 25 | - [[#6.1 解释反卷积的原理和用途?|6.1 解释反卷积的原理和用途?]] 26 | 27 | 28 | ### 一、动机篇 29 | ### 二、CNN 卷积层篇 30 | ##### 2.1 卷积层的本质是什么? 31 | 卷积层是深度学习中的一种基本操作,其本质是通过卷积操作对输入数据进行特征提取和特征映射。 32 | 33 | 卷积操作是一种数学运算,它通过将一个滤波器(也称为卷积核或特征检测器)应用于输入数据的局部区域,计算出对应位置的输出值。这个滤波器可以学习到不同的特征,例如边缘、纹理、颜色等。通过在整个输入数据上滑动滤波器,可以得到一个特征图,其中每个元素代表了对应位置的特征值。 34 | 35 | 卷积层的本质是利用卷积操作对输入数据进行特征提取,通过学习滤波器的权重参数,可以使网络自动学习到输入数据中的有用特征。这些特征可以在后续的层中用于分类、检测、分割等任务。卷积层的参数共享和稀疏连接的特性,使得它可以高效地处理大规模的输入数据,并且具有一定的平移不变性,即对输入数据的平移操作具有一定的鲁棒性。 36 | 37 | 总之,卷积层的本质是通过卷积操作对输入数据进行特征提取,利用学习到的特征来表示输入数据的重要信息,从而实现对复杂数据的高效处理和分析。 38 | ##### 2.2 CNN 卷积层与全连接层的联系? 39 | 卷积层和全连接层是深度学习中常用的两种层类型,它们在神经网络中起到不同的作用,但也存在一定的联系。 40 | 41 | 1. 输入数据结构:卷积层适用于处理具有空间结构的输入数据,例如图像数据,它通过卷积操作提取图像的局部特征。而全连接层则适用于处理展平的输入数据,将所有输入元素连接到输出层。 42 | 43 | 2. 参数共享:卷积层具有参数共享的特性,即在卷积操作中使用的滤波器权重在整个输入数据上共享。这种共享可以大大减少模型参数量,提高模型的泛化能力。而全连接层没有参数共享的特性,每个输入元素都与输出层的每个神经元连接,需要更多的参数。 44 | 45 | 3. 局部连接:卷积层中的卷积操作是局部连接的,即每个神经元只与输入数据的一个局部区域连接。这种局部连接可以捕捉输入数据的局部模式和空间关系。而全连接层中的每个神经元与所有输入数据连接,无法捕捉输入数据的局部模式。 46 | 47 | 4. 网络结构:卷积层通常作为神经网络的前几层,用于提取输入数据的特征。全连接层通常作为神经网络的最后一层,用于将提取的特征映射到最终的输出类别或值。 48 | 49 | 尽管卷积层和全连接层有不同的特性和作用,但它们也可以结合使用。在卷积神经网络(CNN)中,通常会在卷积层之后添加全连接层,用于将提取的特征进行分类或回归。这样可以充分利用卷积层提取的特征,同时保留全连接层的灵活性和表达能力。 50 | ##### 2.3 channel的含义是什么? 51 | 在深度学习中,"channel"(通道)一词通常用于描述图像或特征图的维度。它表示数据在某个维度上的分组或表示方式。 52 | 53 | 对于彩色图像,通常由红、绿、蓝三个颜色通道组成,每个通道表示图像中对应颜色的强度信息。这样的图像通常被表示为一个三维张量,其中第一个维度表示高度,第二个维度表示宽度,第三个维度表示通道数。 54 | 55 | 对于灰度图像,只有一个通道,表示图像中每个像素的灰度强度。这样的图像通常被表示为一个二维张量,其中第一个维度表示高度,第二个维度表示宽度。 56 | 57 | 在卷积神经网络(CNN)中,通道也可以表示特征图的数量。每个通道对应一个特征图,表示网络在该位置上学习到的特征。例如,一个卷积层可以有多个通道,每个通道对应不同的滤波器,用于学习不同的特征。这样的特征图通常被表示为一个三维张量,其中第一个维度表示高度,第二个维度表示宽度,第三个维度表示通道数。 58 | 59 | 总之,"channel"(通道)表示数据在某个维度上的分组或表示方式,可以表示图像中的颜色通道或特征图的数量。 60 | ### 三、CNN 池化层篇 61 | ##### 3.1 池化层针对区域是什么? 62 | 池化层(Pooling Layer)是卷积神经网络(CNN)中常用的一种层类型,用于减少特征图的空间尺寸,并且可以提取特征的不变性。 63 | 64 | 池化层针对的是特征图的局部区域。具体来说,池化层将输入的特征图分割成不重叠的区域,并对每个区域进行汇聚操作,通常是取最大值(最大池化)或计算平均值(平均池化)。 65 | 66 | 在最大池化中,池化层会在每个区域中选择最大的特征值作为该区域的输出。这样可以保留最显著的特征,同时减少特征图的空间尺寸。 67 | 68 | 在平均池化中,池化层会在每个区域中计算特征值的平均值作为该区域的输出。这样可以平滑特征图,减少噪声的影响。 69 | 70 | 通过对特征图的池化操作,池化层可以实现以下几个目标: 71 | 1. 减少特征图的空间尺寸,减少计算量和模型参数量。 72 | 2. 提取特征的不变性,使得模型对于输入的微小变化具有一定的鲁棒性。 73 | 3. 保留重要的特征,减少冗余信息。 74 | 75 | 需要注意的是,池化层并不包含可学习的参数,它仅仅是对输入特征图进行固定的操作。 76 | ##### 3.2 池化层的种类有哪些? 77 | 池化层有以下几种常见的类型: 78 | 79 | 1. 最大池化(Max Pooling):在每个池化区域中选择最大的特征值作为输出。最大池化可以保留最显著的特征,并且对于平移、旋转等变换具有一定的不变性。 80 | 81 | 2. 平均池化(Average Pooling):在每个池化区域中计算特征值的平均值作为输出。平均池化可以平滑特征图,减少噪声的影响。 82 | 83 | 3. L2范数池化(L2-norm Pooling):在每个池化区域中计算特征值的L2范数作为输出。L2范数池化可以增强特征的鲁棒性,对输入的微小变化具有一定的不变性。 84 | 85 | 4. 均值池化(Mean Pooling):在每个池化区域中计算特征值的均值作为输出。均值池化与平均池化类似,但可以根据需要自定义池化区域的大小和步幅。 86 | 87 | 5. 自适应池化(Adaptive Pooling):自适应池化可以根据输入的特征图的尺寸自动调整池化区域的大小,以适应不同大小的输入。常见的自适应池化有自适应最大池化和自适应平均池化。 88 | 89 | 需要注意的是,不同的池化层可以根据需要设置池化区域的大小和步幅,以及是否使用填充(padding)。这些参数的选择会影响池化层的输出尺寸和特征提取能力。 90 | ##### 3.3 池化层的作用是什么? 91 | 池化层在卷积神经网络(CNN)中具有以下几个主要作用: 92 | 93 | 1. 特征降维:池化层可以减少特征图的空间尺寸,从而降低计算量和模型参数量。通过减少特征图的尺寸,可以提高模型的计算效率,并且减少过拟合的风险。 94 | 95 | 2. 特征不变性:池化层可以提取特征的不变性,使得模型对于输入的微小变化具有一定的鲁棒性。例如,最大池化可以选择最显著的特征值,从而对平移、旋转等变换具有一定的不变性。 96 | 97 | 3. 特征选择:池化层可以通过选择最大值或计算平均值等操作,来保留最重要的特征信息,减少冗余和噪声的影响。这有助于提高模型的泛化能力和抗干扰能力。 98 | 99 | 4. 空间平移不变性:池化层可以通过减少特征图的空间尺寸,使得模型对于输入在空间上的平移具有一定的不变性。这意味着,即使目标在图像中的位置发生变化,模型仍然能够识别出相同 100 | ##### 3.4 池化层 反向传播 是什么样的? 101 | 池化层的反向传播过程是一种近似的操作,因为**池化层没有可学习的参数**。在反向传播过程中,池化层的梯度会被传递给上一层的梯度,以便更新上一层的参数。 102 | 103 | 具体来说,最大池化和平均池化是两种常见的池化操作,它们在反向传播中的计算方式略有不同: 104 | 105 | 1. 最大池化的反向传播:在最大池化中,只有最大值所在的位置会传递梯度。在反向传播时,将上一层的梯度分配给最大值所在的位置,其余位置的梯度为零。这样,只有最大值所对应的输入元素会接收到梯度,并将其传递给上一层。 106 | 107 | 2. 平均池化的反向传播:在平均池化中,梯度会平均分配给池化区域中的所有位置。在反向传播时,将上一层的梯度均匀分配给池化区域中的所有位置。这样,池化区域中的每个位置都会接收到相同的梯度,并将其传递给上一层。 108 | 109 | 需要注意的是,池化层的反向传播过程中没有可学习的参数需要更新。池化层的主要目的是对特征图进行下采样和特征选择,以减少计算量和参数量,并提取最重要的特征信息。 110 | ##### 3.5 mean pooling 池化层 反向传播 是什么样的? 111 | 在平均池化(mean pooling)中,反向传播的计算方式如下: 112 | 113 | 假设平均池化的输入为X,输出为Y,池化区域的大小为k×k,其中k为池化窗口的尺寸。对于输入X的某个位置(i, j),平均池化的操作是计算池化区域内元素的平均值,并将该平均值作为输出Y的对应位置的值。 114 | 115 | 在反向传播过程中,我们需要计算平均池化对输入X的梯度,即∂L/∂X,其中L表示损失函数。反向传播的计算公式如下: 116 | 117 | 对于输入X的某个位置(i, j),我们需要计算∂L/∂X(i, j)。根据平均池化的定义,池化区域内的元素对应的输出值都是相同的,假设为Y(i', j'),其中(i', j')表示池化区域内的位置。因此,∂L/∂X(i, j)等于∂L/∂Y(i', j')**除以池化区域内元素的个数**。 118 | 119 | 具体地,我们可以将∂L/∂X(i, j)平均分配给池化区域内的所有位置,即∂L/∂X(i', j') = (∂L/∂X(i, j)) / (k×k),其中(i', j')表示池化区域内的位置。 120 | 121 | 需要注意的是,平均池化的反向传播过程中没有可学习的参数需要更新。反向传播的目的是将梯度传递给上一层,以便更新上一层的参数。平均池化主要用于特征降维和特征选择,通过计算平均值来减少特征图的尺寸和提取重要的特征信息。 122 | ##### 3.6 max pooling 池化层 反向传播 是什么样的? 123 | 在最大池化(max pooling)中,反向传播的计算方式如下: 124 | 125 | 假设最大池化的输入为X,输出为Y,池化区域的大小为k×k,其中k为池化窗口的尺寸。对于输入X的某个位置(i, j),最大池化的操作是在池化区域内找到最大的元素,并将该最大值作为输出Y的对应位置的值。 126 | 127 | 在反向传播过程中,我们需要计算最大池化对输入X的梯度,即∂L/∂X,其中L表示损失函数。反向传播的计算公式如下: 128 | 129 | 对于输入X的某个位置(i, j),我们需要计算∂L/∂X(i, j)。根据最大池化的定义,池化区域内只有最大值所在的位置对应的输出值不为零,其他位置的输出值都为零。因此,∂L/∂X(i, j)等于∂L/∂Y(i', j'),其中(i', j')表示池化区域内最大值所在的位置。 130 | 131 | 具体地,我们将∂L/∂X(i, j)**赋值给池化区域内最大值所在的位置,其他位置的梯度为零**,即∂L/∂X(i', j') = ∂L/∂X(i, j),其中(i', j')表示池化区域内最大值所在的位置。 132 | 133 | 需要注意的是,最大池化的反向传播过程中没有可学习的参数需要更新。反向传播的目的是将梯度传递给上一层,以便更新上一层的参数。最大池化主要用于特征降维和特征选择,通过选择池化区域内的最大值来减少特征图的尺寸和提取重要的特征信息。 134 | ### 四、CNN 整体篇 135 | ##### 4.1 CNN 的流程是什么? 136 | 卷积神经网络(Convolutional Neural Network,CNN)的典型流程如下: 137 | 138 | 1. 输入层:接收输入的图像或特征图。 139 | 140 | 2. 卷积层:使用卷积核对输入进行卷积操作,提取图像的局部特征。卷积操作会生成多个卷积特征图。 141 | 142 | 3. 激活函数层:对卷积特征图进行非线性变换,增加网络的非线性能力。常用的激活函数有ReLU、Sigmoid和Tanh等。 143 | 144 | 4. 池化层:对卷积特征图进行下采样,减少特征图的尺寸并保留重要的特征。常用的池化操作有最大池化和平均池化。 145 | 146 | 5. 全连接层:将池化层输出的特征图展平成一维向量,并与权重矩阵相乘,进行全连接操作。全连接层可以看作是一个普通的神经网络。 147 | 148 | 6. 输出层:根据任务的不同,输出层可以是一个分类器(如Softmax分类器)或回归器(如线性回归器)。 149 | 150 | 7. 损失函数:根据任务的不同,选择适当的损失函数来度量模型输出与真实标签之间的差异。 151 | 152 | 8. 反向传播:通过计算损失函数对网络参数的梯度,利用反向传播算法更新网络参数,使得损失函数的值最小化。 153 | 154 | 9. 重复执行步骤2-8:根据需要,可以**堆叠**多个卷积层、激活函数层、池化层和全连接层来构建更深的网络。 155 | 156 | 10. 训练和优化:通过反复训练和优化网络参数,使得网络能够学习到输入数据的特征表示,并在测试集上取得良好的性能。 157 | 158 | 以上是CNN的典型流程,不同的网络结构和任务可能会有所不同,但整体思路是类似的。 159 | ##### 4.2 CNN 的特点是什么? 160 | 卷积神经网络(Convolutional Neural Network,CNN)具有以下特点: 161 | 162 | 1. 局部感知性:CNN通过卷积操作对输入进行特征提取,利用卷积核对局部区域进行操作,从而捕捉输入数据的局部特征。这使得CNN对于处理图像、语音和文本等具有局部结构的数据具有很强的表达能力。 163 | 164 | 2. 参数共享:CNN中的卷积核在整个输入空间上共享参数,使得网络可以学习到具有平移不变性的特征。这样不仅减少了网络的参数量,还能够更好地处理输入数据的平移、旋转和缩放等变换。 165 | 166 | 3. 池化操作:CNN通过池化层对卷积特征图进行下采样,减少特征图的尺寸并保留重要的特征。池化操作可以提高网络的计算效率,减少过拟合,并增加网络对输入的不变性。 167 | 168 | 4. 多层次的特征表示:CNN通常由多个卷积层和池化层组成,每一层都可以学习到不同抽象层次的特征表示。低层次的卷积层可以学习到边缘和纹理等低级特征,而高层次的卷积层可以学习到更加抽象和语义的特征。 169 | 170 | 5. 多通道输入:CNN可以接受多通道的输入,每个通道可以看作是不同的特征图。通过多通道输入,CNN可以同时学习到不同类型的特征,从而提高网络的表达能力。 171 | 172 | 6. 深度结构:CNN可以通过堆叠多个卷积层和全连接层来构建深层网络。深层网络具有更强的表达能力,能够学习到更复杂的特征表示,从而在复杂任务上取得更好的性能。 173 | 174 | 7. 反向传播优化:CNN通过反向传播算法来优化网络参数,使得网络能够自动学习输入数据的特征表示。反向传播算法可以高效地计算网络参数的梯度,从而使得网络能够快速收敛。 175 | 176 | 综上所述,CNN具有局部感知性、参数共享、池化操作、多层次的特征表示、多通道输入、深度结构和反向传播优化等特点,使得它在图像识别、目标检测、语音识别和自然语言处理等领域取得了重要的突破和应用。 177 | ##### 4.3 卷积神经网络为什么会具有平移不变性? 178 | 卷积神经网络(CNN)具有平移不变性的原因是**因为参数共享的存在**。 179 | 180 | 在CNN中,卷积层的每个卷积核都会应用于输入数据的不同位置,并且在不同位置上使用相同的权重参数进行卷积计算。这意味着无论输入数据在图像中的位置如何变化,卷积核都会对其进行相同的卷积操作。 181 | 182 | 由于参数共享,网络在学习过程中会学习到一组可以识别特定特征的卷积核。这些卷积核对于输入数据的不同位置具有相同的响应模式,因此无论特征出现在图像的哪个位置,都能够被网络识别出来。 183 | 184 | 例如,如果网络学习到了一个用于检测边缘的卷积核,它会对图像中的任何位置上的边缘都有相同的响应。这就意味着即使边缘出现在图像的不同位置,网络也能够识别出相同的特征。 185 | 186 | 因此,**参数共享使得CNN具有平移不变性**,即无论输入数据在图像中的位置如何变化,网络都能够识别相同的特征。这种性质使得CNN在处理图像等平移不变性问题上非常有效。 187 | ##### 4.4 卷积神经网络中im2col是如何实现的? 188 | im2col(image to column)是一种常用的卷积神经网络(CNN)中的数据转换操作,用于将输入图像转换为矩阵形式,以便进行矩阵乘法运算。im2col的实现步骤如下: 189 | 190 | 1. 输入图像的大小为[H, W, C],其中H表示高度,W表示宽度,C表示通道数。 191 | 2. 确定卷积核的大小为[K, K],其中K表示卷积核的尺寸。 192 | 3. 计算输出矩阵的大小为[OH, OW],其中OH表示输出矩阵的高度,OW表示输出矩阵的宽度。OH和OW的计算公式为: 193 | $$OH = (H - K + 2P) / S + 1$$ 194 | $$OW = (W - K + 2P) / S + 1$$ 195 | 其中P表示填充大小,S表示步长。 196 | 4. 将卷积核应用于输入图像的每个位置,将每个卷积核对应的输入图像块转换为一列,并将这些列按顺序排列成一个矩阵。 197 | - 首先,根据步长S,从输入图像中提取一个大小为[K, K, C]的块。 198 | - 将该块按列展开为一个大小为[K * K * C, 1]的列向量。 199 | - 将所有的列向量按顺序排列成一个矩阵,该矩阵的大小为[K * K * C, OH * OW]。 200 | 5. 最终得到的矩阵即为im2col的输出,可以用于进行矩阵乘法运算。 201 | 202 | im2col的目的是将卷积操作转换为矩阵乘法操作,从而利用矩阵乘法的高效性进行计算。**通过im2col的转换,可以将原本需要使用嵌套循环的卷积操作转化为简单的矩阵乘法运算**,提高了计算效率。 203 | ##### 4.5 CNN 的局限性是什么? 204 | 卷积神经网络(CNN)在许多任务中取得了显著的成绩,但它也有一些局限性,包括以下几点: 205 | 206 | 1. 对位置和尺度的敏感性:CNN对于输入图像的位置和尺度变化比较敏感。这意味着如果目标物体在图像中的位置发生变化或者尺度发生变化,CNN可能无法准确地进行分类或检测。 207 | 208 | 2. 需要大量的训练数据:CNN通常需要大量的标注数据进行训练,特别是在复杂任务中。这是因为CNN模型通常具有大量的参数,需要足够的数据来进行参数调整和泛化能力的提升。 209 | 210 | 3. 对于小样本问题的表现较差:当训练数据较少时,CNN的性能可能会下降。这是因为CNN模型的参数量较大,需要大量的数据来进行参数估计和模型训练。在小样本问题中,过拟合的风险也会增加。 211 | 212 | 4. 缺乏对全局上下文的理解:CNN主要关注局部特征,对于全局上下文信息的理解相对较弱。这可能导致在某些任务中,特别是需要全局上下文信息的任务中,CNN的性能有限。 213 | 214 | 5. 难以解释性:由于CNN模型的复杂性,其内部的决策过程和特征提取过程往往难以解释。这使得CNN在一些需要可解释性的应用中存在一定的局限性。 215 | 216 | 尽管CNN存在一些局限性,但它仍然是一种非常强大和广泛应用的神经网络模型,在图像分类、目标检测、语义分割等任务中取得了很大的成功。研究者们也在不断改进和拓展CNN模型,以克服其局限性并提高其性能。 217 | ### 五、Iterated Dilated CNN 篇 218 | ##### 5.1 什么是 Dilated CNN 空洞卷积? 219 | Dilated CNN(Dilated Convolutional Neural Network)也被称为空洞卷积(Dilated Convolution),它是一种卷积神经网络中的操作,用于在保持输入和输出的尺寸不变的情况下增加感受野的大小。 220 | 221 | 传统的卷积操作使用固定的卷积核大小和步长,这限制了感受野的大小。而Dilated CNN通过**在卷积核中引入空洞(dilation)来扩大感受野**。空洞卷积通过在卷积核的元素之间插入固定间隔的零值来实现。 222 | 223 | 具体来说,空洞卷积在输入特征图上进行卷积操作,但是卷积核中的元素之间不再是相邻位置,而是以固定的间隔进行采样。这个间隔由空洞率(dilation rate)来控制,空洞率为1表示传统的卷积操作,大于1表示采样间隔更大。 224 | 225 | 通过增加空洞率,Dilated CNN可以在保持输入和输出尺寸不变的情况下,增**加感受野的大小**。这使得网络可以更好地捕捉到图像中的全局和长距离的上下文信息,从而在一些任务中取得更好的性能。 226 | 227 | Dilated CNN在许多计算机视觉任务中得到了广泛应用,特别是在语义分割任务中。通过使用空洞卷积,网络可以在不需要使用较大的卷积核和池化操作的情况下,获得更大的感受野,从而提高了语义分割的准确性和细节保留能力。 228 | ##### 5.2 什么是 Iterated Dilated CNN? 229 | Iterated Dilated CNN(ID-CNN)是一种基于空洞卷积(Dilated Convolution)的卷积神经网络结构,用于图像语义分割任务。 230 | 231 | ID-CNN的核心思想是**通过迭代地叠加多个空洞卷积层来增加感受野,并逐步提取更全局的上下文信息**。每个空洞卷积层都具有不同的空洞率(dilation rate),以获得不同尺度的上下文信息。 232 | 233 | 具体来说,ID-CNN首先通过一个常规的卷积层进行初始特征提取。然后,通过堆叠多个空洞卷积层,每个层的空洞率逐渐增加。这样,每个空洞卷积层都可以捕获到不同尺度的上下文信息。最后,通过逐层的上采样和跳跃连接(skip connection)将不同尺度的特征图进行融合,得到最终的语义分割结果。 234 | 235 | ID-CNN的优势在于它能够有效地扩展感受野,从而提高语义分割的准确性和细节保留能力。通过迭代地叠加空洞卷积层,ID-CNN可以在不引入额外参数和复杂性的情况下,增加网络的感受野,并捕获更全局的上下文信息。 236 | 237 | ID-CNN在图像语义分割任务中取得了很好的性能,并被广泛应用于各种场景,如医学图像分割、自动驾驶、图像理解等。 238 | ### 六、反卷积 篇 239 | ##### 6.1 解释反卷积的原理和用途? 240 | 反卷积(Deconvolution)是一种卷积神经网络中常用的操作,**用于对特征图进行上采样或恢复原始图像的过程**。虽**然称为反卷积,但它实际上是转置卷积**(Transpose Convolution)的一种形式。 241 | 242 | 反卷积的原理是通过卷积操作的逆过程来实现上采样。在传统的卷积操作中,输入特征图通过卷积核进行卷积运算得到输出特征图。而反卷积则是将输出特征图通过转置卷积核进行反卷积运算,从而恢复原始的输入特征图。 243 | 244 | 反卷积的主要用途有两个方面: 245 | 246 | 1. **上采样**:在卷积神经网络中,为了提取更高级别的特征,通常会通过池化层进行下采样(降低特征图的尺寸)。而在一些任务中,需要将特征图恢复到原始的尺寸,这时可以使用反卷积进行上采样。通过反卷积操作,可以将特征图的尺寸扩大,从而恢复原始图像的细节信息。 247 | 248 | 2. **特征图可视化**:反卷积也可以用于可视化卷积神经网络中的特征图。通过将特定的特征图输入到反卷积层中,可以将其恢复到输入图像的尺寸,从而可以观察到网络在不同层次上学到的特征。这对于理解网络的工作原理和分析网络的性能非常有帮助。 249 | 250 | 需要注意的是,**反卷积并不是真正的卷积操作的逆过程,因为在卷积操作中存在信息丢失。反卷积只是一种近似的逆操作,它可以通过填充零值和使用适当的卷积核来实现上采样**。 -------------------------------------------------------------------------------- /3 深度学习算法篇常见面试篇/RNN 常见面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #RNN 2 | 3 | - [[#一、RNN 篇|一、RNN 篇]] 4 | - [[#1.2 为什么需要 RNN?|1.2 为什么需要 RNN?]] 5 | - [[#1.2 RNN 结构是怎么样的?|1.2 RNN 结构是怎么样的?]] 6 | - [[#1.3 RNN 前向计算公式?|1.3 RNN 前向计算公式?]] 7 | - [[#1.4 RNN 存在什么问题?|1.4 RNN 存在什么问题?]] 8 | - [[#二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇|二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇]] 9 | - [[#2.1 为什么 需要 LSTM?|2.1 为什么 需要 LSTM?]] 10 | - [[#2.2 LSTM 的结构是怎么样的?|2.2 LSTM 的结构是怎么样的?]] 11 | - [[#2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题?|2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题?]] 12 | - [[#2.3 LSTM 的流程是怎么样的?|2.3 LSTM 的流程是怎么样的?]] 13 | - [[#2.4 LSTM 中激活函数区别?|2.4 LSTM 中激活函数区别?]] 14 | - [[#2.5 LSTM的复杂度?|2.5 LSTM的复杂度?]] 15 | - [[#2.6 LSTM 存在什么问题?|2.6 LSTM 存在什么问题?]] 16 | - [[#三、GRU (Gated Recurrent Unit)|三、GRU (Gated Recurrent Unit)]] 17 | - [[#3.1 为什么 需要 GRU?|3.1 为什么 需要 GRU?]] 18 | - [[#3.2 GRU 的结构是怎么样的?|3.2 GRU 的结构是怎么样的?]] 19 | - [[#3.3 GRU 的前向计算?|3.3 GRU 的前向计算?]] 20 | - [[#3.4 GRU 与其他 RNN系列模型的区别?|3.4 GRU 与其他 RNN系列模型的区别?]] 21 | - [[#四、RNN系列模型篇|四、RNN系列模型篇]] 22 | - [[#4.1 RNN系列模型 有什么特点?|4.1 RNN系列模型 有什么特点?]] 23 | 24 | ### 一、RNN 篇 25 | ##### 1.2 为什么需要 RNN? 26 | RNN(Recurrent Neural Network,循环神经网络)是一种具有循环连接的神经网络结构,主要用于处理序列数据。RNN之所以被广泛应用,是因为它具有以下几个重要的特性和优势: 27 | 28 | 1. 处理序列数据:RNN在处理**序列数据**时具有天然的优势。它能够对序列中的每个元素进行逐个处理,并且可以保持和记忆之前处理的信息。这使得RNN非常适合于处理时间序列、自然语言处理(NLP)等任务,如语言模型、机器翻译、语音识别等。 29 | 30 | 2. 上下文信息:RNN能够捕捉到序列数据中的上下文信息。通过循环连接,RNN可以传递之前的信息到当前时间步,从而可以利用**之前的**上下文来影响当前的预测或输出。这使得RNN在处理具有长期依赖关系的任务时更加有效,如语言模型中的长句理解、音乐生成等。 31 | 32 | 3. 变长输入和输出:RNN可以处理**变长**的输入和输出序列,而不需要固定长度的输入和输出。这使得RNN在处理不同长度的序列数据时非常灵活,如可变长度的文本、可变长度的语音信号等。 33 | 34 | 4. **参数共享**:RNN**在每个时间步使用相同的参数**,这使得模型的参数量较小,训练和推理的效率更高。参数共享也有助于模型的泛化能力,因为模型可以从一个时间步学到的特征和知识可以被应用到其他时间步上。 35 | 36 | 5. 反向传播:RNN可以使用反向传播算法进行训练,从而可以自动学习输入和输出之间的复杂映射关系。通过反向传播,RNN可以根据给定的目标函数进行优化,从而提高模型的性能。 37 | 38 | 总之,RNN的引入主要是为了处理序列数据,并且能够利用序列的上下文信息。它在自然语言处理、时间序列分析、语音识别等任务中取得了很好的效果,并且也有很多的变种和扩展形式,如LSTM(Long Short-Term Memory)和GRU(Gated Recurrent Unit),用于解决RNN中的梯度消失和梯度爆炸等问题。 39 | ##### 1.2 RNN 结构是怎么样的? 40 | RNN(Recurrent Neural Network,循环神经网络)是一种具有循环连接的神经网络结构,其主要特点是可以处理序列数据,并且能够保持和记忆之前处理的信息。 41 | 42 | RNN的基本结构如下: 43 | 44 | 1. 输入层(Input Layer):接收输入序列的数据。 45 | 46 | 2. 隐藏层(Hidden Layer):包含一个或多个循环单元(Recurrent Unit),用于处理序列数据和传递信息。 47 | 48 | - 循环单元(Recurrent Unit):RNN中的核心组件,负责处理序列数据和保持信息。常见的循环单元包括: 49 | - 简单循环单元(Simple Recurrent Unit):使用一个简单的激活函数(如tanh)来处理输入和隐藏状态。 50 | - 长短期记忆单元(Long Short-Term Memory Unit,LSTM):通过门控机制来控制信息的流动,解决了梯度消失和梯度爆炸的问题。 51 | - 门控循环单元(Gated Recurrent Unit,GRU):类似于LSTM,但参数更少,计算更简单。 52 | 53 | 3. 输出层(Output Layer):根据隐藏层的输出进行预测或分类。 54 | 55 | RNN的关键点在于循环连接,每个时间步的输入不仅包括当前时间步的输入数据,还包括上一个时间步的隐藏状态。这样,RNN可以将之前的信息传递到当前时间步,并且可以保持和记忆之前的处理结果。 56 | 57 | RNN的训练通常使用反向传播算法,通过最小化损失函数来优化模型参数。在训练过程中,RNN会根据当前时间步的输入和上一个时间步的隐藏状态计算当前时间步的隐藏状态,并将其传递到下一个时间步。这样,RNN可以逐步学习输入和输出之间的映射关系,并根据给定的目标函数进行优化。 58 | 59 | 需要注意的是,RNN存在梯度消失和梯度爆炸的问题,即在反向传播过程中,梯度可能会变得非常小或非常大。为了解决这个问题,出现了一些改进的RNN结构,如LSTM和GRU,它们通过引入门控机制来控制梯度的流动,从而提高模型的性能。 60 | ##### 1.3 RNN 前向计算公式? 61 | RNN的前向计算公式可以表示为以下几个步骤: 62 | 63 | 1. 初始化隐藏状态:在时间步t=0时,将隐藏状态$h_{-1}$初始化为0向量。 64 | 65 | 2. 计算隐藏状态:对于每个时间步t,根据当前时间步的输入$x_t$和上一个时间步的隐藏状态$h_{t-1}$,计算当前时间步的隐藏状态$h_t$。具体计算公式如下: 66 | 67 | $h_t = f(W_{hx}x_t + W_{hh}h_{t-1} + b_h)$ 68 | 69 | 其中,$W_{hx}$是输入到隐藏层的权重矩阵,$W_{hh}$是隐藏层自身的权重矩阵,$b_h$是隐藏层的偏置向量,$f(\cdot)$是激活函数(如tanh)。 70 | 71 | 3. 计算输出:根据当前时间步的隐藏状态$h_t$,计算当前时间步的输出$y_t$。具体计算公式如下: 72 | 73 | $y_t = g(W_{yh}h_t + b_y)$ 74 | 75 | 其中,$W_{yh}$是隐藏层到输出层的权重矩阵,$b_y$是输出层的偏置向量,$g(\cdot)$是输出层的激活函数(如softmax)。 76 | 77 | 在每个时间步的前向计算中,隐藏状态$h_t$会被传递到下一个时间步,以保持和记忆之前的信息。 78 | 79 | 需要注意的是,RNN的前向计算是逐个时间步进行的,每个时间步的计算都依赖于上一个时间步的结果。因此,RNN可以处理序列数据,并在处理过程中保持和记忆之前的信息。 80 | ##### 1.4 RNN 存在什么问题? 81 | RNN存在以下几个问题: 82 | 83 | 1. **梯度消失或梯度爆炸**:由于RNN中的隐藏状态$h_t$的计算依赖于上一个时间步的隐藏状态$h_{t-1}$,在反向传播过程中,梯度会通过时间步的乘积进行传播。这可能导致梯度消失或梯度爆炸的问题,使得模型难以学习长期依赖关系。 84 | 85 | 2. 长期依赖建模困难:由于梯度消失或梯度爆炸的问题,RNN很难有效地捕捉长期依赖关系,即在时间步较远的情况下,当前时间步的输出与之前的输入之间的关系。 86 | 87 | 3. **计算效率低**:RNN的计算是顺序进行的,每个时间步都需要等待上一个时间步的计算结果。这导致RNN的计算效率较低,不适用于处理长序列数据。 88 | 89 | 为了解决这些问题,出现了一些改进的RNN结构,如长短期记忆网络(LSTM)和门控循环单元(GRU)。这些改进的结构通过引入门控机制和记忆单元,可以更好地捕捉长期依赖关系,并减轻梯度消失或梯度爆炸的问题。此外,还有一些其他的序列建模方法,如Transformer,也可以用于处理序列数据,并在一定程度上解决了RNN存在的问题。 90 | ### 二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇 91 | ##### 2.1 为什么 需要 LSTM? 92 | LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN)结构,它被设计用来解决传统RNN存在的梯度消失和长期依赖建模困难的问题。以下是为什么需要LSTM的几个原因: 93 | 94 | 1. 解决梯度消失问题:在传统的RNN中,梯度通过时间步的乘积进行传播,**当时间步较大时,梯度可能会变得非常小,导致梯度消失的问题**。LSTM引入了门控机制,通过遗忘门、输入门和输出门来控制信息的流动,从而有效地解决了梯度消失的问题。 95 | 96 | 2. 捕捉长期依赖关系:传统的RNN很难捕捉到时间步较远的输入与当前输出之间的长期依赖关系。LSTM**通过引入记忆单元(cell state)和门控机制,可以选择性地保留或遗忘过去的信息**,从而更好地捕捉长期依赖关系。 97 | 98 | 3. 处理序列数据:LSTM适用于处理序列数据,可以在序列中保持和记忆之前的信息。这使得LSTM在自然语言处理(NLP)、语音识别、时间序列预测等任务中得到广泛应用。 99 | 100 | 4. 灵活性和可扩展性:LSTM的门控机制使得其具有灵活性,可以根据任务的需要选择性地控制信息的流动。此外,LSTM可以通过堆叠多个LSTM层或与其他神经网络结构(如CNN、Transformer)结合,来构建更复杂的模型。 101 | 102 | 总之,LSTM通过引入门控机制和记忆单元,有效地解决了传统RNN存在的梯度消失和长期依赖建模困难的问题,使得它在处理序列数据和建模长期依赖关系方面具有重要的优势。 103 | ##### 2.2 LSTM 的结构是怎么样的? 104 | LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN)结构,它由以下几个关键组件构成: 105 | 106 | 1. Cell State(记忆单元):LSTM中的记忆单元是网络的核心组件,用于存储和传递信息。它类似于传统RNN中的隐藏状态,但LSTM的记忆单元可以选择性地保留或遗忘过去的信息。 107 | 108 | 2. 输入门(Input Gate):输入门控制着新的输入信息对记忆单元的影响。它通过一个sigmoid激活函数来决定哪些信息应该被更新。输入门的输出范围在0到1之间,其中0表示完全忽略,1表示完全接受。 109 | 110 | 3. 遗忘门(Forget Gate):遗忘门决定了记忆单元中哪些信息应该被遗忘。它通过一个sigmoid激活函数来决定哪些信息应该被遗忘,输出范围也在0到1之间。 111 | 112 | 4. 输出门(Output Gate):输出门控制着记忆单元中的信息如何影响当前时间步的输出。它通过一个sigmoid激活函数来决定记忆单元中的信息应该如何被输出,同时还使用tanh激活函数来对输出进行缩放。 113 | 114 | 5. 候选记忆单元(Candidate Memory Cell):候选记忆单元用于计算新的候选信息,它基于当前时间步的输入和前一个时间步的隐藏状态。候选记忆单元的计算主要涉及到一个tanh激活函数。 115 | 116 | LSTM的工作流程如下: 117 | 1. 根据当前时间步的输入和前一个时间步的隐藏状态,计算候选记忆单元的值。 118 | 2. 根据输入门的输出和候选记忆单元的值,更新记忆单元的值。 119 | 3. 根据遗忘门的输出和前一个时间步的记忆单元的值,更新记忆单元的值。 120 | 4. 根据输出门的输出和当前时间步的记忆单元的值,计算当前时间步的隐藏状态。 121 | 5. 输出当前时间步的隐藏状态作为模型的输出。 122 | 123 | 通过输入门、遗忘门和输出门的控制,LSTM可以选择性地保留或遗忘过去的信息,并根据当前的输入和记忆单元的状态来更新和输出隐藏状态,从而更好地捕捉长期依赖关系。 124 | ##### 2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题? 125 | LSTM通过引入门控机制来缓解RNN中的梯度消失和梯度爆炸问题。 126 | 127 | 1. 梯度消失问题:在传统的RNN中,梯度通过时间步的乘积进行传播,当时间步较大时,梯度可能会变得非常小,导致梯度消失的问题。LSTM通过遗忘门(forget gate)来控制记忆单元(cell state)中的信息保留程度。遗忘门根据输入和前一个时间步的隐藏状态,决定哪些信息应该被遗忘,从而减轻了梯度消失问题。 128 | 129 | 2. 梯度爆炸问题:梯度爆炸是指在反向传播过程中,**梯度值变得非常大**,导致权重更新过大,网络无法收敛。**为了解决梯度爆炸问题,LSTM引入了梯度裁剪(gradient clipping)技术**。梯度裁剪通过限制梯度的范数,将梯度值缩放到一个可控的范围内,从而防止梯度爆炸。 130 | 131 | 综上所述,LSTM通过引入门控机制和梯度裁剪技术,有效地缓解了传统RNN中的梯度消失和梯度爆炸问题。这使得LSTM在处理长序列和建模长期依赖关系时表现出更好的性能。 132 | ##### 2.3 LSTM 的流程是怎么样的? 133 | LSTM的流程如下: 134 | 135 | 1. 输入层:接收输入序列的特征向量。 136 | 137 | 2. 遗忘门计算:遗忘门通过输入层的特征向量和前一个时间步的隐藏状态,计算一个介于0和1之间的遗忘门向量。该向量决定了前一个时间步的记忆单元中哪些信息应该被遗忘。 138 | 139 | 3. 输入门计算:输入门通过输入层的特征向量和前一个时间步的隐藏状态,计算一个介于0和1之间的输入门向量。该向量决定了输入层的特征向量中哪些信息应该被加入到当前时间步的记忆单元。 140 | 141 | 4. 候选记忆单元计算:候选记忆单元通过输入层的特征向量和前一个时间步的隐藏状态,计算一个候选记忆单元向量。该向量包含了当前时间步的候选信息。 142 | 143 | 5. 记忆单元更新:根据遗忘门、输入门和候选记忆单元,更新前一个时间步的记忆单元。遗忘门决定了哪些信息应该被遗忘,输入门决定了哪些信息应该被加入,候选记忆单元提供了候选的新信息。 144 | 145 | 6. 输出门计算:输出门通过输入层的特征向量和前一个时间步的隐藏状态,计算一个介于0和1之间的输出门向量。该向量决定了记忆单元中的信息如何影响当前时间步的输出。 146 | 147 | 7. 隐藏状态更新:根据输出门和当前时间步的记忆单元,计算当前时间步的隐藏状态。隐藏状态是LSTM的输出,也可以作为下一个时间步的输入。 148 | 149 | 8. 重复上述步骤:重复执行上述步骤,直到处理完所有时间步。 150 | 151 | LSTM通过门控机制和记忆单元来选择性地保留和遗忘信息,并根据当前输入和记忆单元的状态来更新和输出隐藏状态。这种结构使得LSTM能够更好地捕捉长期依赖关系,并在处理序列数据时表现出更好的性能。 152 | ##### 2.4 LSTM 中激活函数区别? 153 | 在LSTM中,主要有三个激活函数,它们分别是sigmoid函数、双曲正切函数(tanh函数)和线性函数。 154 | 155 | 1. Sigmoid函数:在LSTM中,sigmoid函数主要用于计算遗忘门、输入门和输出门的值。它将输入值映射到一个介于0和1之间的范围内。Sigmoid函数的公式为: 156 | σ(x) = 1 / (1 + exp(-x)) 157 | 其中,x表示输入值,σ(x)表示sigmoid函数的输出。 158 | 159 | 2. 双曲正切函数(tanh函数):在LSTM中,tanh函数主要用于计算候选记忆单元和隐藏状态的值。tanh函数将输入值映射到一个介于-1和1之间的范围内,相对于sigmoid函数而言,tanh函数的输出范围更大。tanh函数的公式为: 160 | tanh(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)) 161 | 其中,x表示输入值,tanh(x)表示tanh函数的输出。 162 | 163 | 3. 线性函数:线性函数主要用于计算LSTM的输出。它将输入值直接输出,不进行任何变换。线性函数的公式为: 164 | f(x) = x 165 | 其中,x表示输入值,f(x)表示线性函数的输出。 166 | 167 | 这三个激活函数在LSTM中的不同应用,使得LSTM能够灵活地处理不同的计算和转换需求,从而更好地捕捉序列数据中的长期依赖关系。 168 | ##### 2.5 LSTM的复杂度? 169 | LSTM的复杂度可以从以下几个方面来考虑: 170 | 171 | 1. 时间复杂度:**LSTM的时间复杂度主要取决于序列的长度和LSTM的层数**。对于一个长度为T的序列,LSTM的时间复杂度通常为O(T)。在每个时间步,LSTM需要执行一系列的矩阵乘法和非线性激活函数操作。 172 | 173 | 2. 空间复杂度:**LSTM的空间复杂度主要取决于LSTM的参数量和序列的长度**。LSTM的参数量与LSTM的层数、每层的隐藏单元数量以及输入特征维度相关。对于一个长度为T的序列,LSTM的空间复杂度通常为O(T)。 174 | 175 | 3. 训练复杂度:LSTM的训练复杂度主要取决于训练数据的大小、训练的迭代次数和优化算法的选择。LSTM通常使用梯度下降算法进行训练,其中每个时间步的梯度计算和参数更新都需要一定的计算量。训练复杂度通常与序列的长度和LSTM的层数相关。 176 | 177 | 总体来说,LSTM的复杂度与序列的长度、LSTM的层数、每层的隐藏单元数量以及输入特征维度等因素相关。在实际应用中,为了降低计算复杂度,可以采用一些优化技术,如批处理、参数共享和权重剪枝等。 178 | ##### 2.6 LSTM 存在什么问题? 179 | 尽管LSTM在处理序列数据中的长期依赖关系方面表现出色,但它仍然存在一些问题,包括: 180 | 181 | 1. 参数量大:LSTM的参数量通常很大,特别是当层数较多、隐藏单元数量较多时,会导致模型的存储和计算开销增加。 182 | 183 | 2. 训练困难:LSTM的训练过程相对复杂,需要处理长序列的梯度传播问题。当序列长度较长时,梯度消失或梯度爆炸的问题可能会出现,导致训练困难。 184 | 185 | 3. 难以解释:LSTM的内部结构相对复杂,很难解释每个门的具体作用和信息流动。这使得LSTM的可解释性相对较低,难以理解模型的决策过程。 186 | 187 | 4. 预测不准确:尽管LSTM在处理长期依赖关系上表现良好,但在某些情况下,由于模型设计不合理或参数选择不当,LSTM可能无法准确地捕捉序列数据中的长期依赖关系,导致预测结果不准确。 188 | 189 | 5. 计算效率低:由于LSTM的复杂结构和参数量大,以及需要对每个时间步进行计算,LSTM的计算效率相对较低。这在处理大规模数据集或实时应用中可能会成为瓶颈。 190 | 191 | 针对这些问题,研究者们提出了一些改进的LSTM变体,如GRU(门控循环单元)、Peephole LSTM、Depth Gated RNN等,以解决参数量大、训练困难和计算效率低等问题。此外,近年来也出现了一些基于注意力机制的模型,如Transformer,它在一些任务上取得了很好的效果。 192 | ### 三、GRU (Gated Recurrent Unit) 193 | ##### 3.1 为什么 需要 GRU? 194 | GRU(门控循环单元)是一种改进的循环神经网络(RNN)结构,相比传统的LSTM,它**具有更简单的结构和更少的参数**。引入GRU主要是为了解决LSTM存在的一些问题,并提供一种更轻量级的模型选择。 195 | 196 | 以下是一些使用GRU的原因: 197 | 198 | 1. 简化结构:相对于LSTM,GRU的结构更加简单。GRU只有两个门控单元(重置门和更新门),而LSTM有三个门控单元(输入门、遗忘门和输出门)。这种简化结构使得GRU更易于理解和解释,并且减少了模型的复杂性。 199 | 200 | 2. 减少参数量:GRU相对于LSTM具有更少的参数量,这在一些资源受限的场景下是非常有价值的。减少参数量可以降低模型的存储和计算开销,并且使得模型更容易训练和优化。 201 | 202 | 3. 解决梯度消失问题:与LSTM类似,GRU也具有门控机制,可以控制信息的流动。通过重置门和更新门的控制,GRU可以更好地捕捉长期依赖关系,避免了梯度消失问题。 203 | 204 | 4. 较好的性能:尽管GRU相对于LSTM结构更简单,但在某些任务上,GRU可以达到与LSTM相近甚至更好的性能。由于GRU参数较少,训练和推理的速度通常更快。 205 | 206 | 总的来说,GRU是一种轻量级的循环神经网络结构,可以在一些资源受限的场景下提供与LSTM相近的性能,同时具有更简单的结构和较少的参数量。因此,当对模型的存储和计算资源有限时,或者希望简化模型结构时,可以选择GRU作为替代方案。 207 | ##### 3.2 GRU 的结构是怎么样的? 208 | GRU(门控循环单元)是一种循环神经网络(RNN)结构,它由以下几个关键组件组成: 209 | 210 | 1. 更新门(Update Gate):用于控制前一时刻的隐藏状态是否传递到当前时刻。更新门的输出范围在0到1之间,其中0表示完全忽略前一时刻的隐藏状态,1表示完全保留前一时刻的隐藏状态。 211 | 212 | 2. 重置门(Reset Gate):用于控制如何融合前一时刻的隐藏状态和当前时刻的输入。重置门决定了前一时刻隐藏状态中哪些信息应该被丢弃。重置门的输出范围在0到1之间,其中0表示完全忽略前一时刻的隐藏状态,1表示完全保留前一时刻的隐藏状态。 213 | 214 | 3. 候选隐藏状态(Candidate Hidden State):根据重置门和当前时刻的输入计算得到的候选隐藏状态。它是一个与隐藏状态相同大小的向量,用于捕捉当前时刻的输入信息。 215 | 216 | 4. 隐藏状态(Hidden State):GRU的输出,也是当前时刻的隐藏状态。它是根据更新门、前一时刻的隐藏状态和候选隐藏状态计算得到的。隐藏状态可以包含前一时刻的信息,同时也会根据当前时刻的输入进行更新。 217 | 218 | GRU的计算过程如下: 219 | 220 | - 输入:当前时刻的输入($x$)和前一时刻的隐藏状态($h_t-1$)。 221 | - 计算更新门(z):$z = sigmoid(W_z * [x, h_t-1])$,其中$W_z$是更新门的权重矩阵。 222 | - 计算重置门(r):r = sigmoid(W_r * [x, h_t-1]),其中$W_r$是重置门的权重矩阵。 223 | - 计算候选隐藏状态(h~):$h~ = tanh(W_h * [x, r * h_t-1])$,其中$W_h$是候选隐藏状态的权重矩阵。 224 | - 计算隐藏状态($h_t$):$h_t = (1 - z) * h_t-1 + z * h~$,即根据更新门和候选隐藏状态来更新隐藏状态。 225 | 226 | 通过使用更新门和重置门,GRU能够控制信息的流动和遗忘,从而更好地捕捉序列数据中的长期依赖关系。GRU的结构相对简单,并且具有较少的参数量,因此在一些资源受限的场景下,它是一种常用的循环神经网络结构。 227 | ##### 3.3 GRU 的前向计算? 228 | GRU(门控循环单元)的前向计算可以分为以下几个步骤: 229 | 230 | 1. 初始化隐藏状态:将初始隐藏状态($h_0$)设置为全零向量。 231 | 232 | 2. 对于每个时间步 t: 233 | 234 | a. 将当前时刻的输入($x_t$)和前一时刻的隐藏状态($h_{t-1}$)作为输入。 235 | 236 | b. 计算更新门($z_t$):$z_t = sigmoid(W_z * [x_t, h_t-1])$,其中 $W_z$ 是更新门的权重矩阵。 237 | 238 | c. 计算重置门($r_t$):$r_t = sigmoid(W_r * [x_t, h_t-1])$,其中 $W_r$ 是重置门的权重矩阵。 239 | 240 | d. 计算候选隐藏状态($h~_t$):$h~_t = tanh(W_h * [x_t, r_t * h_t-1])$,其中 $W_h$ 是候选隐藏状态的权重矩阵。 241 | 242 | e. 计算当前时刻的隐藏状态($h_t$):$h_t = (1 - z_t) * h_t-1 + z_t * h~_t$,即根据更新门和候选隐藏状态来更新隐藏状态。 243 | 244 | 3. 返回最后一个时间步的隐藏状态($h_T$),或者根据任务需要进行进一步的处理,比如进行分类、回归等。 245 | 246 | 以上是GRU的前向计算过程,通过计算更新门、重置门和候选隐藏状态,GRU能够根据输入序列动态地更新隐藏状态,从而捕捉序列数据中的长期依赖关系。 247 | ##### 3.4 GRU 与其他 RNN系列模型的区别? 248 | GRU(门控循环单元)与其他RNN系列模型(如简单RNN和LSTM)相比,有以下几个区别: 249 | 250 | 1. 参数量和复杂度:GRU相对于LSTM来说,具有更少的参数量和计算复杂度。GRU只有两个门(更新门和重置门),而LSTM有三个门(输入门、遗忘门和输出门),因此GRU在一些资源受限的场景下更加适用。 251 | 252 | 2. 长期依赖建模:GRU和LSTM都是为了解决简单RNN在处理长期依赖关系时的梯度消失或梯度爆炸问题而提出的。相比于简单RNN,GRU和LSTM通过使用门控机制,能够更好地捕捉序列数据中的长期依赖关系。 253 | 254 | 3. 门控机制:GRU和LSTM都引入了门控机制,但它们的设计不同。GRU只有更新门和重置门,通过更新门控制前一时刻的隐藏状态是否传递到当前时刻,通过重置门控制如何融合前一时刻的隐藏状态和当前时刻的输入。而LSTM有输入门、遗忘门和输出门,通过这三个门控制信息的输入、遗忘和输出。 255 | 256 | 4. 计算效率:由于GRU的参数较少,计算复杂度较低,因此相对于LSTM来说,GRU在某些情况下可能更加高效。 257 | 258 | 总的来说,GRU是一种介于简单RNN和LSTM之间的循环神经网络结构,它在一定程度上兼顾了参数量和计算复杂度的平衡,并通过门控机制来捕捉长期依赖关系。根据具体的任务和数据特点,选择合适的循环神经网络结构可以提高模型的性能和效率。 259 | ### 四、RNN系列模型篇 260 | ##### 4.1 RNN系列模型 有什么特点? 261 | RNN(循环神经网络)系列模型有以下几个特点: 262 | 263 | 1. 处理序列数据:RNN系列模型是专门设计用于处理序列数据的神经网络模型。它们能够对输入序列的每个元素进行处理,并保持一定的记忆状态,以便在后续时间步骤中利用先前的信息。 264 | 265 | 2. 具有时间依赖性:RNN系列模型通过在每个时间步骤上传递隐藏状态来保持时间依赖性。隐藏状态在每个时间步骤中都会更新,并且包含了之前时间步骤的信息。这使得RNN能够捕捉到序列中的上下文信息。 266 | 267 | 3. 参数共享:RNN系列模型在每个时间步骤上使用相同的参数,这意味着它们可以在处理不同时间步骤的输入时共享权重。这种参数共享使得模型的训练和推理更加高效。 268 | 269 | 4. 梯度传播问题:RNN系列模型在处理长序列时,可能会遇到梯度消失或梯度爆炸的问题。这是由于梯度在反向传播过程中多次相乘或相加,导致梯度指数级地增大或减小。为了解决这个问题,引入了门控机制的模型,如LSTM和GRU。 270 | 271 | 5. 适用于自然语言处理和时间序列任务:由于RNN系列模型能够处理序列数据和捕捉上下文信息,因此它们在自然语言处理任务(如语言建模、机器翻译、文本生成等)和时间序列任务(如股票预测、语音识别等)中得到广泛应用。 272 | 273 | 总的来说,RNN系列模型具有处理序列数据、保持时间依赖性、参数共享等特点。它们在序列数据处理任务中表现出色,但也存在梯度传播问题,需要根据具体情况选择合适的模型结构。 -------------------------------------------------------------------------------- /3 深度学习算法篇常见面试篇/Transformer 常见面试篇/Transformer 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、动机篇 2 | - 1.1 为什么要有 Transformer? 3 | - 1.2 Transformer 作用是什么? 4 | - 二、整体结构篇 5 | - 2.1 Transformer 整体结构是怎么样? 6 | - 2.2 Transformer-encoder 结构怎么样? 7 | - 2.3 Transformer-decoder 结构怎么样? 8 | - 三、模块篇 9 | - 3.1 self-attention 模块 10 | - 3.1.1 传统 attention 是什么? 11 | - 3.1.2 为什么 会有self-attention? 12 | - 3.1.3 self-attention 的核心思想是什么? 13 | - 3.1.4 self-attention 的目的是什么? 14 | - 3.1.5 self-attention 的怎么计算的? 15 | - 3.1.6 self-attention 为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘? 16 | - 3.1.7 为什么采用点积模型的 self-attention 而不采用加性模型? 17 | - 3.1.8 Transformer 中在计算 self-attention 时为什么要除以 d? 18 | - 3.1.9 self-attention 如何解决长距离依赖问题? 19 | - 3.1.10 self-attention 如何并行化? 20 | - 3.2 multi-head attention 模块 21 | - 3.2.1 multi-head attention 的思路是什么样? 22 | - 3.2.2 multi-head attention 的步骤是什么样? 23 | - 3.2.3 Transformer为何使用多头注意力机制?(为什么不使用一个头) 24 | - 3.2.4 为什么在进行多头注意力的时候需要对每个head进行降维? 25 | - 3.2.5 multi-head attention 代码介绍 26 | - 3.3 位置编码(Position encoding)模块 27 | - 3.3.1 为什么要 加入 位置编码(Position encoding) ? 28 | - 3.3.2 位置编码(Position encoding)的思路是什么 ? 29 | - 3.3.3 位置编码(Position encoding)的作用是什么 ? 30 | - 3.3.4 位置编码(Position encoding)的步骤是什么 ? 31 | - 3.3.5 Position encoding为什么选择相加而不是拼接呢? 32 | - 3.3.6 Position encoding和 Position embedding的区别? 33 | - 3.3.7 为何17年提出Transformer时采用的是 Position Encoder 而不是Position Embedding?而Bert却采用的是 Position Embedding ? 34 | - 3.3.8 位置编码(Position encoding)的代码介绍 35 | - 3.4 残差模块模块 36 | - 3.4.1 为什么要 加入 残差模块? 37 | - 3.5 Layer normalization 模块 38 | - 3.5.1 为什么要 加入 Layer normalization 模块? 39 | - 3.5.2 Layer normalization 模块的是什么? 40 | - 3.5.3 Batch normalization 和 Layer normalization 的区别? 41 | - 3.5.4 Transformer 中为什么要舍弃 Batch normalization 改用 Layer normalization 呢? 42 | - 3.5.5 Layer normalization 模块代码介绍 43 | - 3.6 Mask 模块 44 | - 3.6.1 什么是 Mask? 45 | - 3.6.2 Transformer 中用到 几种 Mask? 46 | - 3.6.3 能不能介绍一下 Transformer 中用到几种 Mask? -------------------------------------------------------------------------------- /3 深度学习算法篇常见面试篇/Transformer 常见面试篇/【关于 Transformer 问题及改进】那些你不知道的事.md: -------------------------------------------------------------------------------- 1 | - 一、Transformer 问题篇 2 | - 1.1 既然 Transformer 怎么牛逼,是否还存在一些问题? 3 | - 二、每个问题的解决方法是什么? 4 | - 2.1 问题一:Transformer 不能很好的处理超长输入问题 5 | - 2.1.1 Transformer 固定了句子长度? 6 | - 2.1.2 Transformer 固定了句子长度 的目的是什么? 7 | - 2.1.3 Transformer 针对该问题的处理方法? 8 | - 2.2 问题二:Transformer 方向信息以及相对位置 的 缺失 问题 9 | - 2.3 问题三:缺少Recurrent Inductive Bias 10 | - 问题四:问题四:Transformer是非图灵完备的: 非图灵完备通俗的理解,就是无法解决所有的问题 11 | - 问题五:transformer缺少conditional computation; 12 | - 问题六:transformer 时间复杂度 和 空间复杂度 过大问题; -------------------------------------------------------------------------------- /3 深度学习算法篇常见面试篇/生成对抗网络 GAN 常见面试篇.md: -------------------------------------------------------------------------------- 1 | #GAN 2 | 3 | - [[#一、动机|一、动机]] 4 | - [[#二、介绍篇|二、介绍篇]] 5 | - [[#2.1 GAN 的基本思想|2.1 GAN 的基本思想]] 6 | - [[#2.2 GAN 基本介绍|2.2 GAN 基本介绍]] 7 | - [[#2.2 GAN 基本介绍#2.2.1 GAN 的基本结构|2.2.1 GAN 的基本结构]] 8 | - [[#2.2 GAN 基本介绍#2.2.2 GAN 的基本思想|2.2.2 GAN 的基本思想]] 9 | - [[#三、训练篇|三、训练篇]] 10 | - [[#3.1 生成器介绍|3.1 生成器介绍]] 11 | - [[#3.2 判别器介绍|3.2 判别器介绍]] 12 | - [[#3.3 训练过程|3.3 训练过程]] 13 | - [[#3.4 训练所涉及相关理论基础|3.4 训练所涉及相关理论基础]] 14 | - [[#四、总结|四、总结]] 15 | 16 | ### 一、动机 17 | ### 二、介绍篇 18 | ##### 2.1 GAN 的基本思想 19 | GAN(生成对抗网络)的基本思想是通过让生成器网络和判别器网络相互对抗地进行训练,以生成逼真的样本数据。 20 | 21 | GAN由两个主要组成部分组成:生成器(Generator)和判别器(Discriminator)。 22 | 23 | 生成器网络负责生成与真实样本类似的合成样本。它接收一个随机噪声向量作为输入,并通过一系列的转换层逐渐将噪声向量转换为输出样本。生成器的目标是尽可能地生成逼真的样本,使其能够欺骗判别器。 24 | 25 | 判别器网络负责对给定的样本进行分类,判断其是真实样本还是生成样本。它接收真实样本和生成器生成的样本作为输入,并输出一个概率值来表示样本的真实性。判别器的目标是尽可能准确地区分真实样本和生成样本。 26 | 27 | GAN的训练过程是通过两个网络相互对抗地进行迭代的。在每次迭代中,生成器生成一批样本,并将其提供给判别器进行分类。判别器根据生成器生成的样本和真实样本进行分类,并计算损失。然后,生成器根据判别器的反馈调整自己的参数,以尽可能地生成更逼真的样本。这个过程不断迭代,直到生成器能够生成与真实样本难以区分的合成样本。 28 | 29 | GAN的基本思想是通过生成器和判别器的对抗学习,使生成器逐渐学习到真实样本的分布,并生成逼真的样本。这种对抗学习的过程能够产生高质量的合成样本,并在图像生成、图像修复、图像转换等任务中得到广泛应用。 30 | ##### 2.2 GAN 基本介绍 31 | GAN(Generative Adversarial Network,生成对抗网络)是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它是一种用于生成合成数据的生成模型。 32 | 33 | GAN的基本原理是通过让生成器网络和判别器网络相互对抗地进行训练,以生成逼真的样本数据。生成器负责生成与真实样本类似的合成样本,而判别器负责判断给定样本是真实样本还是生成样本。 34 | 35 | GAN的训练过程是一个零和博弈的过程,在每次迭代中,生成器生成一批样本,并将其提供给判别器进行分类。判别器根据生成器生成的样本和真实样本进行分类,并计算损失。然后,生成器根据判别器的反馈调整自己的参数,以尽可能地生成更逼真的样本。这个过程不断迭代,直到生成器能够生成与真实样本难以区分的合成样本。 36 | 37 | GAN的优点是能够生成高质量的合成样本,具有很强的生成能力。它在图像生成、图像修复、图像转换等任务中取得了很好的效果。然而,GAN也存在一些挑战,如训练不稳定、模式崩溃等问题,需要一些技巧来解决。 38 | 39 | 总的来说,GAN是一种创新的生成模型,通过生成器和判别器的对抗学习,能够生成逼真的合成样本。它在深度学习领域具有重要的应用和研究价值。 40 | ###### 2.2.1 GAN 的基本结构 41 | GAN的基本结构包括生成器(Generator)和判别器(Discriminator)两个主要组件。 42 | 43 | 生成器(Generator)是一个用于生成合成样本的神经网络模型。它接收一个随机噪声向量作为输入,并通过一系列的转换层逐渐将噪声向量转换为输出样本。生成器的目标是生成与真实样本类似的合成样本。 44 | 45 | 判别器(Discriminator)是一个用于判断样本真实性的神经网络模型。它接收真实样本和生成器生成的样本作为输入,并输出一个概率值来表示样本的真实性。判别器的目标是尽可能准确地区分真实样本和生成样本。 46 | 47 | GAN的训练过程是通过生成器和判别器相互对抗地进行迭代的。在每次迭代中,生成器生成一批样本,并将其提供给判别器进行分类。判别器根据生成器生成的样本和真实样本进行分类,并计算损失。然后,生成器根据判别器的反馈调整自己的参数,以尽可能地生成更逼真的样本。这个过程不断迭代,直到生成器能够生成与真实样本难以区分的合成样本。 48 | 49 | GAN的基本结构是通过生成器和判别器的对抗学习,使生成器逐渐学习到真实样本的分布,并生成逼真的样本。这种对抗学习的过程能够产生高质量的合成样本,并在图像生成、图像修复、图像转换等任务中得到广泛应用。 50 | ###### 2.2.2 GAN 的基本思想 51 | GAN的基本思想是通过生成器和判别器的对抗学习,使生成器能够生成逼真的合成样本。 52 | 53 | 生成器的目标是生成与真实样本相似的合成样本,而判别器的目标是尽可能准确地区分真实样本和生成样本。生成器和判别器通过对抗的方式不断优化自己的能力。 54 | 55 | 具体而言,生成器接收一个随机噪声向量作为输入,并通过一系列的转换层逐渐将噪声向量转换为输出样本。生成器的目标是生成能够欺骗判别器的合成样本,使其难以区分真实样本和生成样本。 56 | 57 | 判别器接收真实样本和生成器生成的样本作为输入,并输出一个概率值来表示样本的真实性。判别器的目标是尽可能准确地区分真实样本和生成样本,使其能够准确判断样本的真实性。 58 | 59 | 在训练过程中,生成器和判别器相互对抗地进行迭代。生成器生成一批样本,并将其提供给判别器进行分类。判别器根据生成器生成的样本和真实样本进行分类,并计算损失。然后,生成器根据判别器的反馈调整自己的参数,以尽可能地生成更逼真的样本。这个过程不断迭代,直到生成器能够生成与真实样本难以区分的合成样本。 60 | 61 | 通过生成器和判别器的对抗学习,GAN能够产生高质量的合成样本,并在图像生成、图像修复、图像转换等任务中得到广泛应用。它的基本思想是通过对抗学习的方式,使生成器逐渐学习到真实样本的分布,并生成逼真的样本。 62 | ### 三、训练篇 63 | ##### 3.1 生成器介绍 64 | 生成器是GAN中的一个关键组件,它是一个神经网络模型,用于生成逼真的合成样本。生成器接收一个随机噪声向量作为输入,并通过一系列的转换层逐渐将噪声向量转换为输出样本。 65 | 66 | **生成器的设计通常采用反卷积(deconvolution)或转置卷积(transpose convolution)层来实现上采样操作,将低维的噪声向量逐渐转换为高维的样本**。同时,生成器还会使用一些常见的神经网络层,如全连接层、卷积层和批量归一化层等,来提取和组合特征,生成逼真的样本。 67 | 68 | 生成器的目标是生成与真实样本相似的合成样本,使其难以被判别器区分。为了达到这个目标,生成器通过与判别器的对抗学习不断优化自己的参数。在训练过程中,生成器生成一批样本,并将其提供给判别器进行分类。判别器根据生成器生成的样本和真实样本进行分类,并计算损失。生成器根据判别器的反馈调整自己的参数,以尽可能地生成更逼真的样本。这个过程不断迭代,直到生成器能够生成与真实样本难以区分的合成样本。 69 | 70 | **生成器的设计和训练是GAN中的关键问题**,不同的任务和数据集可能需要不同的生成器结构和训练策略。生成器的质量和能力直接影响到GAN的生成效果,因此对生成器的研究和改进是GAN领域的重要研究方向。 71 | ##### 3.2 判别器介绍 72 | 判别器(Discriminator)是生成对抗网络(GAN)中的一个关键组件,它是一个二分类器。判别器的主要任务是将输入的样本分为真实样本和合成样本两类,并输出对应的概率。 73 | 74 | 在GAN中,判别器的目标是尽可能准确地区分真实样本和合成样本。通过训练判别器,我们希望它能够学习到真实样本的特征,并能够判断生成器生成的合成样本是否逼真。 75 | 76 | **判别器通常是一个神经网络模型,可以是卷积神经网络(CNN)或全连接神经网络(FCN)。它接受输入样本并通过多个隐藏层进行特征提取和转换,最后输出一个概率值,表示输入样本为真实样本的概率。** 77 | 78 | 判别器的训练过程是通过最小化损失函数来实现的。一般而言,判别器的损失函数使用交叉熵损失函数,它衡量了判别器对于真实样本和合成样本分类的准确性。通过反向传播算法,我们可以根据判别器的预测结果来更新判别器的参数,使其能够更好地区分真实样本和合成样本。 79 | 80 | 判别器在训练过程中起着关键的作用,它的性能直接影响着生成器的训练效果。当判别器能够准确地判断合成样本时,生成器就需要更加努力地生成逼真的样本,以欺骗判别器。因此,通过不断迭代优化生成器和判别器的参数,GAN可以实现生成逼真样本的目标。 81 | ##### 3.3 训练过程 82 | GAN(生成对抗网络)的训练过程可以分为以下步骤: 83 | 84 | 1. 初始化生成器(Generator)和判别器(Discriminator)的参数。生成器负责生成合成样本,判别器负责对真实样本和合成样本进行分类。 85 | 86 | 2. 生成器生成一批合成样本。这些样本是通过从噪声向量中采样,并通过生成器的网络结构进行转换得到的。 87 | 88 | 3. 从真实样本集中随机选择一批真实样本。 89 | 90 | 4. 判别器接收一批真实样本和生成器生成的合成样本,并对它们进行分类。判别器的目标是将真实样本正确分类为真实的(标签为1),将合成样本正确分类为合成的(标签为0)。 91 | 92 | 5. **计算判别器的损失。通常使用交叉熵损失函数,衡量判别器对真实样本和合成样本的分类准确性。** 93 | 94 | 6. 更新判别器的参数,通过梯度下降法最小化判别器的损失。 95 | 96 | 7. 生成器生成一批新的合成样本。 97 | 98 | 8. 判别器接收新的合成样本和真实样本,并进行分类。 99 | 100 | 9. **计算生成器的损失。生成器的目标是生成逼真的合成样本,使其难以被判别器区分**。 101 | 102 | 10. 更新生成器的参数,通过梯度下降法最小化生成器的损失。 103 | 104 | 11. 重复步骤2-10,进行多次迭代训练,直到达到预定的训练迭代次数或生成器和判别器的性能满足要求。 105 | 106 | 在训练过程中,生成器和判别器相互对抗,通过不断迭代优化各自的参数,最终达到生成器能够生成逼真样本,判别器难以区分生成样本和真实样本的目标。这种对抗性的训练过程可以使生成器和判别器逐渐提升性能,并最终达到平衡状态。 107 | ##### 3.4 训练所涉及相关理论基础 108 | GAN的训练涉及到一些相关的理论基础,包括以下几个方面: 109 | 110 | 1. 生成模型:GAN的核心思想是通过生成模型来生成逼真的合成样本。生成模型是一种概率模型,它通过学习数据分布的特征来生成新的样本。在GAN中,生成器充当了生成模型的角色,它通过从噪声向量中采样并经过一系列转换操作,生成合成样本。 111 | 112 | 2. 对抗训练:GAN的训练过程是通过生成器和判别器的对抗来实现的。生成器的目标是生成逼真的合成样本,以欺骗判别器;而判别器的目标是准确地区分真实样本和合成样本。通过不断迭代优化生成器和判别器的参数,使它们能够相互对抗并逐渐提升性能。 113 | 114 | 3. 最小最大博弈:**GAN的训练过程可以看作是一个最小最大博弈的过程**。生成器和判别器可以被看作是两个玩家,**生成器的目标是最小化判别器的损失,而判别器的目标是最大化自己的损失**。通过迭代优化生成器和判别器的参数,**最终达到平衡状态**,使生成器能够生成逼真样本,判别器难以区分真实样本和合成样本。 115 | 116 | 4. 损失函数:GAN的训练过程中使用的损失函数通常是交叉熵损失函数。判别器的损失函数衡量了判别器对真实样本和合成样本的分类准确性,而生成器的损失函数衡量了生成器生成的合成样本被判别器分类为真实样本的概率。通过最小化损失函数,可以优化生成器和判别器的参数。 117 | 118 | 5. 博弈论:GAN的训练过程中涉及到一些博弈论的概念。**生成器和判别器之间的对抗可以被看作是一个零和博弈**,即一方的收益等于另一方的损失。通过优化生成器和判别器的策略,可以达到均衡状态,使生成器生成逼真样本,判别器难以区分真实样本和合成样本。 119 | 120 | 这些理论基础为GAN的训练提供了理论支持和指导,帮助我们理解GAN的工作原理和优化方法。 121 | ### 四、总结 122 | -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.1 信息抽取 常见面试篇/4.1.1 命名实体识别 常见面试篇.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackaduma/awesome_NLP-Interview-Notes/b117dbdfaa38f751237aaa7f4292152c8a6c41cd/4 NLP 学习算法 常见面试篇/4.1 信息抽取 常见面试篇/4.1.1 命名实体识别 常见面试篇.md -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.1 信息抽取 常见面试篇/4.1.2 关系抽取 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - [关系抽取 常见面试篇](https://articles.zsxq.com/id_0uqcsdxwhg8c.html) 2 | - 一、动机篇 3 | - 1.1 什么是关系抽取? 4 | - 1.2 关系抽取技术有哪些类型? 5 | - 1.3 常见的关系抽取流程是怎么做的? 6 | - 二、经典关系抽取篇 7 | - 2.1 模板匹配方法是指什么?有什么优缺点? 8 | - 2.2 远监督关系抽取是指什么?它有什么优缺点? 9 | - 2.3 什么是关系重叠?复杂关系问题? 10 | - 2.4 联合抽取是什么?难点在哪里? 11 | - 2.5 联合抽取总体上有哪些方法?各有哪些缺点? 12 | - 2.6 介绍基于共享参数的联合抽取方法? 13 | - 2.7 介绍基于联合解码的联合抽取方法? 14 | - 2.8 实体关系抽取的前沿技术和挑战有哪些?如何解决低资源和复杂样本下的实体关系抽取? 15 | - 三、文档级关系抽取篇 16 | - 3.1 文档级关系抽取与经典关系抽取有何区别? 17 | - 3.2 文档级别关系抽取中面临什么样的问题? 18 | - 3.3 文档级关系抽取的方法有哪些? 19 | - 3.3.1 基于BERT-like的文档关系抽取是怎么做的? 20 | - 3.3.2 基于graph的文档关系抽取是怎么做的? 21 | - 3.4 文档级关系抽取常见数据集有哪些以及其评估方法? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.1 信息抽取 常见面试篇/4.1.3 事件抽取 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - [事件抽取 常见面试篇](https://github.com/km1994/NLP-Interview-Notes/blob/main/NLPinterview/EventExtraction) 2 | - 一、原理篇 3 | - 1.1 什么是事件? 4 | - 1.2 什么是事件抽取? 5 | - 1.3 ACE测评中事件抽取涉及的几个基本术语及任务是什么? 6 | - 1.4 事件抽取怎么发展的? 7 | - 1.5 事件抽取存在什么问题? 8 | - 二、基本任务篇 9 | - 2.1 触发词检测 10 | - 2.1.1 什么是触发词检测? 11 | - 2.1.2 触发词检测有哪些方法? 12 | - 2.2 类型识别 13 | - 2.2.1 什么是类型识别? 14 | - 2.2.2 类型识别有哪些方法? 15 | - 2.3 角色识别 16 | - 2.3.1 什么是角色识别? 17 | - 2.3.2 角色识别有哪些方法? 18 | - 2.4 论元检测 19 | - 2.4.1 什么是论元检测? 20 | - 2.4.2 论元检测有哪些方法? 21 | - 三、常见方法篇 22 | - 3.1 模式匹配方法怎么用在事件抽取中? 23 | - 3.2 统计机器学习方法怎么用在事件抽取中? 24 | - 3.3 深度学习方法怎么用在事件抽取中? 25 | - 四、数据集及评价指标篇 26 | - 4.1 事件抽取中常见的英文数据集有哪些? 27 | - 4.2 事件抽取中常见的中文数据集有哪些? 28 | - 4.3 事件抽取的评价指标是什么?怎么计算的? 29 | - 五、对比篇 30 | - 5.1 事件抽取和命名实体识别(即实体抽取)有什么异同? 31 | - 5.2 事件抽取和关系抽取有什么异同? 32 | - 5.3 什么是事理图谱?有哪些事件关系类型?事理图谱怎么构建?主要技术领域及当前发展热点是什么? 33 | - 六、应用篇 34 | - 七、拓展篇 35 | - 7.1 事件抽取论文综述 36 | - 7.2 事件抽取常见问题 -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.11 文本摘要 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、动机篇 2 | - 1.1 什么是文本摘要? 3 | - 1.2 文本摘要技术有哪些类型? 4 | - 二、抽取式摘要篇 5 | - 2.1 抽取式摘要是怎么做的? 6 | - 2.1.1 句子重要性评估算法有哪些? 7 | - 2.1.2 基于约束的摘要生成方法有哪些? 8 | - 2.1.3 TextTeaser算法是怎么抽取摘要的? 9 | - 2.1.4 TextRank算法是怎么抽取摘要的? 10 | - 2.2 抽取式摘要的可读性问题是什么? 11 | - 三、压缩式摘要篇 12 | - 3.1 压缩式摘要是怎么做的? 13 | - 四、生成式摘要篇 14 | - 4.1 生成式摘要是怎么做的? 15 | - 4.2 生成式摘要存在哪些问题? 16 | - 4.3 Pointer-generator network解决了什么问题? 17 | - 五、摘要质量评估方法 18 | - 5.1 摘要质量的评估方法有哪些类型? 19 | - 5.2 什么是ROUGE? 20 | - 5.3 几种ROUGE指标之间的区别是什么? 21 | - 5.4 BLEU和ROUGE有什么不同? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.2 NLP 预训练算法 常见面试篇/【关于Elmo】那些你不知道的事.md: -------------------------------------------------------------------------------- 1 | - 一、Elmo 动机篇 2 | - 1.1 为什么会有 Elmo? 3 | - 二、Elmo 介绍篇 4 | - 2.1 Elmo 的 特点? 5 | - 2.2 Elmo 的 思想是什么? 6 | - 三、Elmo 问题篇 7 | - 3.1 Elmo 存在的问题是什么? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.2 NLP 预训练算法 常见面试篇/【关于FastText】那些你不知道的事.md: -------------------------------------------------------------------------------- 1 | - 一、fastText 动机篇 2 | - 1.1 word-level Model 是什么? 3 | - 1.2 word-level Model 存在什么问题? 4 | - 1.3 Character-Level Model 是什么? 5 | - 1.4 Character-Level Model 优点? 6 | - 1.5 Character-Level Model 存在问题? 7 | - 1.6 Character-Level Model 问题的解决方法? 8 | - 二、 词内的n-gram信息(subword n-gram information) 介绍篇 9 | - 2.1 引言 10 | - 2.2 fastText 是什么? 11 | - 2.3 fastText 的结构是什么样? 12 | - 2.4 为什么 fastText 要使用词内的n-gram信息(subword n-gram information)? 13 | - 2.5 fastText 词内的n-gram信息(subword n-gram information) 介绍? 14 | - 2.6 fastText 词内的n-gram信息 的 训练过程? 15 | - 2.7 fastText 词内的n-gram信息 存在问题? 16 | - 三、 层次化Softmax回归(Hierarchical Softmax) 介绍篇 17 | - 3.1 为什么要用 层次化Softmax回归(Hierarchical Softmax) ? 18 | - 3.2 层次化Softmax回归(Hierarchical Softmax) 的思想是什么? 19 | - 3.3 层次化Softmax回归(Hierarchical Softmax) 的步骤? 20 | - 四、fastText 存在问题? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.2 NLP 预训练算法 常见面试篇/【关于TF-idf】那些你不知道的事.md: -------------------------------------------------------------------------------- 1 | - 一、one-hot 篇 2 | - 1.1 为什么有 one-hot ? 3 | - 1.2 one-hot 是什么? 4 | - 1.3 one-hot 有什么特点? 5 | - 1.4 one-hot 存在哪些问题? 6 | - 二、TF-IDF 篇 7 | - 2.1 什么是 TF-IDF? 8 | - 2.2 TF-IDF 如何评估词的重要程度? 9 | - 2.3 TF-IDF 的思想是什么? 10 | - 2.4 TF-IDF 的计算公式是什么? 11 | - 2.5 TF-IDF 怎么描述? 12 | - 2.6 TF-IDF 的优点是什么? 13 | - 2.7 TF-IDF 的缺点是什么? 14 | - 2.8 TF-IDF 的应用? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.2 NLP 预训练算法 常见面试篇/【关于word2vec】那些你不知道的事.md: -------------------------------------------------------------------------------- 1 | - 一、Wordvec 介绍篇 2 | - 1.1 Wordvec 指什么? 3 | - 1.2 Wordvec 中 CBOW 指什么? 4 | - 1.3 Wordvec 中 Skip-gram 指什么? 5 | - 1.4 CBOW vs Skip-gram 哪一个好? 6 | - 二、Wordvec 优化篇 7 | - 2.1 Word2vec 中 霍夫曼树 是什么? 8 | - 2.2 Word2vec 中 为什么要使用 霍夫曼树? 9 | - 2.3 Word2vec 中使用 霍夫曼树 的好处? 10 | - 2.4 为什么 Word2vec 中会用到 负采样? 11 | - 2.5 Word2vec 中会用到 负采样 是什么样? 12 | - 2.6 Word2vec 中 负采样 的采样方式? 13 | - 三、Wordvec 对比篇 14 | - 3.1 word2vec和NNLM对比有什么区别?(word2vec vs NNLM) 15 | - 3.2 word2vec和tf-idf 在相似度计算时的区别? 16 | - 四、word2vec 实战篇 17 | - 4.1 word2vec训练trick,window设置多大? 18 | - 4.1 word2vec训练trick,词向量纬度,大与小有什么影响,还有其他参数? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.3 Bert 常见面试/4.3.1 Bert 模型压缩 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - [Bert 模型压缩 常见面试篇](https://articles.zsxq.com/id_bknkkgtxj45f.html) 2 | - 一、Bert 模型压缩 动机篇 3 | - 二、Bert 模型压缩对比表 4 | - 三、 Bert 模型压缩方法介绍 5 | - 3.1 Bert 模型压缩方法 之 低秩因式分解&跨层参数共享 6 | - 3.1.1 什么是低秩因式分解? 7 | - 3.1.2 什么是跨层参数共享? 8 | - 3.1.3 ALBERT 所所用的方法? 9 | - 3.2 Bert 模型压缩方法 之 蒸馏 10 | - 3.2.1 什么是蒸馏? 11 | - 3.2.2 使用 模型蒸馏 的论文 有哪些,稍微介绍一下? 12 | - 3.3 Bert 模型压缩方法 之 量化 13 | - 3.3.1 什么是量化? 14 | - 3.3.2 Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT 【量化】 15 | - 3.4 Bert 模型压缩方法 之 剪枝 16 | - 3.4.1 什么是剪枝? 17 | - 四、模型压缩存在问题? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.3 Bert 常见面试/4.3.2 Bert 模型系列 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 认识 XLNet 么?能不能讲一下? 和 Bert 的 区别在哪里? 2 | - 认识 RoBERTa 么?能不能讲一下? 和 Bert 的 区别在哪里? 3 | - 认识 SpanBERT 么?能不能讲一下? 和 Bert 的 区别在哪里? 4 | - 认识 MASS 么?能不能讲一下? 和 Bert 的 区别在哪里? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.3 Bert 常见面试/Bert 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、动机篇 2 | - 1.1 【演变史】one-hot 存在问题? 3 | - 1.2【演变史】wordvec 存在问题? 4 | - 1.3【演变史】fastText 存在问题? 5 | - 1.4【演变史】elmo 存在问题? 6 | - 二、Bert 篇 7 | - 2.1 Bert 介绍篇 8 | - 2.1.1【BERT】Bert 是什么? 9 | - 2.1.2【BERT】Bert 三个关键点? 10 | - 2.2 Bert 输入输出表征篇 11 | - 2.2.1 【BERT】Bert 输入输出表征长啥样? 12 | - 2.3 【BERT】Bert 预训练篇 13 | - 2.3.1 【BERT】Bert 预训练任务介绍 14 | - 2.3.2 【BERT】Bert 预训练任务 之 Masked LM 篇 15 | - 2.3.2.1 【BERT】 Bert 为什么需要预训练任务 Masked LM ? 16 | - 2.3.2.2 【BERT】 Bert 预训练任务 Masked LM 怎么做? 17 | - 2.3.2.3 【BERT】 Bert 预训练任务 Masked LM 存在问题? 18 | - 2.3.2.4 【BERT】 预训练和微调之间的不匹配的解决方法? 19 | - 2.3.3 【BERT】Bert 预训练任务 之 Next Sentence Prediction 篇 20 | - 2.3.3.1 【BERT】Bert 为什么需要预训练任务 Next Sentence Prediction ? 21 | - 2.3.3.2 【BERT】 Bert 预训练任务 Next Sentence Prediction 怎么做? 22 | - 2.4 【BERT】 fine-turning 篇? 23 | - 2.4.1 【BERT】为什么 Bert 需要 fine-turning? 24 | - 2.4.2 【BERT】 Bert 如何 fine-turning? 25 | - 2.5 【BERT】 Bert 损失函数篇? 26 | - 2.5.1 【BERT】BERT的两个预训练任务对应的损失函数是什么(用公式形式展示)? 27 | - 三、 对比篇? 28 | - 3.1 【对比】多义词问题是什么? 29 | - 3.2 【对比】word2vec 为什么解决不了多义词问题? 30 | - 3.3 【对比】GPT和BERT有什么不同? 31 | - 3.4 【对比】为什么 elmo、GPT、Bert能够解决多义词问题?(以 elmo 为例) -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.4 文本分类 常见面试篇/文本分类 trick 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、文本分类数据预处理 如何做? 2 | - 二、文本分类 预训练模型 如何选择? 3 | - 三、文本分类 参数 如何优化? 4 | - 四、文本分类 有哪些棘手任务? 5 | - 五、文本分类 标签体系构建? 6 | - 六、文本分类 策略构建? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.4 文本分类 常见面试篇/文本分类 常见面试篇.md: -------------------------------------------------------------------------------- 1 | ### 一、 抽象命题 2 | ##### 1.1 分类任务有哪些类别?它们都有什么特征? 3 | ##### 1.2 文本分类任务相较于其他领域的分类任务有何不同之处? 4 | ##### 1.3 文本分类任务和文本领域的其他任务相比有何不同之处? 5 | ##### 1.4 文本分类的过程? 6 | ### 二、数据预处理 7 | ##### 2.1 文本分类任务的数据预处理方法有哪些? 8 | ##### 2.2 你使用过哪些分词方法和工具? 9 | ##### 2.3 中文文本分词的方法? 10 | ##### 2.4 基于字符串匹配的分词方法的原理 是什么? 11 | ##### 2.5 统计语言模型如何应用于分词?N-gram最大概率分词? 12 | ##### 2.6 基于序列标注的分词方法 是什么? 13 | ###### 2.7 基于(Bi-)LSTM的词性标注 是什么? 14 | ##### 2.8 词干提取和词形还原有什么区别? 15 | ### 三、特征提取 16 | ##### 3.1 (一个具体的)文本分类任务可以使用哪些特征? 17 | ##### 3.2 (对于西文文本)使用单词和使用字母作为特征相比,差异如何? 18 | ##### 3.3 能不能简单介绍下词袋模型? 19 | ##### 3.4 n-gram 篇 20 | ###### 3.4.1 什么是n元语法?为什么要用n-gram? 21 | ###### 3.4.2 n-gram算法的局限性是什么? 22 | ##### 3.5 主题建模篇 23 | ###### 3.5.1 介绍一下主题建模任务? 24 | ###### 3.5.2 主题建模的常用方法 25 | ###### 3.5.3 TF-IDF算法是做什么的?简单介绍下TF-IDF算法 26 | ###### 3.5.4 tf-idf高意味着什么? 27 | ###### 3.5.5 tf-idf的不足之处 28 | ##### 3.6 文本相似度篇 29 | ###### 3.6.1 如何计算两段文本之间的距离? 30 | ###### 3.6.2 什么是jaccard距离? 31 | ###### 3.6.3 Dice系数和Jaccard系数的区别? 32 | ###### 3.6.4 同样是编辑距离,莱文斯坦距离和汉明距离的区别在哪里? 33 | ###### 3.6.5 写一下计算编辑距离(莱温斯坦距离)的编程题吧? 34 | ### 四、模型篇 35 | ##### 4.1 fastText 篇 36 | ###### 4.1.1 fastText的分类过程? 37 | ###### 4.1.2 fastText的优点? 38 | ##### 4.2 TextCNN 篇 39 | ###### 4.2.1 TextCNN进行文本分类的过程? 40 | ###### 4.2.2 TextCNN可以调整哪些参数? 41 | ###### 4.2.3 使用CNN作为文本分类器时,不同通道channels对应着文本的什么信息? 42 | ###### 4.2.4 TextCNN中卷积核的长与宽代表了什么? 43 | ###### 4.2.5 在TextCNN中的pooling操作与一般CNN的pooling操作有何不同? 44 | ###### 4.2.6 TextCNN的局限性? 45 | ##### 4.3 DPCNN 篇 46 | ###### 4.3.1 如何解决长文本分类任务? 47 | ###### 4.3.2 简单介绍DPCNN模型相较于TextCNN的改进? 48 | ##### 4.4 TextRCNN 篇 49 | ###### 4.4.1 简要介绍TextRCNN相较于TextCNN的改进? 50 | ##### 4.5 RNN+Attention 篇 51 | ###### 4.5.1 RNN+Attention进行文本分类任务的思路,以及为什么要加Attention / 注意力机制如何应用于文本分类领域? 52 | ##### 4.6 GNN 图神经网络篇 53 | ###### 4.6.1 GNN 图神经网络如何应用于文本分类领域? 54 | ##### 4.7 Transformer 篇 55 | ###### 4.7.1 基于Transformer的预训练模型如何应用于文本分类领域? 56 | ##### 4.8 预训练模型 篇 57 | ###### 4.8.1 你了解哪些预训练模型?它们的特点是什么? 58 | ### 五、损失函数 59 | ##### 5.1 激活函数sigmoid篇 60 | ###### 5.1.1 二分类问题使用的激活函数sigmoid简介? 61 | ###### 5.1.2 Sigmod的缺点是什么? 62 | ##### 5.2 激活函数softmax篇 63 | ###### 5.2.1 softmax函数是什么? 64 | ###### 5.2.2 softmax函数怎么求导? 65 | ##### 5.3 分类问题使用的损失函数还有有哪些? 66 | ### 六、模型评估和算法比较 67 | ##### 6.1 文本分类任务使用的评估算法和指标有哪些? 68 | 对于文本分类任务,常用的评估算法和指标包括: 69 | 70 | 1. 准确率(Accuracy):分类正确的样本数占总样本数的比例。 71 | 72 | 2. 精确率(Precision)和召回率(Recall):精确率表示被分类器正确分类的正样本数占分类器预测为正样本的样本数的比例,召回率表示被分类器正确分类的正样本数占真实正样本的比例。 73 | 74 | 3. F1值(F1 Score):精确率和召回率的调和平均值,综合考虑了精确率和召回率。 75 | 76 | 4. ROC曲线和AUC值(Receiver Operating Characteristic curve and Area Under the Curve):主要用于二分类问题的评估,ROC曲线可以帮助选择合适的分类阈值,AUC值则表示ROC曲线下的面积,用于衡量分类器对正负样本的区分能力。 77 | 78 | 5. 混淆矩阵(Confusion Matrix):展示了分类器的预测结果与真实标签之间的对应关系。 79 | 80 | 6. 多分类任务的评估指标:在多分类任务中,还可以使用宏平均(Macro-average)和微平均(Micro-average)精确率、召回率和F1值等指标。 81 | 82 | 这些评估算法和指标可以帮助评估文本分类模型的性能,并根据具体任务的需求选择合适的评估方法。 83 | ##### 6.2 简单介绍混淆矩阵和kappa? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.4 文本分类 常见面试篇/用检索的方式做文本分类 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 为什么需要用检索的方式做文本分类? 2 | - 基于检索的方法做文本分类思路? 3 | - 检索的方法的召回库如何构建? 4 | - 检索的方法 的 训练阶段 如何做? 5 | - 检索的方法 的 预测阶段 如何做? 6 | - 用检索的方式做文本分类 方法 适用场景有哪些? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.9 文本摘要 常见面试篇 2.md: -------------------------------------------------------------------------------- 1 | #面试 #NLP 2 | 3 | - 一、动机篇 4 | - 1.1 什么是文本摘要? 5 | - 1.2 文本摘要技术有哪些类型? 6 | - 二、抽取式摘要篇 7 | - 2.1 抽取式摘要是怎么做的? 8 | - 2.1.1 句子重要性评估算法有哪些? 9 | - 2.1.2 基于约束的摘要生成方法有哪些? 10 | - 2.1.3 TextTeaser算法是怎么抽取摘要的? 11 | - 2.1.4 TextRank算法是怎么抽取摘要的? 12 | - 2.2 抽取式摘要的可读性问题是什么? 13 | - 三、压缩式摘要篇 14 | - 3.1 压缩式摘要是怎么做的? 15 | - 四、生成式摘要篇 16 | - 4.1 生成式摘要是怎么做的? 17 | - 4.2 生成式摘要存在哪些问题? 18 | - 4.3 Pointer-generator network解决了什么问题? 19 | - 五、摘要质量评估方法 20 | - 5.1 摘要质量的评估方法有哪些类型? 21 | - 5.2 什么是ROUGE? 22 | - 5.3 几种ROUGE指标之间的区别是什么? 23 | - 5.4 BLEU和ROUGE有什么不同? -------------------------------------------------------------------------------- /4 NLP 学习算法 常见面试篇/4.9 文本摘要 常见面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、动机篇 2 | - 1.1 什么是文本摘要? 3 | - 1.2 文本摘要技术有哪些类型? 4 | - 二、抽取式摘要篇 5 | - 2.1 抽取式摘要是怎么做的? 6 | - 2.1.1 句子重要性评估算法有哪些? 7 | - 2.1.2 基于约束的摘要生成方法有哪些? 8 | - 2.1.3 TextTeaser算法是怎么抽取摘要的? 9 | - 2.1.4 TextRank算法是怎么抽取摘要的? 10 | - 2.2 抽取式摘要的可读性问题是什么? 11 | - 三、压缩式摘要篇 12 | - 3.1 压缩式摘要是怎么做的? 13 | - 四、生成式摘要篇 14 | - 4.1 生成式摘要是怎么做的? 15 | - 4.2 生成式摘要存在哪些问题? 16 | - 4.3 Pointer-generator network解决了什么问题? 17 | - 五、摘要质量评估方法 18 | - 5.1 摘要质量的评估方法有哪些类型? 19 | - 5.2 什么是ROUGE? 20 | - 5.3 几种ROUGE指标之间的区别是什么? 21 | - 5.4 BLEU和ROUGE有什么不同? -------------------------------------------------------------------------------- /5 NLP 技巧面/5.1 少样本问题面/5.1.1 数据增强(EDA) 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #NLP #数据增强 2 | 3 | - [[#一、动机篇|一、动机篇]] 4 | - [[#1.1 什么是 数据增强?|1.1 什么是 数据增强?]] 5 | - [[#1.2 为什么需要 数据增强?|1.2 为什么需要 数据增强?]] 6 | - [[#二、常见的数据增强方法篇|二、常见的数据增强方法篇]] 7 | - [[#2.1 词汇替换篇|2.1 词汇替换篇]] 8 | - [[#2.1 词汇替换篇#2.1.1 什么是基于词典的替换方法?|2.1.1 什么是基于词典的替换方法?]] 9 | - [[#2.1 词汇替换篇#2.1.2 什么是基于词向量的替换方法?|2.1.2 什么是基于词向量的替换方法?]] 10 | - [[#2.1 词汇替换篇#2.1.3 什么是基于 MLM 的替换方法?|2.1.3 什么是基于 MLM 的替换方法?]] 11 | - [[#2.1 词汇替换篇#2.1.4 什么是基于 TF-IDF 的词替换?|2.1.4 什么是基于 TF-IDF 的词替换?]] 12 | - [[#2.2 词汇插入篇|2.2 词汇插入篇]] 13 | - [[#2.2 词汇插入篇#2.2.1 什么是随机插入法?|2.2.1 什么是随机插入法?]] 14 | - [[#2.3 词汇交换篇|2.3 词汇交换篇]] 15 | - [[#2.3 词汇交换篇#2.3.1 什么是随机交换法?|2.3.1 什么是随机交换法?]] 16 | - [[#2.4 词汇删除篇|2.4 词汇删除篇]] 17 | - [[#2.4 词汇删除篇#2.4.1 什么是随机删除法?|2.4.1 什么是随机删除法?]] 18 | - [[#2.5 回译篇|2.5 回译篇]] 19 | - [[#2.5 回译篇#2.5.1 什么是回译法?|2.5.1 什么是回译法?]] 20 | - [[#2.6 交叉增强篇|2.6 交叉增强篇]] 21 | - [[#2.6 交叉增强篇#2.6.1 什么是 交叉增强法?|2.6.1 什么是 交叉增强法?]] 22 | - [[#2.7 语法树篇|2.7 语法树篇]] 23 | - [[#2.7 语法树篇#2.7.1 什么是语法树操作?|2.7.1 什么是语法树操作?]] 24 | - [[#2.8 对抗增强篇|2.8 对抗增强篇]] 25 | - [[#2.8 对抗增强篇#2.8.1 什么是对抗增强?|2.8.1 什么是对抗增强?]] 26 | 27 | ### 一、动机篇 28 | ##### 1.1 什么是 数据增强? 29 | 数据增强是指通过对原始数据进行一系列变换和处理,以生成新的数据样本。在机器学习和深度学习领域,数据增强通常用于扩充训练数据集,以改善模型的泛化能力和性能。 30 | 31 | 数据增强可以采用多种技术和方法,包括但不限于: 32 | 1. 图像数据增强:包括旋转、翻转、缩放、裁剪、亮度调整、对比度调整、添加噪声等操作,以生成更多的图像样本。 33 | 2. 文本数据增强:包括同义词替换、句子重组、插入噪声、随机删除词语等操作,以生成更多的文本样本。 34 | 3. 音频数据增强:包括添加噪声、变速、变调、混响等操作,以生成更多的音频样本。 35 | 4. 时间序列数据增强:包括时序扭曲、时间窗口切割、插值等操作,以生成更多的时间序列样本。 36 | 37 | 数据增强的目的是通过引入一定的变化和噪声,使得模型在训练过程中能够更好地适应各种数据变化和噪声,从而提高模型的鲁棒性和泛化能力。数据增强也有助于解决数据不平衡的问题,提高模型的性能和稳定性。 38 | ##### 1.2 为什么需要 数据增强? 39 | 数据增强在机器学习和深度学习中是非常重要的,主要原因包括: 40 | 41 | 1. 扩充数据集:在实际应用中,往往很难获得大规模的标记数据,而模型对于大规模数据的训练往往能够提高泛化能力。通过数据增强,可以从有限的数据中生成更多的样本,扩充数据集规模,有助于提高模型的性能。 42 | 43 | 2. 提高模型泛化能力:数据增强可以帮助模型学习到更多的数据变化和噪声,从而提高模型的泛化能力,使其在面对新的、未见过的数据时能够更好地进行预测和分类。 44 | 45 | 3. 缓解过拟合:数据增强可以引入一定的变化和噪声,有助于减少模型对于训练数据的过度拟合,提高模型的鲁棒性,从而在测试数据上表现更好。 46 | 47 | 4. 解决数据不平衡问题:在实际场景中,很多数据集存在类别不平衡的问题,通过数据增强可以生成更多的少数类样本,从而平衡数据集,提高模型对于少数类的识别能力。 48 | 49 | 5. 提高模型的稳定性:通过引入数据增强,使得模型对于数据的微小变化更加稳定,有助于提高模型的鲁棒性和稳定性。 50 | 51 | 综上所述,数据增强能够有效地提高模型的性能、泛化能力和鲁棒性,因此在实际应用中是非常重要的。 52 | ### 二、常见的数据增强方法篇 53 | ##### 2.1 词汇替换篇 54 | ###### 2.1.1 什么是基于词典的替换方法? 55 | 基于词典的替换方法是一种常见的数据增强技术,它通过使用预定义的词典或同义词库,将文本中的单词替换为其同义词或相似词,从而生成新的训练样本。这种方法可以帮助增加训练数据的多样性,提高模型的泛化能力,并且有助于缓解过拟合问题。常见的词典包括WordNet、GloVe等,也可以根据具体的领域或任务构建自定义的词典。 56 | ###### 2.1.2 什么是基于词向量的替换方法? 57 | 基于词向量的替换方法是一种常见的数据增强技术,它利用预训练的词向量模型(如Word2Vec、GloVe、FastText等)来替换文本中的单词,从而生成新的训练样本。这种方法通过将原始单词替换为在词向量空间中相似的单词,可以增加训练数据的多样性,并且有助于提高模型的泛化能力。常见的替换方法包括使用词向量模型中的最相似单词进行替换,或者根据词向量的相似度进行加权替换。这些方法可以帮助改善模型在特定任务上的性能,尤其是在数据稀缺或不平衡的情况下。 58 | ###### 2.1.3 什么是基于 MLM 的替换方法? 59 | 基于 MLM(Masked Language Model)的替换方法是一种常见的数据增强技术,它利用预训练的MLM模型(如BERT、RoBERTa等)来替换文本中的单词,从而生成新的训练样本。这种方法通过将文本中的部分单词进行mask(即替换为特殊的mask标记),然后使用MLM模型来预测被mask的单词,得到替换后的单词,从而生成新的训练样本。这种方法可以帮助增加训练数据的多样性,提高模型的泛化能力,并且有助于缓解过拟合问题。同时,由于MLM模型在预训练阶段已经学习到了丰富的语言表示,因此可以更准确地预测被mask的单词,从而生成更具有语义相似性的替换。 60 | ###### 2.1.4 什么是基于 TF-IDF 的词替换? 61 | 基于 TF-IDF 的词替换是一种常见的数据增强方法,它利用文本中的词频-逆文档频率(TF-IDF)来替换文本中的单词,从而生成新的训练样本。TF-IDF是一种用于评估一个词对于一个文档集或语料库中的一个文档的重要程度的统计方法,它将一个词在文档中的词频和在整个语料库中的逆文档频率结合起来,用于衡量一个词的重要性。 62 | 63 | 基于 TF-IDF 的词替换方法通常是通过计算每个词的TF-IDF值,然后根据一定的规则或阈值来选择替换的单词。例如,可以选择将TF-IDF值较低的词替换为TF-IDF值较高的词,从而增加训练数据的多样性。这种方法可以帮助改善模型在特定任务上的性能,尤其是在数据稀缺或不平衡的情况下。 64 | ##### 2.2 词汇插入篇 65 | ###### 2.2.1 什么是随机插入法? 66 | 随机插入法是一种常见的数据增强方法,用于增加训练数据的多样性。在自然语言处理领域中,随机插入法通常用于文本数据的增强。该方法的基本思想是随机选择文本中的一个词,并在文本中插入一个随机选择的词,从而生成新的训练样本。 67 | 68 | 具体来说,随机插入法包括以下步骤: 69 | 1. 从原始文本中随机选择一个词; 70 | 2. 随机选择一个词或短语,并将其插入到所选词的位置; 71 | 3. 生成包含插入词的新文本样本。 72 | 73 | 通过随机插入法,可以引入新的词汇和短语,从而增加训练数据的多样性,有助于提高模型的泛化能力。这种方法可以在数据量不足或者需要增加数据多样性的情况下使用,以改善模型的性能。 74 | ##### 2.3 词汇交换篇 75 | ###### 2.3.1 什么是随机交换法? 76 | 随机交换法是一种常见的数据增强方法,用于增加训练数据的多样性。在自然语言处理领域中,随机交换法通常用于文本数据的增强。该方法的基本思想是随机选择文本中的两个词,并交换它们的位置,从而生成新的训练样本。 77 | 78 | 具体来说,随机交换法包括以下步骤: 79 | 1. 从原始文本中随机选择两个词; 80 | 2. 交换这两个词的位置; 81 | 3. 生成包含交换词位置的新文本样本。 82 | 83 | 通过随机交换法,可以改变文本中词语的顺序,从而增加训练数据的多样性,有助于提高模型的泛化能力。这种方法可以在数据量不足或者需要增加数据多样性的情况下使用,以改善模型的性能。 84 | ##### 2.4 词汇删除篇 85 | ###### 2.4.1 什么是随机删除法? 86 | 随机删除法是一种常见的数据增强方法,用于增加训练数据的多样性。在自然语言处理领域中,随机删除法通常用于文本数据的增强。该方法的基本思想是随机选择文本中的一些词,并将它们从文本中删除,从而生成新的训练样本。 87 | 88 | 具体来说,随机删除法包括以下步骤: 89 | 1. 从原始文本中随机选择一些词; 90 | 2. 将这些词从文本中删除; 91 | 3. 生成不包含删除词的新文本样本。 92 | 93 | 通过随机删除法,可以减少文本中的词语数量,从而增加训练数据的多样性,有助于提高模型的泛化能力。这种方法可以在数据量不足或者需要增加数据多样性的情况下使用,以改善模型的性能。 94 | ##### 2.5 回译篇 95 | ###### 2.5.1 什么是回译法? 96 | 回译法是一种常见的数据增强方法,通常用于自然语言处理领域。该方法的基本思想是将原始文本进行翻译,然后再将翻译后的文本翻译回原始语言,从而生成新的训练样本。 97 | 98 | 具体来说,回译法包括以下步骤: 99 | 1. 将原始文本翻译成另一种语言; 100 | 2. 将翻译后的文本再翻译回原始语言; 101 | 3. 生成包含回译文本的新训练样本。 102 | 103 | 通过回译法,可以生成与原始文本意思相近但表达方式不同的新样本,从而增加训练数据的多样性,有助于提高模型的泛化能力。这种方法可以在数据量不足或者需要增加数据多样性的情况下使用,以改善模型的性能。 104 | ##### 2.6 交叉增强篇 105 | ###### 2.6.1 什么是 交叉增强法? 106 | 交叉增强法是一种数据增强方法,它通过将两个或多个不同的样本进行组合或混合来创建新的样本。在计算机视觉和自然语言处理领域,交叉增强法通常用于增加数据集的多样性,提高模型的泛化能力。例如,在图像分类任务中,可以将两张不同的图像进行拼接或叠加,以创建新的训练样本。在自然语言处理任务中,可以通过将不同的句子进行组合或交换词语来生成新的训练样本。这种方法有助于提高模型对于不同样本的适应能力,从而提升模型的性能。 107 | ##### 2.7 语法树篇 108 | ###### 2.7.1 什么是语法树操作? 109 | 语法树操作是一种在自然语言处理中常见的数据增强方法。它涉及对文本的语法结构进行操作,以生成新的训练样本。具体来说,语法树操作通常涉及使用语法分析器将文本解析为树状结构,然后对这些树状结构进行修改或变换,以生成类似但不完全相同的新样本。这种方法可以用于生成具有相似语法结构但不同语义的句子,从而增加训练数据的多样性,提高模型的泛化能力。语法树操作常用于自然语言处理任务,如语义角色标注、句法分析和文本生成等。 110 | ##### 2.8 对抗增强篇 111 | ###### 2.8.1 什么是对抗增强? 112 | 对抗增强是一种数据增强方法,它是通过对抗生成网络(GAN)的思想来进行数据增强的。对抗生成网络由一个生成器和一个判别器组成,生成器试图生成逼真的假样本,而判别器则试图区分真实样本和生成样本。在对抗增强中,生成器被用来生成与原始样本类似但略有不同的新样本,而判别器则用来判断生成的样本与原始样本的相似度。 113 | 114 | 对抗增强的目标是生成与原始样本相似度高,但又能够欺骗判别器的新样本,从而增加数据集的多样性。这种方法可以用于图像、文本和音频等领域,帮助提高模型的泛化能力和对抗对抗攻击的能力。对抗增强是一种强大的数据增强技术,已经在许多领域取得了成功应用。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.1 少样本问题面/5.1.2 主动学习 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #主动学习 2 | 3 | - [[#一、动机篇|一、动机篇]] 4 | - [[#1.1 主动学习是什么?|1.1 主动学习是什么?]] 5 | - [[#1.2 为什么需要主动学习?|1.2 为什么需要主动学习?]] 6 | - [[#二、主动学习篇|二、主动学习篇]] 7 | - [[#2.1 主动学习的思路是什么?|2.1 主动学习的思路是什么?]] 8 | - [[#2.2 主动学习方法 的价值点在哪里?|2.2 主动学习方法 的价值点在哪里?]] 9 | - [[#三、样本选取策略篇|三、样本选取策略篇]] 10 | - [[#3.1 以未标记样本的获取方式的差别进行划分|3.1 以未标记样本的获取方式的差别进行划分]] 11 | - [[#3.2 测试集内选取“信息”量最大的数据标记|3.2 测试集内选取“信息”量最大的数据标记]] 12 | - [[#3.2 测试集内选取“信息”量最大的数据标记#3.2.1 测试集内选取“信息”量最大的数据标记|3.2.1 测试集内选取“信息”量最大的数据标记]] 13 | - [[#3.2 测试集内选取“信息”量最大的数据标记#3.2.2 依赖不确定度的样本选取策略(Uncertainty Sampling, US)|3.2.2 依赖不确定度的样本选取策略(Uncertainty Sampling, US)]] 14 | - [[#3.2 测试集内选取“信息”量最大的数据标记#3.2.3 基于委员会查询的方法(Query-By-Committee,QBC)|3.2.3 基于委员会查询的方法(Query-By-Committee,QBC)]] 15 | 16 | ### 一、动机篇 17 | ##### 1.1 主动学习是什么? 18 | 主动学习是一种机器学习的方法,它试图减少需要标记的数据量,同时提高模型的性能。在主动学习中,模型会自动选择最有益的样本来进行标记,以便在每次迭代中最大限度地提高模型的性能。这种方法通常用于监督学习任务,特别是在标记数据非常昂贵或困难获取的情况下。 19 | 20 | 主动学习的基本思想是在训练过程中,模型会选择一些未标记的样本,然后请求专家进行标记。这些样本通常是那些模型对其预测不确定性较高的样本,或者是对模型性能提升有帮助的样本。通过重复这个过程,模型可以在有限的标记数据下取得更好的性能,相比于传统的随机选择样本进行标记,主动学习可以更高效地利用有限的标记资源。 21 | ##### 1.2 为什么需要主动学习? 22 | 主动学习的出现是为了解决以下问题: 23 | 24 | 1. 标记数据成本高昂:在许多情况下,获取和标记数据是非常昂贵的,例如医学图像、语音识别等领域。通过主动学习,可以最大程度地减少需要标记的数据量,从而降低标记数据的成本。 25 | 26 | 2. 数据不平衡:在某些情况下,数据分布可能不平衡,导致模型在一些类别上性能较差。主动学习可以帮助模型更好地学习少数类别的样本,从而提高整体性能。 27 | 28 | 3. 数据获取困难:有时候获取标记数据可能非常困难,例如在一些特定的领域或者在特定的地区。通过主动学习,可以更有效地利用已有的标记数据,从而减少对新数据的依赖。 29 | 30 | 因此,主动学习的出现可以帮助提高模型的性能,降低标记数据的成本,解决数据不平衡问题,以及处理数据获取困难的情况。 31 | ### 二、主动学习篇 32 | ##### 2.1 主动学习的思路是什么? 33 | 主动学习是一种机器学习的方法,其思路是让模型能够主动选择最有益于提高性能的数据进行标记和学习。主动学习的思路可以概括为以下几个步骤: 34 | 35 | 1. 初始阶段:模型使用少量标记数据进行训练,通常是一些随机选择的样本。 36 | 37 | 2. 不确定性采样:模型对未标记的数据进行预测,并选择模型认为最不确定的样本进行标记。这些样本可能是模型预测概率最接近50%的样本,或者是模型对不同类别预测概率相差不大的样本。 38 | 39 | 3. 标记数据:选定的不确定性样本被标记,加入到已标记数据中。 40 | 41 | 4. 重新训练:使用新增的标记数据重新训练模型。 42 | 43 | 5. 重复迭代:重复进行不确定性采样、标记数据和重新训练的过程,直到模型性能收敛或达到满意的水平。 44 | 45 | 通过主动学习的思路,模型可以在有限的标记数据下取得更好的性能,因为它能够选择最具信息量的样本进行学习,从而更有效地利用标记数据。这种方法在数据标记成本高昂、数据不平衡或数据获取困难的情况下尤为有用。 46 | ##### 2.2 主动学习方法 的价值点在哪里? 47 | 主动学习方法的价值点在于能够有效地利用有限的标记数据来训练模型,并在模型性能方面提供了一些重要的优势: 48 | 49 | 1. 数据高效利用:主动学习能够选择最具信息量的样本进行标记,从而最大限度地提高模型性能,减少了需要标记的数据量,节省了标记数据的成本和时间。 50 | 51 | 2. 模型性能改善:通过选择最不确定的样本进行标记,主动学习可以帮助模型更快地收敛到较高的性能水平,尤其在初始阶段的模型性能提升明显。 52 | 53 | 3. 处理数据不平衡:在数据集中存在类别不平衡的情况下,主动学习可以帮助模型更好地学习少数类别的样本,从而提高模型对少数类别的识别能力。 54 | 55 | 4. 适用于大规模数据:在大规模数据集的情况下,标记所有数据可能是不现实的,主动学习可以帮助选择最具代表性的样本进行标记,从而更高效地处理大规模数据。 56 | 57 | 总的来说,主动学习方法能够在有限的标记数据下提高模型性能,节省标记数据成本,适应数据不平衡和大规模数据等问题,因此在实际应用中具有重要的价值。 58 | ### 三、样本选取策略篇 59 | ##### 3.1 以未标记样本的获取方式的差别进行划分 60 | 在主动学习中,样本选取策略可以根据未标记样本的获取方式进行划分。以下是一些常见的样本选取策略: 61 | 62 | 1. 不确定性采样:该策略通过使用模型的预测不确定性来选择未标记样本。通常情况下,模型对于某些样本的预测会更加不确定,因此选择这些样本进行标记可以带来更多的信息收益。 63 | 64 | 2. 边界采样:该策略选择靠近类别边界的未标记样本进行标记。这些样本通常更具有代表性,可以帮助模型更好地区分不同类别。 65 | 66 | 3. 多样性采样:该策略通过选择与已标记样本最不相似的未标记样本来进行标记。这样可以确保模型在学习过程中能够涵盖更多的不同情况和特征,提高泛化能力。 67 | 68 | 4. 模型不确定性采样:该策略结合了不确定性采样和模型的置信度来选择未标记样本。通过综合考虑模型的不确定性和置信度,可以更加准确地选择具有信息量的样本进行标记。 69 | 70 | 这些样本选取策略可以根据未标记样本的获取方式的差别进行划分,选择适合特定任务和数据集的策略进行样本选取,从而提高主动学习的效果。 71 | ##### 3.2 测试集内选取“信息”量最大的数据标记 72 | ###### 3.2.1 测试集内选取“信息”量最大的数据标记 73 | 在主动学习中,测试集通常用于评估模型的性能,而不是用于选取样本进行标记。主动学习的核心思想是在训练过程中选择最具信息量的样本进行标记,以提高模型性能。因此,通常不会在测试集内选取“信息”量最大的数据进行标记。 74 | 75 | 如果您想要在测试集中选取最具信息量的数据进行标记,可能需要重新考虑问题的设定。通常情况下,主动学习的样本选取策略是在训练集上进行的,通过模型的预测不确定性、边界样本、多样性等方式来选择未标记样本进行标记。测试集则用于评估模型的泛化性能,而不是用于主动选择样本进行标记。 76 | ###### 3.2.2 依赖不确定度的样本选取策略(Uncertainty Sampling, US) 77 | 依赖不确定度的样本选取策略(Uncertainty Sampling, US)是主动学习中常用的一种样本选取策略。该策略基于模型的预测不确定度来选择最具信息量的未标记样本进行标记,以帮助模型更好地学习并提高性能。 78 | 79 | Uncertainty Sampling通常包括以下几种常见的样本选取方法: 80 | 81 | 1. 最大化概率(Maximum Probability):选择模型对某一类别预测概率最大的样本进行标记。这种方法假设模型对于预测概率最大的样本更加确信,因此选择这些样本进行标记可以减少模型的不确定性。 82 | 83 | 2. 最小化概率(Minimum Probability):选择模型对某一类别预测概率最小的样本进行标记。这种方法假设模型对于预测概率最小的样本更加不确定,因此选择这些样本进行标记可以带来更多的信息量。 84 | 85 | 3. 最大化熵(Maximum Entropy):选择模型预测概率分布的熵最大的样本进行标记。熵是对模型预测的不确定性的度量,选择熵最大的样本进行标记可以带来更多的信息量。 86 | 87 | 通过依赖不确定度的样本选取策略,可以有效地选择最具信息量的未标记样本进行标记,从而帮助模型更好地学习和泛化。这些方法可以在不同的主动学习任务中发挥作用,提高模型的性能。 88 | ###### 3.2.3 基于委员会查询的方法(Query-By-Committee,QBC) 89 | 基于委员会查询的方法(Query-By-Committee,QBC)是主动学习中常用的一种样本选取策略。在这种方法中,使用多个模型来构建一个委员会(committee),然后根据这些模型的不同预测结果来选择最具争议性的样本进行标记。 90 | 91 | QBC方法的基本思想是,当委员会中的模型对某个样本的预测结果存在较大差异时,这个样本很可能是一个不确定的样本,选择这样的样本进行标记可以提供更多的信息量。QBC方法的具体步骤如下: 92 | 93 | 1. 训练多个不同的模型,可以使用不同的算法、不同的初始化参数或者不同的训练数据子集来训练这些模型,以确保它们有一定的差异性。 94 | 95 | 2. 对于未标记的样本,使用委员会中的每个模型进行预测。 96 | 97 | 3. 根据这些模型的预测结果,计算样本的预测差异性或者争议性,通常使用不确定性度量(如熵、方差等)来衡量。 98 | 99 | 4. 选择预测差异性或争议性最大的样本进行标记,以提供更多信息给模型。 100 | 101 | 通过使用QBC方法,可以利用多个模型之间的差异性来选择最具争议性的样本进行标记,从而帮助模型更好地学习和泛化。这种方法在主动学习中被广泛应用,并且通常能够取得良好的效果。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.1 少样本问题面/5.1.3 数据增强 之 对抗训练 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #数据增强 2 | 3 | - [[#一、介绍篇|一、介绍篇]] 4 | - [[#1.1 什么是 对抗训练 ?|1.1 什么是 对抗训练 ?]] 5 | - [[#1.2 为什么 对抗训练 能够 提高模型效果?|1.2 为什么 对抗训练 能够 提高模型效果?]] 6 | - [[#1.3 对抗训练 有什么特点?|1.3 对抗训练 有什么特点?]] 7 | - [[#1.4 对抗训练 的作用?|1.4 对抗训练 的作用?]] 8 | - [[#二、概念篇|二、概念篇]] 9 | - [[#2.1 对抗训练的基本概念?|2.1 对抗训练的基本概念?]] 10 | - [[#2.2 如何计算扰动?|2.2 如何计算扰动?]] 11 | - [[#2.3 如何优化?|2.3 如何优化?]] 12 | - [[#三、实战篇|三、实战篇]] 13 | - [[#3.1 NLP 中经典对抗训练 之 Fast Gradient Method(FGM)|3.1 NLP 中经典对抗训练 之 Fast Gradient Method(FGM)]] 14 | - [[#3.2 NLP 中经典对抗训练 之 Projected Gradient Descent(PGD)|3.2 NLP 中经典对抗训练 之 Projected Gradient Descent(PGD)]] 15 | 16 | ### 一、介绍篇 17 | ##### 1.1 什么是 对抗训练 ? 18 | 在数据增强中,对抗训练(Adversarial Training)是一种训练神经网络的方法,旨在提高模型对抗攻击的能力和鲁棒性。对抗训练的基本思想是通过向输入数据中添加经过精心设计的对抗性扰动,使得神经网络在训练过程中不断学习如何应对这些对抗性扰动,从而提高模型的鲁棒性。 19 | 20 | 对抗训练的具体步骤如下: 21 | 22 | 1. 生成对抗性样本:通过向原始输入数据添加扰动,可以生成对抗性样本。这些扰动通常是通过对抗生成网络(Generative Adversarial Network, GAN)或者其他对抗性攻击方法生成的。 23 | 24 | 2. 将对抗性样本添加到训练数据中:将生成的对抗性样本与原始训练数据混合在一起,形成新的训练数据集。 25 | 26 | 3. 训练神经网络:使用包含对抗性样本的训练数据集来训练神经网络。在训练过程中,神经网络会学习如何对抗这些对抗性扰动,从而提高模型的鲁棒性和对抗攻击的能力。 27 | 28 | 通过对抗训练,神经网络可以学习到对抗性扰动的特征,从而提高模型的鲁棒性,使其在面对对抗性攻击时能够更加稳健地保持良好的性能。对抗训练在提高神经网络的鲁棒性和对抗攻击能力方面具有重要的应用意义。 29 | ##### 1.2 为什么 对抗训练 能够 提高模型效果? 30 | 对抗训练能够提高模型效果的原因主要有以下几点: 31 | 32 | 1. 提高鲁棒性:对抗训练使得模型在训练过程中不断学习如何对抗对抗性扰动,从而提高模型的鲁棒性。这意味着即使在面对具有对抗性扰动的输入数据时,模型也能够保持较好的性能,而不会过度依赖于特定的输入分布。 33 | 34 | 2. 改善泛化能力:通过对抗训练,模型不仅能够在训练数据上取得良好的性能,还能够更好地泛化到未见过的数据。这是因为对抗性训练迫使模型学习到更加通用的特征和规律,使其对于不同类型的输入都能够表现出较好的性能。 35 | 36 | 3. 抵抗对抗攻击:对抗训练使得模型在面对对抗性攻击时能够更加稳健地保持良好的性能。对抗性攻击是一种故意设计的输入扰动,旨在使得模型产生错误的预测结果。通过对抗训练,模型可以学习到如何对抗这些对抗性扰动,从而提高其抵抗对抗攻击的能力。 37 | 38 | 总之,对抗训练能够提高模型效果的主要原因在于其能够提高模型的鲁棒性、改善泛化能力,并且使得模型能够更好地抵抗对抗性攻击,从而在面对不确定性和挑战时能够保持较好的性能。 39 | ##### 1.3 对抗训练 有什么特点? 40 | 对抗训练有以下几个特点: 41 | 42 | 1. 鲁棒性提高:对抗训练能够提高模型对抗对抗性攻击的能力,使得模型在面对对抗性扰动时能够保持较好的性能。这是对抗训练的最主要特点之一。 43 | 44 | 2. 提高泛化能力:通过对抗训练,模型不仅能够在训练数据上取得良好的性能,还能够更好地泛化到未见过的数据,从而提高模型的泛化能力。 45 | 46 | 3. 对抗性样本的加入:对抗训练通过将对抗性样本与原始训练数据混合在一起,使得模型能够学习到对抗性扰动的特征,从而提高模型的鲁棒性和对抗攻击的能力。 47 | 48 | 4. 对抗生成网络的应用:在对抗训练中,通常会使用对抗生成网络(GAN)或者其他对抗性攻击方法来生成对抗性样本,从而帮助模型学习如何对抗对抗性扰动。 49 | 50 | 5. 增强模型的稳健性:对抗训练能够增强模型的稳健性,使得模型在面对不确定性和挑战时能够保持较好的性能。 51 | 52 | 总之,对抗训练的特点包括提高模型的鲁棒性、提高泛化能力、对抗性样本的加入以及增强模型的稳健性。这些特点使得对抗训练成为提高神经网络鲁棒性和对抗攻击能力的重要方法。 53 | ##### 1.4 对抗训练 的作用? 54 | 对抗训练的作用包括: 55 | 56 | 1. 提高模型的鲁棒性:对抗训练可以帮助模型在面对对抗性扰动时保持较好的性能,从而提高模型的鲁棒性。这意味着即使输入数据受到干扰或攻击,模型也能够产生准确的预测结果。 57 | 58 | 2. 抵抗对抗攻击:通过对抗训练,模型能够学习如何对抗对抗性攻击,从而提高其抵抗对抗攻击的能力。这对于保护模型免受恶意攻击和欺骗性输入的影响非常重要。 59 | 60 | 3. 提高泛化能力:对抗训练有助于模型更好地泛化到未见过的数据,从而提高模型的泛化能力。这意味着模型在面对新的、未知的数据时也能够表现出良好的性能。 61 | 62 | 4. 增强模型的稳健性:对抗训练可以增强模型的稳健性,使其在面对不确定性和挑战时能够保持较好的性能。 63 | 64 | 总之,对抗训练的作用包括提高模型的鲁棒性、抵抗对抗攻击、提高泛化能力和增强模型的稳健性。这些作用使得对抗训练成为提高模型对抗攻击能力和泛化能力的重要方法。 65 | ### 二、概念篇 66 | ##### 2.1 对抗训练的基本概念? 67 | 对抗训练是一种用于提高机器学习模型对抗对抗性攻击的能力的方法。其基本概念是通过向训练数据中注入对抗性样本,或者使用对抗生成网络(GAN)等技术来生成对抗性样本,从而训练模型更好地对抗对抗性扰动。对抗训练的目标是使模型在面对对抗性扰动时能够保持较好的性能,提高模型的鲁棒性和抗攻击能力。通过在训练过程中暴露模型于对抗性样本,模型能够学习到如何识别和对抗对抗性扰动,从而提高其对抗攻击的能力。对抗训练已经被广泛应用于图像分类、语音识别、自然语言处理等领域,成为提高模型鲁棒性和对抗攻击能力的重要方法。 68 | ##### 2.2 如何计算扰动? 69 | 计算对抗性扰动通常涉及使用一些度量标准来衡量原始输入数据和经过扰动后的输入数据之间的差异。常用的度量标准包括: 70 | 71 | 1. L2范数:L2范数是一种用于衡量向量长度的方法,计算两个向量之间的欧几里德距离。在计算对抗性扰动时,可以使用L2范数来衡量原始输入数据和扰动后的输入数据之间的差异。 72 | 73 | 2. L∞范数:L∞范数是一种用于衡量向量中最大元素的绝对值的方法,也称为最大范数。在计算对抗性扰动时,可以使用L∞范数来衡量原始输入数据和扰动后的输入数据之间的最大差异。 74 | 75 | 3. 交叉熵损失:在对抗性攻击中,交叉熵损失通常用于衡量模型对扰动后的输入数据的预测结果与原始输入数据的预测结果之间的差异。 76 | 77 | 这些度量标准可以帮助计算对抗性扰动的大小和影响,从而评估模型的鲁棒性和对抗攻击能力。根据具体的应用场景和需求,可以选择合适的度量标准来计算对抗性扰动。 78 | ##### 2.3 如何优化? 79 | 对抗训练是一种用于提高机器学习模型鲁棒性的技术,它通过在训练过程中引入对抗性样本来使模型对抗攻击更加稳健。以下是一些优化对抗训练的方法: 80 | 81 | 1. 对抗样本生成:使用对抗样本生成技术,如基于梯度的方法(如FGSM、PGD等)或者生成对抗网络(GAN)来生成对抗性样本,这些样本可以用于在训练中提高模型的鲁棒性。 82 | 83 | 2. 对抗性训练损失函数:设计适合对抗训练的损失函数,例如使用交叉熵损失函数结合对抗性损失函数,以使模型在训练过程中对抗性攻击更具鲁棒性。 84 | 85 | 3. 对抗性训练策略:采用不同的对抗性训练策略,如在每个训练步骤中对抗性调整模型参数,或者使用多种对抗性训练方法的组合,以提高模型的鲁棒性。 86 | 87 | 4. 数据增强:在对抗训练中使用数据增强技术,如随机裁剪、旋转、缩放等,以增加模型对不同变化的适应能力。 88 | 89 | 5. 对抗性训练的调参:对对抗性训练过程中的超参数进行调优,如学习率、对抗性训练的迭代次数等,以提高模型的鲁棒性。 90 | 91 | 这些方法可以帮助优化对抗训练,提高模型对抗攻击的鲁棒性。需要根据具体的应用场景和需求选择合适的对抗训练方法和策略。 92 | ### 三、实战篇 93 | ##### 3.1 NLP 中经典对抗训练 之 Fast Gradient Method(FGM) 94 | Fast Gradient Method(FGM)是一种经典的对抗训练方法,常用于自然语言处理(NLP)中。它通过在训练过程中向输入数据中添加对抗性扰动来提高模型的鲁棒性。 95 | 96 | FGM的基本思想是在每次模型训练的迭代中,计算输入数据的梯度,并根据梯度的方向对输入数据进行微小的扰动,使得模型在对抗性样本上的损失函数最大化。这样可以迫使模型在训练过程中更加关注对抗性样本,从而提高模型对对抗攻击的鲁棒性。 97 | 98 | FGM的算法步骤如下: 99 | 100 | 1. 对于给定的输入样本x,计算其损失函数关于输入的梯度:∇_x J(θ, x, y),其中J表示模型的损失函数,θ表示模型参数,y表示样本的真实标签。 101 | 102 | 2. 根据梯度的方向,对输入样本进行微小扰动:x' = x + ε * sign(∇_x J(θ, x, y)),其中ε是扰动的大小,sign表示取梯度的符号。 103 | 104 | 3. 使用扰动后的样本x'进行模型的训练。 105 | 106 | FGM方法简单高效,易于实现,并且在提高模型对对抗攻击的鲁棒性方面取得了一定的效果。然而,它也存在一些局限性,例如可能会导致模型在非对抗性样本上的性能下降,以及对抗性样本的生成可能不够具有多样性等问题。因此,在实际应用中需要结合其他对抗训练方法和策略来综合提高模型的鲁棒性。 107 | ##### 3.2 NLP 中经典对抗训练 之 Projected Gradient Descent(PGD) 108 | Projected Gradient Descent(PGD)是一种经典的对抗训练方法,常用于自然语言处理(NLP)中。它通过在训练过程中生成对抗性样本,并利用梯度下降算法来优化模型的参数,以提高模型对对抗攻击的鲁棒性。 109 | 110 | PGD的基本思想是在每次模型训练的迭代中,对输入样本进行多次小步幅的梯度下降,以最大化损失函数关于对抗性样本的值。在每次迭代中,对生成的对抗性样本进行投影,以确保其在一定的范围内,避免扰动过大。这样可以迫使模型在训练过程中更加关注对抗性样本,从而提高模型对对抗攻击的鲁棒性。 111 | 112 | PGD的算法步骤如下: 113 | 114 | 1. 对于给定的输入样本x,计算其损失函数关于输入的梯度:∇_x J(θ, x, y),其中J表示模型的损失函数,θ表示模型参数,y表示样本的真实标签。 115 | 116 | 2. 在每次迭代中,对生成的对抗性样本进行投影,以确保其在一定的范围内,避免扰动过大。 117 | 118 | 3. 使用投影后的对抗性样本进行模型的训练。 119 | 120 | PGD方法相对于其他对抗训练方法,如FGM,通常能够更好地提高模型的鲁棒性,因为它考虑了对抗性样本的多步优化过程,并且可以更好地控制扰动的大小。然而,PGD方法也需要更多的计算资源和时间,因为它需要进行多次梯度下降的迭代。在实际应用中,需要根据具体的需求和场景选择合适的对抗训练方法和策略。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.2 “脏数据”处理 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 2 | 3 | - [[#一、动机|一、动机]] 4 | - [[#1.1 何为“脏数据”?|1.1 何为“脏数据”?]] 5 | - [[#1.2 “脏数据” 会带来什么后果?|1.2 “脏数据” 会带来什么后果?]] 6 | - [[#二、“脏数据” 处理篇|二、“脏数据” 处理篇]] 7 | - [[#2.1 “脏数据” 怎么处理呢?|2.1 “脏数据” 怎么处理呢?]] 8 | - [[#2.2 置信学习方法篇|2.2 置信学习方法篇]] 9 | - [[#2.2 置信学习方法篇#2.2.1 什么是 置信学习方法?|2.2.1 什么是 置信学习方法?]] 10 | - [[#2.2 置信学习方法篇#2.2.2 置信学习方法 优点?|2.2.2 置信学习方法 优点?]] 11 | - [[#2.2 置信学习方法篇#2.2.3 置信学习方法 怎么做?|2.2.3 置信学习方法 怎么做?]] 12 | - [[#2.2 置信学习方法篇#2.2.4 置信学习方法 怎么用?有什么开源框架?|2.2.4 置信学习方法 怎么用?有什么开源框架?]] 13 | - [[#2.2 置信学习方法篇#2.2.5 置信学习方法 的工作原理?|2.2.5 置信学习方法 的工作原理?]] 14 | 15 | ### 一、动机 16 | ##### 1.1 何为“脏数据”? 17 | “脏数据”是指在数据集中存在错误、不一致或不完整的数据。这些错误可能是由于数据采集过程中的误差、人为输入错误、系统故障或其他原因导致的。脏数据可能包括缺失值、重复值、异常值、不一致的格式或单位、错误的标签等。 18 | 19 | 脏数据对数据分析、机器学习和其他数据驱动的任务都会产生负面影响,因为它们可能导致模型训练不准确、预测不准确或者分析结果失真。因此,在数据处理的过程中,通常需要对脏数据进行清洗和处理,包括删除、修复、填充缺失值、处理异常值等操作,以确保数据的质量和准确性。 20 | ##### 1.2 “脏数据” 会带来什么后果? 21 | 脏数据可能会导致以下后果: 22 | 23 | 1. 错误的决策:基于脏数据进行的分析和决策可能会产生错误的结论,影响业务决策的准确性和可靠性。 24 | 25 | 2. 不准确的预测:在机器学习和数据挖掘任务中,脏数据会导致模型训练不准确,从而影响模型的预测准确性。 26 | 27 | 3. 降低数据价值:脏数据可能会降低数据的可信度和可用性,使得数据无法充分发挥其潜在的价值。 28 | 29 | 4. 浪费资源:对脏数据进行分析和处理会消耗额外的时间和资源,增加数据处理的成本。 30 | 31 | 5. 信誉和声誉受损:如果基于脏数据做出的决策或预测出现问题,可能会影响组织或个人的信誉和声誉。 32 | 33 | 因此,保证数据的质量和准确性对于数据驱动的任务至关重要。对脏数据进行识别、清洗和处理,可以提高数据的质量,确保数据分析和机器学习模型的准确性和可靠性。 34 | ### 二、“脏数据” 处理篇 35 | ##### 2.1 “脏数据” 怎么处理呢? 36 | 处理脏数据的方法包括以下几种: 37 | 38 | 1. 数据清洗:识别和删除重复值、缺失值和异常值,以确保数据的完整性和准确性。 39 | 40 | 2. 数据标准化:将数据转换为统一的格式和单位,以消除数据中的不一致性。 41 | 42 | 3. 数据填充:对于缺失值,可以采用插值、均值、中位数或者使用其他合适的值进行填充。 43 | 44 | 4. 错误校正:对于明显的错误数据,可以进行手动或自动校正,以修复数据中的错误。 45 | 46 | 5. 数据验证:通过数据验证和逻辑检查,确保数据符合规定的格式和逻辑要求。 47 | 48 | 6. 数据审查:对数据进行定期审查和监控,及时发现和处理新的脏数据。 49 | 50 | 7. 数据采集优化:改进数据采集过程,减少脏数据产生的可能性,例如增加输入验证、数据录入培训等。 51 | 52 | 以上方法可以单独或结合使用,根据数据的特点和具体情况来处理脏数据,以提高数据的质量和可靠性。 53 | ##### 2.2 置信学习方法篇 54 | ###### 2.2.1 什么是 置信学习方法? 55 | ###### 2.2.2 置信学习方法 优点? 56 | ###### 2.2.3 置信学习方法 怎么做? 57 | ###### 2.2.4 置信学习方法 怎么用?有什么开源框架? 58 | ###### 2.2.5 置信学习方法 的工作原理? -------------------------------------------------------------------------------- /5 NLP 技巧面/5.3 batch_size设置 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 2 | 3 | - [[#一、训练模型时,batch_size的设置,学习率的设置?|一、训练模型时,batch_size的设置,学习率的设置?]] 4 | 5 | ### 一、训练模型时,batch_size的设置,学习率的设置? 6 | 在训练模型时,设置合适的batch_size和学习率是非常重要的。 7 | 8 | 1. Batch_size: 9 | - Batch_size是指每次迭代训练时用来更新模型参数的样本数。通常来说,较大的batch_size能够更好地利用计算资源,加快训练速度,但可能会导致模型收敛速度变慢。较小的batch_size则可能会增加训练时间,但有助于模型更快地收敛并获得更好的泛化性能。 10 | - 选择合适的batch_size需要考虑计算资源、模型复杂度和数据集大小等因素。一般来说,可以通过尝试不同的batch_size并监控训练效果来找到最佳的设置。 11 | 12 | 2. 学习率(Learning Rate): 13 | - 学习率是指在每次参数更新时,控制参数更新幅度的大小。较大的学习率会导致参数在更新时变化较大,可能会导致模型不稳定或无法收敛;而较小的学习率可能会导致收敛速度过慢,或者陷入局部最优解。 14 | - 选择合适的学习率需要根据具体的模型和数据集进行调整。一般来说,可以通过使用学习率衰减、自适应学习率算法(如Adam、RMSprop等)或者尝试不同的学习率并观察模型的训练效果来确定最佳的学习率设置。 15 | 16 | 综合来说,选择合适的batch_size和学习率需要结合具体的模型、数据集和计算资源等因素进行调整,并通过实验来找到最佳的设置。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.4 早停法 EarlyStopping 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 2 | 3 | - [[#一、 为什么要用 早停法 EarlyStopping?|一、 为什么要用 早停法 EarlyStopping?]] 4 | - [[#二、 早停法 EarlyStopping 是什么?|二、 早停法 EarlyStopping 是什么?]] 5 | - [[#三、早停法 torch 版本怎么实现?|三、早停法 torch 版本怎么实现?]] 6 | 7 | ### 一、 为什么要用 早停法 EarlyStopping? 8 | 早停法(Early Stopping)是一种用于防止模型过拟合的正则化技术,它的原理是在模型训练过程中监控验证集的性能指标,一旦验证集的性能指标不再提升,就停止训练,以防止模型过拟合。 9 | 10 | 使用早停法的原因包括: 11 | 1. 防止过拟合:当模型在训练集上表现良好但在验证集上表现不佳时,很可能是因为模型过拟合了训练数据。早停法可以在模型开始过拟合之前停止训练,避免模型在验证集上的性能下降。 12 | 2. 节省时间和计算资源:如果模型在验证集上的性能不再提升,继续训练只会浪费时间和计算资源,而早停法可以及时停止训练,节省资源和时间成本。 13 | 3. 提高模型泛化能力:通过早停法可以避免模型在训练集上过度拟合,从而提高模型的泛化能力,使其在未见过的数据上表现更好。 14 | 15 | 总之,早停法是一种有效的防止过拟合、节省时间和资源、提高模型泛化能力的技术,因此在训练模型时通常会使用早停法来监控模型的训练过程。 16 | ### 二、 早停法 EarlyStopping 是什么? 17 | 在机器学习训练中,早停法(Early Stopping)是一种常用的正则化技术,用于防止模型在训练过程中出现过拟合。它通过在训练过程中监视验证集的性能指标,如损失函数或准确率,当验证集性能不再改善或开始恶化时,提前终止训练过程,从而避免模型过拟合。这样可以在模型性能达到最佳时停止训练,避免在训练集上过度拟合的情况。早停法是一种简单而有效的方法,通常在深度学习和其他机器学习任务中被广泛应用。 18 | ### 三、早停法 torch 版本怎么实现? 19 | 在 PyTorch 中,可以通过使用 EarlyStopping 类来实现早停法。下面是一个简单的示例代码,演示了如何在 PyTorch 中实现早停法: 20 | 21 | ```python 22 | import torch 23 | import numpy as np 24 | 25 | class EarlyStopping: 26 | def __init__(self, patience=5, delta=0, path='checkpoint.pt'): 27 | self.patience = patience # 容忍多少次验证集损失不再改善 28 | self.delta = delta # 最小损失的变化 29 | self.path = path # 保存模型的路径 30 | self.counter = 0 # 计数器 31 | self.best_loss = None # 最佳损失 32 | self.early_stop = False # 是否早停 33 | 34 | def __call__(self, val_loss, model): 35 | if self.best_loss is None: 36 | self.best_loss = val_loss 37 | self.save_checkpoint(val_loss, model) 38 | elif val_loss > self.best_loss + self.delta: 39 | self.counter += 1 40 | if self.counter >= self.patience: 41 | self.early_stop = True 42 | else: 43 | self.best_loss = val_loss 44 | self.save_checkpoint(val_loss, model) 45 | self.counter = 0 46 | 47 | def save_checkpoint(self, val_loss, model): 48 | torch.save(model.state_dict(), self.path) 49 | 50 | def load_checkpoint(self, model): 51 | model.load_state_dict(torch.load(self.path)) 52 | ``` 53 | 54 | 在训练过程中,可以通过调用 EarlyStopping 实例的 `__call__` 方法来检查验证集损失,并根据情况决定是否早停。例如: 55 | 56 | ```python 57 | # 在每个epoch结束后检查验证集损失 58 | early_stopping = EarlyStopping(patience=5, delta=0.001) 59 | for epoch in range(num_epochs): 60 | # 训练模型 61 | # 计算验证集损失 62 | val_loss = ... 63 | # 检查是否早停 64 | early_stopping(val_loss, model) 65 | if early_stopping.early_stop: 66 | print("Early stopping") 67 | break 68 | ``` 69 | 70 | 这样就可以在 PyTorch 中使用 EarlyStopping 类来实现早停法。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.5 标签平滑法 LabelSmoothing 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 2 | - [[#一、为什么要有 标签平滑法 LabelSmoothing?|一、为什么要有 标签平滑法 LabelSmoothing?]] 3 | - [[#二、 标签平滑法 是什么?|二、 标签平滑法 是什么?]] 4 | - [[#三、 标签平滑法 torch 怎么复现?|三、 标签平滑法 torch 怎么复现?]] 5 | 6 | ### 一、为什么要有 标签平滑法 LabelSmoothing? 7 | 标签平滑法(Label Smoothing)是一种用于改善深度学习模型性能的正则化技术。它的主要作用是减少模型对训练数据中标签噪声的敏感性,从而提高模型的泛化能力和鲁棒性。 8 | 9 | 标签平滑法的背后原理是,当使用传统的独热编码标签时,模型在训练过程中可能会过度自信地预测样本属于某一类别,忽略了其他可能的类别。这种过度自信可能导致模型对噪声和不确定性更加敏感,从而降低了泛化能力。 10 | 11 | 通过标签平滑法,我们可以在训练数据的标签中引入一定程度的平滑,使得模型在训练过程中更加谨慎地对待标签信息。这样一来,模型在学习过程中会更加关注数据的真实分布,而不是过度依赖于训练数据中的噪声和异常情况,从而提高了模型的泛化能力。 12 | 13 | 总的来说,标签平滑法的目的是通过减少模型对训练数据中标签噪声的敏感性,来提高模型的泛化能力和鲁棒性。因此,在某些情况下,使用标签平滑法可以改善模型的性能并提高其在实际应用中的效果。 14 | ### 二、 标签平滑法 是什么? 15 | 标签平滑法(Label Smoothing)是一种用于改善深度学习模型性能的正则化技术。在传统的分类任务中,通常使用独热编码(One-Hot Encoding)来表示标签,即将真实标签的位置设为1,其他位置设为0。然而,独热编码在某些情况下可能会导致模型对训练数据中的噪声和不确定性过于敏感,从而降低模型的泛化能力。 16 | 17 | 标签平滑法通过在训练数据的标签中引入一定程度的平滑,来减少模型对训练数据中标签噪声的敏感性。具体来说,标签平滑法将真实的标签值从1减去一个较小的值(通常为一个较小的正数),并将这个差值均匀地分配给其他类别。这样一来,模型在训练过程中会更加谨慎地对待标签信息,更关注数据的真实分布,而不是过度依赖于训练数据中的噪声和异常情况。这有助于提高模型的泛化能力和鲁棒性。 18 | 19 | 总的来说,标签平滑法的目的是通过减少模型对训练数据中标签噪声的敏感性,来提高模型的泛化能力和鲁棒性。因此,在某些情况下,使用标签平滑法可以改善模型的性能并提高其在实际应用中的效果。 20 | ### 三、 标签平滑法 torch 怎么复现? 21 | 要使用标签平滑法(Label Smoothing)在PyTorch中进行复现,您可以使用以下代码示例作为起点: 22 | 23 | ```python 24 | import torch 25 | import torch.nn as nn 26 | import torch.optim as optim 27 | import torch.nn.functional as F 28 | 29 | class LabelSmoothingCrossEntropy(nn.Module): 30 | def __init__(self, smoothing=0.1): 31 | super(LabelSmoothingCrossEntropy, self).__init__() 32 | self.smoothing = smoothing 33 | 34 | def forward(self, input, target): 35 | log_prob = F.log_softmax(input, dim=-1) 36 | nll_loss = -log_prob.gather(dim=-1, index=target.unsqueeze(1)) 37 | nll_loss = nll_loss.squeeze(1) 38 | smooth_loss = -log_prob.mean(dim=-1) 39 | loss = (1.0 - self.smoothing) * nll_loss + self.smoothing * smooth_loss 40 | return loss.mean() 41 | 42 | # 使用标签平滑法的交叉熵损失函数 43 | criterion = LabelSmoothingCrossEntropy(smoothing=0.1) 44 | 45 | # 定义模型、优化器等 46 | # ... 47 | 48 | # 在训练循环中使用criterion计算损失 49 | # loss = criterion(output, target) 50 | # loss.backward() 51 | # optimizer.step() 52 | ``` 53 | 54 | 在这个示例中,我们定义了一个名为LabelSmoothingCrossEntropy的自定义损失函数,它使用标签平滑法来计算交叉熵损失。在训练循环中,您可以使用这个自定义的损失函数来计算模型的损失,并进行反向传播和优化。 55 | 56 | 请注意,上述代码示例仅用于说明如何在PyTorch中使用标签平滑法,实际应用中可能需要根据您的具体情况进行调整和修改。希望这可以帮助您开始在PyTorch中复现标签平滑法。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.6 Bert Trick 面试篇/5.6.1 Bert 未登录词处理 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #BERT 2 | 3 | - [[#什么是 Bert 未登录词?|什么是 Bert 未登录词?]] 4 | - [[#Bert 未登录词 如何处理?|Bert 未登录词 如何处理?]] 5 | - [[#Bert 未登录词各种处理方法 有哪些优缺点?|Bert 未登录词各种处理方法 有哪些优缺点?]] 6 | 7 | ### 什么是 Bert 未登录词? 8 | BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,它在自然语言处理领域取得了巨大的成功。在BERT中,未登录词(Out-Of-Vocabulary,OOV)指的是在训练BERT模型时没有出现在词汇表中的词语。 9 | 10 | 对于未登录词,BERT使用了一种特殊的标记来表示,即"[UNK]"(unknown token)。当模型在输入文本中遇到未登录词时,会用"[UNK]"来代替该词,以表明模型无法识别该词的具体含义。 11 | 12 | 在实际应用中,为了处理未登录词,通常需要对输入文本进行预处理,将未登录词替换为"[UNK]"标记,然后再输入到BERT模型中进行处理。这样可以确保模型在处理未登录词时能够正确地进行推断和预测。 13 | 14 | 总之,BERT中的未登录词是指在训练时未出现在词汇表中的词语,模型会用特殊的"[UNK]"标记来表示这些未登录词。 15 | ### Bert 未登录词 如何处理? 16 | 处理BERT中的未登录词(Out-Of-Vocabulary,OOV)通常需要在输入文本中将未登录词替换为特殊的"[UNK]"标记,然后再输入到BERT模型中进行处理。这样可以确保模型在处理未登录词时能够正确地进行推断和预测。下面是一种常见的处理方法: 17 | 18 | 1. 预处理:在将文本输入到BERT模型之前,需要对文本进行预处理。首先,将文本分词成单词或子词(subwords),然后将未登录词替换为特殊的"[UNK]"标记。 19 | 20 | 2. 使用词块:对于一些未登录词,可以尝试将其拆分成更小的词块或子词,这样可能会使得一些未登录词能够在BERT的词汇表中找到对应的部分,从而减少未登录词的影响。 21 | 22 | 3. 使用外部词汇表:有时候可以使用外部的词汇表来扩展BERT的词汇表,以包含一些未登录词。这样可以提高模型对未登录词的处理能力。 23 | 24 | 4. Fine-tuning:在特定任务上进行微调时,可以通过在训练数据中引入未登录词的变体来训练模型,从而提高模型对未登录词的处理能力。 25 | 26 | 需要注意的是,处理未登录词的方法可能会因任务和数据集的不同而有所差异。在实际应用中,可以根据具体情况选择合适的方法来处理BERT中的未登录词。 27 | ### Bert 未登录词各种处理方法 有哪些优缺点? 28 | 处理BERT中的未登录词有多种方法,每种方法都有其优点和缺点。以下是一些常见的处理方法以及它们的优缺点: 29 | 30 | 1. 替换为特殊标记"[UNK]": 31 | - 优点:简单直接,不需要额外的处理步骤。 32 | - 缺点:丢失了未登录词的具体信息,可能影响模型对文本的理解和推断能力。 33 | 34 | 2. 使用词块(subwords): 35 | - 优点:可以将一些未登录词拆分成更小的词块或子词,使得一部分未登录词能够在BERT的词汇表中找到对应的部分。 36 | - 缺点:增加了文本预处理的复杂度,可能引入歧义性,影响模型对文本的理解。 37 | 38 | 3. 使用外部词汇表扩展BERT的词汇表: 39 | - 优点:可以提高模型对未登录词的处理能力,增加了模型对未登录词的覆盖范围。 40 | - 缺点:需要额外的词汇表,可能会增加模型的计算和存储开销。 41 | 42 | 4. Fine-tuning时引入未登录词的变体: 43 | - 优点:可以通过训练数据中引入未登录词的变体来提高模型对未登录词的处理能力。 44 | - 缺点:需要大量的训练数据,训练成本高,且并不总是有效。 45 | 46 | 总的来说,每种处理方法都有其适用的场景和局限性。在实际应用中,可以根据具体任务和数据集的情况选择合适的处理方法。同时,也可以尝试结合多种方法来处理BERT中的未登录词,以提高模型对未登录词的处理能力。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.6 Bert Trick 面试篇/5.6.2 BERT在输入层引入额外特征 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #BERT 2 | 3 | - [[#BERT在输入层如何引入额外特征?|BERT在输入层如何引入额外特征?]] 4 | 5 | ### BERT在输入层如何引入额外特征? 6 | 在BERT模型的输入层引入额外特征通常可以通过以下几种方法实现: 7 | 8 | 1. 拼接额外特征到输入文本中:可以将额外特征直接拼接到输入文本的每个词或子词的后面。例如,如果有一个额外的特征向量,可以将其拼接到每个词或子词的嵌入向量之后,形成一个更长的向量作为输入。 9 | 10 | 2. 使用特殊的额外特征标记:可以在输入文本中引入特殊的标记来表示额外特征的存在,然后将额外特征的值作为模型的输入之一。例如,可以在输入文本中添加一个特殊的标记,然后将额外特征的值作为该标记对应的嵌入向量输入到模型中。 11 | 12 | 3. 多模态输入:对于包含多种类型信息的输入,可以使用多模态输入的方式,将文本信息和额外特征信息分别输入到不同的模态处理器中,然后将它们的表示进行整合,以获得更丰富的输入表示。 13 | 14 | 需要注意的是,以上方法都需要对BERT模型进行修改或扩展,以接受额外特征的输入。在实际应用中,可以根据具体任务和数据集的情况选择合适的方法来引入额外特征,以提高模型对输入信息的理解和表达能力。 -------------------------------------------------------------------------------- /5 NLP 技巧面/5.6 Bert Trick 面试篇/5.6.3 关于BERT 继续预训练 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #BERT 2 | 3 | - [[#什么是 继续预训练?|什么是 继续预训练?]] 4 | - [[#为什么会存在 【数据分布/领域差异】大 问题?|为什么会存在 【数据分布/领域差异】大 问题?]] 5 | - [[#如何进行 继续预训练?|如何进行 继续预训练?]] 6 | - [[#还有哪些待解决问题?|还有哪些待解决问题?]] 7 | - [[#训练数据问题解决方案?|训练数据问题解决方案?]] 8 | - [[#知识缺乏问题解决方案?|知识缺乏问题解决方案?]] 9 | - [[#知识理解缺乏问题解决方案?|知识理解缺乏问题解决方案?]] 10 | 11 | ### 什么是 继续预训练? 12 | 继续预训练(Continual Pretraining)是指在已经进行过一定周期的预训练(如BERT、GPT等模型)基础上,继续使用大规模文本数据进行进一步的预训练。这种方法旨在进一步提高模型的泛化能力和对语言世界的理解,从而使其在各种自然语言处理任务中表现更好。 13 | 14 | 在继续预训练中,通常会使用更多的文本数据来扩展模型的语言知识,同时可能会调整预训练过程的超参数、模型结构或者训练目标,以适应新的预训练任务。这样可以使模型更好地捕捉语言中的复杂特征和关系,从而提高其在下游任务中的性能表现。 15 | 16 | 继续预训练的优势在于可以进一步提升模型的语言理解能力,使其能够更好地适应各种语言任务的需求。然而,继续预训练也需要大量的计算资源和时间,因为需要处理更多的文本数据和进行更多的训练迭代。因此,继续预训练通常被用于对性能要求较高的任务或者对模型性能有较高追求的研究工作中。 17 | ### 为什么会存在 【数据分布/领域差异】大 问题? 18 | 存在数据分布/领域差异大的问题通常是由以下几个原因造成的: 19 | 20 | 1. 数据来源不同:不同数据集可能来自不同的来源,比如不同的网站、不同的实验室、不同的调查等,这些数据来源可能会导致数据分布的差异。例如,来自不同社交媒体平台的数据可能在内容和风格上存在差异,导致数据分布的不一致性。 21 | 22 | 2. 数据采集方式不同:不同数据集的采集方式可能不同,比如采集时间、采集地点、采集方法等,这些差异可能会导致数据分布的不一致性。例如,使用不同的调查问卷设计或者不同的抽样方法可能导致数据分布不同。 23 | 24 | 3. 数据标注不一致:不同数据集的标注方式和标准可能存在差异,导致同一类别的数据在不同数据集中的分布不同。这可能是由于标注者主观判断的差异、标注指南的不一致、标签定义的模糊等原因造成的。 25 | 26 | 4. 领域差异:不同领域的数据可能存在差异,比如医疗领域和新闻领域的数据在内容和表达方式上可能存在差异,导致数据分布的不一致性。 27 | 28 | 数据分布/领域差异大的问题会对机器学习和数据挖掘任务产生负面影响,因为模型在一个数据集上训练的效果可能无法很好地泛化到另一个数据集上。因此,解决数据分布/领域差异大的问题对于提高模型的泛化能力和推广性能是非常重要的。常见的解决方法包括领域自适应、数据增强、迁移学习等。 29 | ### 如何进行 继续预训练? 30 | 进行继续预训练通常需要以下步骤: 31 | 32 | 1. 数据准备:首先需要准备大规模的文本数据集,这些数据集可以来自于互联网、新闻、百科、小说等各种来源。数据集的多样性和覆盖面可以帮助模型更好地理解语言的复杂性和多样性。 33 | 34 | 2. 模型选择:选择一个已经进行过一定周期预训练的基础模型,比如BERT、GPT等。这些模型通常已经在大规模语料上进行了预训练,具有一定的语言理解能力和表示能力。 35 | 36 | 3. 超参数调整:根据具体的任务和数据集,可能需要对模型的超参数进行调整,比如学习率、批大小、训练周期等。这些调整可以帮助模型更好地适应新的预训练任务。 37 | 38 | 4. 训练过程:使用准备好的大规模文本数据集,对基础模型进行进一步的预训练。在预训练过程中,可以采用掩码语言模型(Masked Language Model)或者下一个句子预测(Next Sentence Prediction)等任务来引导模型学习语言表示。 39 | 40 | 5. 评估和微调:在继续预训练完成后,可以使用一些标准的语言理解任务(如文本分类、命名实体识别、语言模型等)对模型进行评估,以确保模型在各种语言任务上有较好的表现。如果需要,还可以对模型进行微调,以进一步提高在特定任务上的性能。 41 | 42 | 通过以上步骤,可以对已经进行过一定周期预训练的基础模型进行继续预训练,从而提高模型的泛化能力和对语言世界的理解,使其在各种自然语言处理任务中表现更好。 43 | ### 还有哪些待解决问题? 44 | ### 训练数据问题解决方案? 45 | 对于训练数据问题,可能会涉及到以下一些解决方案: 46 | 47 | 1. 数据清洗:对训练数据进行清洗,包括去除重复数据、处理缺失值、纠正标注错误等,以确保训练数据的质量。 48 | 49 | 2. 数据增强:对于训练数据量不足的情况,可以考虑使用数据增强技术,比如对文本数据进行同义词替换、句子重组、添加噪声等方式来生成更多的训练样本。 50 | 51 | 3. 标注质量控制:如果是监督学习任务,需要确保标注数据的质量。可以通过专家审核、标注一致性检查等方式来控制标注质量,避免标注错误对模型训练造成影响。 52 | 53 | 4. 领域适配:针对特定领域的任务,可能需要在训练数据中加入更多相关领域的数据,以提高模型在该领域的表现。 54 | 55 | 5. 数据平衡:对于分类任务,需要确保各个类别的训练样本数量平衡,避免类别不平衡对模型训练和评估造成偏差。 56 | 57 | 6. 数据采样:对于大规模数据集,可以考虑采用采样技术,比如随机采样、过采样、欠采样等方式,以减少训练时间和资源消耗。 58 | 59 | 以上是一些常见的解决训练数据问题的方案,具体的解决方案会根据具体问题的情况而有所不同。 60 | ### 知识缺乏问题解决方案? 61 | 62 | ### 知识理解缺乏问题解决方案? -------------------------------------------------------------------------------- /5 NLP 技巧面/5.6 Bert Trick 面试篇/5.6.4 BERT如何处理篇章级长文本 面试篇.md: -------------------------------------------------------------------------------- 1 | #面试 #BERT 2 | 3 | - [[#为什么 Bert 不能 处理 长文本?|为什么 Bert 不能 处理 长文本?]] 4 | - [[#BERT 有哪些处理篇章级长文本?|BERT 有哪些处理篇章级长文本?]] 5 | 6 | ### 为什么 Bert 不能 处理 长文本? 7 | BERT(Bidirectional Encoder Representations from Transformers)在处理长文本时存在一些限制,主要是由于其输入序列长度的限制和计算成本的增加。以下是一些原因: 8 | 9 | 1. 输入序列长度限制:BERT 模型的输入序列长度有一个固定的上限,通常为512个标记。这意味着对于超过512个标记的长文本,BERT 无法直接处理整个文本,需要进行截断或分段处理。 10 | 11 | 2. 计算成本增加:随着输入序列长度的增加,BERT 模型的计算成本也会增加。对于非常长的文本,BERT 模型需要更多的计算资源和时间来处理,这可能会导致效率低下和计算资源的浪费。 12 | 13 | 为了解决这些问题,可以采取以下方法: 14 | 15 | - 截断文本:对于超过BERT 输入序列长度限制的长文本,可以将其截断为多个子片段,然后分别输入到BERT 模型中进行处理。然后可以对子片段的输出进行整合或者使用一些多段萃取的技术进行处理。 16 | 17 | - 使用其他模型:针对长文本处理,也可以考虑使用其他针对长文本处理的模型,例如Longformer、RoBERTa等,这些模型专门设计用于处理长文本,并且具有更大的输入序列长度限制。 18 | 19 | 总之,虽然BERT 在处理长文本时存在一些限制,但通过一些技术和模型的组合,可以解决这些问题,从而更好地处理长文本数据。 20 | ### BERT 有哪些处理篇章级长文本? 21 | 针对篇章级长文本的处理,有一些针对BERT的改进和扩展模型,以解决BERT处理长文本的限制。以下是一些处理篇章级长文本的BERT的改进模型: 22 | 23 | 1. Longformer:Longformer 是专门设计用于处理长文本的模型,它通过引入全局注意力机制和局部注意力机制,实现了对长文本的高效处理。Longformer 能够在处理长文本时保持较低的计算成本,并且在一定程度上解决了BERT处理长文本的限制。 24 | 25 | 2. RoBERTa:RoBERTa 是对BERT模型的改进版本,它在训练过程中使用了更大规模的数据和更长的序列长度,从而提高了对长文本的处理能力。虽然RoBERTa并没有专门针对长文本设计,但由于其更强大的训练能力,使得其在处理长文本时具有一定的优势。 26 | 27 | 3. BERT for Long Document Understanding (BERT-LDU):这是一个针对长文本理解的BERT模型,通过引入段萃取机制和多层级注意力机制,实现了对长文本的分层处理和理解。 28 | 29 | 这些模型都是为了解决BERT处理长文本的限制而设计的,它们在处理篇章级长文本时具有一定的优势和效果。当然,除了以上提到的模型,还有一些其他针对长文本处理的模型,可以根据具体的需求和场景选择合适的模型进行应用。 -------------------------------------------------------------------------------- /6 Prompt Tuning 面试篇/6.1 Prompt 面试篇.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackaduma/awesome_NLP-Interview-Notes/b117dbdfaa38f751237aaa7f4292152c8a6c41cd/6 Prompt Tuning 面试篇/6.1 Prompt 面试篇.md -------------------------------------------------------------------------------- /6 Prompt Tuning 面试篇/6.2 Prompt 文本生成 面试篇.md: -------------------------------------------------------------------------------- 1 | 1. Prompt之文本生成评估手段有哪些? 2 | 2. Prompt文本生成具体任务有哪些? -------------------------------------------------------------------------------- /6 Prompt Tuning 面试篇/6.3 LoRA 面试篇.md: -------------------------------------------------------------------------------- 1 | 1. 什么是lora? 2 | 2. lora 是 怎么做的呢? 3 | 3. lora 为什么可以这样做? 4 | 4. 用一句话描述 lora? 5 | 5. lora 优点是什么? 6 | 6. lora 缺点是什么? 7 | 7. lora 如何实现? -------------------------------------------------------------------------------- /6 Prompt Tuning 面试篇/6.4 PEFT(State-of-the-art Parameter-Efficient Fine-Tuning)面试篇.md: -------------------------------------------------------------------------------- 1 | - 一、微调 Fine-tuning 篇 2 | - 1.1 什么是 微调 Fine-tuning ? 3 | - 1.2 微调 Fine-tuning 基本思想是什么? 4 | - 二、轻度微调(lightweight Fine-tuning)篇 5 | - 2.1 什么是 轻度微调(lightweight Fine-tuning)? 6 | - 三、适配器微调(Adapter-tuning)篇 7 | - 3.1 什么 是 适配器微调(Adapter-tuning)? 8 | - 3.2 适配器微调(Adapter-tuning)变体有哪些? 9 | - 四、提示学习(Prompting)篇 10 | - 4.1 什么是 提示学习(Prompting)? 11 | - 4.2 提示学习(Prompting)的目的是什么? 12 | - 4.3 提示学习(Prompting) 代表方法有哪些? 13 | - 4.3.1 前缀微调(Prefix-tining)篇 14 | - 4.3.1.1 什么是 前缀微调(Prefix-tining)? 15 | - 4.3.1.2 前缀微调(Prefix-tining)的核心是什么? 16 | - 4.3.1.3 前缀微调(Prefix-tining)的技术细节有哪些? 17 | - 4.3.1.4 前缀微调(Prefix-tining)的优点是什么? 18 | - 4.3.1.5 前缀微调(Prefix-tining)的缺点是什么? 19 | - 4.3.2 指示微调(Prompt-tuning)篇 20 | - 4.3.2.1 什么是 指示微调(Prompt-tuning)? 21 | - 4.3.2.2 指示微调(Prompt-tuning)的核心思想? 22 | - 4.3.2.3 指示微调(Prompt-tuning)的 优点/贡献 是什么? 23 | - 4.3.2.4 指示微调(Prompt-tuning)的 缺点 是什么? 24 | - 4.3.2.5 指示微调(Prompt-tuning)与 Prefix-tuning 区别 是什么? 25 | - 4.3.2.6 指示微调(Prompt-tuning)与 fine-tuning 区别 是什么? 26 | - 4.3.3 P-tuning 篇 27 | - 4.3.3.1 P-tuning 动机是什么? 28 | - 4.3.3.2 P-tuning 核心思想是什么? 29 | - 4.3.3.3 P-tuning 做了哪些改进? 30 | - 4.3.3.4 P-tuning 有哪些优点/贡献? 31 | - 4.3.3.5 P-tuning 有哪些缺点? 32 | - 4.3.4 P-tuning v2 篇 33 | - 4.3.4.1 为什么需要 P-tuning v2? 34 | - 4.3.4.2 P-tuning v2 是什么? 35 | - 4.3.4.3 P-tuning v2 有哪些优点? 36 | - 4.3.4.4 P-tuning v2 有哪些缺点? 37 | - 4.3.5 PPT 篇 38 | - 4.3.5.1 为什么需要 PPT ? 39 | - 4.3.5.2 PPT 核心思想 是什么? 40 | - 4.3.5.3 PPT 具体做法是怎么样? 41 | - 4.3.5.4 常用的soft prompt初始化方法? 42 | - 4.3.5.5 PPT 的优点是什么? 43 | - 4.3.5.6 PPT 的缺点是什么? 44 | - 4.4 提示学习(Prompting) 优点 是什么? 45 | - 4.5 提示学习(Prompting) 本质 是什么? 46 | - 五、指令微调(Instruct-tuning)篇 47 | - 5.1 为什么需要 指令微调(Instruct-tuning)? 48 | - 5.2 指令微调(Instruct-tuning)是什么? 49 | - 5.3 指令微调(Instruct-tuning)的优点是什么? 50 | - 5.4 指令微调(Instruct-tuning) vs 提升学习(Prompting)? 51 | - 5.5 指令微调(Instruct-tuning) vs 提升学习(Prompting) vs Fine-tuning? 52 | - 六、指令提示微调(Instruct Prompt tuning)篇 53 | - 6.1 为什么需要 指令微调(Instruct-tuning)? 54 | - 6.2 指令微调(Instruct-tuning) 是什么? 55 | - 6.3 指令微调(Instruct-tuning) 在不同任务上性能? 56 | - 七、self-instruct篇 57 | - 7.1 什么是 self-instruct? 58 | - 八、Chain-of-Thought 篇 59 | - 8.1 为什么需要 Chain-of-Thought ? 60 | - 8.2 什么是 Chain-of-Thought ? 61 | - 8.3 Chain-of-Thought 的思路是怎么样的? 62 | - 8.4 Chain-of-Thought 的优点是什么? 63 | - 8.5 为什么 chain-of-thought 会成功? 64 | - 九、LoRA 篇 65 | - 9.1 LoRA 篇 66 | - 9.1.1 LoRA 核心思想是什么? 67 | - 9.1.2 LoRA 具体思路是什么? 68 | - 9.1.3 LoRA 优点是什么? 69 | - 9.1.4 LoRA 缺点是什么? 70 | - 9.2 AdaLoRA 篇 71 | - 9.2.1 AdaLoRA 核心思想是什么? 72 | - 9.2.2 AdaLoRA 实现思路是什么? 73 | - 9.3 DyLoRA 篇 74 | - 9.3.1 AdaLoRA 动机是什么? 75 | - 9.3.2 AdaLoRA 核心思想是什么? 76 | - 9.3.3 AdaLoRA 优点是什么? 77 | - 十、BitFit 篇 78 | - 10.1 AdaLoRA 核心思想是什么? 79 | - 10.2 AdaLoRA 优点是什么? 80 | - 10.3 AdaLoRA 缺点是什么? -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 MK 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # awesome_NLP-Interview-Notes 3 | NLP interview notes and answers 4 | 5 | ## **内容说明** 6 | 7 | 问题来自 [NLP 面无不过: km1994 - NLP-Interview-Notes ](https://github.com/km1994/NLP-Interview-Notes) 8 | 9 | **答案 为 自己编写,不保证正确,仅供参考。** 10 | 11 | **有些问题,提供的答案更多是一种线索,如想深入了解,请自行参考更多资料** 12 | 13 | ## 更新记录 14 | 15 | 1. 2023.11 发布:CNN, RNN, Attention 16 | 17 | ## 目录 18 | 19 | - [x] **[3 深度学习算法篇常见面试篇](./3%20深度学习算法篇常见面试篇/)** 20 | - [x] **[CNN 常见面试篇](./3%20深度学习算法篇常见面试篇/CNN%20常见面试篇.md)** 21 | - [x] 一、动机篇 22 | - [x] 二、CNN 卷积层篇 23 | - [x] 2.1 卷积层的本质是什么? 24 | - [x] 2.2 CNN 卷积层与全连接层的联系? 25 | - [x] 2.3 channel的含义是什么? 26 | - [x] 三、CNN 池化层篇 27 | - [x] 3.1 池化层针对区域是什么? 28 | - [x] 3.2 池化层的种类有哪些? 29 | - [x] 3.3 池化层的作用是什么? 30 | - [x] 3.4 池化层 反向传播 是什么样的? 31 | - [x] 3.5 mean pooling 池化层 反向传播 是什么样的? 32 | - [x] 3.6 max pooling 池化层 反向传播 是什么样的? 33 | - [x] 四、CNN 整体篇 34 | - [x] 4.1 CNN 的流程是什么? 35 | - [x] 4.2 CNN 的特点是什么? 36 | - [x] 4.3 卷积神经网络为什么会具有平移不变性? 37 | - [x] 4.4 卷积神经网络中im2col是如何实现的? 38 | - [x] 4.5 CNN 的局限性是什么? 39 | - [x] 五、Iterated Dilated CNN 篇 40 | - [x] 5.1 什么是 Dilated CNN 空洞卷积? 41 | - [x] 5.2 什么是 Iterated Dilated CNN? 42 | - [x] 六、反卷积 篇 43 | - [x] 6.1 解释反卷积的原理和用途? 44 | - [x] **[RNN 常见面试篇](./3%20深度学习算法篇常见面试篇/RNN%20常见面试篇.md)** 45 | - [x] 一、RNN 篇 46 | - [x] 1.2 为什么需要 RNN? 47 | - [x] 1.2 RNN 结构是怎么样的? 48 | - [x] 1.3 RNN 前向计算公式? 49 | - [x] 1.4 RNN 存在什么问题? 50 | - [x] 二、长短时记忆网络(Long Short Term Memory Network, LSTM) 篇 51 | - [x] 2.1 为什么 需要 LSTM? 52 | - [x] 2.2 LSTM 的结构是怎么样的? 53 | - [x] 2.3 LSTM 如何缓解 RNN 梯度消失和梯度爆炸问题? 54 | - [x] 2.3 LSTM 的流程是怎么样的? 55 | - [x] 2.4 LSTM 中激活函数区别? 56 | - [x] 2.5 LSTM的复杂度? 57 | - [x] 2.6 LSTM 存在什么问题? 58 | - [x] 三、GRU (Gated Recurrent Unit) 59 | - [x] 3.1 为什么 需要 GRU? 60 | - [x] 3.2 GRU 的结构是怎么样的? 61 | - [x] 3.3 GRU 的前向计算? 62 | - [x] 3.4 GRU 与其他 RNN系列模型的区别? 63 | - [x] 四、RNN系列模型篇 64 | - [x] 4.1 RNN系列模型 有什么特点? 65 | - [x] **[Attention 常见面试篇](./3%20深度学习算法篇常见面试篇/Attention%20常见面试篇.md)** 66 | - [x] 一、seq2seq 篇 67 | - [x] 1.1 seq2seq (Encoder-Decoder)是什么? 68 | - [x] 1.2 seq2seq 中 的 Encoder 怎么样? 69 | - [x] 1.3 seq2seq 中 的 Decoder 怎么样? 70 | - [x] 1.4 在 数学角度上 的 seq2seq ,你知道么? 71 | - [x] 1.5 seq2seq 存在 什么 问题? 72 | - [x] 二、Attention 篇 73 | - [x] 2.1 什么是 Attention? 74 | - [x] 2.2 为什么引入 Attention机制? 75 | - [x] 2.3 Attention 有什么作用? 76 | - [x] 2.4 Attention 流程是怎么样? 77 | - [x] 2.5 Attention 的应用领域有哪些? 78 | - [x] 三、Attention 变体篇 79 | - [x] 3.1 Soft Attention 是什么? 80 | - [x] 3.2 Hard Attention 是什么? 81 | - [x] 3.3 Global Attention 是什么? 82 | - [x] 3.4 Local Attention 是什么? 83 | - [x] 3.5 self-attention 是什么? 84 | - [x] **[生成对抗网络 GAN 常见面试篇](./3%20深度学习算法篇常见面试篇/生成对抗网络%20GAN%20常见面试篇.md)** 85 | - [x] 一、动机 86 | - [x] 二、介绍篇 87 | - [x] 2.1 GAN 的基本思想 88 | - [x] 2.2 GAN 基本介绍 89 | - [x] 2.2.1 GAN 的基本结构 90 | - [x] 2.2.2 GAN 的基本思想 91 | - [x] 三、训练篇 92 | - [x] 3.1 生成器介绍 93 | - [x] 3.2 判别器介绍 94 | - [x] 3.3 训练过程 95 | - [x] 3.4 训练所涉及相关理论基础 96 | - [x] 四、总结 97 | 98 | ------ 99 | ## **Star-History** 100 | 101 | ![star-history](https://api.star-history.com/svg?repos=jackaduma/awesome_NLP-Interview-Notes&type=Date "star-history") 102 | 103 | ------ 104 | 105 | ## Donation 106 | If this project help you reduce time to develop, you can give me a cup of coffee :) 107 | 108 | AliPay(支付宝) 109 |
110 | ali_pay 111 |
112 | 113 | WechatPay(微信) 114 |
115 | wechat_pay 116 |
117 | 118 | ------ 119 | -------------------------------------------------------------------------------- /misc/ali_pay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackaduma/awesome_NLP-Interview-Notes/b117dbdfaa38f751237aaa7f4292152c8a6c41cd/misc/ali_pay.png -------------------------------------------------------------------------------- /misc/placeholder: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /misc/wechat_pay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jackaduma/awesome_NLP-Interview-Notes/b117dbdfaa38f751237aaa7f4292152c8a6c41cd/misc/wechat_pay.png --------------------------------------------------------------------------------