Introducción al aprendizaje automático (2) ———————— Unidad lineal y descenso de gradiente

         A través del último artículo, aprendimos un perceptrón simple, aprendimos sobre la función escalonada (preferiblemente llamada dos clasificación, simple y clara jaja), y las reglas del perceptrón para entrenar al perceptrón. Aquí el perceptrón aprende otro - elementos lineales, por medio de este lineal para comprender algunos conceptos básicos del aprendizaje automático, como el modelo, la función objetivo, los algoritmos de optimización, etc. Use esto para obtener una comprensión simple del aprendizaje automático.

1. Unidad lineal

       Para los perceptrones mencionados en la sección anterior , las reglas del perceptrón anteriores no pueden converger en conjuntos de datos linealmente inseparables . En este momento, es imposible entrenar al perceptrón, así que para resolver este problema, encontré una derivable es una función lineal en lugar de una función escalonada perceptrón, que se denomina elementos lineales perceptrón . La unidad lineal convergerá a una aproximación óptima cuando se enfrente a un conjunto de datos linealmente inseparables.

      Aquí asumimos la función de activación f de una unidad lineal simple:  f (x) = x

      La unidad lineal se expresa de la siguiente manera:

Comparado con la sección anterior:

Después de reemplazar la función de activación f, la unidad lineal devuelve un valor real en lugar de la clasificación binaria 0, 1, por lo que la unidad lineal se usa para resolver el problema de regresión en lugar de la clasificación .

2. Modelo de unidad lineal

       Se dice que el modelo es en realidad una función (pd: me siento así, el modelo es un poco más alto ~~ jaja).

       En la vida real, predecimos el algoritmo de salida y basado en el valor de entrada x. Por ejemplo, x pueden ser los años de trabajo de una persona e y es su salario mensual.Podemos predecir los ingresos de una persona en función de los años de trabajo de una persona de acuerdo con un algoritmo determinado. como:

y = h (x) = w * x + b

       La función h (x) es una hipótesis y w, b son sus parámetros. Suponiendo que w = 1000, b = 500, x son los años de trabajo de una persona, sustituyendo el modelo anterior, predijo que su salario mensual es de 5500. Tal modelo es un poco poco confiable, porque no se consideran otros factores, sino que solo se consideran los años de trabajo.Cuando los años de trabajo, la industria, la empresa y la información de rango se denominan características . Para una persona que ha trabajado durante 3 años en la industria de TI, Alibaba y rango T3, puede usar vectores de características para representar

X = (3, IT, Ali, T3)

En este momento, la entrada X se convierte en un vector con cuatro características. Por el contrario, solo un parámetro w no es suficiente y se necesitan tres parámetros. Se requieren un total de cuatro parámetros (w1, w2, w3, w4). Subíndice, cada característica corresponde a un parámetro. El modelo en este momento se convierte en:

y = h (x) = w1 * x1 + w2 * x2 + w3 * x3 + w4 * x4 + b

x1: años de trabajo x2: industria correspondiente x3: empresa correspondiente x4: rango correspondiente

En este momento, sea w0 igual ab, y w0 corresponde a la característica x0, porque x0 no existe, podemos establecer x0 = 1, es decir:

b = w0 * x0 donde x0 = 1

Entonces, la fórmula anterior se convierte en la siguiente:

y = h (x) = w1 * x1 + w2 * x2 + w3 * x3 + w4 * x4 + b (1)

             = w0 * x0 + w1 * x1 + w2 * x2 + w3 * x3 + w4 * x4 (2)

El patrón escrito como un vector:

La fórmula anterior, el modelo de función se llama modelo lineal , y son las características de entrada y salida x1, x2, x3, ... de la combinación lineal .

Tres, aprendizaje supervisado y aprendizaje no supervisado

Tengo un modelo, pero ¿cómo entrenarlo? ? , ¿Cómo elegir el parámetro w? ?

Aprendizaje supervisado: es una especie de método de aprendizaje de aprendizaje automático. Es para entrenar un modelo y proporciona muchas muestras. Estas muestras incluyen la característica de entrada X y la salida correspondiente y (y también se llama etiqueta, etiqueta ) . Es decir, necesitamos conocer los datos de muchas personas, todas tienen estas características: años de trabajo, industria, empresa, rango y sus ingresos. Usamos estas muestras para entrenar el modelo, hacerle saber al modelo las características de cada entrada (X) y también conocer la respuesta a la pregunta correspondiente (marcada con una y). El modelo usa estas muestras (suficientes) para resumir las reglas y luego predice la entrada (X) que no se ha visto y la respuesta correspondiente.

Aprendizaje no supervisado: en la muestra de entrenamiento de este método, solo X no tiene y. El modelo puede resumir algunas leyes de la característica x, pero no puede conocer la respuesta correspondiente y. (Es decir, si da la entrada x, habrá una salida y, pero no sabe si el valor de y es correcto)

        En muchos casos, hay muy pocas muestras con xey, y la mayoría de las muestras solo tienen x. Por ejemplo, en una tarea de reconocimiento de voz a texto (STT), x es la voz e y es el texto correspondiente a la voz. Podemos obtener una gran cantidad de datos con la voz, pero es muy laborioso convertir la voz en texto y etiquetar el texto correspondiente. En este momento, para compensar la falta de muestras etiquetadas, podemos usar métodos de aprendizaje no supervisados para hacer algunas agrupaciones primero , dejar que el modelo resuma qué sílabas son similares y luego usar una pequeña cantidad de muestras de entrenamiento etiquetadas para decirle al modelo que algunas de las sílabas corresponden a Texto. En este momento, el modelo puede asignar sílabas similares a palabras similares para completar el entrenamiento del modelo.

Cuarto, la función objetivo de la unidad lineal

Solo considere el aprendizaje supervisado :

       Bajo aprendizaje supervisado, para una muestra, conocemos su característica X y su etiqueta y. Al mismo tiempo, la salida se calcula según el modelo h (x) . Aquí, y representa la marca en la muestra de entrenamiento , que es el valor real ; el subrayado representa el valor predicho calculado por el modelo . Si los valores de y y son extremadamente cercanos, el modelo es bueno.

Entonces, cómo expresar el valor similar ay, podemos usar 1/2 de la suma trivial de la diferencia con y para expresar:

   e: el error de una sola muestra ( 1/2 para un cálculo sencillo )

Los datos de entrenamiento tendrán muchas muestras, si hay un número N , podemos usar las muestras de entrenamiento con todas las muestras Errores y, para representar el modelo de error E , de la siguiente manera:

El superior indica el error de la primera muestra y el siguiente indica el segundo, hasta el último. . . . .

Escrito como suma:

En la fórmula 2 anterior, representa la característica de la i-ésima muestra de entrenamiento y representa la marca de la i-ésima muestra , donde se puede usar una tupla para representar la i-ésima muestra de entrenamiento

Es el valor predicho del modelo para la i-ésima muestra .

Para un conjunto de datos de entrenamiento, cuando el error es menor, el modelo es mejor. Para un conjunto de datos de entrenamiento específico, los valores son conocidos, por lo que para la ecuación 2 se convierte en el parámetro w función.

En resumen, el entrenamiento del modelo es en realidad para obtener una w adecuada para que el valor de la fórmula 2 sea el más pequeño. Tomar el valor mínimo se convierte en un problema de optimización matemática , y E (w) es el objetivo de optimización, que es nuestra función objetivo .

 

Cuatro, algoritmo de optimización de descenso de gradiente

Al aprender matemáticas, encontramos el valor extremo de una función. El punto extremo de y = f (x) es la tienda donde se calcula su derivada . Entonces podemos obtener el punto extremo de la función resolviendo la ecuación .

Para la computadora, descubre los puntos extremos a través de sus propios cálculos. como sigue:

        En primer lugar, seleccionamos aleatoriamente un punto, asumiendo que el punto de cambio es el punto x0, luego cada iteración cambia xa x1, x2, x3, ... Después de muchas iteraciones, llegamos al punto mínimo de la función.

     Cada vez que modificamos el valor de x, debemos ir en la dirección del valor mínimo de la función, y debemos modificar x en la dirección opuesta al gradiente de la función y = f (x) Gradiente: es un vector que apunta a la dirección donde el valor de la función aumenta más rápido. Entonces, la dirección opuesta del gradiente es la dirección en la que el valor de la función cae más rápido . Entonces, cada vez que modifica el valor de x en la dirección opuesta del gradiente, puede caminar hasta el valor mínimo de la función. La razón por la que está cerca del valor mínimo en lugar del punto mínimo es porque la longitud del paso de cada movimiento no será la correcta. Quizás la última iteración fue lejos y pasó directamente el punto mínimo. Selección del tamaño del paso: si la selección es pequeña, se repetirá durante muchas rondas para llegar a la proximidad del mínimo; si la selección es grande, puede ir mucho más allá del mínimo y no converger a un buen punto.

Dado el algoritmo de descenso de gradiente:

   

 : Operador de gradiente         : se refiere al gradiente de f (x)      : tamaño del paso (tasa de aprendizaje)

La función objetivo correspondiente anterior (Ecuación 2) se puede reescribir como:

El algoritmo de descenso de gradiente se puede reescribir como:

Al mismo tiempo, si se obtiene el valor máximo , se puede utilizar el algoritmo de ascenso de gradiente , y sus reglas de modificación de parámetros son las siguientes:

En este momento, es necesario obtener y sustituir las reglas de parámetros de la unidad lineal.

El gradiente de la función objetivo obtenido es:

Las reglas de modificación de parámetros de la unidad lineal final son las siguientes:

En este punto, puede usar esta función para escribir el código para entrenar la unidad lineal.

Cabe señalar que si cada muestra tiene características M, xyw en la fórmula anterior son todos vectores M + unidimensionales (porque hemos agregado una característica virtual x0 que siempre es 1, consulte el contenido anterior), Y es un escalar . Expresado en notación matemática, es decir

Es decir, w y x son vectores columna M + unidimensionales, y la ecuación 3 se puede escribir como  

Cinco, la derivación de la función objetivo

Camaradas que han estudiado matemáticas, los que saben pero no saben, estoy aquí para decirles que la definición del gradiente de una función es la derivada parcial con respecto a cada variable .

como sigue:

Resuelve para 11. Primero, la suma de las derivadas es igual a la derivada de la suma (sin mencionar los detalles, Baidu solo, se agotará ~~), así que primero pon el símbolo de suma

La derivada interior se calcula y se suma de la siguiente manera:

Encuentre la derivada de la siguiente manera:

De lo anterior sabemos que y es una constante que no tiene nada que ver con w, y la derivación se obtiene mediante la regla continua (la derivación de la función compuesta):

Calcule las dos derivadas parciales en el lado derecho de la ecuación anterior

Sustitución, la derivada parcial en la suma es:

mamaya ~~ Finalmente se acabó, leiskr.

6. Descenso de gradiente estocástico (SGD)

           Si la ecuación 3 en el cuarto trimestre más para entrenar el modelo ( DGD ), en cada iteración W, para atravesar todos los datos de muestra, dice que se llama descenso de gradiente por lotes ( Batch Gradient Descent ).

Pero cuando la muestra es particularmente grande y la cantidad de datos alcanza de millones a cientos de millones, a menudo se usa el algoritmo SDG. En el algoritmo SGD, solo se calcula una muestra para cada iteración de actualización w. De esta manera, para un entrenamiento de datos con millones de muestras, completar un recorrido se actualizará w millones de veces, lo que mejora enormemente la eficiencia. Debido al ruido y la aleatoriedad de la muestra, cada actualización de w no está necesariamente en la dirección de reducir E. Sin embargo, aunque existe una cierta aleatoriedad, una gran cantidad de actualizaciones generalmente avanzan en la dirección de reducir E, por lo que finalmente pueden converger cerca del mínimo. La siguiente figura muestra la diferencia entre SGD y BGD:

Como se muestra en la figura anterior, la elipse representa el contorno del valor de la función y el centro de la elipse es el punto mínimo de la función. El rojo es la curva de aproximación de BGD y el violeta es la curva de aproximación de SGD. Podemos ver que la BGD se está moviendo hacia el punto más bajo, aunque SDG fluctúa mucho, todavía se acerca al punto más bajo al final.

      Finalmente, cabe señalar que SGD no solo es eficiente, sino que la aleatoriedad a veces es algo bueno. La función objetivo de hoy es una "función convexa", y el mínimo globalmente único se puede encontrar en la dirección opuesta del gradiente. Sin embargo, para funciones no convexas, hay muchos mínimos locales. La aleatoriedad nos ayuda a escapar de unos mínimos locales terribles y así obtener un modelo mejor.

Siete, date cuenta de la unidad lineal

Compare el modelo de perceptrón anterior:

A través de la comparación de la figura anterior, se encuentra que excepto por la función de activación diferente f, los modelos y reglas de entrenamiento de las dos son iguales (en la tabla anterior, el algoritmo de optimización de la unidad lineal es el algoritmo SDG). Entonces, en este momento, solo necesitamos reemplazar la función de activación del perceptrón.

La unidad lineal se realiza heredando Perceptron de la sección anterior:

# -*- coding: utf-8 -*-
# !/usr/bin/env python
# @Time    : 2019/4/29 15:23
# @Author  : xhh
# @Desc    :  
# @File    : test_linearModel.py
# @Software: PyCharm
from test_perceptorn import Perceptron


# 定义激活函数
f = lambda x: x

class LinearUnit(Perceptron):
    def __init__(self, input_num):
        """
        初始化线性单元,设置输入参数的个数
        :param input_num:
        """
        Perceptron.__init__(self, input_num,f)

Simule algunos datos para probar:

def get_training_dataset():
    """
    假设5个人的收入数据
    :return:
    """
    # 构建训练数据
    # 输入向量列表,每一项都是工作年限
    input_vecs = [[5],[3],[8],[1.4],[10.1]]
    # 期望的输出列表,月薪,注意要与输入一一对应
    labels = [5500, 2300, 7600,1800,11400]
    return input_vecs, labels

def train_linear_unit():
    """
    使用数据训练线性单元
    :return:
    """
    # 创建感知器,输入参数的特征为1(工作年限)
    lu = LinearUnit(1)

    # 训练,迭代10轮,学习速率为0.01
    input_vecs, labels = get_training_dataset()
    lu.train(input_vecs, labels, 10, 0.01)

    # 返回训练好的线性单元
    return lu

def plot(linear_unit):
    import matplotlib.pyplot as plt
    input_vecs, labels = get_training_dataset()
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(map(lambda x:x[0], input_vecs), labels)
    weights = linear_unit.weight
    bias = linear_unit.bias
    x = range(0, 12, 1)
    y = map(lambda x:weights[0] * x + bias, x)
    ax.plot(x, y)
    plt.show()


if __name__ == '__main__':
    """
    训练线性单元
    """
    linear_unit = train_linear_unit()
    # 打印训练获得的权重
    print(linear_unit)
    # 测试
    print('工作3.6年,月收入 = %.2f'% linear_unit.predict([3.4]))
    print('工作10年,月收入 = %.2f'% linear_unit.predict([10]))
    print('工作6.3年,月收入 = %.2f'% linear_unit.predict([6.3]))
    plot(linear_unit)

Los resultados son los siguientes:

La línea recta ajustada es la siguiente:

 para resumir:

De lo que se ha escrito anteriormente, se concluye que el algoritmo de aprendizaje automático en realidad solo tiene dos partes:

 1. El modelo  predice la función h (x) de la salida y de la característica de entrada x

  2. Función objetivo   El valor del parámetro correspondiente al valor mínimo (máximo) de la función objetivo es el valor óptimo de los parámetros del modelo. Pero generalmente solo podemos obtener el valor mínimo (máximo) local de la función objetivo, por lo que solo podemos obtener el valor óptimo local de los parámetros del modelo .

  3. A continuación, utilice el algoritmo de optimización para encontrar el valor mínimo (máximo) de la función objetivo, el algoritmo de gradiente [aleatorio] {disminución | aumento} es un algoritmo de optimización . Para una función objetivo, diferentes algoritmos de optimización introducirán diferentes reglas de entrenamiento .

 

Materiales de referencia:

  1. Tom M. Mitchell, "Machine Learning", traducido por Zeng Huajun et al., China Machinery Industry Press

https://www.zybuluo.com/hanbingtao/note/448086

Puedes prestar atención a la cuenta oficial de mi amigo y yo ~~~ ¡Aquí hay información técnica de Python que mi amigo y yo actualizamos de vez en cuando! ! También puede dejar un mensaje para discutir problemas técnicos. Espero que pueda apoyarlo y prestarle atención. Gracias ~~

 

Supongo que te gusta

Origin blog.csdn.net/weixin_39121325/article/details/89638932
Recomendado
Clasificación