0%

你好!!我是Palind,这里是我的博客~ (个人简介)
You’re very welcome to check out my blog! (Bio)

我对ML很感兴趣。我正在学习CS229课程📕、PyTorch🔥的DL实践,同时正在阅读一些经典的论文📃。
你想看看我最近写的博客嘛?我建议你来看看以下这些,很好玩的!

……我还写了更多有趣的文章!在此就不一一列举啦。

首先,对ViT的结构做一个回顾

对于图片的读入,与CNN的卷积操作不同(不过,我们在下面的代码实现中,还是在用卷积对patch进行划分),ViT对图片进行embedding处理。

在原始论文里,Vision Transformer将图片打成很多个16 × 16的patch。将一个一个patch展平(flatten)后(从 16×16×3 → 768),再通过一个它们共享的FC层进行映射,得到固定维度的 embedding 向量,传给transformer。

可以把patch当成是NLP里面的单词tokens。

原论文中的结构如下:

1

我们从图的左下角开始。先给定一张图,把它分成“九宫格”一样的小patch。我们使用卷积核对它划分,具体是把输入变成 (B, C, H’, W’) 的形状,其中,

B: batch size
C: 通道数
H': patch 的高度个数
W': patch 的宽度个数

然后组合concatenate变成右边一个序列。之后,每个patch会被展平。

我们来具体看一下展平。在等会的代码实现中,我们使用的是

1
nn.Flatten(start_dim=2, end_dim=3)
阅读全文 »

这些博客非常非常值得学习与参考!😉我很推荐你来看看:

许多我们熟悉的技术,例如alpha go,就用到了RL的技术。现在我来简单学习一下RL,目的是有一个基本的认识。

概述

回顾

对比一下supervised learning,

1

RL适合难以让人类来标注label的任务。

阅读全文 »

到目前为止,我们学习的神经网络,都是输入一个x,经过一个复杂的函数,输出y。x可以是sequence,可以是图片,可以是数据;y可以是类别,可以是sequence。

接下来,我们要把神经网络作为一个generator来使用。network会同时看x和z得到输出。z是simple distribution。回忆CS229机器学习课程,想到可以使用正态分布、均匀分布等,我们自己决定。

z是不固定的。每次使用,随机生成一个z。因此,我们的神经网络的输出,就变成了一个复杂的分布,如图:

阅读全文 »

现在我来做学习ViT (Vision Transformer)的学习笔记~

原论文:2010.11929 An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

我看的解析教学:https://www.bilibili.com/video/BV15P4y137jb

我看的代码实现:https://www.bilibili.com/video/BV1K94y177Ka

1. 概况

提到CV,人们往往想起CNN。AlexNet的提出,引导人们大量在CV领域使用CNN。然而,ViT的结论是:transformer可以在CV任务上做的很好。ViT打破了CV与NLP的专业壁垒,深刻影响了多模态领域。什么是多模态?“模态”是指信息的不同形式或感官通道,例如图像(视觉模态)、图像(视觉模态)、音频(听觉模态)等等,“多模态”就是将多种模态的信息融合在一起进行理解、生成或推理。ViT 把图像表示做成了类似语言的 token 序列,这为“多模态模型”的融合提供了处理方式。

2. 论文摘要

从论文的题目 An Image is Worth 16x16 Words 就能看出来,将图片看成很多很多patch(方格),每一个patch的固定大小是 16 × 16。

前人只将自注意力有限地应用在CNN上,而论文的作者证明transformer也可以做的很好,同时需要更少的训练资源。(当然,是相对的:2500天 TPUv3

阅读全文 »

现在我来做transformer的学习笔记!

回顾:

先来回顾:transformer是一个seq2seq的模型。input是一个sequence;output也是一个sequence,长度由机器决定。应用例子有:语音识别、机器翻译、语音翻译、LLM、文法剖析。

其中,类比算法竞赛的知识点,文法剖析要将结果作为先序遍历的树 来表示,才能应用seq2seq模型表示。不过我忘了算法竞赛的知识点啦,所以,我要来回忆一下先序遍历:

先序遍历(Pre-order Traversal)
根 → 左子树 → 右子树

此外,seq2seq还可以作multi-label分类(将多个label视为一个sequence),目标检测。

seq2seq的模型主要由input、encoder、decoder、output四个部分组成。现在,我来学习transformer。


1. Encoder

先看encoder。Encoder 的作用是将输入序列(input sequence)转化成一个包含其语义信息的隐藏表示(hidden representation) ,以便 Decoder 使用这个表示生成输出。不同的seq2seq模型里,它可以 是一个 RNN 或者 CNN,也可以是这里我们正在学习的 Transformer Encoder。

Transformer encoder用的就是self attention。现在来解释Transformer Encoder的架构:

阅读全文 »

Self-Attention学习笔记

嗯!我已经看过了关于Self-Attention的讲解视频与论文,现在,我想基于李宏毅老师的视频,再仔仔细细地把知识整理一遍!


1. 先来看看自注意力机制概况。

我之前跟刘二大人学习时,已经了解了one-hot独热编码 ,但是独热编码无法看出来向量之间的关系 。现在,word embedding词嵌入 解决了这样的问题。

我们之前学习的回归、分类任务,都是输入的大小与输出相同的 。这里引入seq2seq任务 ,这种任务的模型会自己决定输出label的长度大小。

注意哦,接下来的“自注意力”课程是关注sequence labeling 任务的,输入和输出长度相等。

先回忆,全连接层(FC层)有什么缺点? 全连接层想要观察不同输入vector之间的关系时,必须要扩大同时接入FC层的Windows ,显然在windows很大时是不合适的,会出现过拟合的问题。因此,引入自注意力机制来解决。

self-attention会吃一整个sequence,针对每个向量,input几个vector就输出几个vector,输出的vector可以理解为对于每个原来的vector,考虑了一整个sequence之后,成为了with context的vector

阅读全文 »