Training Neural Networks: Crash Course AI #4

CrashCourse
30 Aug 201912:28

Summary

TLDREn este episodio de Crash Course AI, Jabril nos introduce al concepto de redes neuronales artificiales, explicando cómo pueden aprender a resolver problemas al cometer errores y ajustar sus pesos mediante un algoritmo llamado retropropagación. Utiliza un ejemplo de predicción de la asistencia a una piscina basándose en datos como la temperatura y la humedad. A medida que se agregan más características, el proceso de optimización se vuelve más complejo, y aquí es donde las redes neuronales sobresalen. También se discuten temas como sobreajuste y la importancia de probar el sistema con nuevos datos.

Takeaways

  • 🧠 Los cerebros artificiales pueden ser creados mediante redes neuronales, que consisten en millones de neuronas y billones de conexiones entre ellas.
  • 🚀 Algunas redes neuronales son capaces de realizar tareas con mayor eficacia que los humanos, como jugar ajedrez o predecir el clima.
  • 🔍 Las redes neuronales requieren de un proceso de aprendizaje a través de errores para resolver problemas, utilizando un algoritmo llamado retropropagación.
  • 🏗️ Las redes neuronales se componen de dos partes principales: la arquitectura y las ponderaciones (weights), siendo estas últimas números que afinan el cálculo de las neuronas.
  • 🔍 La optimización es la tarea de encontrar las mejores ponderaciones para una arquitectura de red neuronal, y se puede entender mejor con ejemplos prácticos.
  • 📈 La regresión lineal es una estrategia de optimización utilizada por computadoras para encontrar una línea recta que mejor se ajuste a un conjunto de datos.
  • 🌐 A medida que se consideran más características en los datos, la función de ajuste se vuelve más compleja y multidimensional, lo que es donde las redes neuronales son útiles.
  • 🤖 El entrenamiento de una red neuronal implica ajustar las ponderaciones para minimizar el error y mejorar las predicciones en función de los datos de entrenamiento.
  • 🔄 La retropropagación es un método esencial para que las redes neuronales aprendan, asignando la responsabilidad del error a las neuronas de capas anteriores y ajustando sus ponderaciones.
  • 🌍 Al igual que los exploradores en un mapa, los algoritmos de aprendizaje deben navegar a través del espacio de soluciones para encontrar la combinación de ponderaciones que minimice el error.
  • 🛡️ El sobreajuste es un riesgo en el aprendizaje de redes neuronales, donde el modelo se ajusta demasiado bien a los datos de entrenamiento y no generaliza bien a nuevos datos.

Q & A

  • ¿Qué es una red neuronal y cómo se relaciona con el cerebro artificial?

    -Una red neuronal es una estructura que imita la forma en que el cerebro humano procesa la información, compuesta por millones de neuronas y billones o trillones de conexiones entre ellas. Se utiliza en la creación de cerebros artificiales para realizar tareas complejas.

  • ¿Por qué las redes neuronales necesitan aprender cometer errores?

    -Las redes neuronales necesitan aprender cometer errores para ajustar sus pesos y arquitecturas de manera que mejoren su rendimiento en tareas específicas, similar al proceso de aprendizaje humano.

  • ¿Qué es el backpropagation y cómo ayuda a las redes neuronales a aprender?

    -El backpropagation es un algoritmo que permite a las redes neuronales distribuir la responsabilidad del error a través de las capas de la red, ajustando los pesos de las neuronas para reducir el error en futuras predicciones.

  • ¿Cuáles son las dos partes principales de una red neuronal y qué función desempeñan?

    -Las dos partes principales de una red neuronal son la arquitectura y los pesos. La arquitectura incluye las neuronas y sus conexiones, mientras que los pesos son números que afinan cómo las neuronas realizan sus cálculos matemáticos para obtener una salida.

  • ¿Qué es la optimización en el contexto de las redes neuronales?

    -La optimización en las redes neuronales se refiere al proceso de encontrar la mejor combinación de pesos para una dada arquitectura de red, con el objetivo de minimizar el error y mejorar la precisión de las predicciones.

  • ¿Cómo se utiliza la regresión lineal para hacer predicciones en un ejemplo simple?

    -La regresión lineal se utiliza para ajustar una línea recta a los datos de puntos en un gráfico, minimizando la suma de las distancias entre la línea y los puntos de datos para hacer predicciones basadas en características como la temperatura y el número de nadadores.

  • ¿Qué significa 'línea de mejor ajuste' y cómo se relaciona con la regresión lineal?

    -La 'línea de mejor ajuste' es el resultado de la regresión lineal que se ajusta lo más posible a los datos de entrenamiento, buscando minimizar el error y representar la relación entre las variables de forma más precisa.

  • ¿Cómo se pueden mejorar los resultados de una red neuronal al considerar más características?

    -Al incorporar más características, como la humedad o si está lloviendo, se pueden agregar dimensiones al modelo, lo que permite a la red neuronal aprender a resolver problemas más complejos y obtener resultados más precisos.

  • ¿Qué es el peligro de sobreajuste en las redes neuronales y cómo se puede prevenir?

    -El sobreajuste ocurre cuando una red neuronal se ajusta demasiado bien a los datos de entrenamiento, capturando relaciones espurios que no se aplican a nuevos datos. Se puede prevenir manteniendo la red neuronal lo suficientemente simple y evitando características irrelevantes.

  • ¿Por qué es importante validar la capacidad de una red neuronal para responder a preguntas nuevas?

    -Validar la capacidad de una red neuronal para responder a preguntas nuevas es crucial para asegurar que el modelo haya aprendido y no simplemente memorizado los datos de entrenamiento, lo que permitiría generalizar mejor en situaciones desconocidas.

Outlines

00:00

🤖 Introducción a las Redes Neuronales

Jabril nos presenta Crash Course AI, explicando cómo se crean redes neuronales artificiales con millones de neuronas y billones de conexiones. Estas redes, al ser capaces de aprender de sus errores, pueden realizar tareas como jugar al ajedrez o predecir el clima mejor que los humanos. Se menciona que las redes neuronales requieren de algoritmos como la retropropagación para ajustar sus pesos y arquitecturas, y se introduce el concepto de optimización para encontrar los mejores pesos. Se utiliza el ejemplo de un alberca para explicar cómo se puede predecir la afluencia de visitantes usando datos históricos y técnicas de regresión lineal para ajustar un modelo al mínimo error.

05:05

📉 Optimización y Retropropagación

Este párrafo profundiza en cómo se ajustan los pesos de una red neuronal para minimizar el error. Se introduce el concepto de función de pérdida para redes con múltiples neuronas en la capa de salida. Se describe el algoritmo de retropropagación, que asigna la responsabilidad del error a las neuronas de capas anteriores y ajusta sus pesos en consecuencia. Se utiliza la metáfora de un explorador, John Green-bot, buscando el punto más bajo en un mapa para ilustrar cómo se exploran diferentes caminos para encontrar la combinación de pesos que minimiza el error. También se discuten estrategias para evitar que la red neuronal se quede atascada en soluciones locales y la importancia de la tasa de aprendizaje en el proceso de optimización.

10:06

🏊‍♂️ Entrenamiento y Verificación de Redes Neuronales

El tercer párrafo explora la diferencia entre el aprendizaje y la memorización, comparando el entrenamiento de una red neuronal con el estudio de respuestas de un examen. Se enfatiza la necesidad de probar la red neuronal con datos nuevos para verificar su capacidad de generalización. Se menciona el riesgo de sobreajuste, que ocurre cuando la red neuronal se ajusta demasiado bien a los datos de entrenamiento y se vuelve incapaz de predecir acertadamente con datos no vistos previamente. Se sugiere mantener la red neuronal lo suficientemente simple y eliminar características irrelevantes para evitar el sobreajuste. Finalmente, se anticipa el próximo laboratorio práctico donde se aplicará todo este conocimiento para construir una red neuronal.

Mindmap

Keywords

💡Neural Network

Una red neuronal es una estructura de computación inspirada en el cerebro biológico, compuesta por millones de neuronas y billones de conexiones entre ellas. En el video, se menciona que estas redes pueden ser capaces de realizar tareas como jugar ajedrez o predecir el clima mejor que los humanos. Las redes neuronales son fundamentales para el aprendizaje automático y la inteligencia artificial, ya que permiten a los sistemas procesar y aprender de grandes volúmenes de datos.

💡Backpropagation

El backpropagation es un algoritmo utilizado para entrenar las redes neuronales, permitiendo ajustar los pesos de las conexiones entre las neuronas para minimizar el error en las predicciones. Se describe en el video cómo este proceso 'asigna la culpa' a las neuronas que contribuyeron al error y ajusta sus pesos en consecuencia. Es crucial para que la red neuronal aprenda de sus errores y mejore su rendimiento en la tarea asignada.

💡Weights

En el contexto de las redes neuronales, los pesos son los números que se utilizan para afinar cómo las neuronas procesan la información para producir una salida. El ajuste de estos pesos es esencial para la capacidad de la red neuronal para aprender y predecir correctamente, como se ilustra en el video con la analogía de la línea de mejor ajuste en un problema de regresión lineal.

💡Optimization

La optimización es el proceso de encontrar la mejor configuración de pesos en una red neuronal para minimizar el error y mejorar la precisión de las predicciones. En el video, se explica cómo la optimización es esencial para el aprendizaje de una red neuronal, ya que implica ajustar continuamente los pesos para que la red genere salidas más precisas a medida que se le proporcionan datos de entrenamiento.

💡Linear Regression

La regresión lineal es una técnica de aprendizaje supervisado utilizada para modelar la relación entre una variable dependiente y una o más variables independientes. En el video, se utiliza como ejemplo para ilustrar cómo un ordenador puede encontrar una línea de mejor ajuste en un conjunto de datos para predecir el número de visitantes en una piscina basándose en la temperatura.

💡Loss Function

Una función de pérdida es una medida que indica qué tan lejos está la salida de una red neuronal de los resultados esperados. En el video, se menciona que en redes neuronales con varias neuronas de salida, la diferencia entre la predicción y la respuesta correcta se representa mediante una función de pérdida, la cual es utilizada para ajustar los pesos de la red durante el entrenamiento.

💡Overfitting

El sobreajuste ocurre cuando una red neuronal se ajusta tan bien a los datos de entrenamiento que pierde la capacidad de generalizar y predecir correctamente en nuevos datos. En el video, se advierte sobre el peligro del sobreajuste y se sugiere que mantener la red neuronal simple y evitar características irrelevantes, como la longitud de la hierba o el número de mariposas alrededor de la piscina, puede ayudar a prevenirlo.

💡Features

Las características son las propiedades o variables que se utilizan como entradas en un modelo de aprendizaje automático. En el video, se discute cómo incluir características relevantes, como la temperatura, la humedad y si está lloviendo, mejora la capacidad de una red neuronal para predecir el número de visitantes en una piscina, mientras que características irrelevantes pueden llevar al sobreajuste.

💡Global Optimal Solution

Una solución global óptima se refiere al conjunto de pesos que minimizan la función de pérdida en toda la red neuronal, lo que resulta en la mejor predicción posible. En el video, se utiliza la metáfora de explorar un mapa para ilustrar cómo el proceso de optimización busca encontrar la 'valle más profundo' que representa la solución global óptima.

💡Learning Rate

La tasa de aprendizaje es un hiperparámetro que determina la magnitud de los cambios en los pesos de las neuronas durante el entrenamiento. En el video, se menciona que ajustar la tasa de aprendizaje permite a la red neuronal 'saltar' sobre pequeñas colinas en su búsqueda por un punto de menor error, lo que es crucial para evitar que se quede atascada en soluciones locales óptimas.

Highlights

Neural networks can have millions of neurons and billions of connections.

Some neural networks outperform humans in tasks like playing chess or predicting the weather.

Neural networks learn by making mistakes, similar to human learning.

Backpropagation is the algorithm used by neural networks to handle mistakes.

Neural networks consist of architecture and weights, with weights fine-tuning neuron outputs.

Optimization is the task of finding the best weights for a neural network architecture.

Linear regression is an optimization strategy used for simple prediction models.

The line of best fit in linear regression is achieved by minimizing the error between the line and data points.

Adding more features to a model can lead to higher-dimensional data and more complex optimization problems.

Neural networks are capable of learning to solve complex problems with multi-dimensional functions.

An untrained neural network starts with random weights, which are adjusted during training.

The output of a neural network is compared to actual data to calculate the error.

Loss functions are used in neural networks with multiple output neurons to represent error.

Backpropagation assigns blame to neurons in previous layers of the network based on the error.

The goal of backpropagation is to find the best combination of weights to minimize error.

Exploration strategies like random starting points and learning rates help avoid local optimal solutions.

Overfitting occurs when a neural network learns coincidental relationships in the training data.

Simplicity in neural network design and careful feature selection can prevent overfitting.

Training a neural network involves not only math but also strategic consideration of problem representation and potential errors.

Transcripts

play00:00

Hey, I’m Jabril and welcome to Crash Course AI!

play00:03

One way to make an artificial brain is by creating a neural network, which can have

play00:08

millions of neurons and billions (or trillions) of connections between them.

play00:12

Nowadays, some neural networks are fast and big enough to do some tasks even better than

play00:17

humans can, like for example playing chess or predicting the weather!

play00:22

But as we’ve talked about in Crash Course AI, neural networks don’t just work on their

play00:26

own.

play00:27

They need to learn to solve problems by making mistakes.

play00:29

Sounds kind of like us, right?

play00:32

INTRO

play00:40

Neural networks handle mistakes.

play00:42

using an algorithm called backpropagation to make sure all the neurons that contributed

play00:47

to an error get their math adjusted, and we’ll unpack this a bit later.

play00:51

And neural networks have two main parts: the architecture and the weights.

play00:56

The architecture includes neurons and their connections.

play01:00

And the weights are numbers that fine-tune how the neurons do their math to get an output.

play01:03

So if a neural network makes a mistake, this often means that the weights aren’t adjusted

play01:08

correctly and we need to update them so they make better predictions next time.

play01:12

The task of finding the best weights for a neural network architecture is called optimization.

play01:17

And the best way to understand some basic principles of optimization is with an example

play01:22

with the help of my pal John Green Bot.

play01:30

Say that I manage a swimming pool, and I want to predict how many people will come next

play01:34

week, so that I can schedule enough lifeguards.

play01:37

A simple way to do this is by graphing some data points, like the number of swimmers and

play01:41

the temperature in fahrenheit for every day over the past few weeks.

play01:45

Then, we can look for a pattern in that graph to make predictions.

play01:48

A way computers do this is with an optimization strategy called linear regression.

play01:52

We start by drawing a random straight line on the graph, which kind of fits the data

play01:57

points.

play01:58

To optimize though, we need to know how incorrect this guess is.

play02:02

So we calculate the distance between the line and each of the data points, add it all up,

play02:08

and that gives us the error.

play02:09

We’re quantifying how big of a mistake we made.

play02:12

The goal of linear regression is to adjust the line to make the error as small as possible.

play02:18

We want the line to fit the training data as much as it can.

play02:21

The result is called the line of best fit.

play02:24

We can use this straight line to predict how many swimmers will show up for any temperature,

play02:29

but parts of it defy logic.

play02:31

For example, super cold days have a negative number, while dangerously hot days have way

play02:36

more people than the pool can handle.

play02:38

To get more accurate results, we might want to consider more than two features, like for

play02:44

example adding the humidity which would turn our 2d graph into 3d.

play02:48

And our line of best fit would be more like a plane of best fit.

play02:52

But if we added a fourth feature, like whether it’s raining or not, suddenly we can’t

play02:57

visualize this anymore.

play02:58

So as we consider more features, we add more dimensions to the graph, the optimization

play03:04

problem gets trickier, and fitting the training data is tougher.

play03:08

This is where neural networks come in handy.

play03:11

Basically, by connecting together many simple neurons with weights, a neural network can

play03:15

learn to solve complicated problems, where the line of best fit becomes a weird multi-dimensional

play03:21

function.

play03:22

Let’s give John Green-bot an untrained neural network.

play03:33

To stick with the same example, the input layer of this neural network takes features

play03:40

like temperature, humidity, rain, and so on.

play03:41

And the output layer predicts the number of swimmers that will come to the pool.

play03:44

We’re not going to worry about designing the architecture of John Green-bot’s neural

play03:48

network right now.

play03:49

Let’s just focus on the weights.

play03:50

He’ll start, as always, by setting the weights to random numbers, like the random line on

play03:55

the graph we drew earlier.

play03:57

Only this time, it’s not just one random line.

play04:00

Because we have lots of inputs, it’s lots of lines that are combined to make one big,

play04:05

messy function.

play04:06

Overall, this neural network’s function resembles some weird multi-dimensional shape

play04:11

that we don’t really have a name for.

play04:13

To train this neural network, we’ll start by giving John Green-bot a bunch of measurements

play04:17

from the past 10 days at the swimming pool, because these are the days where we also

play04:22

know the output attendance.

play04:23

We’ll start with one day, where it was 80 degrees Fahrenheit, 65% humidity, and not

play04:28

raining (which we’ll represent with 0).

play04:31

The neurons will do their thing by multiplying those features by the weights, adding the

play04:36

results together, and passing information to the hidden layers until the output neuron

play04:41

has an answer.

play04:42

What do you think, John Green-bot?

play04:44

John Green-bot: 145 people were at the pool!

play04:50

Just like before, there is a difference between the neural network’s output and the actual

play04:54

swimming pool attendance -- which was recorded as 100 people.

play04:59

Because we just have one output neuron, that difference of 45 people is the error.

play05:04

Pretty simple.

play05:05

In some neural networks though, the output layer may have a lot of neurons.

play05:09

So the difference between the predicted answer and the correct answer is more than just one

play05:15

number.

play05:16

In these cases, the error is represented by what’s known as a loss function.

play05:21

Moving forward, we need to adjust the neural network’s weights so that the next time

play05:25

we give John Green-bot similar inputs, his math and final output will be more accurate.

play05:30

Basically, we need John Green-bot to learn from his mistakes, a lot like when we pushed

play05:35

a button to supervise his learning when he had the perceptron program.

play05:38

But this is trickier because of how complicated neural networks are.

play05:42

To help neural networks learn, scientists and mathematicians came up with an algorithm

play05:47

called backpropagation of the error, or just backpropagation.

play05:52

The basic goal is to look at the loss function and then assign blame to neurons back in the

play05:57

previous layers of the network.

play05:59

Some neurons’ calculations may have been more to blame for the error than others, so

play06:03

their weights will be adjusted more.

play06:05

This information is fed backwards, which is where the idea of backpropagation comes from.

play06:10

So for example, the error from our output neuron would go back a layer and adjust the

play06:15

weights that get applied to our hidden layer neuron outputs.

play06:18

And the error from our hidden layer neurons would go back a layer and adjust the weights

play06:22

that get applied to our features.

play06:25

Remember: our goal is to find the best combination of weights to get the lowest error.

play06:30

To explain the logic behind optimization with a metaphor, let’s send John Green Bot on

play06:35

a metaphorical journey through the Thought Bubble.

play06:43

Let’s imagine that weights in our neural network are like latitude and longitude coordinates

play06:47

on a map.

play06:48

And the error of our neural network is the altitude -- lower is better.

play06:52

John Green-bot the explorer is on a quest to find the lowest point in the deepest valley.

play06:57

The latitude and longitude of that lowest point -- where the error is the smallest -- are

play07:01

the weights of the neural network’s global optimal solution.

play07:05

But John Green-bot has no idea where this valley actually is.

play07:09

By randomly setting the initial weights of our neural network, we’re basically dumping

play07:13

him in the middle of the jungle.

play07:15

All he knows is his current latitude, longitude, and altitude.

play07:19

Maybe we got lucky and he’s on the side of the deepest valley.

play07:22

But he could also be at the top of the highest mountain far away.

play07:26

The only way to know is to explore!

play07:29

Because the jungle is so dense, it’s hard to see very far.

play07:32

The best John Green-bot can do is look around and make a guess.

play07:35

He notices that he can descend down a little by moving northeast, so he takes a step down

play07:41

and updates his latitude and longitude.

play07:43

From this new position, he looks around and picks another step that decreases his altitude

play07:48

a little more.

play07:49

And then another… and another.

play07:51

With every brave step, he updates his coordinates and decreases his altitude.

play07:55

Eventually, John Green-bot looks around and finds that he can’t go down anymore.

play07:59

He celebrates, because it seems like he found the lowest point in the deepest valley!

play08:04

Or... so he thinks.

play08:06

If we look at the whole map, we can see that John Green-bot only found the bottom of a

play08:09

small gorge when he ran out of “down.”

play08:12

It’s way better than where he started, but it’s definitely not the lowest point of

play08:16

the deepest valley.

play08:17

So he just found a local optimal solution, where the weights make the error relatively

play08:23

small, but not the smallest it could be.

play08:25

Sorry, buddy.

play08:27

Thanks, Thought Bubble.

play08:28

Backpropagation and learning always involves lots of little steps, and optimization is

play08:32

tricky with any neural network.

play08:34

If we go back to our example of optimization as exploring a metaphorical map, we’re never

play08:39

quite sure if we’re headed in the right direction or if we’ve reached the lowest

play08:42

valley with the smallest error -- again that’s the global optimal solution.

play08:47

But tricks have been discovered to help us better navigate.

play08:51

For example, when we drop an explorer somewhere on the map, they could be really far from

play08:55

the lowest valley, with a giant mountain range in the way.

play08:59

So it might be a good idea to try different random starting points to be sure that the

play09:03

neural network isn’t getting stuck at a locally optimal solution.

play09:07

Or instead of restarting over and over again, we could have a team of explorers that start

play09:11

from different locations and explore the jungle simultaneously.

play09:15

This strategy of exploring different solutions at the same time on the same neural network

play09:20

is especially useful when you have a giant computer with lots of processors.

play09:25

And we could even adjust the explorer’s step size, so that they can step right over

play09:29

small hills as they try to find and descend into a valley.

play09:32

This step size is called the learning rate, and it’s how much the neuron weights get

play09:36

adjusted every time backpropagation happens.

play09:39

We’re always looking for more creative ways to explore solutions, try different combinations

play09:44

of weights, and minimize the loss function as we train neural networks.

play09:48

But even if we use a bunch of training data and backpropagation to find the global optimal

play09:53

solution… we’re still only halfway done.

play09:56

The other half of training an AI is checking whether the system can answer new questions.

play10:01

It’s easy to solve a problem we’ve seen before, like taking a test after studying

play10:06

the answer key.

play10:07

We may get an A, but we didn’t actually learn much.

play10:10

To really test what we’ve learned, we need to solve problems we haven’t seen before.

play10:15

Same goes for neural networks.

play10:16

This whole time, John Green-bot has been training his neural network with swimming pool data.

play10:20

His neural network has dozens of features like temperature, humidity, rain, day of the

play10:24

week, and wind speed… but also grass length, number of butterflies around the pool, and

play10:31

the average GPA of the lifeguards.

play10:33

More data can be better for finding patterns and accuracy, as long as the computer can

play10:38

handle it!

play10:39

Over time, backpropagation will adjust the neuron weights, so that neural network’s

play10:43

output matches the training data.

play10:45

Remember, that’s called fitting to the training data, and with this complicated neural network,

play10:51

we’re looking for a multi-dimensional function.

play10:54

And sometimes, backpropagation is too good at making a neural network fit to certain

play10:59

data.

play11:00

See, there are lots of coincidental relationships in big datasets.

play11:03

Like for example, the divorce rate in Maine may be correlated with U.S. margarine consumption,

play11:09

or skiing revenue may be correlated with the number of people dying by getting trapped

play11:13

in their bedsheets.

play11:14

Neural networks are really good at finding these kinds of relationships.

play11:18

And it can be a big problem, because if we give a neural network some new data that doesn’t

play11:23

adhere to these silly correlations, then it will probably make some strange errors.

play11:28

That’s a danger known as overfitting.

play11:30

The easiest way to prevent overfitting is to keep the neural network simple.

play11:35

If we retrain John Green-bot’s swimming pool program /without/ data like grass length

play11:39

and number of butterflies, and we observe that our accuracy doesn’t change, then ignoring

play11:44

those features is best.

play11:46

So training a neural network isn’t just a bunch of math!

play11:49

We need to consider how to best represent our various problems as features in AI systems,

play11:55

and to think carefully about what mistakes these programs might make.

play11:59

Next time, we’ll jump into our very first lab of the course, where we’ll apply all

play12:03

this knowledge and build a neural network together.

play12:08

Crash Course Ai is produced in association with PBS Digital Studios.

play12:11

If you want to help keep Crash Course free for everyone, forever, you can join our community

play12:16

on Patreon.

play12:18

And if you want to learn more about the math of k-means clustering, check out this video

play12:22

from Crash Course Statistics.

Rate This

5.0 / 5 (0 votes)

الوسوم ذات الصلة
Inteligencia ArtificialRedes NeuronalesAprendizaje AutomáticoBackpropagationOptimizaciónCrash Course AIJabrilJohn Green BotAprendizaje por ErroresModelo Predictivo
هل تحتاج إلى تلخيص باللغة الإنجليزية؟