/images/avatar.png

vllbc

Lora微调

Low-Rank Adaption (LoRA),即“低秩适配”,实现了预训练模型的参数高效微调,且不会增加模型的推理延迟。 ## 内在维度 2020年,A. Aghajanyan等人研究了这一现象,发现预训练模型存在一个较低的”内在维度”,使用少量样本微调时,实际上是在更新低维空间中的参数。把预训练模型的全部参数看成一个D维参数向量,记为\(\Theta^\mathrm{(D)}\),模型的原始参数为\(\Theta_0^\mathrm{(D)}\),设\(\Theta^{(d)}\)是d维子空间中的一个向量,d<D,利用一个固定的D*d映射矩阵P 把d维空间中的向量映射到D维空间,\(\Theta^{(\mathrm{D})}\)可写为:

Transformer Feed-Forward Layers Are Key-Value Memories

Transformer Feed-Forward Layers Are Key-Value Memories


💡 Meta Data

Title Transformer Feed-Forward Layers Are Key-Value Memories
Journal
Authors Mor Geva; Roei Schuster; Jonathan Berant; Omer Levy
Pub. date 2021-09-05
期刊标签
DOI 10.48550/arXiv.2012.14913
附件 Geva et al_2021_Transformer Feed-Forward Layers Are Key-Value Memories.pdf

📜 研究背景 & 基础 & 目的


前馈层占据了 Transformer 模型参数的三分之二,但其在网络中的作用尚未被充分探索。作者发现 Transformer 语言模型中的前馈层可以作为键值记忆(key-value memories)来操作。每个键(key)与训练示例中的文本模式相关联,每个值(value)则诱导输出词汇表上的概率分布。作者发现 Transformer 语言模型中的前馈层可以作为键值记忆(key-value memories)来操作。每个键(key)与训练示例中的文本模式相关联,每个值(value)则诱导输出词汇表上的概率分布。前馈层的输出是其记忆的组合,并通过模型层的残差连接逐步细化,以产生最终的输出分布。

课程表(拓扑排序)

Problem:

思路

注意拓扑排序最好是邻接表(哈系表实现),并用队列处理后续入度为0的点

解题方法

描述你的解题方法

复杂度

时间复杂度:

添加时间复杂度, 示例: \(O(n)\)

空间复杂度:

添加空间复杂度, 示例: \(O(n)\)

乘积最大的数组

Problem:

思路

讲述看到这一题的思路

解题方法

描述你的解题方法

复杂度

时间复杂度:

添加时间复杂度, 示例: \(O(n)\)

空间复杂度:

添加空间复杂度, 示例: \(O(n)\)

Code


跳跃游戏

跳跃游戏

Problem:

思路

讲述看到这一题的思路

解题方法

描述你的解题方法

复杂度

时间复杂度:

添加时间复杂度, 示例: \(O(n)\)

空间复杂度:

添加空间复杂度, 示例: \(O(n)\)

Code

```Python3 []


# 跳跃游戏ii

# 划分字母区间

[763. 划分字母区间 - 力扣(LeetCode)](https://leetcode.cn/problems/partition-labels/description/?envType=study-plan-v2&envId=top-100-liked)
本题预处理完毕后思路和跳跃游戏2类似,当然也可以使用合并区间的思路来,都是贪心算法。
## Code
```python
class Solution:

    def partitionLabels(self, s: str) -> List[int]:

        from collections import defaultdict

        d = defaultdict(list)

        for i, char in enumerate(s):

            d[char].append(i)

        # 也可以考虑合并区间做了,下面的解法类似跳跃游戏2

        res = []

        start = 0

        max_jump = 0

        for i, char in enumerate(s):

            max_jump = max(max_jump, d[char][-1])

            if i == max_jump:

                res.append(i - start + 1)

                start = i + 1

                max_jump = 0

        return res

ICL

ICL即In-contexting Learning。 ICL 包含三种分类: - Few-shot learning,允许输入数条示例和一则任务说明; - One-shot learning,只允许输入一条示例和一则任务说明; - Zero-shot learning,不允许输入任何示例,只允许输入一则任务说明。 image.png

和为K的子数组

题目地址 # 思路 通过前缀和+哈希表,并有简单的数学变换。前缀和即 \(y[i]=y[i-1]+x[i]\) 类比于accumlate函数,注意前缀和思想也可以应用为“前缀积、后缀和、后缀积”等思想。238. 除自身以外数组的乘积 - 力扣(LeetCode) > 使用前缀和的方法可以解决这个问题,因为我们需要找到和为k的连续子数组的个数。通过计算前缀和,我们可以将问题转化为求解两个前缀和之差等于k的情况。 >假设数组的前缀和数组为prefixSum,其中prefixSum[i]表示从数组起始位置到第i个位置的元素之和。那么对于任意的两个下标i和j(i < j),如果prefixSum[j] - prefixSum[i] = k,即从第i个位置到第j个位置的元素之和等于k,那么说明从第i+1个位置到第j个位置的连续子数组的和为k。 通过遍历数组,计算每个位置的前缀和,并使用一个哈希表来存储每个前缀和出现的次数。在遍历的过程中,我们检查是否存在prefixSum[j] - k的前缀和,如果存在,说明从某个位置到当前位置的连续子数组的和为k,我们将对应的次数累加到结果中。 这样,通过遍历一次数组,我们可以统计出和为k的连续子数组的个数,并且时间复杂度为O(n),其中n为数组的长度。 # 代码