一、理论篇
- 怎么理解重参数化技术?
- KL散度是什么?
- DDPM
- 什么是马尔可夫过程
- GAN模型
- VAE模型
- stable diffusion模型的网络架构
- T5的网络架构(Text-To-Text Transfer Transformer模型)
- SDXL模型
- DALLE
- BPE编码
- 为什么DDPM加噪声的幅度是不一致的?
- GroundingDino模型
- SAM模型
- stable diffusion相对于传统的diffusion的区别是什么,有什么改进
- IOU、GIOU、DIOU、CIOU的区别
- Transformer模型
- BERT模型
- dreambooth微调模型的原理
- lora微调模型的原理
- controlnet模型的创新点
- 解释focal loss
- 如何判断 GAN 收敛或者不稳定
- Stable Diffusion模型的图像优化模块是什么架构
- 变形自注意力模块的特别之处
- GroundingDino模型的损失函数是什么?
- Dice Loss
- UNet的网络架构
- VQVAE模型相对于VAE的改进
- Deepfloyd-if模型
- LAMA Inpaint
- IP adapter模型
- Anydoor
- vit(Vision Transformer)架构
- MAE
- CLIP模型
- SDXL对于Stable Diffusion在网络架构上的具体改进
- Transformer为什么可以并行
- 卷积神经网络中的归纳偏置
- DALLE2
- DALLE3
- SAM模型的数据集构建过程
【每日算法】理论: 扩散模型+深度学习基础 刷题:力扣哈希表回顾
- 交叉熵损失函数
- SAM模型的mask encoder(掩码解码器)
- VQVAE的优化问题
- controlnet模型中的zero convolution模块
- DDIM模型
- BN、LN、IN、GN、SN的对比
- Classifier-free Guidance和Classifier Guidance
- VAE为什么会导致图像变模糊
- SD,Dall-E2两者的异同
- NMS非极大值抑制
- CNN和MLP区别,CNN的优势
- Stable Diffusion 怎么实现⽂本和图像的条件控制的
- CNN 中的局部连接(Sparse Connectivity)和权值共享(Shared Weights)特点
- GAN 与diffusion的对比
- Stable Diffusion是怎么训练的?
- L1和L2正则化的区别
- JS散度
- Dropout的作用和原理,在训练和测试时是如何运行?
二、刷题篇
(一)单调栈
当遇到需要寻找一个元素右边或者左边第一个比自己大或者小的元素的位置时,就可以考虑使用单调栈来完成。
在写涉及到单调栈用法的题目时,一般情况下首先应该准备单调栈并且一般情况下初始化为0,然后会对原始数组进行遍历,遍历过程中根据题目的要求完成对于单调栈元素的增加或者删除。
- 寻找temperatures数组右边第一个比自己大的元素
- 单调栈用于暂时保存比自己小的元素索引;
- 寻找数组nums1对应的数组nums2中元素的右边第一个比自己大的元素,相比前一道题多了一个寻找对应关系的部分
- 单调栈用于暂时保存比自己小的元素;
- 跟之前相比,它需要查询的数组是循环数组
- 单调栈用于暂时保存比自己小的元素;
42. 接雨水 :
- 分别寻找元素右边和左边的最大元素来计算雨水面积
- 由于单调栈的作用是寻找一个元素右边或者左边第一个比自己大或者小的元素的位置,所以单调栈保存的标号主要是用来求雨水面积中的行。
- 找每个柱子左右两边第一个小于该柱子的柱子
- 单调栈栈头(元素从栈头弹出)到栈底的顺序应该是从大到小的顺序。
(二)数组
数组是非常基础的数据结构,数组可以方便的通过下标索引的方式获取到下标下对应的数据。
数组中常用的方法有双指针法、滑动窗口法等。
- 要求找出数组中给定值对应的下标
- 典型的二分法习题
- 要求将数组中指定值的元素移除,然后返回数组的新长度
- 使用双指针的方法解决,设计一个快指针一个慢指针,快指针遍历整个数组,慢指针只保存新数组
- 要求将一个排好序的整数数组中的元素求平方之后依旧保持顺序
- 使用双指针的方法解决,两个指针分别从数组首尾开始遍历,遍历的同时将平方后的值进行对比
- 要求获得一个数组中满足其总和大于等于target的长度最小的连续子数组,并返回其长度
- 由于是连续子数组,所以采用滑动窗口的思想解决,不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果,
- 要求生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵
- 没有特殊的方法可以套用,只能模拟顺时针画矩阵的过程,由外向内一圈一圈这么画下去。首先创建一个二维数组作为正方形矩阵,然后初始化起始坐标,迭代次数,矩阵中心点,设置好偏移量,每次循环对应的就是在二维数组中写入对应的值。
(三)链表
链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
链表的代码题关键是处理好指针以及各种操作的顺序。涉及到的常用技巧有双指针法、虚拟头节点等。
- 要求设计一个链表,包括初始化链表对象、获取指定下标的节点的值、在不同位置插入节点、删除指定节点。
- 可以使用单链表也可以使用双链表,两种方法都涉及到指针,实现单链表时可以定义一个虚拟头节点。
- 根据指定值删除链表中元素
- 灵活运用指针即可
- 根据节点位置删除链表中元素
- 由于题目要求删除倒数第n个节点,所以采用双指针的方法,快指针比慢指针多移动n步即可
- 将链表进行翻转
- 按照顺序改变链表的next指针的指向即可,并且需要设置暂存节点,以防节点释放后找不到
- 将相邻的节点进行调换
- 按照顺序改变链表的next指针的指向即可,并且需要设置暂存节点,以防节点释放后找不到。在具体的调换过程中,最好将调换的过程和顺序用图表示出来,不画图,操作多个指针很容易乱。
- 找到两个单链表相交的起始节点
- 两个链表对应两个指针,先让长链表对应的指针多移动两个链表长度的差值,然后两个指针一起移动,遇到了相同的节点就说明相交了。
- 找到环形链表入环的第一个节点
- 设置两个指针,快指针每次移动两个节点,慢指针每次移动一个节点,如果两个指针在途中相遇 ,说明这个链表有环。
(四)哈希表
当遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。
- 要求判断两个字符串中每个字符的出现次数是否一致
- 创建一个哈希表(数组)用于保存字符串中字符出现的次数
- 返回两个数组的交集
- 创建一个哈希表保存其中一个数组的元素,遍历另一个数组时只需要判断它的元素是否在哈希表中出现过即可
- 判断一个数是不是快乐数:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。
- 由于判断是不是为快乐数的过程中存在无限循环的可能,因此需要创建一个哈希表判断计算过程中的数是否在之前出现过。
- 找出数组中和为目标值target的两个整数对应的下标
- 创建一个哈希表来存储已经遍历过的元素对应的下标,就可以在遍历一个元素之后,判断target-当前元素是否也出现在这个哈希表里过,如果出现了就说明存在满足和为target的一个两数组合。
- 计算数组中有多少种四个数的组合满足求和为0的情况
- 可以理解成两个两数之和,由于是返回组合数,创建一个哈希表用于记录两数相加结果的可能性次数。
- 求字符串a能否组成字符串b
- 创建一个哈希表用于记录字符串a里字母出现的次数。
- 找出和为0的三个数
- 两层for循环就可以确定 a 和b 的数值了,可以使用哈希法来确定 0-(a+b) 是否在 数组里出现过。但是需要考虑去重,用哈希表比较麻烦,最合适的方法是使用双指针法。
- 找出和为指定值的四个数
- 使用双指针法。两层for循环变量两个数之后,采用双指针法获取剩下两个数。