Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0. INTRODUCTION TO AI
En cuanto a inteligencia artificial, se discuten formas de entender y crear sistemas inteligentes, entre ellos, sistemas
que imitan el comportamiento humano, la cognición humana, racionalidad humana y que actúan de forma racional.
En los ejemplos vemos como maquinas pueden simular el comportamiento humano, como la prueba de Turing, donde
una maquina dialoga con humanos y realiza tareas como escribir poesía o jugar al ajedrez. O ELIZA, que es un programa
que simula un terapeuta, demostrando que las maquinas pueden interactuar de forma significativa.
El primer bot que paso el test de Turing fue en 2014, Eugene Goostman.
Se aborda como entender y construir sistemas inteligentes que piensen como humanos. Se exploran métodos para
comprender el pensamiento humano, como la introspección y pruebas que conducen a la construcción de una teoría
mental.
Se centra en comprender y construir sistemas inteligentes con pensamiento racional. Se revisa el desarrollo histórico
de la lógica formal desde Aristóteles hasta Robinson, destacando contribuciones como la idea de un lenguaje formal,
las leyes del pensamiento, y el desarrollo de la lógica.
Se discute sobre agentes racionales que operan en entornos conocidos, estos tienen creencias sobre el mundo, deseos
u objetivos que quieren alcanzar, y crean planes o intenciones para lograr estos objetivos basados en sus creencias.
Los sistemas multiagentes, son lo que dice el nombre, desde 2 hasta cientos, estos comparten un objetivo común, que
es cooperar, coordinarse y comunicarse para lograrlo.
Todo empieza con los griegos en los años 40, el termino IA en los 50s por Darmouth y los neurocientíficos de McCulloch
Pitths, mas adelante apareció Internet, donde se invirtió muchísimo en obtener datos y en la capacidad de
computación, ahora en la actualidad, explosión de IA.
- Comportamiento: nos interesa la salida del asistente, no nos importa como funciona el sistema, nos importa
el resultado, una maquina que se comporte como una persona.
- Pensamiento: nos importa la parte interna, nos focalizamos en entender como pensamos, la parte cognitiva,
hacemos una maquina que piense como persona.
- Humano: queremos emular el comportamiento o pensamiento humano. Pero como no somos perfectos, no
nos interesa emular la perfección, queremos control.
- Formal: nos interesa la perspectiva formal, conjunto de reglas, lógica.
Queremos combinar el comportamiento y el humano, una maquina que se comporte como un humano, es algo
inteligente, para definir la pregunta creamos la prueba de Turing, tenemos que probar que realmente es asi: ¿Las
maquinas pueden pensar?
La prueba consiste en que hay una persona por un lado, y otra maquina, y una pared, no debemos poder diferenciar
entre la maquina o la persona.
Hay aplicaciones:
- Visión por computador: clasificación de imágenes con reconocimiento facial, detección de objetos,
segmentación de imágenes.
- Robótica: percepción y planificación de moción, donde buscamos un path para seguir.
- Procesamiento de lenguaje natural, con chatgpt, clasificación detexto, reconocimiento de entidades con
nombre, traducción de maquinas.
- Representación del conocimiento y razonamiento.
- Generación de texto desde texto. Maquinas entrenadas para predecir grandes textos.
- Generación de imágenes a imágenes.
- Generación de imágenes desde texto.
- Generación de videos desde texto o imágenes.
Hay problemáticas:
Los inicios de la IA vienen de los años 50, de la reunión en el 56 donde empezaron a pensar como intentar usar los
ordenadores de forma inteligente, las personas eran Newell y Simón. Un problema era jugar al ajedrez, pero hicieron
un algoritmo que lo solucionaba, todo lo que pudiéramos plantear, bastante distinto a nuestra idea.
Para cada problema, tenemos una solución concreta, pero queremos un único algoritmo capaz de resolver cualquier
problema, por lo que aparece el GPS o General Problem Solver, donde para cualquier problema, nos da una solución.
Tenemos que representar todos los problemas de la misma manera, con la misma estructura, aprovechar
características, el proceso de pasarlos a un formato común es la formalizacion de los problemas. Para aprender a
hacerlo, cogemos tres problemas distintos y los adaptamos de la misma manera:
Los estados son las situaciones, cualquier situación posible con la que nos podemos encontrar mientras resolvemos un
problema, encontramos el estado inicial y el final donde queremos llegar, o conjunto de estados finales posibles. Los
otros son intermedios.
- Comerciante: 4 objetos, cualquiera puede estar en cualquier momento en derecha o izquierda -> 16
combinaciones. Como hay combinaciones que no nos interesan, como el lobo y oveja en un lado… 10 estados
posibles.
- Jarron: tenemos una lista de elementos que hay en la izquierda o derecha, una sola lista, o izquierda o derecha.
20 estados posibles, 5 estados en la primera y 4 en la segunda jarra.
- Puzle: cuantas formas de colocar números del 1-8 en una matriz, 9 posiciones, 9! Formas posibles.
En cuanto a operadores, es la forma como llegamos de un estado a otro, alguna acción que hacemos para pasar de una
situación a otra. Cualquier estado puede no aplicar todos los operadores, hay acciones que no podemos realizar.
En resumen, solucionar un problema es encontrar el camino en el espacio de estados que vaya desde el estado inicial
al final, y no tiene por qué existir siempre. Es encontrar un camino dentro del grafo, una secuencia de acciones que
nos lleve, si es que existe, ya que según el final y el inicial puede ser que no haya solucion.
- Una secuencia de estados que empieza en el estado inicial y acaba en el estado final, y tenemos un operador
que nos permite pasar entre estados.
- Una secuencia de operadores o acciones en un orden para pasar del estado inicial al final.
Si se repiten secuencias de estados, tiene sentido, es correcta, pero es cíclica, no la queremos. Una solucion debe ser
una secuencia de estados sin ciclos, sin repeticiones.
La estructura del grafo es el árbol de exploración, que es un árbol donde la raíz es el estado inicial, seleccionamos
hojas y aplicamos operadores para ver donde podemos ir, puede que llegue un momento en el que llegamos al estado
final, entonces vemos el camino para llegar. La exploración es un subconjunto de estados.
El problema está en encontrar la forma optima de ir desde el estado inicial al final, donde optimo habitualmente es el
camino mas corto. Otros problemas están en determinar si existe alguna solucion, o encontrar todas las soluciones, o
una solucion cualquiera.
No es factible construir todo el espacio de estados entero para explorarlo, Dijkstra no. Un gran coste computacional.
Cuando exploremos el espacio de estados, tenemos que tener en cuenta los nodos ya explorados, los nodos pendientes
y los no encontrados. Seleccionar un nodo pendiente, vigilar la aparición de ciclos, y detectar si un estado es nuevo, o
ya había sido explorado, o ya se conocía y esta pendiente.
La resolución general de los problemas es una forma única de representar cualquier problema, un único algoritmo
que sepa resolver los problemas representados de esta forma. Recordamos que los elementos de la formalización de
los problemas se caracteriza por los estados, que son las situaciones donde nos podemos encontrar en un cierto
dominio y momento determinado, siendo estado inicial donde empezamos y final la situación donde queremos llegar,
y los operadores, que son las acciones que podemos hacer para pasar de estados o situaciones.
En cuanto al espacio de estados en la formalizacion, lo podemos representar como un grafo etiquetado dirigido, donde
los nodos son los estados, y las arestas las acciones o posibles aplicaciones de los operadores para pasar de un estado
a otro.
La solucion de un problema es encontrar un camino sin ciclos, si puede ser optimo, entre el estado inicial y el final en
el espacio de estados, teniendo en cuenta que puede no existir.
La busqueda de la solucion se realiza mediante la exploración del espacio de estados desde el estado inicial, intentando
encontrar un camino que lleve al estado final, por lo que construimos un árbol de exploración, básicamente se va
generando un subgrafo del espacio de estados a medida que se va ampliando la exploración.
Un ejemplo de exploración, si tenemos nodos, seria escoger un nodo pendiente de tratar, y si es el estado final,
paramos, sino, lo expandimos, que quiere decir que le aplicamos todos los operadores posibles, añadiendo hijos
nuevos a pendientes.
Para obtener la solucion, el algoritmo anterior únicamente dice si existe una solucion o no, pero si la queremos
encontrar, el camino, podemos guardar para cada nodo N de pendientes, la informacion del camino seguido para llegar
desde ahí hasta el nodo.
Por lo que ahora, en el atributo de nodos pendientes, será un hashmap, no solo contendrá el estado inicial en principio,
contendrá el estado y el camino. Y devolvemos el bool y el camino.
Sobre las técnicas de busqueda, las podemos definir como las distintas formas de encontrar el siguiente nodo a
expandir de pendientes y de guardar los nuevos nodos generados en la exploración a pendientes.
Ahora que ya sabemos los no informados, debemos entender la idea de los algoritmos de la busqueda heurística,
donde la idea es hacer algoritmos de busqueda mas inteligentes que los no informados. No podemos estar seguros de
cuál es el mejor camino, pero podemos intentar intuirlo. Podemos hacerlo comparando cada estado pendiente con el
estado final al que queremos llegar, cuanto mas cerca esté, mejor, si está mas lejos, peor.
Cada funcion que se nos acuda dará resultados distintos, pero contra mas informacion, mejores resultados, y mas coste
de calculo, hay que pensar heurísticas para cada problema.
i. BEST FIRST
Características: es completo, ya que mira todas las posibilidades, pero no es óptimo, ya que no garantiza que la
solución encontrada sea óptima.
Las heurísticas para best first son dependientes del dominio, y en cada instancia puede ir bien una distinta.
ii. A*
A* es un algoritmo de busqueda de camino que combina la busqueda por anchura con la busqueda de coste uniforme,
usa una heurística para evaluar los nodos y determinar la prioridad de expansión, lo que lo convierte en un algoritmo
informado. Es óptimo y
completo cuando la heurística
es admisible.
Un ejemplo de A* seria buscar el camino mas corto de A a B en un grafo, podemos usar la distancia de Manhattan
como heurística, que calcula la distancia horizontal y vertical entre dos nodos, es el valor absoluto de x1-x2 + y1-y2,
donde la heurística trivial será de 0 para todos, con esta se comporta como busqueda de costo uniforme porque no
hay informacion adicional. Con la heurística de distancia euclidiana, la heurística puede ser útil si los nodos están en
un espacio continuo y queremos minimizar la distancia. El resultado, lo dividimos entre 2.
En Hill Climbing, cambia la inicialización de variables, no existe una lista de pendientes, ahora tenemos la inicialización
de un nodo con estado, camino, y valor heurístico, la lista de tratados inicializada a 0, y el bool de encontrado e hijos
mejores=cierto. Mientras no encuentre el final y haya hijos mejores, hacemos, en este algoritmo busca siempre un hijo
mejor, si no lo hay, se acaba.
Características: No es completo, porque no mira todas las posibilidades de no ser que sean todas mejores, y no es
óptimo, ya que no garantiza que la solución encontrada sea óptima.
Mejoras: no mantiene la lista de pendientes, por lo que ahorra memoria. Guia hacia el estado final, es mas inteligente
que las búsquedas no informadas, necesitan menos espacio y menos tiempo. Los contras son que hay que pensar
heurísticas para cada problema, que es difícil comparar heurísticas, que se puede quedar estancado sin encontrar la
solucion.
En el algoritmo de esta busqueda, cuando esta tratando los nodos pendientes, si el coste del camino mas operador es
menor que el coste de obtener el camino, entonces, sobreescribimos el orden.
El problema de la busqueda en coste uniforme es que solo tiene en cuenta el coste del camino hacia el nodo y no tiene
en cuenta lo que nos costará ir desde el nodo hasta el estado final.
Para ello, surge el algoritmo A*, que tiene en cuenta las dos cosas, aquí surge la funcion heurística, donde:
A* combina la busqueda amplada con coste uniforme actualizando la funcion de evaluación que tiene en cuenta el
coste acumulado desde el nodo inicial al actual g(n) como una estimación del costo desde el nodo actual hasta el
objetivo h(n). Determina la prioridad con la funcion heurística. Garantiza encontrar la solucion optima.
Best-First es un termino general, no necesariamente tienen en cuenta el costo acumulado, la selección del siguiente
nodo se basa únicamente en una estimación heurística de qué tan cerca está cada nodo del objetivo, sin considerar el
coste acumulado hasta el nodo. No garantiza la solucion optima.
En los años 50 y 60, se dieron los primeros pasos significativos en el campo de la IA, se desarrollaron los primeros
resolutores generales de problemas y mecanismos de busqueda basados en la exploración de grandes espacios de
estados.
- Los mecanismos eran genéricos: había muchos desafíos, era difícil definir estados y operadores en problemas
del mundo real, como diagnósticos médicos, predicciones…
- Costes computacionales altos: las búsquedas en grandes espacios eran caras, las no informadas sobretodo.
- Los métodos eran débiles: Necesidad de busqueda heurística: para abordar desafíos, surge la heurística, que
usa informacion adicional. Solo tenían en consideración informacion conocida de los estados, y no usaban el
conocimiento del dominio para guiar el proceso de busqueda, como datos de historial clínico, personales…
Entonces, en la década de los 70s, se produjo un cambio de paradigma en el campo de la IA, hacia el enfoque en
sistemas basados en el conocimiento o sistemas expertos. Para resolver problemas complejos del mundo real, que
requerían un amplio conocimiento de un dominio especifico. Las características de estos eran:
- Algoritmos orientados al mundo real: se desarrollaron con el objetivo de abordar problemas del mundo real
que requieren de conocimiento en una area.
- Amplio conocimiento del dominio: hay que tener acceso al conjunto de conocimientos en el dominio relevante.
Representado de forma estructurada y accesible.
- Rendimiento comparable al de un experto humano: La meta era que los sistemas expertos pudieran tomar
decisiones y resolver problemas de forma tan efectiva como lo harían un experto humano en el mismo campo.
- Entrevistas con expertos en el dominio, que es la forma más habitual, pero un procedimiento lento y costoso,
donde hay dificultad de comunicación entre ingenieros y el experto, y hay falta de colaboración por parte de
ellos.
- Observación de los expertos: los expertos usan herramientas semi automáticas de adquisición del
conocimiento, o simuladores de dominio, que son programas específicos para un dominio, técnicas poco
generalizables.
- Aprendizaje automático: construcción automática a partir de un conjunto de ejemplos resueltos.
A partir de toda la información, se inducen arboles de decisiones: Outlook: Sunny, Overcast, Rainy, Humidity…
La representación del conocimiento es un campo de la IA que estudia los mecanismos para guardar conocimiento de
un dominio dentro de un sistema computacional de forma que se pueda usar de forma eficiente para resolver
problemas complejos.
Los mecanismos de representación del conocimiento son a partir de lenguaje formal, que permite representar el
conocimiento de forma estructurada y precisa, debe ser expresivo para capturar complejidad en distintos dominios. La
construcción de expresiones precisas tiene que tener su semántica clara, representan conceptos y reglas relevantes.
Otro mecanismo son los algoritmos eficientes de razonamiento sobre la informacion, una vez la información esta
representada, se necesitan algoritmos para realizar el razonamiento sobre la información. Permiten inferir
conclusiones, tomar decisiones, resolver problemas…
Hay un compromiso entre la expresividad del lenguaje de representación y la complejidad computacional de los
procesos del razonamiento.
El conocimiento del dominio en IA se puede clasificar en categorías, cada una comprende diferentemente el problema:
- Conocimiento factual: es la informacion especifica y objetiva de un dominio particular que puede ser
representada de manera correcta, comprendiendo diferentes aspectos:
o Clases de objetos: que definen categorías o tipos de entidades, como en un sistema de gestion de
bibliotecas, donde las clases son los libros, autores…
o Los objetos son instancias individuales de las clases.
o Las propiedades son atributos de los objetos, como año, titulo…
o Las restricciones sobre valores, que son reglas sobre el año de publicación, como >0.
o Los valores, que son los datos asignados a las propiedades.
- Conocimiento procedural o procedimental: es la informacion sobre como realizar acciones o procedimientos
en un momento determinado, describe las secuencias o acciones que se tienen que llevar a cabo para llegar a
un objetivo. Cuando pedir datos al usuario, cuando hacer una secuencia de acciones…
- Conocimiento heurístico o experiencial: es el conocimiento que se deriva principalmente de la experiencia o
intuición, se usa para realizar inferencias rápidas y aproximadas sobre situaciones o problemas, basándose en
patrones observados. Cara groga -> problema de fetge.
b. PRESENTACION DE LOGICA, LENGUAJE DE LA LOGICA DE PREDICADOS
La lógica matemática es una rama de las matemáticas que estudia los procesos del razonamiento, los componentes
del razonamiento son un conjunto positivo de premisas, que son los datos de entrada, y una conclusión, que es una
derivación de las premisas.
Un razonamiento se considera valido si, siempre que las premisas sean ciertas, la conclusión tambien lo es, no puede
ser falsa si las premisas son ciertas. La conclusión es una consecuencia lógica de las premisas, sino, el razonamiento es
invalido.
Una lógica debe proporcionar un lenguaje formal en el que podamos representar las premisas y la conclusión de un
razonamiento. Deben proporcionar mecanismos que permitan determinar si una conclusión se puede deducir a partir
de un conjunto de premisas, que es la validación, y descubrir la informacion que se puede deducir lógicamente a partir
de un conjunto de premisas, que es el razonamiento, inferencia o deducción.
El origen de la lógica matemática viene de los filósofos griegos, de Aristóteles, que vio que la validez de un
razonamiento depende de la forma de las premisas y de la conclusión, y no de la verdad que dicen. Según el, si todos
los hombres son mortales, y Sócrates es un hombre, es mortal: Todos los A son B, si X es A, X es B.
Algo invalido seria: si algunos humanos son hombres y todos los hombres son mortales, Sócrates es humano, por lo
que es mortal. Algunos A son B, todos los B son C, X es A, por lo que X es C.
Continuamos con Ramon Llull, que escribió el Ars Magna, que era un tipo de maquina lógica, en la que se
representaban aspectos teológicos con formas geométricas, palancas, proposiciones se paraban delante de posiciones
marcadas como cierto o falso.
A continuación, Gottfried Leibniz, retomo la idea de expresar los razonamientos en un lenguaje formal para que
pudieran ser manipulados de forma mecánica. Desarrolló la maquina de Leibniz, que podía hacer sumas, restas,
multiplicaciones, divisiones y raíces.
Después apareció Boole, definiendo un conjunto de reglas algebraicas que se tenían que seguir para deducir
conclusiones correctas a partir de unas premisas.
Luego Frege, que fue un matemático conocido por desarrollar la Begriffsschrift o escritura de conceptos, que era un
sistema de notación, que introdujo un lenguaje formal basado en aritmética para representar el pensamiento puro.
Presentaba proposiciones lógicas y matemáticas de forma precisa.
Finalmente, Robinson fue un investigador en el campo de la IA, donde uno de sus logros fue la introducción de la
resolución, un metodo que puede validar automáticamente un razonamiento, implica transformar las premisas y la
conclusión a una forma normal predefinida.
Aquí es donde aparece el lenguaje de la lógica de predicados, que es un sistema formal usado para representar
conocimiento en diversos dominios, donde sus elementos básicos permiten representar objetos, clases, propiedades,
relaciones… se refiere al conocimiento factual del dominio, podemos construir expresiones llamadas formulas para
representar afirmaciones o proposiciones sobre el mundo.
Conectivas lógicas:
- Conjunción ∧, i: se usa para combinar dos proposiciones en una nueva, la resultante es verdadera solo si ambas
son verdaderas. Pare(joan)^Mare(Eva). AND.
- Disyuncion ∨, o: Combina dos proposiciones, la resultante es verdadera solo si una de ellas lo es. OR. O uno u
otro irá a la fiesta, o ambos. Al menos uno.
- Condicional →, si ... entonces ...: establece una relacion de implicación entre dos proposiciones, si la
proposición inicial o antecedente es verdadera, entonces la siguiente tambien. Pare(joan,toni)->Fill(toni,joan).
- Negación ¬, no: operador que se usa para formar la negación de una proposición, indicamos que una
proposición es falsa.
Cuantificadores:
- Universal ∀: sirve para indicar que todos los objetos de un dominio tienen una propiedad, si f es una formula,
∀variable(F) tambien lo es.
- Existencial ∃: sirve para indicar que hay como mínimo un objeto del dominio que tiene una cierta propiedad,
si f es una formula, ∃variable de f tambien lo es.
Podemos describir un enfoque de representación del conocimiento usando la lógica para modelar un dominio
especifico, en este caso, el Covid-19, lo explicamos:
- Base de conocimiento: se presenta el conocimiento del dominio como un conjunto de formulas lógicas, las
formulas representan relaciones entre variables y predicados que caracterizan las condiciones y síntomas
asociados con el covid:
o ∀x ((Tos(x) ∧ FebreAlta(x) ∧ ¬Olora(x)) → SospitósCOVID(x)), si un individuo x tiene tos, fiebre alta y no
tiene olor, entonces es sospechoso de covid-19.
o Otra formula lógica que indica que si alguien es considerado sospechoso de tener covid, entonces se
tiene que hacer una PCR: ∀x (SospitósCOVID(x) → FerProvaPCR(x))
- Motor de inferencia: cuando se reciben datos de un nuevo paciente, el motor de inferencia usara el
conocimiento para diagnosticar la enfermedad, usara las reglas lógicas definidas en la base del conocimiento
para ingerir conclusiones lógicas sobre el estado de salud. El motor de inferencia es el componente central en
IA, se encarga de procesar las reglas lógicas y conocimiento almacenado para generar conclusiones o
inferencias lógicas.
- Ejemplo de datos del paciente: si toni tiene una temperatura de 39.2 grados y no huele, estos datos son
entradas para el motor de inferencia, que aplicará las reglas definidas para determinar si es sospechoso de
covid.
En resumen, la lógica matemática es la rama de las matemáticas que estudia el razonamiento y es el mecanismo de
representación del conocimiento más clásico de la IA. Proporciona un lenguaje para representar informacion y
mecanismos para hacer deducciones a partir de datos o para ver si un razonamiento es válido.
Cualquier formula en lógica predicada se puede traducir a forma normal Skolem, donde hay una secuencia de
cauntificadores universales a la izquierda, y una formula en forma normal sin cuantificadores a la derecha.
En resumen, la forma normal tiene un prefijo con cuantificadores, y una expresión sin ellos. Se puede expresar en
forma normal conjuntiva o disjuntiva.
Ya que tenemos la forma normal, ahora podemos hacer la parte de Skolemitzacion, que se basa en quitar los ∃.
Mientras quede alguna variable cuantificada existencialmente, tenemos que repetir:
- Eliminamos el cuantificador existencial, de izquierda a derecha, substituimos la variable, donde se encuentre,
por una funcion de Skolem. Hay que usar una distinta por variable.
d. APUNTES DE LOGICA
Ejercicio 5.3:
- ∀x Px → ∃x Qx:
o Quitamos ->: ¬(∀x Px) ∨ ∃x Qx
o Aplicamos Morgan: ∃x ¬Px ∨ ∃x Qx
o Aplicamos distribución: ∃x (¬Px ∨ Qx)
o
o
o
e. REPRESENTACION DEL CONOCIMIENTO Y ONTOLOGIAS
f. INGENIERIA DE ONTOLOGIAS
g. DESARROLLO DE ONTOLOGIAS CON PROTEGE