Closed pengqianhan closed 4 weeks ago
model/model.py 中的第 141 行 ‘‘hidden_dim = 4 * dim’’ 请问hidden_dim 这么设置的原因是什么呢。希望大佬可以解答一下,非常感谢。
@pengqianhan
如果需要知道 n * dim
的 n
为什么设置成 4
而不是其它数字
其实最初的Transformer论文(Vaswani et al., 2017)中,作者 4 * dim 作为FFN隐藏层维度,后面心照不宣都是用4了,包括现在的llama3:
至于 n
取多少,可以自由定义,没有严格限制
隐藏层需要比dim本身大,可以增加模型的容量(即模型的表达能力)。
大脑的思考过程也是一样:人类每听1个字+说1个字,流入流出的信息虽然很少。但是这些字在大脑内部却经历了o(N)复杂度的隐藏计算,N需要更大,表达能力才能更强。
人类听1个字 -> 【人类大脑在hidden_dim=N计算M次】 -> 人类说1个字
对应到这里的token
输入dim=512维度 -> 【模型大脑在hidden_dim=dim*n维度计算】 -> 输出dim=512维度
理论上隐藏层越大越好。隐藏层太小,表达能力会受限;但太大计算成本会显著增加。大模型参数体积就主要来自于FFN的隐藏层,具体可以看这个issue comment的分析。
总结而言
1、4是约定俗成,默认用4,但可以自由更改(只要取得效果和参数体积的平衡即可)
2、扩大 n*dim
的原因就是需要获得【更强的表达能力】
有其它任何问题欢迎继续交流~~~
model/model.py 中的第 141 行 ‘‘hidden_dim = 4 * dim’’ 请问hidden_dim 这么设置的原因是什么呢。希望大佬可以解答一下,非常感谢。