Soy un novato al principio, espero registrar lo que he aprendido como tomar notas, y también espero ayudar a las personas que también están comenzando.
Tabla de contenido
2. Entrada de conjunto de datos (token)
1. Resumen
2. Entrada de conjunto de datos (token)
1. Generar
Generar conjunto de datos binarios por cogdata (generar token)
2, ficha
El texto genera un token de texto a través del modelo SentencePiece; la imagen se convierte en un token de imagen a través de un AE discretizado (Codificador automático).
La función del token es convertir el texto y la imagen en pequeños bloques con un significado independiente tanto como sea posible, lo cual es conveniente para el mapeo posterior al espacio del token (similar a la expresión del vector de palabras ABABA), y la importancia para la imagen aquí es aún mayor. , porque a El gráfico ampliado se convierte en varios bloques pequeños, lo que reduce la carga de cálculo de la red posterior.
3, datos y etiqueta
Debido a que se predice de izquierda a derecha, por ejemplo, la entrada del primer token obtiene el segundo token predicho y luego lo compara con el segundo token del objetivo para obtener la pérdida (por lo que las etiquetas están un poco por detrás de los tokens)
El siguiente código está en pretrain_gpt2.py (las etiquetas son el objetivo de comparación; los tokens son los datos del token de entrada)
def get_batch(data_iterator, args, timers):#获取该batch的数据
# Items and their type.
keys = ['text', 'loss_mask']
datatype = torch.int64
# Broadcast data.
timers('data loader').start()
if data_iterator is not None:
data = next(data_iterator)
else:
data = None
timers('data loader').stop()
data_b = mpu.broadcast_data(keys, data, datatype)
# Unpack.解压数据
tokens_ = data_b['text'].long()
loss_mask = data_b['loss_mask'].float()#这个loss mask应该是服务于继续训练的那种吧(如果一开始训练应该为None)
labels = tokens_[:, 1:].contiguous()#目标
loss_mask = loss_mask[:, 1:].contiguous()
tokens = tokens_[:, :-1].contiguous()#输入token
#因为是从左到右预测,比如说第一个token输入得到预测的第二个token再与目标的第二个token进行比对得到loss(所以labels比tokens延后一位)
attention_mask = None
# Get the masks and postition ids.获得位置编码,attention mask 和 loss mask
attention_mask, loss_mask, position_ids = get_masks_and_position_ids(
tokens,
loss_mask=loss_mask,
attention_mask=attention_mask,
args=args
)
# Convert转为半精度
if args.fp16:
attention_mask = attention_mask.half()
return tokens, labels, loss_mask, attention_mask, position_ids
Ejemplo, Transformador (GPT)
Para obtener detalles, análisis de código, etc., consulte la construcción general de la estructura de la red en CogView: se busca programador
Transformador (GPT) en el mapa resumen
Las incrustaciones de palabras se convierten en vectores de palabras; Transformer es la estructura de red principal: predice tokens de izquierda a derecha (el token anterior expulsa al token siguiente), que consta de varios bloques de Transformer (capas).
El Transformador en esta figura se puede subdividir de la siguiente manera (sin procesamiento disperso)
Para obtener detalles, análisis de código, etc., consulte el blog de Transformer_ttya en CogView - CSDN Blog
Entre ellos, el TransformerLayer de una sola capa: ver cuatro
四、TransformerLayer
Para obtener detalles, análisis de código, etc., consulte el blog TransformerLayer_ttya de una sola capa en CogView-CSDN Blog
La estructura residual se usa dos veces (para facilitar la realización de modelos de muy alta complejidad y ayuda a resolver el problema de la desaparición y explosión de gradientes), y LayerNorm también se usa para el mantenimiento de la estabilidad.
Entre ellos, Self Attention: ver cinco
Entre los MLP: ver seis
5. Auto atención
Para obtener detalles, análisis de código, etc., consulte el blog de Self Attention_ttya en CogView - CSDN Blog
Haga que el aprendizaje en línea se centre en un punto de información importante
La máscara de atención agregada aquí es para la predicción de izquierda a derecha (triángulo inferior)
6. MLP
Para obtener detalles, análisis de código, etc., consulte el blog de MLP_ttya en CogView - CSDN Blog
Todos son bienvenidos a criticar y corregir en el área de comentarios, gracias~