MouYongli / LLMs4OL

Ontology Learning using Large Language Models
MIT License
1 stars 0 forks source link

LoRA Paper(https://arxiv.org/pdf/2106.09685) #1

Open Kleinpenny opened 4 months ago

Kleinpenny commented 4 months ago

我们可以将LoRa应用于nn中任意的权重矩阵之间

  1. MLP中,有两个权重矩阵:

输入层到隐藏层的权重矩阵:这个权重矩阵用来连接输入层和隐藏层,它的大小是由输入特征的维度和隐藏层神经元的数量决定的。每一行对应一个隐藏层神经元,每一列对应输入层的一个特征。这个权重矩阵用来将输入特征线性组合成隐藏层的输出。

隐藏层到输出层的权重矩阵:这个权重矩阵用来连接隐藏层和输出层,它的大小是由隐藏层神经元的数量和输出层的维度(任务的类型)决定的。每一行对应一个输出层的神经元,每一列对应隐藏层的一个神经元。这个权重矩阵用来将隐藏层的输出线性组合成最终的输出。

  1. self-attention模块(自注意力机制)中,通常会使用四个权重矩阵,它们分别是:

查询权重矩阵(Query Matrix):用于将输入向量映射到查询向量空间,以便计算注意力分数。

键权重矩阵(Key Matrix):用于将输入向量映射到键向量空间,以便计算注意力分数。

值权重矩阵(Value Matrix):用于将输入向量映射到值向量空间,以便计算加权和的值。

输出权重矩阵(Output Matrix):用于将注意力加权和的值向量映射回原始特征空间,以生成最终的输出。

image image

Kleinpenny commented 4 months ago

查看可被训练的Target Modules的方法: (1): import torch from transformers import Conv1D

def get_specific_layer_names(model):

Create a list to store the layer names

layer_names = []

# Recursively visit all modules and submodules
for name, module in model.named_modules():
    # Check if the module is an instance of the specified layers
    if isinstance(module, (torch.nn.Linear, torch.nn.Embedding, torch.nn.Conv2d, Conv1D)):
        # model name parsing 

        layer_names.append('.'.join(name.split('.')[4:]).split('.')[0])

return layer_names

list(set(get_specific_layer_names(model)))

可以得到: image

Kleinpenny commented 4 months ago

查看可被训练的Target Modules的方法: (2): model = AutoModelForCausalLM.from_pretrained("some-model-checkpoint") print(model) 可以得到以下输出: image

其中Linear的都是可以训练的。 e8786b30258b237f49b79d49561d241