|
|
|
@ -104,7 +104,7 @@ torch.Size([1, 4, 768])
|
|
|
|
|
|
|
|
|
|
<img src="../assets/image-20240426174122893.png" alt="image-20240426174122893" style="zoom:50%;" />
|
|
|
|
|
|
|
|
|
|
可以看到最终维度是转成了768列,4行。也就对应着4个索引,和GPT2的嵌入向量维度768。
|
|
|
|
|
可以看到最终维度是转成了768列,4行。也就对应着4个索引,和GPT2的嵌入向量矩阵的维度768。
|
|
|
|
|
|
|
|
|
|
注意,上面的模型是已经预训练好了,我们可以进行微调或从头开始训练,那应该怎么做呢?这里我们就涉及从0训练Tokenizer和从0训练Model,下面我们来演示从0开始训练。
|
|
|
|
|
|
|
|
|
@ -222,7 +222,7 @@ torch.Size([1, 3, 768])
|
|
|
|
|
|
|
|
|
|
> 注意,每次embedding的值不一定是完全一样的,因为每次初始化的权重值都是不一样的,这也是深度学习的一大特点。
|
|
|
|
|
|
|
|
|
|
由于我们训练的tokenizer只有3个词,所以可以看到索引是3行,embedding的维度还是768,我们前面声明了。最终输出的是[1, 3, 768]维度的向量。
|
|
|
|
|
由于我们训练的tokenizer只有3个词,所以可以看到索引是3行,embedding的维度还是768,我们前面声明了。最终输出的是[1, 3, 768]维度的向量矩阵。
|
|
|
|
|
|
|
|
|
|
里面又是怎么加工成每个索引的字符对应768个向量呢?为了演示,我这里将对应参数改成小值`n_embd=10, n_layer=1, n_head=1`只用10维
|
|
|
|
|
|
|
|
|
|