BERT参数量计算

参数详情说明参数量
name = bert/embeddings/word_embeddings:0, shape = (30522, 768)单词表每个单词向量长度是768,一共30522个单词23440896
name = bert/embeddings/token_type_embeddings:0, shape = (2, 768)对于输入的任务是两个句子的,需要两个768维度的向量表示是第一个句子还是第二个句子1536
name = bert/embeddings/position_embeddings:0, shape = (512, 768)每个位置的embedding向量的表示,每一个位置向量是768维393216
name = bert/embeddings/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/embeddings/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_0/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_0/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_0/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_0/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_0/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_0/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_0/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768,全连接之后进行的残差连接589824
name = bert/encoder/layer_0/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_0/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_0/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_0/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_0/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_0/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_0/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_0/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_0/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_1/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_1/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_1/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_1/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_1/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_1/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_1/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_1/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_1/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_1/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_1/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_1/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_1/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_1/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_1/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_1/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_2/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_2/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_2/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_2/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_2/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_2/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_2/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_2/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_2/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_2/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_2/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_2/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_2/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_2/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_2/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_2/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_3/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_3/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_3/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_3/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_3/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_3/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_3/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_3/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_3/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_3/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_3/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_3/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_3/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_3/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_3/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_3/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_4/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_4/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_4/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_4/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_4/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_4/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_4/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_4/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_4/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_4/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_4/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_4/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_4/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_4/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_4/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_4/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_5/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_5/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_5/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_5/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_5/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_5/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_5/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_5/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_5/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_5/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_5/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_5/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_5/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_5/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_5/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_5/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_6/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_6/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_6/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_6/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_6/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_6/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_6/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_6/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_6/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_6/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_6/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_6/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_6/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_6/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_6/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_6/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_7/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_7/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_7/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_7/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_7/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_7/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_7/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_7/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_7/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_7/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_7/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_7/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_7/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_7/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_7/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_7/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_8/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_8/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_8/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_8/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_8/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_8/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_8/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_8/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_8/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_8/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_8/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_8/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_8/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_8/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_8/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_8/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_9/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_9/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_9/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_9/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_9/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_9/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_9/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_9/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_9/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_9/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_9/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_9/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_9/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_9/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_9/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_9/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_10/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_10/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_10/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_10/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_10/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_10/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_10/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_10/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_10/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_10/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_10/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_10/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_10/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_10/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_10/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_10/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_11/attention/self/query/kernel:0, shape = (768, 768)这个是输入矩阵形状对应的query,正常是(768,12*64)所以最后变成了(768, 768)589824
name = bert/encoder/layer_11/attention/self/query/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_11/attention/self/key/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的key,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_11/attention/self/key/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量768
name = bert/encoder/layer_11/attention/self/value/kernel:0, shape = (768, 768)这个是输出矩阵形状对应的value,因为是self-attention,所以输出与输入的形状是相同的,所以也是(768, 12*64)589824
name = bert/encoder/layer_11/attention/self/value/bias:0, shape = (768,)因为上面后者是12*64=768,所以最后是768维度的向量589824
name = bert/encoder/layer_11/attention/output/dense/kernel:0, shape = (768, 768)全连接第一层 768*768589824
name = bert/encoder/layer_11/attention/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_11/attention/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_11/attention/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_11/intermediate/dense/kernel:0, shape = (768, 3072)全连接第二层是768*30722359296
name = bert/encoder/layer_11/intermediate/dense/bias:0, shape = (3072,)全连接对应的bias3072
name = bert/encoder/layer_11/output/dense/kernel:0, shape = (3072, 768)全连接第三层,将神经元的个数降低到768,好进行下一层的multi-head attention2359296
name = bert/encoder/layer_11/output/dense/bias:0, shape = (768,)全连接对应的bias768
name = bert/encoder/layer_11/output/LayerNorm/beta:0, shape = (768,)LayerNorm beta参数,因为单词向量表示是768维,所以是768个768
name = bert/encoder/layer_11/output/LayerNorm/gamma:0, shape = (768,)LayerNorm gamma参数,因为单词向量表示是768维,所以是768个768
name = bert/pooler/dense/kernel:0, shape = (768, 768)因为该任务是判断两个句子是否是一个含义的任务,使用[CLS]向量,先进行一层全连接589824
name = bert/pooler/dense/bias:0, shape = (768,)全连接对应的bias768
name = output_weights:0, shape = (2, 768)因为是二分类任务,所以需要将向量的维度降低到21536
name = output_bias:0, shape = (2,)全连接对应的bias2
116552450
### BERT模型参数量计算 BERT模型的参数量主要由以下几个部分组成: #### 1. 嵌入层(Embedding Layer) 嵌入层主要包括三个子模块:词向量嵌入、位置编码嵌入以及分段嵌入。这些嵌入矩阵的大小可以通过以下公式计算得出: - **词向量嵌入**:`vocab_size × hidden_size` - **位置编码嵌入**:`max_position_embeddings × hidden_size` - **分段嵌入**:`type_vocab_size × hidden_size` 对于BERT Base版本,假设 `vocab_size=30522`, `hidden_size=768`, `max_position_embeddings=512`, 和 `type_vocab_size=2`,则总参数量为: \[ \text{Embedding Parameters} = (\text{vocab\_size} + \text{max\_position\_embeddings} + \text{type\_vocab\_size}) \times \text{hidden\_size} \] 代入数值得到: \[ (30522 + 512 + 2) \times 768 = 23944704 \approx 23.9M \] 这部分对应于引用中的描述[^2]。 --- #### 2. Transformer Encoder 层 每个Transformer Encoder层的主要组成部分包括自注意力机制(Self-Attention)和前馈神经网络(Feedforward Network)。其参数量可以分为两大部分来计算: ##### a. 自注意力机制(Self-Attention Mechanism) 每个多头注意力机制包含查询(Q)、键(K)、值(V)三组线性变换矩阵,外加一个输出投影矩阵。总的参数量为: \[ 4 \times d_{\text{model}} \times d_k \] 其中 \(d_{\text{model}}\) 表示隐藏层维度(即 `hidden_size`),\(d_k\) 是每个注意力头的维度,通常满足 \(d_k = \frac{d_{\text{model}}}{h}\),而 \(h\) 是注意力头的数量。 对于BERT Base版本,有 \(d_{\text{model}}=768\) 和 \(h=12\),所以 \(d_k=\frac{768}{12}=64\)。因此单个Encoder层中自注意力机制的参数量为: \[ 4 \times 768 \times 64 = 196608 \] ##### b. 前馈神经网络(Feedforward Neural Network) 前馈神经网络包含两个全连接层,分别用于输入映射和输出映射。其参数量为: \[ 2 \times d_{\text{model}} \times d_{ff} \] 其中 \(d_{ff}\) 是中间扩展维度,默认情况下取 \(4 \times d_{\text{model}}\)。 对于BERT Base版本,\(d_{ff}=4 \times 768=3072\),故单个Encoder层中前馈神经网络的参数量为: \[ 2 \times 768 \times 3072 = 4718592 \] 综合以上两项,单个Transformer Encoder层的参数量为: \[ 196608 + 4718592 = 4915200 \approx 4.9M \] 由于BERT Base版本共有12层,因此所有Encoder层的总参数量为: \[ 4915200 \times 12 = 58982400 \approx 58.9M \] 这一部分内容与引用中的说明一致[^3]。 --- #### 3. 归一化层(Layer Normalization) 每一层都包含一层归一化操作,但由于其参数数量相对较少,在整体参数量占比很小,一般忽略不计。 --- #### 总结 将上述各部分相加即可得到整个BERT Base模型的参数量: \[ 23.9M + 58.9M = 82.8M \] 然而需要注意的是,实际公开的数据表明BERT Base模型的参数量约为110M。这可能是因为某些细节未被完全覆盖或者存在其他辅助组件的影响。 至于BERT Large版本,则通过加倍层数至24层并增大隐藏层尺寸至1024等方式进一步提升容量,最终达到约340M的规模。 ```python def calculate_bert_parameters(vocab_size, max_positions, type_vocab_size, hidden_size, num_heads, ff_dim, layers): embedding_params = (vocab_size + max_positions + type_vocab_size) * hidden_size attention_params_per_layer = 4 * hidden_size * (hidden_size // num_heads) feed_forward_params_per_layer = 2 * hidden_size * ff_dim encoder_params_per_layer = attention_params_per_layer + feed_forward_params_per_layer total_encoder_params = encoder_params_per_layer * layers return embedding_params + total_encoder_params # Example Calculation for BERT Base params_base = calculate_bert_parameters(30522, 512, 2, 768, 12, 3072, 12) print(f"Bert Base Parameter Count: {params_base / 1e6:.2f} M") # Output ~110M ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值