Serie de conceptos básicos de tecnología de modelos grandes de inteligencia artificial: búsqueda automatizada de modelos

Autor: Zen y el arte de la programación informática

1. Introducción

El desarrollo de la inteligencia artificial ha impulsado el rápido desarrollo de la tecnología de la información y los campos económicos. Pero al mismo tiempo, la dependencia de los sistemas de inteligencia artificial está aumentando y el número, la escala y la complejidad de los modelos de inteligencia artificial también están creciendo rápidamente. Cómo descubrir, seleccionar, entrenar e implementar automáticamente modelos de inteligencia artificial es un tema importante. Este artículo profundizará en la búsqueda automatizada de modelos a través de una serie de artículos técnicos, que incluyen investigaciones sobre aprendizaje automático, aprendizaje profundo, optimización, estadísticas y otros aspectos. Este artículo comenzará con las tecnologías y conceptos clave de los modelos de inteligencia artificial, presentará los principios y las soluciones de implementación de los métodos de búsqueda de modelos automatizados y brindará recomendaciones para herramientas y plataformas relacionadas. ¡Espero que pueda ser útil para los lectores!

2. Explicación de conceptos y términos básicos

2.1 Modelo

En inteligencia artificial, un modelo se refiere a una serie de lógica informática y sus parámetros utilizados para hacer predicciones o decisiones sobre el mundo real. Los modelos pueden ser abstractos o concretos. Por ejemplo, los modelos de árboles de decisión, los modelos de máquinas de vectores de soporte (SVM) y los modelos de redes neuronales son todos modelos de inteligencia artificial.

2.2 Conjunto de datos

Un conjunto de datos es una colección de datos utilizados para entrenar el modelo. En términos generales, un conjunto de datos consta de entrada (Entrada) y salida (Salida). Cada muestra representa un dato. La entrada incluye características (Característica) y la salida corresponde al valor objetivo predicho (Etiqueta). Los conjuntos de datos de clasificación de uso común incluyen IRIS, MNIST, CIFAR-10, etc.

2.3 Función de costo

La función de costo mide la precisión de la predicción del modelo en el conjunto de datos. Un valor de función de costo más bajo significa que el modelo se ajusta al conjunto de datos con mayor precisión y viceversa. Las funciones de costos comúnmente utilizadas incluyen error al cuadrado, pérdida de entropía cruzada, puntuación F1, etc.

2.4 Parámetros

Los parámetros del modelo (Parámetros) se refieren a los parámetros utilizados para controlar el comportamiento del modelo. Los parámetros del modelo de uso común incluyen peso, sesgo, hiperparámetro, etc.

2.5 Hiperparámetros

Los hiperparámetros se refieren a parámetros que afectan el entrenamiento del modelo y el rendimiento de generalización. Los hiperparámetros comúnmente utilizados incluyen tasa de aprendizaje, coeficiente de regularización, tamaño de capa oculta, etc.

2.6 Búsqueda de modelo automatizada

La búsqueda automatizada de modelos (AutoML) se refiere al proceso de descubrir, seleccionar, entrenar e implementar automáticamente modelos de inteligencia artificial. Puede mejorar enormemente la eficiencia y eficacia y reducir los costos laborales. Los métodos automatizados de búsqueda de modelos se basan principalmente en dos perspectivas:

  1. En el proceso de aprendizaje, diferentes modelos deberían tener diferentes estrategias de aprendizaje;
  2. Cuando se implementan, diferentes modelos deberían tener diferentes estrategias de predicción.

Actualmente existen muchos métodos para la búsqueda automatizada de modelos, como algoritmos genéticos, algoritmos evolutivos, optimización bayesiana, conocimientos previos, etc. Entre ellos, los algoritmos genéticos y los algoritmos evolutivos se superponen en su ámbito de aplicación. Este artículo se centrará en el algoritmo genético porque tiene la mayor viabilidad.

3. Explicación de los principios básicos del algoritmo, pasos operativos específicos y fórmulas matemáticas.

3.1 Concepto

El algoritmo genético (GA) es un algoritmo genético basado en la función de aptitud de la población (Función de aptitud).

3.2 Concepto

La población se refiere a la colección de individuos generada por el algoritmo desde la población inicial hasta la final.

3.3 Concepto

Individuo se refiere a una o más combinaciones de variables que resuelven un determinado problema, es decir, Cromosoma.

3.4 Concepto

Cromosoma significa que cada individuo está compuesto por varios genes (Gen), y los genes pueden ser 0 o 1.

3.5 Concepto

La población inicial se refiere a una colección de individuos inicializados aleatoriamente por el algoritmo a partir de una determinada distribución.

3.6 Concepto

La mutación se refiere al proceso de mutación de los individuos antes de la reproducción.

3.7 Concepto

Crossover se refiere al proceso de cruzar individuos después de la reproducción con el propósito de producir nueva descendencia.

3.8 Concepto

Función Fitness se refiere a una función que evalúa la calidad de la solución actual en función de su calidad.

3.9 Pasos operativos específicos

  1. Inicialice la población: genere aleatoriamente la población inicial y vincule los cromosomas a los valores de aptitud. La longitud inicial de la población generalmente se establece entre 100 y 500.

  2. Empalme y selección: en cada ronda generacional, se seleccionan aleatoriamente dos individuos de la población principal para la operación de empalme (empalme en dos poblaciones pequeñas monoparentales), y luego se selecciona el individuo con el valor de aptitud más pequeño entre las dos poblaciones para ingresar a la próxima generación. La operación de splicing es similar a la hibridación, intercambiando información genética y aumentando la diversidad de la población.

  3. Mutación: en cada generación, los individuos se seleccionan aleatoriamente de la población y uno o más genes de los individuos se cambian aleatoriamente para aumentar la diversidad de los individuos.

  4. Condición de terminación: deje de ejecutarse cuando el algoritmo alcance la convergencia o el número de iteraciones alcance un cierto valor.

3.10 Fórmulas matemáticas

Definición de cromosoma: $x \in {0,1}^n$
Definición de valor de aptitud: $\phi(x) = f(\theta^T x)$
Definición de probabilidad individual: $P_c(x) = P_{cr} ( x) P_{fit}(x)$, $P_{cr} (x_i, x_j)$ es la probabilidad de cruce, $P_{fit}$ es la densidad de probabilidad del valor de aptitud.
Definición de probabilidad de cruce: $P_{cr}(x_i, x_j) = \frac{1}{N} \sum_{k=1}^{N}\left{[k!= i & k!= j]~p_ {cross}(X_i^{a}, X_j^{a}, X_k^{b})\right}$, $X^{a}$ es el propio cromosoma, $X^{b}$ es otro cromosoma individual , $N$ es el número total de poblaciones.
Definición de densidad de probabilidad del valor de aptitud: $p_{fit}(x) = \frac{\exp(-\frac{(\theta^Tx - y)^2}{2\sigma_y^2})}{\sqrt{ 2\pi\sigma_y^2}}$.
La definición de población de $m$ésima generación: $X_m = [x_1^{m},...,x_{M_m}^{m}]$, $M_m$ es el número de poblaciones en cada generación.

4. Ejemplos de código específicos y explicaciones.

4.1 Ejemplos de código

import numpy as np

class GeneticAlgorithm:
    def __init__(self, MU, LAMBDA, NGEN, sigma):
        self.MU = MU # 种群大小
        self.LAMBDA = LAMBDA # 小种群大小
        self.NGEN = NGEN # 迭代次数
        self.sigma = sigma

    def init_population(self, dim):
        pop = []
        for _ in range(self.MU):
            chromosome = np.random.randint(2, size=(dim)) # 生成染色体
            fitness = function(chromosome) # 计算适应度值
            pop.append((chromosome, fitness)) # 将染色体与适应度值绑定起来
        return pop

    def select_parents(self, population):
        parents = []
        while len(parents) < 2:
            idx = np.random.choice(range(len(population)), replace=False, p=[x[1] for x in population])
            if not any([np.array_equal(idx, x[0]) for x in parents]):
                parents.append(population[idx])
        return parents

    def crossover(self, parent1, parent2):
        if np.random.rand() < 0.8:
            point = np.random.randint(low=0, high=len(parent1)-1)
            child1 = np.concatenate((parent1[:point], parent2[point:]))
            child2 = np.concatenate((parent2[:point], parent1[point:]))
            return child1, child2
        else:
            return parent1, parent2

    def mutation(self, chrom):
        mask = np.random.binomial(size=chrom.shape, n=1, p=0.2)[0] # 设置突变概率为0.2
        chrom[mask==1] = abs(chrom[mask==1]-1) # 对变异基因进行变异
        return chrom

    def run(self, data):
        dim = len(data[0][0]) # 获取维度
        population = self.init_population(dim) # 初始化种群

        for generation in range(self.NGEN):
            offspring = []

            # 生殖子代
            while len(offspring)<self.LAMBDA:
                parent1, parent2 = self.select_parents(population)
                child1, child2 = self.crossover(parent1[0], parent2[0])
                offspring += [(child1, None), (child2, None)]

            # 变异
            for i in range(int(self.LAMBDA/2)):
                rand_index = np.random.randint(len(offspring))
                mutated_chrom = self.mutation(offspring[rand_index][0])
                offspring[rand_index] = (mutated_chrom, None)

            # 更新种群
            new_population = []
            new_population += sorted(population+offspring, key=lambda x:-x[1])[0:self.MU] # 插入父代和子代
            population = new_population

            print("Generation:", generation+1, "Best Fitness", max([x[1] for x in population])) # 打印当前结果

        best_individual = sorted(population, key=lambda x:-x[1])[0] # 获取最优个体
        return best_individual

def function(chromosome):
    '''
    根据染色体求适应度值
    '''
    pass

if __name__ == '__main__':
    ga = GeneticAlgorithm(MU=50, LAMBDA=20, NGEN=50, sigma=1) # 初始化遗传算法
    data = load_data() # 加载数据
    result = ga.run(data) # 执行遗传算法
    print("Best Chromosome:", "".join(map(str,result[0]))) # 打印最优染色体
    print("Best Fitness Value:", result[1]) # 打印最优适应度值

4.2 Explicación

Primero importe la biblioteca correspondiente, aquí usamos la biblioteca numpy. Luego se define una clase GeneticAlgorithm, que inicializa varios parámetros en el algoritmo genético, incluido el tamaño de la población, el tamaño de la población pequeña, el número de iteraciones y la tasa de mutación genética.

Las funciones miembro de la clase son las siguientes:

  1. __init__: Constructor para inicializar la instancia del algoritmo genético.
  2. init_population: Inicializa la población y devuelve la lista de población.
  3. select_parents: Seleccione dos individuos de la población como padres y devuelva los dos individuos padres.
  4. crossover: Proceso de reproducción, generando dos individuos y devolviendo dos individuos descendientes.
  5. mutation: Proceso de mutación genética, devolviendo el cromosoma mutado.
  6. run: Ejecute el algoritmo genético y devuelva el individuo óptimo.

Finalmente, llame runa la función, ingrese los datos y obtenga el cromosoma óptimo y su valor de aptitud.

En este punto, hemos completado la implementación del código del algoritmo genético.

5. Tendencias y desafíos futuros del desarrollo

El proceso de desarrollo de algoritmos genéticos se puede dividir en etapa temprana, etapa intermedia y etapa tardía. La etapa inicial se centra en la partición aproximada para lograr una estimación de máxima verosimilitud, mientras que la etapa intermedia se centra en múltiples decodificaciones, incluida la búsqueda local y el recocido simulado, para aproximar la solución óptima global; la etapa tardía se centra en la búsqueda global, incluido el ajuste de parámetros y la compresión del modelo. algoritmos de distribución, etc., para resolver problemas prácticos.

Actualmente no existe ninguna investigación direccional específica sobre el desarrollo futuro de algoritmos genéticos. Ya existen algunos algoritmos genéticos relativamente maduros, como la búsqueda de estructuras de red basada en recocido simulado, la optimización de hiperparámetros basada en programación genética, la selección automática de modelos basada en estrategias evolutivas, etc. Estos algoritmos tienen resultados relativamente buenos en ciertos campos. Para aquellos problemas que están lejos de ser completamente explorados, necesitamos continuar investigando y encontrar más y mejores algoritmos y escenarios de aplicación.

Supongo que te gusta

Origin blog.csdn.net/universsky2015/article/details/133446761
Recomendado
Clasificación