Versión práctica de aprendizaje profundo de pytorch (1): introducción y preliminares

Referencias

0. Instalación ambiental

1. Introducción

  • El aprendizaje automático (ML) es una poderosa clase de técnicas que pueden aprender de la experiencia . Generalmente en forma de datos de observación o interacción con el entorno, el algoritmo de aprendizaje automático acumulará más experiencia y su rendimiento mejorará gradualmente.

1.1 Aprendizaje automático en la vida cotidiana

  • Si necesita escribir un programa para responder a una "palabra de activación", como "Alexa"

    • Recopile un conjunto de datos que contenga una gran cantidad de muestras de audio y etiquételas con y sin palabras de activación.
    • Usando algoritmos de aprendizaje automático, en lugar de diseñar un sistema que reconozca "explícitamente" las palabras de activación, solo es necesario definir un algoritmo de programa flexible cuya salida esté determinada por muchos parámetros (parámetros) y luego usar el conjunto de datos para determinar el actual " mejor palabra de activación " . conjunto óptimo de parámetros" que logran el mejor rendimiento para una tarea mediante alguna medida de rendimiento
    • ¿Qué son los parámetros?
      • Cualquier programa con parámetros ajustados se llama modelo . La colección de todos los diferentes programas (mapeos de entrada-salida) generados mediante la manipulación de parámetros se denomina "familia de modelos". Un metaprograma que utiliza un conjunto de datos para seleccionar parámetros se llama algoritmo de aprendizaje.
    • El problema debe definirse con precisión, determinarse la naturaleza de las entradas y salidas y seleccionarse una familia de modelos apropiada. En este ejemplo, el modelo recibe una pieza de audio como entrada y produce una elección entre sí o no como salida.
      • Si desea manejar entradas o salidas completamente diferentes, por ejemplo: mapeo de imagen a subtítulo, o de inglés a chino, es posible que necesite una familia de modelos completamente diferente.
  • En el aprendizaje automático, el aprendizaje es el proceso de entrenar un modelo . A través de este proceso, se puede descubrir el conjunto correcto de parámetros para que el modelo aplique el comportamiento deseado. En otras palabras, entrenar el modelo con los datos . El proceso de formación suele incluir los siguientes pasos

    • (1) Comience con un modelo con parámetros de inicialización aleatorios, que básicamente no tiene "inteligencia"
    • (2) Obtenga algunas muestras de datos (por ejemplo, clips de audio y las etiquetas correspondientes de sí o no)
    • (3) Ajuste los parámetros para que el modelo funcione mejor en estas muestras.
    • (4) Repita los pasos (2) y (3) hasta que el modelo se desempeñe satisfactoriamente en la tarea.

1.2 Componentes clave del aprendizaje automático

1.2.1 Datos (datos)

  • Cada conjunto de datos está compuesto por muestras y, la mayoría de las veces, siguen una distribución independiente e idéntica. A una muestra a veces se le llama punto de datos o instancia de datos y, por lo general, cada muestra consta de un conjunto de atributos llamados características o covariables, sobre los cuales el modelo de aprendizaje automático realiza predicciones. Supongamos que se va a predecir un atributo especial, se llama etiqueta (etiqueta u objetivo (objetivo))

    • Cuando se trabaja con datos de imágenes, cada foto individual es una muestra cuyas características están representadas por una lista ordenada de valores para cada píxel.
  • Cuando el número de categorías de características de cada muestra es el mismo, su vector de características tiene una longitud fija, lo que se denomina dimensionalidad de los datos. Sin embargo, no todos los datos pueden representarse mediante vectores de "longitud fija", y una de las principales ventajas del aprendizaje profundo sobre los métodos tradicionales de aprendizaje automático es que puede manejar datos de diferentes longitudes.

  • Se pueden utilizar más datos para entrenar modelos más potentes. Tener datos masivos no es suficiente, también se necesitan los datos correctos . Si los datos están llenos de errores, o si las características de los datos no predicen el objetivo de la tarea, entonces es probable que el modelo no sea válido.

    • Por ejemplo, en un conjunto de datos de entrenamiento relacionado con un tratamiento médico, si desea entrenar un modelo de reconocimiento de cáncer de piel, pero nunca ha "visto" personas de piel negra en el conjunto de datos de entrenamiento, el modelo de repente quedará indefenso.
    • Cuando los datos no son suficientemente representativos o incluso contienen algunos sesgos sociales, es probable que el modelo esté sesgado.

1.2.2 Modelos

  • La mayor parte del aprendizaje automático implica la transformación de datos.
    • Por ejemplo, un sistema que "hace fotografías y predice caritas sonrientes"
    • Otro ejemplo es predecir la normalidad y anormalidad de las lecturas a través de un conjunto de lecturas de sensores ingeridas.

    La principal diferencia entre el aprendizaje profundo y los métodos clásicos es que el primero se centra en modelos potentes que están intrincadamente entrelazados por redes neuronales, incluida la transformación de datos capa por capa, por lo que se denomina aprendizaje profundo.

1.2.3 Función objetivo

  • En el aprendizaje automático es necesario definir la medida de los pros y los contras del modelo, esta medida es "optimizable" en la mayoría de los casos, lo que se denomina función objetivo (función objetivo). Es común definir una función objetivo y desear optimizarla al punto más bajo posible. Debido a que cuanto menos, mejor, estas funciones a veces se denominan funciones de pérdida (función de pérdida o función de costo)

    • Cuando la tarea intenta predecir un valor , la función de pérdida más común es el error al cuadrado (error al cuadrado) , que es el cuadrado de la diferencia entre el valor predicho y el valor real.
    • Al intentar resolver problemas de clasificación, la función objetivo más común es minimizar la tasa de error , es decir, la proporción de muestras cuyas predicciones no coinciden con la situación real.
    • Algunos objetivos, como la tasa de error, son difíciles de optimizar directamente debido a la no diferenciabilidad u otras complejidades, en cuyo caso a menudo se optimizan objetivos alternativos.
  • Normalmente, la función de pérdida se define en términos de parámetros del modelo y depende del conjunto de datos. En un conjunto de datos, los valores óptimos de los parámetros del modelo se pueden aprender minimizando la pérdida total.

    • El conjunto de datos consta de algunas muestras recopiladas para el entrenamiento, llamadas conjunto de datos de entrenamiento (conjunto de datos de entrenamiento, o conjunto de entrenamiento)
    • Sin embargo, un modelo que funciona bien con los datos de entrenamiento no necesariamente tiene el mismo rendimiento con el "nuevo conjunto de datos", donde el "nuevo conjunto de datos" generalmente se denomina conjunto de datos de prueba (conjunto de datos de prueba o conjunto de prueba). ))
  • Los conjuntos de datos disponibles generalmente se pueden dividir en dos partes: el conjunto de datos de entrenamiento se usa para ajustar los parámetros del modelo y el conjunto de datos de prueba se usa para evaluar el modelo ajustado.

    • "El rendimiento de un modelo en el conjunto de datos de entrenamiento" puede considerarse como "la puntuación de un estudiante en un examen simulado", esta puntuación se utiliza como referencia para algún examen final real, incluso si las calificaciones son alentadoras, el examen final no está garantizado. éxito
    • Cuando un modelo funciona bien en el conjunto de entrenamiento pero no logra generalizarse al conjunto de prueba, se dice que el modelo está sobreajustado . Al igual que en la vida real, aunque te vaya bien en los exámenes simulados, los exámenes reales no siempre dan en el blanco.

1.2.4 Algoritmo de optimización (algoritmo de optimización)

  • Una vez que tenga algunas fuentes de datos y sus representaciones, un modelo y una función de pérdida adecuada, necesitará un algoritmo que pueda buscar los mejores parámetros para minimizar la función de pérdida . En el aprendizaje profundo, los algoritmos de optimización más populares generalmente se basan en un método básico: descenso de gradiente (gradientdescent)
    • En cada paso, el descenso de gradiente examina cada parámetro para ver en qué dirección se desplazaría la pérdida del conjunto de entrenamiento si solo se hicieran pequeños cambios en ese parámetro.
    • Luego, optimiza los parámetros en la dirección que puede reducir la pérdida.

1.3 Varios problemas de aprendizaje automático

1.3.1 Aprendizaje supervisado

  • El aprendizaje supervisado es bueno para predecir etiquetas "dadas las características de entrada" . Cada par "característica-etiqueta" se denomina ejemplo. A veces, una muestra puede hacer referencia a una característica de entrada incluso si se desconoce la etiqueta. El objetivo es producir un modelo que sea capaz de asignar cualquier característica de entrada a una etiqueta (es decir, predecir).

    • Ejemplo: supongamos que necesita predecir si un paciente va a sufrir un ataque cardíaco o no, entonces las observaciones "ataque cardíaco" o "ataque cardíaco que no ocurre" serían las etiquetas de las muestras. Las características de entrada pueden ser signos vitales como frecuencia cardíaca, presión arterial diastólica y sistólica, etc.
  • El aprendizaje supervisado funciona porque cuando se entrenan parámetros, el modelo recibe un conjunto de datos donde cada ejemplo tiene una etiqueta verdadera. Las aplicaciones más exitosas del aprendizaje automático en la industria utilizan el aprendizaje supervisado. Esto se debe a que muchas tareas importantes pueden describirse como una estimación de la probabilidad de algo desconocido dado un conjunto específico de datos disponibles . Por ejemplo:

    • Dada una oración en inglés, predice la traducción correcta al francés.
    • Predecir el precio de una acción para el próximo mes basándose en los datos del informe financiero de este mes.
  • El proceso de aprendizaje del aprendizaje supervisado generalmente se puede dividir en tres pasos:

    • 1. Seleccione aleatoriamente un subconjunto de una gran cantidad conocida de muestras de datos y obtenga etiquetas verdaderas para cada muestra. A veces, estas muestras ya están etiquetadas (p. ej., ¿se recuperará el paciente dentro del próximo año?); a veces, es posible que sea necesario etiquetar estas muestras manualmente (p. ej., clasificación de imágenes). Juntas, estas entradas y las etiquetas correspondientes forman el conjunto de datos de entrenamiento.
    • 2. Elija un algoritmo de aprendizaje supervisado que tome un conjunto de datos de entrenamiento como entrada y genere un "modelo aprendido".
    • 3. Coloque las características de muestra que no se han visto antes en este "modelo que ha completado el aprendizaje" y utilice el resultado del modelo como predicción de la etiqueta correspondiente.

inserte la descripción de la imagen aquí

1.3.1.1 Regresión
  • La regresión (regresión) es una de las tareas de aprendizaje supervisadas más simples. Muchos problemas en la vida se pueden clasificar como problemas de regresión. Una buena regla general para juzgar los problemas de regresión es que cualquier pregunta sobre "cuánto" probablemente sea un problema de regresión . Por ejemplo:
    • cuantas horas dura esta operacion
    • ¿Cuánta lluvia se espera en este pueblo en las próximas 6 horas?
1.3.1.2 Clasificación
  • Diseñe una aplicación que comprenda automáticamente el texto que se ve en las imágenes y asigne caracteres escritos a mano a sus homólogos conocidos. Este problema de "qué" se llama problema de clasificación . Los problemas de clasificación esperan que el modelo pueda predecir a qué categoría pertenece la muestra (categoría, clase (clase))

    • El problema de clasificación más simple es que solo hay dos categorías, lo que se llama clasificación binomial; cuando hay más de dos categorías, este problema se llama clasificación multiclase.
    • La regresión consiste en entrenar una función de regresión para generar un valor, la clasificación es entrenar un clasificador para generar una categoría predicha. A diferencia de la resolución de problemas de regresión, la función de pérdida común de los problemas de clasificación se llama entropía cruzada.
  • Comprenda el modelo en el lenguaje de la probabilidad: dada una característica de muestra, el modelo asigna una probabilidad a cada clase posible. Por ejemplo, en el ejemplo de clasificación de perros y gatos, el clasificador podría generar una probabilidad de 0,9 de que la imagen sea un gato: el clasificador está 90% seguro de que la imagen representa un gato. La magnitud de la probabilidad de clase predicha transmite la incertidumbre de un modelo.

  • La clasificación puede volverse mucho más compleja que la binomial o multinomial. Por ejemplo, existen variantes de tareas de clasificación que se pueden utilizar para encontrar jerarquías que suponen alguna relación entre muchas clases . Por lo tanto, no todos los errores son iguales. Las personas prefieren ser clasificadas erróneamente en una categoría relacionada que en una distante, lo que a menudo se denomina clasificación jerárquica (clasificación jerárquica)

1.3.1.3 Problemas de señalización
  • El problema de aprender a predecir clases que no son mutuamente excluyentes se llama clasificación de etiquetas múltiples . Tomemos, por ejemplo, las etiquetas que la gente publica en blogs de tecnología: "aprendizaje automático", "técnicas", "aparatos", "lenguajes de programación", "Linux", "computación en la nube" y "AWS". Un artículo típico puede utilizar entre 5 y 10 etiquetas porque los conceptos están interrelacionados . Una publicación sobre "computación en la nube" podría mencionar "AWS", mientras que una publicación sobre "aprendizaje automático" podría hacer referencia a "lenguajes de programación".

1.3.2 Aprendizaje no supervisado

  • Todos los ejemplos anteriores están relacionados con el aprendizaje supervisado, es decir, el modelo debe contar con un gran conjunto de datos: cada muestra contiene una característica y un valor de etiqueta correspondiente . Si el trabajo no tiene un objetivo muy específico, es necesario aprender "espontáneamente". Por ejemplo, el jefe puede darnos una gran cantidad de datos y luego pedirnos usarlos para realizar una investigación científica de datos, pero no hay ningún requisito para los resultados. Los problemas de aprendizaje automático sin un "objetivo" en este tipo de datos a menudo se denominan aprendizaje no supervisado.
    • agrupamiento
      • ¿Es posible clasificar datos sin etiquetas? Por ejemplo, dado un conjunto de fotografías, ¿se pueden dividir en fotografías de paisajes, perros, bebés, gatos y montañas? De manera similar, dado un conjunto de registros de navegación web de los usuarios, ¿pueden los usuarios con ¿Se agrupará un comportamiento similar?
    • Análisis de componentes principales (análisis de componentes principales) :
      • ¿Se puede encontrar una pequeña cantidad de parámetros para capturar con precisión las propiedades linealmente dependientes de los datos? Por ejemplo, la trayectoria de una pelota se puede describir mediante la velocidad, el diámetro y la masa de la pelota. Como otro ejemplo, los sastres han desarrollado un pequeño conjunto de parámetros que describen con bastante precisión la forma del cuerpo humano para adaptarse a la ropa.
    • Modelos gráficos de causalidad y probabilísticos.
      • ¿Puede describir la causa fundamental de muchos de los datos que observa? Por ejemplo, si tiene datos demográficos sobre los precios de la vivienda, la contaminación, la delincuencia, la geografía, la educación y los salarios, ¿puede descubrir relaciones entre ellos basándose simplemente en datos empíricos?

1.3.3 aprendizaje por refuerzo

  • Ya sea aprendizaje supervisado o aprendizaje no supervisado , se obtendrá una gran cantidad de datos por adelantado y luego se iniciará el modelo sin interactuar con el entorno. Todo el aprendizaje aquí se realiza después de que el algoritmo se desconecta del entorno, lo que se denomina aprendizaje fuera de línea.

  • El aprendizaje por refuerzo no requiere un conjunto de datos de entrada y puede interactuar con el entorno y tomar medidas. Esto podría incluir la inteligencia artificial aplicada a robots, sistemas de diálogo e incluso el desarrollo de videojuegos. El aprendizaje por refuerzo profundo (aprendizaje por refuerzo profundo) aplica el aprendizaje profundo al problema del aprendizaje por refuerzo.

  • En los problemas de aprendizaje por refuerzo, un agente interactúa con un entorno a lo largo de una secuencia de pasos de tiempo. En cada momento específico, el agente recibe algunas observaciones del entorno y debe elegir una acción, que luego se transmite de regreso al entorno mediante algún mecanismo (a veces llamado actuador) y, finalmente, el agente obtiene la recompensa. A partir de entonces comienza un nuevo ciclo, el agente recibe observaciones posteriores, elige acciones posteriores, etc.

El objetivo del aprendizaje por refuerzo es generar una buena política. Las "acciones" elegidas por el agente de aprendizaje por refuerzo se rigen por una política, una función que mapea desde las observaciones del entorno hasta las acciones.

inserte la descripción de la imagen aquí

1.4 El origen del aprendizaje profundo

  • Para resolver una amplia variedad de problemas de aprendizaje automático, el aprendizaje profundo proporciona herramientas poderosas . Si bien muchos métodos de aprendizaje profundo han tenido avances importantes sólo recientemente, las ideas centrales del uso de datos y la programación de redes neuronales se han estudiado durante siglos.

  • Las redes neuronales reciben su nombre de inspiración biológica. Los investigadores han estado intentando ensamblar circuitos computacionales que se asemejan a redes de neuronas que interactúan, en cuyo núcleo se encuentran varios principios clave que se pueden encontrar en la mayoría de las redes actuales:

    • Alternancia de unidades de procesamiento lineales y no lineales, a menudo llamadas capas.
    • Utilice la regla de la cadena (también conocida como retropropagación) para ajustar todos los parámetros de la red a la vez

1.5 Desarrollo del aprendizaje profundo

  • Nuevos métodos de control de la capacidad : como el abandono escolar (Srivastava et al, 2014), ayudan a mitigar el peligro del sobreequipamiento
  • Mecanismos de atención : cómo aumentar la memoria y la complejidad del sistema sin aumentar los parámetros que se pueden aprender
  • Diseño de múltiples etapas : por ejemplo, redes de memoria (Sukhbaatar et al, 2015) y programadores-intérpretes neuronales (Reed y De Freitas. 2015)
  • Redes generativas adversarias : (Godfellow et al, 2014). La innovación clave de las redes generativas adversarias es reemplazar el muestreador con un algoritmo arbitrario con parámetros diferenciables . Luego, estos datos se ajustan para que el discriminador (en realidad, una prueba de dos muestras) no pueda distinguir entre datos falsos y reales.
  • Cree algoritmos de entrenamiento paralelos y distribuidos : en muchos casos, una sola GPU no es suficiente para manejar la gran cantidad de datos disponibles para el entrenamiento.
  • Marcos de aprendizaje profundo : desempeñaron un papel vital en la difusión de ideas
    • Marcos de primera generación: Caffe, Torch y Theano
    • Frameworks de segunda generación: TensorFlow, CNTK, Caffe2 y Apache MXNet
    • Marcos de tercera generación: PyTorch, Gluon API de MXNet y Jax

1.6 Características del aprendizaje profundo

  • El aprendizaje automático es una rama/método de la inteligencia artificial, mientras que el aprendizaje profundo es un subconjunto del aprendizaje automático.

  • El aprendizaje automático puede utilizar datos para aprender la transición entre entrada y salida, como convertir audio en texto en el reconocimiento de voz. Al hacerlo, a menudo es necesario representar los datos de una manera adecuada para el algoritmo con el fin de convertir esta representación en salida.

    • El aprendizaje profundo es "profundo", el modelo aprende muchas "capas" de transformaciones y cada capa proporciona un nivel de representación.
    • Por ejemplo, las capas cercanas a la entrada pueden representar detalles de bajo nivel de los datos, mientras que las capas cercanas a la salida de clasificación pueden representar conceptos más abstractos para la diferenciación.
    • Dado que el propósito del aprendizaje de representación es encontrar la representación misma, el aprendizaje profundo puede denominarse "aprendizaje de representación multinivel".
  • El punto en común más notable entre los enfoques de aprendizaje profundo es el uso de capacitación de extremo a extremo : en lugar de ensamblar sistemas basados ​​en componentes ajustados individualmente, construimos sistemas y luego ajustamos conjuntamente su rendimiento. Por lo tanto, una ventaja clave del aprendizaje profundo: reemplazar no solo los modelos superficiales al final de los canales de aprendizaje tradicionales, sino también el proceso de ingeniería de características que requiere mucha mano de obra.

2. Conocimientos preliminares

2.1 Manipulación de datos

  • Arreglos N-dimensionales, también conocidos como tensores, no importa qué marco de aprendizaje profundo se utilice, su clase de tensor (ndarray en MXNet, Tensor en Pytorch y TensorFlow) es similar al ndarray de Numpy.
    • El marco de aprendizaje profundo tiene más funciones que el ndarray de NumPy: en primer lugar, la GPU admite bien la computación acelerada , mientras que NumPy solo admite la computación con CPU; en segundo lugar, las clases de tensor admiten la diferenciación automática . Estas funciones hacen que la clase de tensor sea más adecuada para el aprendizaje profundo (si no hay una descripción especial, el tensor mencionado en este artículo se refiere a la instancia de la clase de tensor)

2.1.1 Primeros pasos

  • Un tensor representa una matriz de valores, que pueden tener múltiples dimensiones. Un tensor con un eje corresponde a un vector matemático (vector), un tensor con dos ejes corresponde a una matriz matemática (atriz) y un tensor con más de dos ejes no tiene un nombre matemático especial
    import torch
    
    x = torch.arange(12) # 使用 arange 创建一个行向量,包含以 0 开始的前 12 个整数
    print(x)
    print(x.shape) # 通过张量的 shape 属性来访问张量 (沿每个轴的长度) 的形状
    
    # 如果只想知道张量中元素的总数,即形状的所有元素乘积,可以检查它的大小 (size)
    # 因为这里在处理的是一个向量,所以 shape 与 size 相同
    print(x.numel())
    
    # 要想改变一个张量的形状而不改变元素数量和元素值,可以调用 reshape 函数
    # 虽然张量的形状发生了改变,但其元素值并没有变。通过改变张量的形状张量的大小不会改变
    X = x.reshape(3, 4) # 把张量 x 从形状为 (12,) 行向量转换为形状为 (3, 4) 矩阵
    # 可以通过 -1 来⾃动计算出维度的功能
    # 用 x.reshape(-1,4) 或 x.reshape(3,-1) 来取代 x.reshape(3,4)
    print(X)
    
    # 创建全 0 或全 1 常量
    y = torch.zeros((2, 3, 4))
    y = torch.ones((2, 3, 4))
    print(y)
    
    # 每个元素都从均值为 0、标准差为 1 的标准高斯分布 (正态分布) 中随机采样
    z = torch.randn(3, 4)
    print(z)
    
    # 提供包含数值的 Python 列表 (或嵌套列表),为所需张量中的每个元素赋予确定值
    # 最外层的列表对应于轴 0,内层的列表对应于轴 1
    w = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
    print(w)
    

2.1.2 Operadores

  • Los operadores aritméticos estándar comunes (+, -, *, / y ) se pueden actualizar a operaciones de elementos en tensores arbitrarios de la misma forma **
  • Concatene varios tensores juntos, apilándolos de un extremo a otro para formar un tensor más grande, solo proporcione una lista de tensores y indique a lo largo de qué eje concatenar
    import torch
    
    x = torch.tensor([1.0, 2, 4, 8])
    y = torch.tensor([2, 2, 2, 2, ])
    print(x + y, x - y, x * y, x / y, x ** y) # ** 运算符是求幂运算
    print(torch.exp(x))
    
    x = torch.arange(12, dtype=torch.float32).reshape(3, 4) # 创建一个形状为 (3,4) 的张量 x,其中包含了从 0 到 11 的连续数字,其数据类型为 torch.float32
    y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
    print(torch.cat((x, y), dim=0)) # 将张量x和y在维度0上进行拼接,即将y拼接在x的下方,拼接后的张量形状为(6,4)
    print(torch.cat((x, y), dim=1)) # 将张量x和y在维度1上进行拼接,即将y拼接在x的右侧,拼接后的张量形状为(3,8)
    # 通过逻辑运算符构建二元张量
    # 如果 x 和 y 在该位置相等,则新张量中相应项的值为 1,否则该位置为 0
    print(x == y)
    # 对张量中的所有元素进⾏求和,会产⽣⼀个单元素张量
    print(x.sum())
    

2.1.3 Mecanismo de transmisión

  • Incluso si las formas son diferentes, aún puedes realizar operaciones de elementos llamando al mecanismo de transmisión, que funciona así
    • Extiende uno o ambos arreglos duplicando elementos apropiadamente para que después de la transformación, ambos tensores tengan la misma forma.
    • Realizar operaciones por elementos en la matriz resultante.
import torch

a = torch.arange(3).reshape((3, 1))
b = torch.arange(2).reshape((1, 2))
print(a)
print(b)

# 将两个矩阵⼴播为⼀个更⼤的 3×2 矩阵:矩阵 a 复制列,矩阵 b 复制⾏,然后再按元素相加
print(a + b)

2.1.4 Indexación y corte

  • Al igual que las matrices de Python, se puede acceder a los elementos de los tensores por índice: el primer elemento tiene el índice 0 y el último elemento tiene el índice -1; se pueden especificar rangos para incluir el primer elemento y el elemento anterior al último.
    import torch
    
    x = torch.arange(12, dtype=torch.float32).reshape(3, 4)
    
    
    print(x[-1]) # 用 [-1] 选择最后一个元素
    print(x[1:3]) # 用 [1:3] 选择第二个和第三个元素
    
    # 指定索引来将元素写入矩阵
    x[1, 2] = 9
    print(x)
    
    # 为多个元素赋值相同的值:只需索引所有元素,然后为它们赋值
    x[0:2, :] = 12 # : 表示沿轴 1(列)的所有元素
    print(x)
    

2.1.5 Guardar memoria

  • La ejecución de algunas operaciones puede provocar que se asigne memoria para nuevos resultados. Por ejemplo, si usa y = x + y, el tensor al que apunta y será desreferenciado y en su lugar apuntará al tensor en la memoria recién asignada.
    import torch
    
    x = torch.arange(12, dtype=torch.float32).reshape(3, 4)
    y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
    
    # 使用切片表示法将操作的结果分配给先前分配的数组,例如 Y[:]= <expression>
    z = torch.zeros_like(y) # 使用 zeros_like 来分配一个全 0 的块
    print('id(z):', id(z))
    z[:] = x + y
    print('id(z):', id(z))
    

2.1.6 Conversión a otros objetos de Python

  • Es fácil convertir tensores definidos por marcos de aprendizaje profundo en tensores NumPy (ndarray) y viceversa. Los tensores de antorcha y las matrices numerosas compartirán su memoria subyacente, y las operaciones in situ que cambian un tensor también cambiarán el otro.

    import torch
    
    x = torch.arange(12, dtype=torch.float32).reshape(3, 4)
    A = x.numpy()
    B = torch.tensor(A)
    
    print(type(A), type(B))
    
  • Para convertir un tensor de tamaño 1 en un escalar de Python, llame a la función item o a la función incorporada de Python

    import torch
    
    a = torch.tensor([3.5])
    
    print((a, a.item(), float(a), int(a)))
    

2.2 Preprocesamiento de datos

  • Entre las herramientas de análisis de datos comúnmente utilizadas en Python se suele utilizar el paquete pandas, que es compatible con tensores.

2.2.1 Leer conjunto de datos

  • Primero cree un conjunto de datos artificiales y guárdelo en un archivo CSV (valores separados por comas) .../data/house_tiny.csv. Los datos almacenados en otros formatos también se pueden procesar de manera similar. Lo siguiente escribe el conjunto de datos fila por fila en un archivo CSV
  • Para cargar el conjunto de datos sin procesar desde el archivo CSV creado, importe el paquete pandas y llame a la función read_csv. El conjunto de datos tiene cuatro filas y tres columnas. donde cada fila describe el número de habitaciones ("NumRooms"), el tipo de callejón ("Callejón") y el precio de la casa ("Precio")
    import os
    import pandas as pd
    
    os.makedirs(os.path.join('..', 'data'), exist_ok=True)
    data_file = os.path.join('..', 'data', 'house_tiny.csv')
    with open(data_file, 'w') as f:
        f.write('NumRooms,Alley,Price\n')
        f.write('NA,Pave,127500\n')
        f.write('2,NA,106000\n')
        f.write('4,NA,178100\n')
        f.write('NA,NA,140000\n')
    
    data = pd.read_csv(data_file)
    print(data)
    
    # 输出
       NumRooms Alley   Price
    0       NaN  Pave  127500
    1       2.0   NaN  106000
    2       4.0   NaN  178100
    3       NaN   NaN  140000
    

2.2.2 Manejo de valores faltantes

  • Las entradas "NaN" representan valores faltantes. Para manejar los datos faltantes, los métodos típicos incluyeninterpolación y eliminación , donde la interpolación utiliza un valor sustituto para compensar los valores faltantes, y la eliminación ignora directamente los valores faltantes, y la interpolación se considerará aquí.
    • Divida los datos en entradas y salidas por índice de posición iloc, donde la primera son las dos primeras columnas de datos y la última es la última columna de datos. Para valores faltantes en las entradas, reemplace las entradas "NaN" con la media de la misma columna
    import os
    import pandas as pd
    
    os.makedirs(os.path.join('..', 'data'), exist_ok=True)
    data_file = os.path.join('..', 'data', 'house_tiny.csv')
    with open(data_file, 'w') as f:
        f.write('NumRooms,Alley,Price\n')
        f.write('NA,Pave,127500\n')
        f.write('2,NA,106000\n')
        f.write('4,NA,178100\n')
        f.write('NA,NA,140000\n')
    
    data = pd.read_csv(data_file)
    # 通过位置索引 iloc,将 data 分成 inputs 和 outputs
    # inputs 为 data 的前两列,outputs 为 data 的最后一列
    inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
    inputs = inputs.fillna(inputs.mean())
    
    print(inputs)
    
    # 输出
       NumRooms Alley
    0       3.0  Pave
    1       2.0   NaN
    2       4.0   NaN
    3       3.0   NaN
    

2.2.3 Convertir a formato tensorial

  • Todas las entradas en las entradas y salidas anteriores son de tipo numérico y se pueden convertir al formato tensorial. Cuando los datos están en formato tensorial, pueden manipularse aún más mediante funciones tensoriales.
    import torch
    
    x, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
    print(x, y)
    

2.3 Álgebra lineal

2.3.1 Escalares

  • Que contiene solo un valor se llama escalar (escalar). En este artículo, las variables escalares se representan con letras minúsculas ordinarias y los escalares se representan mediante tensores con un solo elemento.
    import torch
    
    x = torch.tensor(3.0)
    y = torch.tensor(2.0)
    
    print(x + y, x * y, x / y, x**y)
    

2.3.2 Vectores

  • Un vector puede verse como una lista de valores escalares llamados elementos o componentes del vector. Los vectores generalmente se indican con símbolos en negrita y minúsculas.
  • Los vectores están representados por tensores unidimensionales . En general, los tensores pueden tener una longitud arbitraria, dependiendo de las limitaciones de memoria de la máquina.
    import torch
    
    x = torch.arange(4)
    
    print(x)
    
  • Generalmente el vector de columna predeterminado es la orientación predeterminada del vector, vector x \mathbf{x}x se puede escribir como
    x = [ x 1 x 2 ⋮ xn ] \mathbf{x}=\begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix}X= X1X2Xnorte
Longitud, dimensiones y forma
  • Un vector es solo una matriz de números y, al igual que cada matriz tiene una longitud, también la tiene cada vector. En notación matemática, si digamos un vector x \mathbf{x}x consta de n escalares de valor real, que se pueden expresar comox ∈ R n \mathbf{x}\in\mathbb{R}^{n}XRn . La longitud de un vector generalmente se llama dimensión del vector.
    import torch
    
    x = torch.arange(4)
    print(len(x)) # 调用 Python 的内置 len() 函数来访问张量的长度
    # 当用张量表示一个向量(只有一个轴) 时,也可通过 .shape 属性访问向量长度
    # 形状(shape)是⼀个元素组,列出了张量沿每个轴的⻓度(维数)
    print(x.shape)
    

    Dimensión : La dimensión de un vector o eje se utiliza para representar la longitud del vector o eje, es decir, el número de elementos del vector o eje. Sin embargo, la dimensionalidad de un tensor se utiliza para indicar la cantidad de ejes que tiene el tensor. Entonces, en este sentido, la dimensión de un eje de un tensor es la longitud de ese eje.

2.3.3 Matriz

  • Los vectores generalizan escalares de orden cero a orden uno, y las matrices generalizan vectores de orden uno a orden dos, generalmente en negrita, letras mayúsculas y en código como tensores con dos ejes.
  • Cuando una matriz tiene el mismo número de filas y columnas, su forma se vuelve cuadrada y se llama matriz cuadrada.

A = [ a 11 a 12 ⋯ a 1 na 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ soy 1 soy 2 ⋯ amn ] \mathbf{A}=\begin{bmatrix}a_{11}&a_{12}&\ cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}&a_{m2}&\cdots&a_{mn}\end{bmatrix }A= a11a21ametro 1a12a22ametros 2a1 nortea2 norteamn

  • Al llamar a la función para crear una instancia de un tensor, se puede crear una matriz de forma mxn especificando dos componentes m y n.
  • Cuando se intercambian las filas y columnas de una matriz, el resultado se llama transposición de la matriz. Utilice AT para acceder a
    A ⊤ = [ a 11 a 21 … am 1 a 12 a 22 … am 2 ⋮ ⋮ ⋱ ⋮ a 1 na 2 n … amn ] \mathbf{A}^\top=\begin{bmatrix}a_{11}&a_{21}&\ldots&a_{m1}\\a_{12}&a_{22}&\ldots&a_{m2}\ \\ vdots&\vdots&\ddots&\vdots\\a_{1n}&a_{2n}&\ldots&a_{mn}\end{bmatrix}A= a11a12a1 nortea21a22a2 norteametro 1ametros 2amn
  • Como tipo especial de matriz cuadrada, una matriz simétrica A es igual a su transpuesta: A = A ⊤ \mathbf{A}=\mathbf{A}^{\top}A=A
    import torch
    
    A = torch.arange(20).reshape(5, 4)
    B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]]) # 对称矩阵
    
    print(A)
    print(A.T) # 访问矩阵的转置
    print(B == B.T)
    

2.3.4 Tensores

  • Los vectores son una generalización de escalares, las matrices son generalizaciones de vectores y también se pueden construir estructuras de datos con más ejes: los tensores son una forma general de describir matrices de n dimensiones con cualquier número de ejes . Por ejemplo, un vector es un tensor de rango 1 y una matriz es un tensor de rango 2 . Los tensores se indican con letras mayúsculas en fuentes especiales (por ejemplo, X, Y y Z). Su mecanismo de indexación es similar al de las matrices.
  • Los tensores se vuelven aún más importantes cuando comienzas a trabajar con imágenes, que vienen como matrices de n dimensiones con 3 ejes correspondientes a la altura, el ancho y un eje de canal , que representa los canales de color (rojo, verde y azul).
    import torch
    
    a = 2
    X = torch.arange(24).reshape(2, 3, 4)
    
    print(X)
    print(a + X)
    print(a * X)
    

2.3.5 Propiedades básicas de los algoritmos tensoriales

  • Cualquier operación unaria de elementos no cambia la forma de sus operandos. Del mismo modo, dados dos tensores con la misma forma, el resultado de cualquier operación binaria de elementos será un tensor de la misma forma.
  • La multiplicación por elementos de dos matrices se llama producto de Hadamard (símbolo matemático ⊙ \odot
    A ⊙ B = [ a 11 b 11 a 12 b 12 … a 1 nb 1 na 21 b 21 a 22 b 22 … a 2 nb 2 n ⋮ ⋮ ⋱ ⋮ soy 1 bm 1 soy 2 bm 2 … amnbmn ] \ mathbf{A}\odot\mathbf{B}=\begin{bmatrix}a_{11}b_{11}&a_{12}b_{12}&\ldots&a_{1n}b_{1n}\\a_{21}b_ {21}&a_{22}b_{22}&\ldots&a_{2n}b_{2n}\\\vdots&\vdots&\ddots&\vdots\\a_{m1}b_{m1}&a_{m2}b_{m2}& \ldots&a_{mn}b_{mn}\end{bmatrix}AB= a11b11a21b21ametro 1bmetro 1a12b12a22b22ametros 2bmetros 2a1 norteb1 nortea2 norteb2 norteamnbmn
  • Multiplicar o sumar un tensor por un escalar no cambiará la forma del tensor, donde cada elemento del tensor se sumará o multiplicará por el escalar.
    import torch
    
    A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
    B = A.clone() # 通过分配新内存,将 A 的一个副本分配给B
    
    # print(A + B)
    print(A * B)
    

2.3.6 Reducción de dimensionalidad

  • Puede representar la suma de elementos de cualquier tensor de forma, y ​​la suma de elementos en la matriz A se puede registrar como ∑ i = 1 m ∑ j = 1 naij \sum_{i=1}^{m}\sum_{j= 1}^{n }a_{ij}yo = 1mj = 1norteayo
  • De forma predeterminada, llamar a la función suma reduce las dimensiones del tensor a lo largo de todos los ejes, convirtiéndolo en un escalar . También es posible especificar a lo largo de qué eje se reduce el tensor mediante suma
    • Tomando la matriz como ejemplo, para reducir la dimensión ( eje 0 ) sumando los elementos de todas las filas , puede especificar eje = 0 al llamar a la función.
    • Especificar eje=1 reducirá la dimensionalidad sumando los elementos de todas las columnas ( eje 1 )
  • La cantidad asociada con la sumatoria es la media (o promedio), que se calcula dividiendo la suma por el número total de elementos. Función invocable para calcular el promedio de tensores de forma arbitraria
  • Las funciones que calculan la media también pueden reducir la dimensionalidad de los tensores a lo largo del eje especificado.
    import torch
    
    A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
    A_sum_axis0 = A.sum(axis=0)
    A_sum_axis1 = A.sum(axis=1)
    
    print(A.sum()) # 矩阵 A 中元素和
    print(A_sum_axis0)
    print(A_sum_axis1)
    print(A.mean())
    print(A.mean(axis=0))
    
suma no reducida
  • A veces es útil mantener constante el número de ejes al llamar a la función para calcular la suma o la media.
  • Si desea calcular la suma acumulada de los elementos de A a lo largo de algún eje, digamos eje = 0 (por fila), puede llamar a la función cumsum. Esta función no reduce la dimensionalidad del tensor de entrada a lo largo de ningún eje.
    import torch
    
    A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
    sum_A = A.sum(axis=1, keepdims=True) # 非降维(列)求矩阵 A 中元素和
    
    print(sum_A)
    print(A.cumsum(axis=0)) 
    

2.3.7 Producto escalar

  • Dados dos vectores x , y ∈ R d \mathbf{x},\mathbf{y}\in\mathbb{R}^{d}x ,yRd , su producto escalar es lasuma de productos por elementos en la misma posición x ⊤ y = ∑ i = 1 dxiyi \mathbf{x}^\top\mathbf{y}=\sum_{i=1}^dx_iy_iX y=yo = 1reXyoyyo
    import torch
    
    x = torch.arange(4, dtype=torch.float32)
    y = torch.ones(4, dtype=torch.float32)
    
    print(torch.dot(x, y))
    
  • Los productos escalares son útiles en muchas situaciones. Por ejemplo, dado un conjunto de vectores x ∈ R d \mathbf{x}\in\mathbb{R}^{d}XREl valor representado por d , y un conjunto dew ∈ R d \mathbf{w}\in\mathbb{R}^{d}wRd representa el peso. x\mathbf{x}Los valores en x se ponderan segúnw \mathbf{w}La suma ponderada de w se puede expresar como el producto escalar x ⊤ w \mathbf{x}^{\top}\mathbf{w}X w
    • Cuando el peso no es negativo y la suma es 1 (es decir, ( ∑ i = 1 dwi = 1 ) \left(\sum_{\boldsymbol{i}=1}^dw_{\boldsymbol{i}}=1\right )( yo = 1rewyo=1 ) ),el producto escalar representa el promedio ponderado
    • Después de normalizar los dos vectores a la unidad de longitud, el producto escalar representa el coseno de su ángulo

2.3.8 Producto matriz-vector

  • Defina la matriz A ∈ R m × n \mathbf{A}\in\mathbb{R}^{m\times n}ARm × n y vectorx ∈ R n {\mathbf{x}}\in\mathbb{R}^{n}XRn , producto matriz-vectorialA x \mathbf{Ax}Ax es un vector columna de longitud m
  • Utilice productos de matriz-vector para describir los cálculos complejos necesarios para resolver cada capa de una red neuronal dados los valores de la capa anterior
    A x = [ a 1 ⊤ a 2 ⊤ ⋮ am ⊤ ] x = [ a 1 ⊤ xa 2 ⊤ x ⋮ soy ⊤ x ] \mathbf{A}\mathbf{x}=\begin{bmatrix}\mathbf{a}_1^\top\\\mathbf{a}_2^\top\\\vdots\\\ mathbf{a}_m^\top\end{bmatrix}\mathbf{x}=\begin{bmatrix}\mathbf{a}_1^\top\mathbf{x}\\\mathbf{a}_2^\top\ mathbf{x}\\\vdots\\\mathbf{a}_m^\top\mathbf{x}\end{bmatrix}Hacha= a1a2ametro X= a1Xa2Xametrox
    import torch
    
    A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
    x = torch.arange(4, dtype=torch.float32)
    
    print(torch.mv(A, x)) # 使⽤ mv 函数执行矩阵-向量积
    

2.3.9 Multiplicación matriz-matriz

  • Supongamos dos A ∈ R n × k \mathbf{A}\in\mathbb{R}^{n\times k}ARn × kB ∈ R k × m \mathbf{B}\in\mathbb{R}^{k\times m}BRk × m
    A = [ a 11 a 12 ⋯ a 1 en 21 a 22 ⋯ a 2 k ⋮ ⋮ ⋱ ⋮ an 1 an 2 ⋯ ank ] , B = [ b 11 b 12 ⋯ b 1 mb 21 b 22 ⋯ b m ⋮ ⋮ ⋱ ⋮ bk 1 bk 2 ⋯ bkm ] \mathbf{A}=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1k}\\a_{21}&a_{22}&\cdots&a_ { 2k}\\\vdots&\vdots&\ddots&\vdots\\a_{n1}&a_{n2}&\cdots&a_{nk}\end{bmatrix},\quad\mathbf{B}=\begin{bmatrix}b_{ 11 }&b_{12}&\cdots&b_{1m}\\b_{21}&b_{22}&\cdots&b_{2m}\\\vdots&\vdots&\ddots&\vdots\\b_{k1}&b_{k2}&\ cdots&b_ {km}\end{bmatriz}A= a11a21an 1a12a22anorte 2a1k _a2 milank ,B= b11b21bk 1b12b22bk2_ _b1 metrob2 metrosbkilómetros

C = AB = [ a 1 ⊤ a 2 ⊤ ⋮ an ⊤ ] [ b 1 b 2 ⋯ bm ] = [ a 1 ⊤ b 1 a 1 ⊤ b 2 ⋯ a 1 ⊤ bma 2 ⊤ b 1 a 2 ⊤ b 2 ⋯ a 2 ⊤ bm ⋮ ⋮ ⋱ ⋮ an ⊤ b 1 an ⊤ b 2 ⋯ an ⊤ bm ] \mathbf{C}=\mathbf{A}\mathbf{B}=\begin{bmatrix}\mathbf{a}_1^ \top\\\mathbf{a}_2^\top\\\vdots\\\mathbf{a}_n^\top\end{bmatrix}\begin{bmatrix}\mathbf{b}_1&\mathbf{b}_2& \cdots&\mathbf{b}_m\end{bmatrix}=\begin{bmatrix}\mathbf{a}_1^\top\mathbf{b}_1&\mathbf{a}_1^\top\mathbf{b}_2&\ cdots&\mathbf{a}_1^\top\mathbf{b}_m\\\mathbf{a}_2^\top\mathbf{b}_1&\mathbf{a}_2^\top\mathbf{b}_2&\cdots& \mathbf{a}_2^\top\mathbf{b}_m\\\vdots&\vdots&\ddots&\vdots\\\mathbf{a}_n^\top\mathbf{b}_1&\mathbf{a}_n^\ arriba\mathbf{b}_2&\cdots&\mathbf{a}_n^\top\mathbf{b}_m\end{bmatrix}C=AB= a1a2anorte [b1b2bm]= a1b1a2b1anorteb1a1b2a2b2anorteb2a1bma2bmanortebm

  • Multiplicación matriz-matriz AB \mathbf{AB}Se considera que AB simplemente realiza m productos de matriz-vector
    import torch
    
    A = torch.arange(20, dtype=torch.float32).reshape(5, 4)
    B = torch.ones(4, 3)
    
    print(torch.mm(A, B)) # 使⽤ mm 函数执行矩阵-矩阵乘法
    

2.3.10 Norma

  • Informalmente, la norma de un vector es su tamaño. El concepto de tamaño considerado aquí no implica dimensiones, sino el tamaño de los componentes.

  • En álgebra lineal, una norma vectorial es una función que asigna un vector a un escalar ffF. _ Dado cualquier vectorx \mathbf{x}x , la norma vectorial debe satisfacer algunas propiedades

    • La primera propiedad es: Si por factor constante α \alphaα escalatodos los elementos del vector, y su norma también se escala por el valor absoluto del mismo factor constante
      f ( α x ) = ∣ α ∣ f ( x ) f(\alpha\mathbf{x})=|\alpha |f(\mathbf{x})f ( αx ) _=α f ( x )
    • La segunda propiedad es la desigualdad del triángulo
      f ( x + y ) ≤ f ( x ) + f ( y ) f(\mathbf{x}+\mathbf{y})\leq f(\mathbf{x})+f( \mathbf{y})f ( x+y )f ( x )+f ( y )
    • La tercera propiedad es que la norma debe ser no negativa (la norma es al menos 0, si y sólo si el vector está compuesto de todos 0)
      f ( x ) ≥ 0 f(\mathbf{x})\geq0f ( x )0
  • La distancia euclidiana es L 2 L_2l2Norma , asumiendo un vector n-dimensional x \mathbf{x}Los elementos en x son x 1 , . . . , xn x_1,...,x_nX1,... ,Xnorte, cuyo L 2 L_2l2La norma es la raíz cuadrada de la suma de los cuadrados de los elementos vectoriales.

    • L 2 L_2l2El subíndice 2 a menudo se omite en la norma, es decir ∥ x ∥ \|\mathbf{x}\|x es equivalente a∥ x ∥ 2 \|\mathbf{x}\|_2x 2
      ∥ x ∥ 2 = ∑ i = 1 nxi 2 \|\mathbf{x}\|_2=\sqrt{\sum_{i=1}^nx_i^2}x 2=yo = 1norteXi2
  • L 2 L_2 se usa con más frecuencia en el aprendizaje profundol2El cuadrado de la norma también suele encontrarse con L 1 L_1l1Norma, que se expresa como la suma de los valores absolutos de los elementos vectoriales
    ∥ x ∥ 1 = ∑ i = 1 n ∣ xi ∣ \|\mathbf{x}\|_1=\sum_{i=1}^n |x_i|x 1=yo = 1norte∣x _yo

  • L 2 L_2l2Norma y L 1 L_1l1Las normas son todas más generales L p L_plpSea
    ∥ x ∥ p = ( ∑ i = 1 n ∣ xi ∣ p ) 1 / p \|\mathbf{x}\|_p=\left(\sum_{i=1}^n|x_i|^ p\right )^{1/p}x p=(yo = 1norte∣x _yopag )1/ p

  • Similar a la L 2 L_2 del vectorl2Norma, matriz X ∈ R m × n \mathbf{X}\in\mathbb{R}^{m\times n}XRLa norma de Frobenius de m × n es la raíz cuadrada de la suma de los cuadrados de los elementos de la matriz

    • La norma de Frobenius satisface todas las propiedades de la norma vectorial, es como L 2 L_2 del vector matriciall2范数
      ∥ X ∥ F = ∑ i = 1 m ∑ j = 1 nxij 2 \|\mathbf{X}\|_F=\sqrt{\sum_{i=1}^m\sum_{j=1}^nx_ {ij}^2}X F=yo = 1mj = 1norteXyo2
    import torch
    
    u = torch.tensor([3.0, 4.0])
    
    print(torch.norm(u))     # 计算 L2 范数
    print(torch.abs(u).sum)  # 计算 L1 范数
    print(torch.norm(torch.ones((4, 9)))) # 计算矩阵范数
    

    En el aprendizaje profundo, a menudo se intenta resolver problemas de optimización: maximizar la probabilidad asignada a los datos observados y minimizar la distancia entre las predicciones y las observaciones verdaderas. Los elementos (como palabras, productos o artículos de noticias) se representan mediante vectores de modo que la distancia entre elementos similares se minimice y la distancia entre elementos diferentes se maximice. objetivo, generalmente expresado como la norma

2.4 Cálculo

  • El método de aproximación es el origen del cálculo integral . Otra rama del cálculo, la aplicación más importante del cálculo diferencial en el cálculo diferencial son los problemas de optimización.

inserte la descripción de la imagen aquí

  • En el aprendizaje profundo, los modelos se "entrenan" actualizándolos continuamente para que mejoren cada vez más a medida que ven más y más datos. A menudo, mejorar significa minimizar una función de pérdida . El resultado final es un modelo que funciona bien con datos nunca antes vistos. Pero "entrenar" un modelo sólo puede ajustar el modelo a los datos que realmente se pueden ver . Por lo tanto, la tarea de ajustar un modelo se puede descomponer en dos problemas clave
    • Optimización: el proceso de ajustar un modelo a los datos observados.
    • Generalización: utilice principios matemáticos y la sabiduría de los profesionales para guiar la generación de modelos que sean más efectivos que el conjunto de datos utilizado para el entrenamiento.

2.4.1 Derivados y diferenciales

  • En el aprendizaje profundo, es común elegir una función de pérdida que sea diferenciable con respecto a los parámetros del modelo. En resumen, para cada parámetro, si aumenta o disminuye este parámetro en una cantidad infinitesimal, puede saber qué tan rápido aumentará o disminuirá la pérdida.

  • Supongamos que hay una función f : R → R f:\mathbb{R}\to\mathbb{R}F:RR , cuyas entradas y salidas son escalares. siffLa derivada de f
    existe y este límite se define como f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h f'(x)=\lim_{h\to0}\frac {f(x+h)-f(x)}hF' (x)=h 0límhf ( x+h )f ( x )

  • Si f ′ ( a ) f^{\prime}(a)F (a)existe, entonces se llamafff enaaa es diferenciable. siffSi f es derivable en cada número en un intervalo, entonces esta función es derivable en este intervalo. La derivadaf ′ ( a ) f^{\prime}(a)F (a)se interpreta comof ( a ) f(a)f ( a ) relativo axxLa tasa de cambio instantánea de x . La llamada tasa de cambio instantánea se basa enxxcambio en x hhh yhhh está cerca de 0

  • Varios símbolos equivalentes de la derivada
    f ′ ( x ) = y ′ = dydx = dfdx = ddxf ( x ) = D f ( x ) = D xf ( x ) f'(x)=y'=\frac{dy} {dx }=\frac{df}{dx}=\frac{d}{dx}f(x)=Df(x)=D_xf(x)F' (x)=y=d xd y=d xdf=d xref ( x )=D f ( x )=Dxf ( x )

  • donde ddx\frac{d}{dx}d xrey ddD esun operador diferencial, lo que significa operación diferencial.Las reglas diferenciales comunesson las siguientes:
    ddx [ C f ( x ) ] = C ddxf ( x ) \frac d{dx}[Cf(x)]=C\frac d{ dx}f(x)d xre[ C f ( x )]=Cd xref ( x )

ddx [ f ( x ) + g ( x ) ] = ddxf ( x ) + ddxg ( x ) \frac d{dx}[f(x)+g(x)]=\frac d{dx}f(x) +\frac d{dx}g(x)d xre[ f ( x )+gramo ( x )]=d xref ( x )+d xreg ( x )

ddx [ f ( x ) g ( x ) ] = f ( x ) ddx [ g ( x ) ] + g ( x ) ddx [ f ( x ) ] \frac{d}{dx}[f(x)g( x)]=f(x)\frac{d}{dx}[g(x)]+g(x)\frac{d}{dx}[f(x)]d xre[ f ( x ) g ( x )]=f ( x )d xre[ gramo ( x )]+g ( x )d xre[ f ( x )]

ddx [ f ( x ) g ( x ) ] = g ( x ) ddx [ f ( x ) ] − f ( x ) ddx [ g ( x ) ] [ g ( x ) ] 2 \frac{d}{dx} \left[\frac{f(x)}{g(x)}\right]=\frac{g(x)\frac{d}{dx}[f(x)]-f(x)\frac{ d}{dx}[g(x)]}{[g(x)]^2}d xre[g ( x )f ( x )]=[ g ( x ) ]2g ( x )d xre[ f ( x )]f ( x )d xre[ g ( x ) ]

  • Debajo de f ( x ) = 3 x 2 − 4 xf(x)=3x^2-4xf ( x )=3x _24 x como ejemplo para explicar mejor la derivada
import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return 3 * x ** 2 - 4 * x

def numerical_lim(f, x, h):
    return (f(x + h) - f(x)) / h

# 通过令 x = 1 并让 h 接近 0,则 numerical_lim 结果接近 2
h = 0.1
for i in range(5):
    # 将变量 h 格式化为浮点数,并保留小数点后五位
    print(f'h={
      
      h:.5f}, numerical limit={
      
      numerical_lim(f, 1, h):.5f}')
    h *= 0.1

# 定义 set_figsize 函数来设置图表大小
    # 参数 figsize 是一个长度为 2 的元组,用于指定图形的宽度和高度
    # plt.rcParams 是 Matplotlib 库中的一个全局变量,它是一个字典对象,存储了一些全局默认值
    # figure.figsize 是其中一个键值对,用于设置图形的尺寸,默认值为 (6.0, 4.0)
def set_figsize(figsize=(3.5, 2.5)):
    plt.rcParams['figure.figsize'] = figsize  # 修改全局默认值 figsize

# 用于设置由 matplotlib 生成图表的轴的属性
# axes:图形的轴对象(坐标轴)  legend:图例
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):
    axes.set_xlabel(xlabel)  # x 轴的标签
    axes.set_ylabel(ylabel)  
    axes.set_xscale(xscale)  # x 轴的刻度缩放方式,可以是线性(linear)或对数(log)
    axes.set_yscale(yscale)
    axes.set_xlim(xlim)      # x 轴的范围
    axes.set_ylim(ylim)      
    if legend:               # 如果 legend 参数不为空
        axes.legend(legend)  # 则调用轴对象的 legend() 方法设置图例
    axes.grid()              # 使用 grid() 方法在图形中加入网格

# 定义一个 plot 函数来简洁地绘制多条曲线
# fmts:曲线的样式,可以是一条曲线的样式(字符串)或多条曲线的样式(字符串组成的列表)
    # ('-','m--'):这个字符串元组表示一个紫色 (m) 的虚线 (--) 
    # ('g-.'):这个字符串元组表示一个绿色 (g) 的点划线 (-.) 
    # ('r:'):这个字符串元组表示一个红色 (r) 的点线 (:) 
def plot(X, Y=None, xlabel=None, ylabel=None, legend=None, xlim=None,
        ylim=None, xscale='linear', yscale='linear',
        fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None):

    # 绘制数据点
    if legend is None:
        legend = []       # 设置图例为空列表
    set_figsize(figsize)  # 设置图标大小
    
    # 如果 X 只有⼀个轴,则输出 True
    def has_one_axis(X):
        # 判断 X 对象是否有一个属性 ndim,并且是否等于 1(即 X 是否为一维对象)
        # 判断 X 是否为 list 类型的对象,并且第一个元素是否没有属性 __len__(即判断 X 的第一个元素是否是一维对象)
        return (hasattr(X, "ndim") and X.ndim == 1 or isinstance(X, list)
                and not hasattr(X[0], "__len__"))
    
    if has_one_axis(X):    # 如果 X 只有一个轴
        X = [X]            # 则将 X 放入一个列表中
    if Y is None:
        X, Y = [[]] * len(X), X  # X、Y 的初始值都是包含有 len(X) 个空列表的列表
    elif has_one_axis(Y):  # 如果 Y 只有一个轴
        Y = [Y]
    if len(X) != len(Y):   # 如果 X 和 Y 长度不等,则将 X 复制多份以匹配 Y 的长度
        X = X * len(Y)

    fig, ax = plt.subplots()  # 创建一个新的图形窗口,并返回一个包含 FigFig 对象和 Axes 对象的元组(fig, ax)
    # 遍历 X、Y 和 fmts 三个列表,并使用 zip 函数将它们中的元素一一对应起来
    for x, y, fmt in zip(X, Y, fmts):
        if len(x):              # x 列表不为空
            ax.plot(x, y, fmt)  # 则调用 ax.plot() 函数绘制 x 和 y 之间的数据点,并使用 fmt 参数指定样式
        else:                   # 如果 x 列表为空
            ax.plot(y, fmt)     # 则说明传入的是一个一维的 y 数组
    set_axes(ax, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)
    plt.show()  # 显示图形窗口

# 绘制函数 f(x) 及其在 x = 1 处的切线 y = 2x - 3,其中系数 2 是切线的斜率
x = np.arange(0, 3, 0.1)  # 定义一个从 0 到 3,步长为 0.1 的数组 x
plot(x, [f(x), 2 * x - 3], 'x', 'f(x)', legend=['f(x)', 'Tangent line (x=1)'])
# 输出
h=0.10000, numerical limit=2.30000
h=0.01000, numerical limit=2.03000
h=0.00100, numerical limit=2.00300
h=0.00010, numerical limit=2.00030
h=0.00001, numerical limit=2.00003

inserte la descripción de la imagen aquí

2.4.2 Derivadas parciales

  • En el aprendizaje profundo, las funciones suelen depender de muchas variables. Por tanto, es necesario extender la idea de diferenciación a funciones multivariadas.

  • y = f ( x 1 , x 2 , … , xn ) y=f(x_{1},x_{2},\ldots,x_{n})y=f ( x1,X2,,Xnorte) esunfunción de n variables. yyy sobre la seccióniii parámetrosxi x_iXyo的偏导数 (derivada parcial) 为
    ∂ y ∂ xi = lim ⁡ h → 0 f ( x 1 , … , xi − 1 , xi + h , xi + 1 , … , xn ) − f ( x 1 , … , xi , … , xn ) h \begin{aligned}\frac{\partial y}{\partial x_i}=\lim\limits_{h\to0}\frac{f(x_1,\ldots,x_{i-1}, x_i+h,x_{i+1},\ldots,x_n)-f(x_1,\ldots,x_i,\ldots,x_n)}{h}\end{alineado}xyo∂y _=h 0límhf ( x1,,Xyo 1,Xyo+h ,Xyo + 1,,Xnorte)f ( x1,,Xyo,,Xnorte)

  • Varios símbolos equivalentes de derivadas parciales
    ∂ y ∂ xi = ∂ f ∂ xi = fxi = fi = D if = D xif \begin{aligned}\frac{\partial y}{\partial x_i}=\frac{\partial f} {\partial x_i}=f_{x_i}=f_i=D_if=D_{x_i}f\end{alineado}xyo∂y _=xyo∂f _=FXyo=Fyo=DyoF=DXyof

2.4.3 Degradado

  • Las derivadas parciales de una función multivariada con todas sus variables se pueden concatenar para obtener el vector gradiente de la función . Específicamente, sea la función f : R n → R f:\mathbb{R}^n\to\mathbb{R}F:RnorteLa entrada a R es unnnVector de n dimensiones $\mathbf{x}=[x_1,x_2,\ldots,x_n]^\top $, y la salida es un escalar . funciónf (x) f(x)f ( x ) relativo axxEl gradiente de x es un vector que contienennn个偏导数的向量
    ∇ xf ( x ) = [ ∂ f ( x ) ∂ x 1 , ∂ f ( x ) ∂ x 2 , … , ∂ f ( x ) ∂ xn ] ⊤ \nabla_{\mathbf{x} }f(\mathbf{x})=\left[\frac{\partial f(\mathbf{x})}{\partial x_1},\frac{\partial f(\mathbf{x})}{\partial x_2},\ldots,\frac{\partial f(\mathbf{x})}{\partial x_n}\right]^\topxf ( x )=[x1∂f ( x ) _,x2∂f ( x ) _,,xnorte∂f ( x ) _]
  • asumir xxx esnnVector de n dimensiones, las siguientes reglas se usan a menudo al diferenciar funciones multivariadas
    ∇ x A x = A ⊤ \nabla_{\mathbf{x}}\mathbf{A}\mathbf{x}=\mathbf{A}^\topxHacha=A

∇ xx ⊤ A = A \nabla_{\mathbf{x}}\mathbf{x}^{\top}\mathbf{A}=\mathbf{A}xX UN=A

∇ xx ⊤ A x = ( A + A ⊤ ) x \nabla_{\mathbf{x}}\mathbf{x}^\top\mathbf{A}\mathbf{x}=(\mathbf{A}+\mathbf {A}^\arriba)\mathbf{x}xX Hacha=( Un+A )x

∇ x ∥ x ∥ 2 = ∇ xx ⊤ x = 2 x \nabla_x\|\mathbf{x}\|^2=\nabla_x\mathbf{x}^\top\mathbf{x}=2\mathbf{x}xx 2=xX⊤x _=2x _

2.4.4 La regla de la cadena

  • El método anterior puede resultar difícil para encontrar el gradiente, porque en el aprendizaje profundo las funciones multivariadas suelen ser compuestas, por lo que es difícil aplicar cualquiera de las reglas anteriores para diferenciar estas funciones. Pero la regla de la cadena se puede utilizar para diferenciar funciones compuestas.
    • Consideremos primero las funciones univariadas. Supongamos que la función y = f ( u ) y = f(u)y=f ( u ) yu = g ( x ) u = g(x)tu=g ( x ) son todos diferenciables, según la regla de la cadena
      dydx = dydududx \frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}d xd y=de tid yd xde _
    • Considere el caso en el que una función tiene un número arbitrario de variables. Suponiendo una función diferenciable yyy有变量u 1 , u 2 , ... , um u_{1},u_{2},\ldots,u_{m}tu1,tu2,,tum, donde cada función diferenciable ui u_ituyoHay variables x 1 , x 2 , … , xn x_{1},x_{2},\ldots,x_{n}X1,X2,,Xnorte. donde yyyx 1 , x 2 , … , xn x_{1},x_{2},\ldots,x_{n}X1,X2,,Xnorte的函数
      ∂ y ∂ xi = ∂ y ∂ u 1 ∂ u 1 ∂ xi + ∂ y ∂ u 2 ∂ u 2 ∂ xi + ⋯ + ∂ y ∂ um ∂ um ∂ xi \frac{\partial y}{\partial x_i }=\frac{\partial y}{\partial u_1}\frac{\partial u_1}{\partial x_i}+\frac{\partial y}{\partial u_2}\frac{\partial u_2}{\partial x_i }+\cdots+\frac{\partial y}{\partial u_m}\frac{\partial u_m}{\partial x_i}xyo∂y _=tu1∂y _xyotu1+tu2∂y _xyotu2++tum∂y _xyotum

2.5 Diferenciación automática

  • Los marcos de aprendizaje profundo aceleran los derivados computando automáticamente los derivados, lo que se conoce como diferenciación automática . En la práctica, de acuerdo con el modelo diseñado, el sistema construirá un gráfico computacional (gráfico computacional) para rastrear qué datos se calculan y se combinan con qué operaciones para generar resultados. La diferenciación automática permite al sistema propagar gradientes hacia atrás posteriormente . La retropropagación aquí significa rastrear todo el gráfico computacional, completando las derivadas parciales con respecto a cada parámetro.

2.5.1 Un ejemplo sencillo

  • Supongamos que la función de par y = 2 x ⊤ xy=2\mathbf{x}^{\top}\mathbf{x}y=2x _ xcon respecto al vector columnax \mathbf{x}derivada de x
    import torch
    
    # 计算 y 关于 x 的梯度之前,需要⼀个地方来存储梯度,不会在每次对一个参数求导时都分配新的内存
    # 一个标量函数关于向量 x 的梯度是向量,并且与 x 具有相同的形状
    x = torch.arange(4.0, requires_grad=True)  # 等价于 x.requires_grad_(True) 
    y = 2 * torch.dot(x, x)
    y.backward()  # 调用反向传播函数来自动计算 y 关于 x 每个分量的梯度
    
    print(y)
    print(x.grad)  # 默认值是 None
    print(x.grad == 4 * x)  # y = 2(x^T)x 关于 x 的梯度应为 4x,此行代码为验证梯度计算是否正确
    
    # 输出
    tensor(28., grad_fn=<MulBackward0>)
    tensor([ 0.,  4.,  8., 12.])
    tensor([True, True, True, True])
    

2.5.2 Propagación hacia atrás para variables no escalares

  • y y Cuando y no es un escalar, el vectoryyy con respecto al vectorxxLa interpretación más natural de la derivada de x es una matriz. Para yyde alto orden y alta dimensióny yxxx , el resultado de la derivación puede ser un tensor de orden superior
  • Pero cuando se llama al cálculo inverso del vector, generalmente se intenta calcular la derivada de la función de pérdida de cada componente en un lote de muestras de entrenamiento. El propósito aquí no es calcular la matriz de diferenciación, sino calcular la suma derivada parcial de cada muestra del lote por separado.
  • El propósito de la retropropagación es calcular yyy sobrexxLa derivada de x , es decir, encontrardy/dx dy/dxd y / d x . Según la regla de la cadena,dy / dx dy/dxd y / d x es igual a/ dz dy/dzd y / d z multiplicado pordz / dx dz/dxd z / d x , dondezzzyyy yxxLa variable intermedia de x . Además, debido ayyy porxxLa derivada parcial de x es un vector, por lo que el resultado devuelto por la propagación hacia atrás también es un vectory el resultado se almacena enx.grad x.gradx .g r a d _ _
    import torch
    
    x = torch.arange(4.0, requires_grad=True)
    y = 2 * torch.dot(x, x)
    y.backward()
    
    # 对⾮标量调⽤ backward 需要传⼊⼀个 gradient 参数,该参数指定微分函数关于 self 的梯度
    x.grad.zero_()  # 在默认情况下,PyTorch 会累积梯度,因此需要清除之前的值
    y = x * x
    # 给定 torch.ones(len(x)) 作为反向传播的输入,意味着将一个与 x 的长度相同的全 1 向量作为 y 对于自己的导数进行反向传播
    # 根据链式法则,这相当于求 dy/dy,即对 y 求导。由于 y 是一个函数,因此返回值将是与 x 的导数相关的向量
    y.sum().backward()  # 等价于 y.backward(torch.ones(len(x)))
    
    print(x.grad)
    
    # 输出
    tensor([0., 2., 4., 6.])
    

2.5.3 Cálculo del gradiente del flujo de control de Python

  • Un beneficio de usar la diferenciación automática es que incluso si construir el gráfico computacional de una función requiere un flujo de control a través de Python (por ejemplo, condicionales, bucles o llamadas a funciones arbitrarias), aún se pueden calcular los gradientes de las variables resultantes. En el código siguiente, tanto el número de iteraciones del bucle while como el resultado de la declaración if dependen del valor de la entrada a.
    import torch
    
    def f(a):
        b = a * 2
        while b.norm() < 1000:
            b = b * 2
            if b.sum() > 0:
                c = b
            else:
                c = 100 * b
            return c
    
    a = torch.randn(size=(), requires_grad=True)
    d = f(a)
    d.backward()
    
    print(a.grad == d / a)
    
    # 输出
    tensor(True)
    

2.6 Probabilidad

2.6.1 Teoría básica de la probabilidad

  • Supongamos que tira un dado y quiere saber cuáles son las probabilidades de ver un 1. Si los dados son justos, entonces los seis resultados {1,...,6} tienen la misma probabilidad de ocurrir, por lo que podemos decir que la probabilidad de 1 que ocurre es 1/6. La ley de los grandes números nos dice que esta estimación se acerca cada vez más a la verdadera probabilidad subyacente a medida que aumenta el número de lanzamientos.
  • En estadística, el proceso de extraer muestras de una distribución de probabilidad se llama muestreo.
    • En términos generales, la distribución puede considerarse como la distribución de probabilidad de eventos.
    • Una distribución que asigna probabilidades a algunas elecciones discretas se llama distribución multinomial.
  • Para extraer una muestra para tirar un dado, simplemente pase un vector de probabilidades. Genere otro vector de la misma longitud: su valor en el índice i es el número de apariciones de i en los resultados muestreados. Se pueden simular 1000 lanzamientos. Luego cuente cuántas veces se ha acertado cada número después de 1000 lanzamientos y calcule la frecuencia relativa como una estimación de la probabilidad real.
    import torch
    from torch.distributions import multinomial
    
    fair_probs = torch.ones([6]) / 6
    counts = multinomial.Multinomial(1000, fair_probs).sample()
    print(counts / 1000)  # 相对频率作为估计值
    
    # 输出(每个结果的真实概率约为 0.167)
    tensor([0.1600, 0.1840, 0.1700, 0.1650, 0.1670, 0.1540])
    
  • Se puede ver que estas probabilidades convergen a las probabilidades reales con el tiempo para 500 conjuntos de experimentos con 10 muestras en cada conjunto. Cada línea continua corresponde a uno de los 6 valores de los dados y da la probabilidad estimada de que los dados tomen ese valor después de cada serie de experimentos. Estas 6 curvas sólidas convergen hacia la probabilidad real cuando se obtienen más datos a través de más experimentos.
    import torch
    import matplotlib.pyplot as plt
    from torch.distributions import multinomial
    
    fair_probs = torch.ones([6]) / 6
    counts = multinomial.Multinomial(10, fair_probs).sample((500,))
    cum_counts = counts.cumsum(dim=0)
    estimates = cum_counts / cum_counts.sum(dim=1, keepdim=True)
    
    def set_figsize(figsize=(6, 4.5)):
        plt.rcParams['figure.figsize'] = figsize
    
    for i in range(6):
        plt.plot(estimates[:, i].numpy(), label=("P(die=" + str(i + 1) + ")"))
    
    set_figsize((6, 4.5))
    plt.axhline(y=0.167, color='black', linestyle='dashed')
    plt.xlabel('Groups of experiments')
    plt.ylabel('Estimated probability')
    plt.legend()
    plt.show()  # plt.legend() 需要调用 plt.show() 来显示图例
    

inserte la descripción de la imagen aquí

Axiomas de la teoría de la probabilidad
  • Cuando se trata de lanzar dados, el conjunto S = { 1 , 2 , 3 , 4 , 5 , 6 } \mathcal{S}=\{1,2,3,4,5,6\}S={ 1 ,2 ,3 ,4 ,5 ,6 } se llama espacio muestral (espacio muestral) o espacio de resultados (espacio de resultados), donde cada elemento es un resultado. Un evento es un resultado aleatorio de un conjunto dado de espacios muestrales. Por ejemplo, "ver un 5" ({5}) y "ver un número impar" ({1,3,5}) son eventos válidos para tirar un dado.
  • Se puede considerar la probabilidad como una función que asigna un conjunto a un valor verdadero . En un espacio muestral dado S \mathcal{S}S , eventoAALa probabilidad de A se expresa comoP ( A ) P(A)P ( A ) , satisface lo siguiente
    • Para cualquier evento AAA , cuya probabilidad nunca es negativa, es decir,P ( A ) > 0 P(A) > 0P ( A )>0
    • La probabilidad de todo el espacio muestral es 1, es decir, P ( S ) = 1 P(\mathcal{S}) = 1P ( S )=1
    • Para eventos mutuamente excluyentes: $P(A_1\cup A_2\cup A_3\cup…) = P(A_1)+P(A_2)+P(A_3)+\cdots $
Variables aleatorias
  • En el experimento aleatorio de lanzar scatterers, se introduce el concepto de variable aleatoria (variable aleatoria). Una variable aleatoria puede ser casi cualquier número y puede tomar un valor entre un conjunto de posibilidades en un experimento aleatorio. Considere una variable aleatoria XXX , cuyo valor está en el espacio muestralS = { 1 , 2 , 3 , 4 , 5 , 6 } \mathcal{S}=\{1,2,3,4,5,6\}S={ 1 ,2 ,3 ,4 ,5 ,6 } pulg. El evento "ver un 5" se puede expresar como{ X = 5 } {\{X = 5\}}{ X=5 } oX = 5 X = 5X=5 , su probabilidad se expresa comoP ( { X = 5 } ) P(\{X=5\})P ({ X=5 }) oP ( X = 5 ) P(X=5)P ( X=5 )

    • P ( X ) P(X) puede serP(X) 表示为随机变量 X X X 上的分布 (distribution),分布表示 X X X 获得某⼀值的概率
    • 可以用 P ( a ) P(a) P(a) 表示随机变量取值 a a a 的概率
  • 由于概率论中的事件是来自样本空间的一组结果,因此可以为随机变量指定值的可取范围。例如, P ( 1 ≤ X ≤ 3 ) P(1\leq X\leq3) P(1X3) 表示事件 { 1 ≤ X ≤ 3 } \{1\leq X\leq3\} { 1X3},即 { X = 1 , 2 , o r , 3 } \{X=1,2,\mathrm{or},3\} { X=1,2,or,3} 的概率。等价地, P ( 1 ≤ X ≤ 3 ) P(1\leq X\leq3) P(1X3) 表示随机变量 X X X { 1 , 2 , 3 } \{1,2,3\} { 1,2,3} 中取值的概率

  • 离散(discrete)随机变量(如骰⼦的每⼀⾯)和连续(continuous)随机变量(如人的体重和身高)之间存在微妙的区别,以下小节主要考虑离散空间中的概率,连续随机变量的概率参考:连续随机变量

2.6.2 处理多个随机变量

联合概率
  • 联合概率 (joint probability) P ( A = a , B = b ) P(A = a,B = b) P(A=a,B=b)
    • 给定任意值 a a a b b b A = a A = a A=a B = b B = b B=La probabilidad de que b satisfaga ambos
    • para cualquier aaa ybbEl valor de b satisface: P ( A = a , B = b ) ≤ P ( A = a ) P(A=a,B=b)\leq P(A=a)P ( A=un ,B=segundo )P ( A=a )P ( A = a , B = b ) ≤ P ( B = b ) P(A=a,B=b)\leq P(B=b)P ( A=un ,B=segundo )PAG ( B=segundo )
La probabilidad condicional
  • La desigualdad de probabilidad conjunta conduce a una relación interesante: 0 ≤ P ( A = a , B = b ) P ( A = a ) ≤ 1 0\leq\frac{P(A=a,B=b)}{P (A=a)}\leq10PAG ( A = a )P ( A = a , B = b )1 , llame a esta relaciónprobabilidad condicional (probabilidad condicional)y useP ( B = b ∣ A = a ) P(B=b\mid A=a)PAG ( B=bA=a ) significa:A = a A = aA=Bajo la premisa de que a ha sucedido,B = b B = bB=probabilidad de que b suceda
Teorema de Bayes
  • Según la probabilidad condicional y la regla de multiplicación
    P ( A , B ) = P ( B ∣ A ) P ( A ) P(A,B)=P(B\mid A)P(A)P ( A ,B )=PAG ( BA ) P ( A )

P ( A , B ) = P ( A ∣ B ) P ( B ) P(A,B)=P(A\mid B)P(B)P ( A ,B )=P ( AB ) P ( B )

  • Entonces obtenga el teorema de Bayes
    P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A\mid B)=\frac{P(B\mid A)P(A)} {P (B)}P ( AB )=P ( B )PAG ( BA ) P ( A )

    P(A,B)P(A,B)P ( A ,B ) es unadistribución conjunta,P ( A ∣ B ) P(A\mid B)P ( AB ) es unadistribución condicional

Marginación
  • Para poder sumar probabilidades de eventos, se requiere la regla de suma, a saber, BBLa probabilidad de B es equivalente a calcularAATodas las opciones posibles de A y agregan las probabilidades conjuntas de todas las opciones, lo que también se llamamarginación. La probabilidad o distribución de resultados marginados se llama probabilidad marginal o distribución marginal
    P ( B ) = ∑ AP ( A , B ) P(B)=\sum_AP(A,B)P ( B )=AP ( A ,B )
independencia
  • Si dos variables aleatorias AAA yBBB es independiente, lo que implica que el eventoAALa aparición de A yBB.La ocurrencia del evento B es irrelevante.
    • En este caso, es común expresarlo como A ⊥ BA\perp BAB
    • Según el teorema de Bayes, P ( A ∣ B ) = P ( A ) P(A\mid B)=P(A) se puede obtener inmediatamenteP ( AB )=P ( A )
  • Dado P ( A ∣ B ) = P ( A , B ) P ( B ) = P ( A ) P(A\mid B)=\frac{P(A,B)}{P(B)}=P( A)P ( AB )=P ( B )P ( A , B )=P ( A )等了于P ( A , B ) = P ( A ) P ( B ) P(A,B)=P(A)P(B)P ( A ,B )=P ( A ) P ( B )
    • Por tanto, dos variables aleatorias son independientes si y sólo si: la distribución conjunta de dos variables aleatorias es el producto de sus respectivas distribuciones
  • Dada otra variable aleatoria CCCuando C , dos variables aleatoriasAAA yBBB es condicionalmente independiente si y sólo siP ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C ) P(A,B\mid C)=P(A\mid C)P(B\ medio C)P ( A ,Bc )=P ( AC ) P ( Bc )
    • Esta situación se expresa como A ⊥ B ∣ CA\perp B\mid CABC

2.6.3 Expectativa y varianza

  • Para generalizar las características clave de una distribución de probabilidad, se necesita alguna medida. Una variable aleatoria XXLa expectativa de X (expectativa, o promedio (promedio))
    E [ X ] = ∑ xx P ( X = x ) E[X]=\sum_xxP(X=x)mi [ X ]=Xx P ( X=x )

  • Cuando la función f ( x ) f(x)La entrada de f ( x ) es de la distribuciónPPCuando la variable aleatoria extraída en P , f ( x ) f(x)El valor esperado de f ( x )
    es E x ∼ P [ f ( x ) ] = ∑ xf ( x ) P ( x ) E_{x\sim P}[f(x)]=\sum_xf(x)P( X)mix∼P _ _[ f ( x )]=Xf ( x ) P ( x )

  • En muchos casos, es deseable medir una variable aleatoria XXEl sesgo de X respecto de su valor esperado, que puede cuantificarse mediante la varianza
    V ar [ X ] = E [ ( X − E [ X ] ) 2 ] = E [ X 2 ] − E [ X ] 2 \mathrm{Var }[X ]=E\izquierda[(XE[X])^2\derecha]=E[X^2]-E[X]^2 [ X ]=mi[ ( Xmi [ X ] )2 ]=mi [ x2 ]mi [ X ]2

    La raíz cuadrada de la varianza se llama desviación estándar.

  • La varianza de una función de una variable aleatoria es una medida de: cuando se muestrean diferentes valores de xx de la distribución de la variable aleatoriaCuando x , el valor de la función se desvía del grado esperado de la función
    Var ⁡ [ f ( x ) ] = E [ ( f ( x ) − E [ f ( x ) ] ) 2 ] \operatorname{Var}[f(x )] =E\izquierda[\izquierda(f(x)-E[f(x)]\right)^2\right]Var [ f ( x )]=mi[ ( f ( x )mi [ f ( x )] )2 ]

Supongo que te gusta

Origin blog.csdn.net/qq_42994487/article/details/132286834
Recomendado
Clasificación