手撕 Vision Transformer
手撕 Vision...
LLM-文本数据处理
LLM 位置嵌入 绝对位置嵌入和相对位置嵌入
MoE
Mixtures of Experts 《Adaptive Mixture of Local Experts》 论文链接:https://www.cs.toronto.edu/~hinton/absps/jjnh91.pdf 1991年,由 Hinton和 Jordan提出,这是最早的MoE架构。 核心思想:通过多个独立专家网络处理输入数据不同子集,并由门控网络动态选择专家。每个专家接受相同的输入数据,但通过门控网络的动态分配,专家会专注于处理输入空间的特定区域。 基础架构 如图,一个由专家网络和门控网络组成的系统。每个专家是一个前馈网络,所有专家接收相同的输入,并具有相同数量的输出。门控网络也是一个前馈网络,通常接收与专家网络相同的输入。它的输出是归一化的 $ p_j = \exp(r_j) / \sum_i \exp(r_i) $,其中 $ r_j $是门控网络输出单元 $j$ 接收的总加权输入。选择器(selector)类似于一个多输入单输出的随机开关;开关选择来自专家 $ j $ 的输出的概率为 $p_j$...
MoCo
MoCo Momentum Contrast for Unsupervised Visual Representation Learning (cvpr2020) 论文地址:https://arxiv.org/pdf/1911.05722 代码地址:https://github.com/facebookresearch/moco 概述 MoCo 将对比学习看作是一个字典查找任务 :一个编码后的查询(query)应该与其匹配的键(正样本)相似,而与其他所有的键(负样本)不相似 。 对比学习的核心思想是训练一个编码器,使其能够区分相似(正样本)和不相似(负样本)的样本 。 传统方法 VS MoCo 端到端(End-to-end)方法(SimCLR,Inva Spread):将当前 mini-batch 内的样本作为字典 。这种方法的优点是字典中的键编码是一致的(由同一个编码器生成),但缺点是字典的大小受限于 mini-batch 的大小,而 mini-batch 大小又受限于 GPU 内存 。过大的 mini-batch 也会带来优化难题 。 Memory Bank...
CSRMS
CSRMS 用于视觉表征学习的类级结构化关系建模与平滑 (MM2023) 论文地址:https://ercdm.sdu.edu.cn/__local/7/AC/70/7E4948C4761839F62E3958CE772_043AE854_2B459A.pdf 代码地址:https://github.com/czt117/CSRMS 个人理解这个像是一个知识总结的过程。首先通过特征提取获得特征图,这个过程可以类比我从书本上学习知识的过程,提取出有用的知识,然后通过聚类算法对特征图进行分簇,就相当于把学到的知识进行总结的过程,但是总会有一些比较相近的知识容易被搞混,这个就是类间相似性和类内多样性,再着重对这一块进行处理,使得对知识的掌握更加透彻。 名词解释: 课程构建(Curriculum...
Transformer
Attention Is All You Need 个人理解 transformer 编码器是把人能理解的东西转化成计算机能理解的东西。对比与论文写作的这个过程来说,位置编码就是作者写这篇论文的顺序,反复打磨论文这个过程就对应着这个n个编码器,第一遍的初稿相当于第一个编码器,可能效果不尽人意。把人能理解的东西编码成论文。到读者来说就是解码的过程,每一次读论文就是一次解码的过程,你必须多次解码才能对这个论文理解的更加透彻,还要时刻注意mask操作,写作时要时刻注意读者理解到什么地步,读者的阅读是按顺序进行的。q就是你感兴趣的地方,k就是论文中的关键点。 Transformer 是一种基于注意力机制(Attention...
基于深度学习的图像分类
使用ResNet18预训练模型 由于笔记本性能太差,所以在服务器上运行的,显卡配置为4090。经大量实验判断,初始学习率为0.01最后效果较差,所以初始学习率应设为0.001。全部代码代码已上传到:https://github.com/wp-a/-CIFAR10-.git 库函数导入 123456789import matplotlib.pyplot as pltimport torchimport torch.nn as nnimport torchvisionimport torchvision.transforms as transformsfrom sklearn.metrics import confusion_matrix, classification_reportfrom itertools import chainimport multiprocessingdevice = torch.device("cuda:0" if torch.cuda.is_available() else...
代码随想录--动态规划
代码随想录--动态规划
基础知识--排序算法
排序算法详解 排序算法是计算机科学中最基础也是最重要的算法之一。本文将详细介绍几种常见的排序算法,包括它们的实现原理、时间复杂度和适用场景。本文所有代码示例使用 C++ 实现,需要包含以下头文件: 123#include <vector>#include <algorithm>using namespace std; 1. 冒泡排序 (Bubble Sort) 冒泡排序是最简单的排序算法之一,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 实现原理 时间复杂度:O(n²) 空间复杂度:O(1) 稳定性:稳定 实现代码 1234567891011121314151617void bubbleSort(vector<int>& arr) { int n = arr.size(); bool swapped; for(int i = 0; i < n-1; i++) { swapped = false; // 每一轮比较 ...
代码随想录--图论
代码随想录--图论