jingyaogong / minimind

「大模型」3小时完全从0训练26M的小参数GPT,个人显卡即可推理训练!
https://jingyaogong.github.io/minimind
Apache License 2.0
2.7k stars 329 forks source link

hidden_dim = 4 * dim 设置原因 #61

Closed pengqianhan closed 4 weeks ago

pengqianhan commented 1 month ago

model/model.py 中的第 141 行 ‘‘hidden_dim = 4 * dim’’ 请问hidden_dim 这么设置的原因是什么呢。希望大佬可以解答一下,非常感谢。

jingyaogong commented 1 month ago

model/model.py 中的第 141 行 ‘‘hidden_dim = 4 * dim’’ 请问hidden_dim 这么设置的原因是什么呢。希望大佬可以解答一下,非常感谢。

@pengqianhan

如果需要知道 n * dimn 为什么设置成 4 而不是其它数字

其实最初的Transformer论文(Vaswani et al., 2017)中,作者 4 * dim 作为FFN隐藏层维度,后面心照不宣都是用4了,包括现在的llama3image

至于 n 取多少,可以自由定义,没有严格限制 隐藏层需要比dim本身大,可以增加模型的容量(即模型的表达能力)。

理论上隐藏层越大越好。隐藏层太小,表达能力会受限;但太大计算成本会显著增加。大模型参数体积就主要来自于FFN的隐藏层,具体可以看这个issue comment的分析。

总结而言 1、4是约定俗成,默认用4,但可以自由更改(只要取得效果和参数体积的平衡即可) 2、扩大 n*dim 的原因就是需要获得【更强的表达能力】

有其它任何问题欢迎继续交流~~~