卷积核心知识回顾
发现笔试选择题可能会考卷积的,在这里回顾一下卷积常考的一些知识点。
卷积计算公式
输入图片的尺寸假设为\(n\times
n\),卷积核大小为\(f\times
f\),padding大小为\(p\),步长为\(s\)时,输出特征图的尺寸\(o\times o\)可以用如下公式计算: \[
o = \lfloor \frac{n-f+2p}{s} \rfloor + 1
\]
多通道卷积
img
多通道卷积的计算过程:将矩阵与滤波器对应的每一个通道进行卷积运算,最后相加,形成一个单通道输出,加上偏置项后,我们得到了一个最终的单通道输出。如果存在多个filter,这时我们可以把这些最终的单通道输出组合成一个总输出。
这里我们还需要注意一些问题——滤波器的通道数、输出特征图的通道数。
某一层滤波器的通道数 =
上一层特征图的通道数。如上图所示,我们输入一张 6×6×3
的RGB图片,那么滤波器( 3×3×3 )也要有三个通道。
某一层输出特征图的通道数 =
当前层滤波器的个数。如上图所示,当只有一个filter时,输出特征图(
4×4 )的通道数为1;当有2个filter时,输出特征 ...
常见编程题思路盘点-20240913
这边来盘点一下常见的编程题思路。这节主要盘点一下动态规划的几个常见思路。
动态规划
动态规划(英语:Dynamic
programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划能够降低复杂度的关键是存在子问题重叠,加速来自于避免重复求解相同的子问题。因此,如果确定要使用动态规划,必须要合理定义子问题。这并不简单,因此在这里盘点一下常见的思路。
动态规划五步法
看到B站有个up主说的五步法挺好的,在这里总结一下:
第一步:确定状态转移方程
状态转移方程是描述子问题之间关系的数学表达式。它表示当前状态如何通过一系列决策转移到下一个状态。对于每个子问题,我们需要确定其状态转移方程,以便使用它来求解子问题。
第二步:根据状态转移方程求解子问题
在确定了状态转移方程之后,我们需要求解每个子问题以找到最优解。这一步通常涉及到迭代计算,即反复使用状态转移方程来计算每个子问题的最优解。
第三步:初始化动态规划表
动态规划表是一个二维数组,用于存储每个子问题的最优解。在初始化阶段,我们需要将动态规 ...
ar5iv油猴脚本备份
因为ar5iv是自适应系统主题的,但我希望看论文始终使用light主题而不是跟随系统设置,因此就通过JavaScript做一些后处理。之前一直用tampermonkey,中文叫篡改猴,也就是所谓的油猴插件去对网页做一些后处理。
但7月31日的时候发现不能用了,一开始还以为是ar5iv更新了,但F12找了发现原来的代码能用没问题。后来在控制台发现:Uncaught ReferenceError: MutationEvent is not defined,然后什么油猴脚本都用不了,才发现是油猴的问题。经Google查找到:Uncaught
ReferenceError: MutationEvent is not
defined,说是要启用chrome://flags/#mutation-events才行。但那是几个月前的问题了,应该有更加好的修复方式。
后面又看到: Throw
error "Uncaught DOMException: Failed to execute 'createEvent' on
'Document': The provided event type ('Muta ...
终端关闭后继续执行命令的方法
在使用VSCode远程开发时,经常碰到有一些脚本要跑很长时间的情景,比如提交并跟踪MapReduce任务、训练模型、处理数据、网络IO等。这时候我们希望脚本自己在后台跑,但一个很头疼的问题是脚本跟终端挂在一起。一旦去吃饭电脑进入休眠模式,本地的VSCode很可能会断开和远程开发机的连接,进而导致终端自动退出。而之前说脚本是跑到终端上的,这就导致吃完饭回来发现脚本被终止的尴尬情况。
为了让脚本流畅的跑到后台,在这里盘点几种Linux系统下终端关闭后继续执行命令的方法。
1. 使用 nohup
nohup (no hang up)
命令可以让你在关闭终端后继续执行命令,并将输出重定向到一个文件:
1nohup your_command & disown
优点: - 简单易用,只需在命令前加上
nohup 并在后面加上 &。 -
命令会继续运行,即使你退出终端。
缺点: - 输出会默认写入 nohup.out
文件,可能需要手动处理日志文件。如果你想输入到别的文件,使用">"指令重定向输出。
- 没有提供重新连接的功能,如果你想查看命令的执行情况,需要查看输出文件。
- ...
回溯法求解数独问题
引言
起因是在leetcode上看到了这题:36.
有效的数独,这题其实是判断数独的初始盘面是不是有效的,即初始数字是否满足行、列和小方块里都不重复的条件。可以通过一次遍历解决。
123456789101112131415161718192021222324252627282930313233class Solution: def isValidSudoku(self, board: List[List[str]]) -> bool: # 一次遍历 n = len(board) row_counter_list = [set() for _ in range(n)] col_counter_list = [set() for _ in range(n)] square_counter_list = [set() for _ in range(n)] for i in range(n): for j in range(n): num = bo ...
细节处见真章——LLM中的tokenizer
在大语言模型中,tokenizer(分词器)是一个非常关键的组件。它的主要功能是将输入的文本数据转换为模型能够处理的格式,通常是一个序列的token(标记)。具体来说,tokenizer将文本分割成较小的单位,通常是单词、子词或字符,这些单位称为token。
tokenizer的特征
tokenizer的作用非常直观,就是将文本分割成一系列token。好的tokenizer应该具备两个特征:
1. 高压缩率,以实现高效推理。 2.
适当大小的词汇表,以确保每个token都被充分训练,不会出现非常低频欠训练的token。
PS:
之前可能还有一个就是要保证覆盖,即减少训练时<UNK>标记出现的概率。但是现在基本使用BBPE编码技术,将文本处理为字节级别的序列。任何unicode字符都由1-4个字节构成,这意味着只要LLM词表覆盖了所有unicode的字节(只有2^8=256个),理论上任何unicode字符都不会被编码成<UNK>了。现代的LLM基本不存在未见词(Out-of-Vocabulary,
OOV)的问题了。
鱼和熊掌不可兼得
这两个特征看似简单,但是二 ...
一道物理题
晚上刷短视频看到一个直播间在讨论一道物理题,频繁有人上麦下麦去提问和解答,把这道题分析得还是比较透彻了。这里记录一下他们思考的方式,可能之后能够用到。
问题描述
原题目是这样的:
整理一下已知条件:两面墙夹着四块砖,编号为1、2、3、4,并且每块砖的重力均为G(从这个符号分析应该是重力为G,而不是重量是G,两者相差一个重力常数g。为了方便分析,认为这里是重力G),整组砖处于静止状态。
问题是:2,3之间的摩擦力多大?
正常解法
如果不考虑很多条件,那就认为两面墙是相同的,然后4块砖是相同的。于是对4块砖整体受力分析,4块砖受向下的重力4G,那必须要有一个向上的大小为4G的力平衡掉重力,这样竖直方向上才能静止。那墙能提供的竖直方向上的力只能是摩擦力,两面墙一起提供了向上的合力为4G的摩擦力。
那又因为两面墙完全一样,所以每面墙应该是提供了向上的2G的摩擦力。
到这里对砖块1在垂直方向进行受力分析,向下受1G重力,向上受墙壁的2G摩擦力,那必然要受砖块2一个向下的大小为G的摩擦力才能平衡。由于力的作用是相互的,再对2在竖直方向进行受力分析,向下受1G重力,向上受砖块1的1G的摩擦力,这里 ...
VQAScore: 文生图评价新指标
参考论文: Evaluating
Text-to-Visual Generation with Image-to-Text Generation
VQAScore是一种用于评估文本到视觉生成(Text-to-Visual
Generation)的新方法,它通过视觉问题回答(Visual Question Answering,
VQA)模型来衡量生成图像与文本提示之间的对齐程度。
简介
在生成式AI领域,尽管取得了显著进展,但全面的评估依然充满挑战,主要因为缺乏有效的评估指标和标准化的基准测试。VQAScore的提出,旨在解决现有评估方法在处理涉及对象、属性和关系的复杂文本提示时的不足。
动机
目前存在的图文对齐程度评价指标都存在一些问题,文生图领域仍然缺乏很好地文本提示和图像之间对齐程度的指标。具体而言,CLIP-Score倾向于词袋模型,在“组合性”的提示上能力较弱,比如对于涉及多个对象关系、计数和逻辑推理问题上的度量能力不足。还有一类分治法,通过LLM分解提示,将复杂的提示分结成多个简单的模块化的提示,再通过调用VLM返回中间结果综合得到最终结果的方法,比如TIFA。然而,这种方法 ...
LoRA类的大模型微调方法
LoRA(Low-Rank Adaptation of Large Language
Models)是一种参数高效微调(PEFT)方法,旨在解决微调大型语言模型时面临的挑战。LoRA通过在每个模型块内部加入可训练的层,从而显著减少需要微调的参数数量,并降低GPU内存需求。目前以经有研究者开发了几种LoRA变体来补足它的短板或者提高效率。此处主要盘点一下LoRA, QLoRA, VeRA和DoRA。
LoRA、QLoRA、VeRA和DoRA都是针对大型语言模型的微调(finetuning)方法,旨在提高模型在特定任务上的性能,同时减少计算和存储资源的需求。下面是对这四种方法的详细介绍以及它们之间的对比:
LoRA (Low-Rank Adaptation)
-
介绍: LoRA
通过在Transformer架构的每一层注入可训练的低秩分解矩阵来适应下游任务,同时冻结预训练模型权重,显著减少了可训练参数的数量。
- 优势: 与全参数微调相比,LoRA
减少了GPU内存需求,提高了训练吞吐量,并且在推理时不引入额外的延迟。 -
应用: LoRA
在多个模型(如RoBERTa、DeBERTa ...
发布python包
发布Python包到PyPI
发布Python包到PyPI是Python开发者分享自己代码的一种方式。最近写了个用LLM翻译arxiv论文的项目TransGPTex,第一次使用了python包的形式把这件事做了,而不是一个脚本。这样只要安装这个包,在任何目录都可以通过tgtex命令调用了,个人还是相当满意。
Python的强大之处在于其丰富的库,使用pip安装这些库非常方便。开发者可以将自己的代码打包成库,并上传到Python仓库供他人使用。这样在任何电脑上都可以通过pip install xxx迅速装好,很方便。
但之前没有发布包的经验,看了网上一篇很详细的教程:发布Python包到pypi之后弄好了。
在这里结合一下自身的感受,记录一下发布Python包到PyPI的详细步骤。
1. PyPI账号注册
到PyPI发布包首先需要有一个pypi的账号。
1.1 注册
访问PyPI官网进行注册。
1.2 开启两步验证
要上传自己的包,需要开启两步验证。那个什么USB验证好像要硬件的,我选了那个Time-based
one-time password(也就是TOTP)认证。IOS好像可以用密 ...