Add. 增加embedding初始化源码等

master
ben.guo 6 months ago
parent 12bd5f79ce
commit dad7a052b7

@ -281,9 +281,19 @@ tensor([-0.0288, -0.2724, -0.3007, 0.4584, -0.1438, 0.3389, -0.0454, -0.4382,
Transformer模型中的embedding层虽然只有一个模块但它是通过整个模型的训练过程中与其他层一起学习和优化的。
在GPT这样的Transformer模型中Token Embedding并没有使用一个单独的算法来形成而是作为模型的初始参数随机初始化然后在整个模型的训练过程中与其他参数一起学习和调整。这个过程涉及到将输入token转换为高维向量并通过模型的自注意力和前馈网络层来不断优化这些向量以便它们能够更好地捕捉和表示输入数据的语义特征。
> embedding的更新方法跟后面的神经网络是类似的具体方法不同。可以理解为更新w权重想提前了解的点击跳转[神经网络demo](https://github.com/ben1234560/AiLearning-Theory-Applying/blob/master/%E4%BA%BA%E4%BA%BA%E9%83%BD%E8%83%BD%E7%9C%8B%E6%87%82%E7%9A%84Transformer/%E7%AC%AC%E4%B8%83%E7%AB%A0%E2%80%94%E2%80%94%E5%89%8D%E9%A6%88%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C.md#%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9Cdemo)
为了演示,我这里提供一个非常简化的模型过程(简化了一些位置编码等):
### GPT源码详解embedding
在GPT这样的Transformer模型中Token Embedding并没有使用一个单独的算法来形成而是作为模型的初始参数随机初始化然后在整个模型的训练过程中与其他参数一起学习和调整。这个过程涉及到将输入token转换为高维向量并通过模型的自注意力和前馈网络层来不断优化这些向量以便它们能够更好地捕捉和表示输入数据的语义特征。源码如下
~~~python
# wte词嵌入即embedding,可以看到random_normal_initializer它是随机初始化的
wte = tf.get_variable('wte', [hparams.n_vocab, hparams.n_embd],
initializer=tf.random_normal_initializer(stddev=0.02))
~~~
但源码中没有提供embedding更新的部分为了演示我这里提供一个非常简化的模型过程简化了一些位置编码等反向传播更新的部分`optimizer.step()`
~~~python
import torch
@ -324,7 +334,7 @@ for epoch in range(100): # 假设训练100个epoch
# 反向传播
optimizer.zero_grad()
loss.backward()
# 梯度下降
# 梯度下降根据loss值去更新模型的参数里面则包括embeddings
optimizer.step()
# 打印损失
if (epoch + 1) % 10 == 0:

Loading…
Cancel
Save