- in
- [B batch, T positions, 768 d]
- out
- [B batch, T positions, 768 d]
- parameters
- 4,722,432 · × 12 blocks = 56,669,184
Parameters
4,722,432 parameters per instance, across its learned components
| Component | Calculation | Parameters |
|---|---|---|
| Feature expansion | 2,362,368 | |
| Feature projection | 2,360,064 | |
| Per-instance total | 4,722,432 | |
Across 12 independent blocks: parameters.
Codemodel.py 115–120, 128 · modeling_gpt2.py 232–260
def mlp(x, scope, n_state, *, hparams):
with tf.variable_scope(scope):
nx = x.shape[-1].value
h = gelu(conv1d(x, 'c_fc', n_state))
h2 = conv1d(h, 'c_proj', nx)
return h2 m = mlp(norm(x, 'ln_2'), 'mlp', nx*4, hparams=hparams) embed_dim = config.hidden_size
self.c_fc = Conv1D(intermediate_size, embed_dim)
self.c_proj = Conv1D(embed_dim, intermediate_size)
self.act = ACT2FN[config.activation_function]
self.dropout = nn.Dropout(config.resid_pdrop)
def forward(self, hidden_states: tuple[torch.FloatTensor] | None) -> torch.FloatTensor:
hidden_states = self.c_fc(hidden_states)
hidden_states = self.act(hidden_states)
hidden_states = self.c_proj(hidden_states)
hidden_states = self.dropout(hidden_states)
return hidden_states hidden_size = config.hidden_size
inner_dim = config.n_inner if config.n_inner is not None else 4 * hidden_size self.mlp = GPT2MLP(inner_dim, config)Sources2
Direct evidence
Original two projections with a four-times expansion.
openai · openai/gpt-2 / src/model.py
Pinned revision 9b63575ef427 ↗ · lines 115–128
Read code excerpt
def mlp(x, scope, n_state, *, hparams):
with tf.variable_scope(scope):
nx = x.shape[-1].value
h = gelu(conv1d(x, 'c_fc', n_state))
h2 = conv1d(h, 'c_proj', nx)
return h2… lines 121–127 omitted …
m = mlp(norm(x, 'ln_2'), 'mlp', nx*4, hparams=hparams)Direct evidence
Transformers resolves the activation from the checkpoint configuration.
transformers · huggingface/transformers / src/transformers/models/gpt2/modeling_gpt2.py
Pinned revision 71c6f699ac9b ↗ · lines 232–260
Read code excerpt
embed_dim = config.hidden_size
self.c_fc = Conv1D(intermediate_size, embed_dim)
self.c_proj = Conv1D(embed_dim, intermediate_size)
self.act = ACT2FN[config.activation_function]
self.dropout = nn.Dropout(config.resid_pdrop)
def forward(self, hidden_states: tuple[torch.FloatTensor] | None) -> torch.FloatTensor:
hidden_states = self.c_fc(hidden_states)
hidden_states = self.act(hidden_states)
hidden_states = self.c_proj(hidden_states)
hidden_states = self.dropout(hidden_states)
return hidden_states… lines 244–248 omitted …
hidden_size = config.hidden_size
inner_dim = config.n_inner if config.n_inner is not None else 4 * hidden_size… lines 251–259 omitted …
self.mlp = GPT2MLP(inner_dim, config)