关于 Transformer 架构的详细分析
在阅读本文之前,可能需要一些前置知识,以防对文中符号和公式感到困惑。
自注意力机制
在 Seq2Seq 模型中,引入的注意力机制着眼于建立输出值与输入序列各单词的关联关系,以最简单的 Seq2Seq 结构为例,权重值的计算依赖于输入单元和输出单元。如下图所示,在计算注意力向量\(c_t\) 的时候,\(h_1\) 的权重 \(\alpha_{t1}\) 依赖于输入隐层单元 \(h_1\) 和输出隐层单元 \(h’_{t-1}\)。
而自注意力则关注输入序列或输出序列各单词内部的关联关系,如果非要用和上图类似的模式,那么自注意力的计算将如下图所示(作为区分,我们用 \(b_s\)表示关于第 \(s\) 个单词的自注意力)
在前文的讨论中,我们已经知道了输入输出之间的注意力...
点我阅读更多...
对注意力机制的一些理解(后篇)
在上一篇文章中,不太正式地介绍了注意力机制,我们从概念上了解到注意力机制的实质是在输出每个预测单词的时候输入单词有不同的权重,本篇文章希望从算法角度来进一步解释。
基于 RNN 的 Encoder-Decoder 结构
Kyunghyun Cho 在论文 Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation 中提出了基于 RNN 的 Encoder-Decoder 结构,它的编码器是一个 RNN,在时刻 \(t\) 的隐层状态为
\[h_{t} = f(h_{t-1}, x_t)\]
其中 \(h\) 为隐层状态,\(x\) 为输入词(记住它们都...
点我阅读更多...
对注意力机制的一些理解
从 RNN 说起
一个典型的前馈网络结构如下图所示
如果我们简化一下,把每层节点用一个圆圈表示,则如下图
其中 \(x, h, y\) 分别是输入向量,隐层节点值和输出向量,\(U, V\) 分别表示两层的权重矩阵。该前馈网络的计算过程如下式
\[h = f(x, U)\\
y = f(h, V)\]
这里的 \(f\) 表示前馈过程,包含了计算和激活两个部分。
以上是普通前馈网络的情况,RNN 与它的区别在于,隐层节点值一方面传向输出节点,另一方面反过来和下一个输入相结合成为新的输入量。
其中的 \(W\) 是隐层节点的权重矩阵。该网络的计算过程如下
\[h_t = f(x, h_{t-1}, U, W)\\
y_t = g(h_t, V)\]
...
点我阅读更多...
如何一步步地实现各种深度的 ResNet
ResNet 通过建立短路连接,实现了一般神经网络难以模拟的恒等映射,其常用的具体架构一般有 resnet18,resnet34,resnet50,resnet101 和 resnet152 这五种,本文将从代码层面详细分析如何搭建这些结构。
首先,从最粗略的层面来看,各种 resnet 都有一个大致相同的结构,可以说是骨架中的骨架,即(conv -> bn -> relu -> maxpool -> 4 x res_layer),其简化代码如下
class ResNet(nn.Module):
def __init__(self):
self.conv1 = nn.Conv2d()
self.bn1 = nn.BatchNorm2d(...
点我阅读更多...
对目标检测模型 PR 曲线的原理分析和实现
PR曲线其实就是以准确率(Precise)为横轴,召回率(Recall)为纵轴的曲线,定义很简单,但是我们立即会产生一个疑问,那就是对于一个确定的模型,怎么准确率咋还能变化呢?所以要理解 PR 曲线,首先需要知道准确率和召回率是怎么变化的。
我们知道,准确率指的是准确检测的物体占总检测物体的比例(需要注意的是,我们的分析都是建立在单一类别之上的),比如一次测试过程,我们检测到了 M 个物体,但实际上只有 P 个物体是被准确检测到的,其他都属于误检,那么准确率就是 P / M。而召回率则是准确检测的物体占总的物体的比例,还是同样的测试,假如这批样本中共有 N 个物体,那么召回率就等于 P / N。准确率的分母是检测到的物体总数量,召回率的分母是实际物体总数量,所以准确率又叫查准率,召回...
点我阅读更多...