martes, 14 de mayo de 2019

Entrevista

Margaret Boden (Maggie para los amigos) ha visto de todo desde 1936. Nació en el Londres de los bombardeos y de Alan Turing, se abrió paso en el masculino mundo de la ciencia y se descolgó en 1977 con Inteligencia Artificial y Hombre Natural, uno de los libros pioneros en un campo que ha contribuido a ensanchar gracias a su 'sabiduría' adquirida en los mundos de la medicina, de la filosofía, de la psicología y de las ciencias cognitivas.

A sus 82 años, Boden sigue activa desde su mirador en la Universidad de Sussex, fiel a su condición de insaciable "mariposa intelectual". Nos recibe con vestido floreado en su casa de Brighton, que pronto sentimos como nuestra. Y nos invita a hacer un recorrido por las estanterías donde alternan libros y pequeños frascos de vidrio que se estiran hasta tiempos de los romanos. Estamos aquí para hablar de su último libro, Inteligencia Artificial (Turner), y para intentar distinguir entre la paja y el heno en un terreno pantanoso en el que se atrevió a adentrar en sus últimos meses de vida el mismísimo Stephen Hawking.


¿Cuál es la idea más equivocada que tenemos sobre la inteligencia artificial?
Yo diría que hay dos ideas equivocadas. La primera es que la inteligencia artificial (IA) puede hacer mucho más de lo que es capaz realmente. Y la segunda es que puede hacer mucho menos. Entre estos dos polos nos movemos, y esa ha sido mi idea con este libro. Examinar la naturaleza de la IA, hacer balance de dónde estamos e intentar vislumbrar el futuro, con los pies en el suelo y sin caer en escenarios de ciencia ficción.
Meses antes de morir, con su voz computerizada, Stephen Hawking advirtió: "El desarrollo pleno de la inteligencia artificial puede significar el fin de la raza humana" ¿Verdadero o falso?
Ese tipo de afirmaciones genéricas sirven al final para infundir el temor a lo desconocido. Con todos mis respetos para Stephen Hawking, y reconociendo sus grandes méritos en el campo de la Física, no se puede intentar abarcar todo y hablar ex cátedra de un campo que no era su especialidad. Por no hablar de la profunda contradicción: él tenía que estar en el fondo agradecido a la IA porque le permitía hablar y comunicarse con los humanos.

Hawking era tan asombrosamente popular que todo lo que salía de su boca se elevaba inevitablemente a titular. Hizo mucho por la divulgación de la ciencia, pero no estaba en una posición privilegidada para hablar de la IA. Al fin y al cabo, su aproximación era la de un astrofísico, preocupado por el futuro de la Tierra y urgiendo a la especie humana a colonizar otros planetas.
El filósofo Nick Bostrom, al frente del Instituto para el Futuro de la Humanidad en la Universidad de Oxford, considera también la superinteligencia como el "mayor riesgo existencial" para la humanidad, por delante incluso del cambio climático...
Otra peligrosa generalización. Bostrom tiene ideas un poco locas, como la noción misma de la superinteligencia (una inteligencia superior a la humana) a mediados de siglo o incluso antes. Son predicciones un poco absurdas. Bostrom está contribuyendo también, a su manera, a infundir el miedo a ese futuro apocalíptico, y desviar por ejemplo la atención del cambio climático, que es un peligro presente y real, que va a comprometer enormemente las vidas de las próximas generaciones.
>_ "Con todos mis respetos para Stephen Hawking, y reconociendo sus grandes méritos en el campo de la Física, no se puede intentar abarcar todo y hablar ex cátedra de un campo que no era su especialidad"
¿Y qué nos dice de las predicciones de Ray Kurzweil, el profeta de la singularidad?
Kurzweil es aún peor, precisamente por todo lo contrario. Habla de la singularidad (el momento en el que la inteligencia de las máquinas superan a la del hombre) como una especie de santo grial o de utopía tecnológica. En su opinión, la inteligencia artificial (combinada con la nanotecnología y con la biología sintética) servirá para acabar con las enfermedades, con las guerras e incluso con la muerte. Además predice que el momento está bien cerca, en torno al 2030... ¡Nos quedan 12 años! Lo tenemos como quien dice a la vuelta de la esquina... Es absurdo.

Pensar que con la IA puedes resolver conflictos tan humanos como el de Oriente Próximo (y ya puestos, el de Irlanda del Norte o el Cataluña) es totalmente ridículo. Los que creen en la singularidad ignoran las limitaciones de la IA actual. Se basan sólo en los avances tecnológicos exponenciales, pero ignoran un hecho: el aumento de potencia de los ordenadores y de la disponibilidad de datos no garantiza una IA de nivel humano.
El fundador de Tesla, Elon Musk, es otra de las voces más notorias ante los riesgos de la IA ¿No deberíamos darle algo de crédito?
A Elon Musk hay que agradecerle sobre todo que ponga sobre la mesa la cuestión ética y que ponga dinero para investigar temas que deberíamos haber estado investigando durante años. Su contribución al Instituto para el Futuro de la Vida me parece muy valiosa. Es esencial plantearnos escenarios de futuro, pero hay que hacerlo con investigaciones rigurosas y multidisciplinarias que nos adviertan de los riesgos reales.
En la parte final de su libro, usted reconoce sin embargo que pese a todos los "mitos" que rodean la IA, hay realmente motivos para "estar preocupados". ¿Cuáles son?

Los algoritmos de aprendizaje automático se pueden dividir en tres grandes categorías: aprendizaje supervisado, aprendizaje no supervisado y aprendizaje de refuerzo. El aprendizaje supervisado es útil en los casos en que una propiedad (etiqueta) está disponible para un determinado conjunto de datos (conjunto de formación), pero debe predecirse para otras instancias. El aprendizaje sin supervisión es útil en los casos en que el desafío consiste en descubrir relaciones implícitas en un conjunto de datos no etiquetado (los elementos no están asignados previamente). El aprendizaje de refuerzo cae entre estos dos extremos: hay alguna forma de retroalimentación disponible para cada paso o acción predictiva, pero no hay etiqueta precisa o mensaje de error.

APRENDIZAJE SUPERVISADO
1. Árboles de decisión: Un árbol de decisiones es una herramienta de apoyo a la decisión que utiliza un gráfico o un modelo similar a un árbol de decisiones y sus posibles consecuencias, incluidos los resultados de eventos fortuitos, los costos de recursos y la utilidad. Presentan una apariencia como esta:
Desde el punto de vista de la toma de decisiones empresariales, un árbol de decisiones es el número mínimo de preguntas sí / no que uno tiene que hacer, para evaluar la probabilidad de tomar una decisión correcta, la mayoría del tiempo. Este método le permite abordar el problema de una manera estructurada y sistemática para llegar a una conclusión lógica.

2. Naïve Bayes Clasification: Los clasificadores Naïve Bayes son una familia de simples clasificadores probabilísticos basado en la aplicación de Bayes ‘teorema con fuertes (Naïve) supuestos de independencia entre las características’. La imagen destacada es la ecuación – con P (A | B) es probabilidad posterior, P (B | A) es probabilidad, P (A) es probabilidad previa de clase, y P (B) predictor probabilidad previa.
3. Ordinary Least Squares Regression: Si has estado en contacto con la estadística, probablemente hayas oído hablar de regresión lineal antes. Ordinary Least Squares Regression es un método para realizar la regresión lineal. Se puede pensar en la regresión lineal como la tarea de ajustar una línea recta a través de un conjunto de puntos. Hay varias estrategias posibles para hacer esto, y la estrategia de «mínimos cuadrados ordinarios» va así: puede dibujar una línea y luego, para cada uno de los puntos de datos, medir la distancia vertical entre el punto y la línea y sumarlos; La línea ajustada sería aquella en la que esta suma de distancias sea lo más pequeña posible.

Linear se refiere al tipo de modelo que está utilizando para ajustar los datos, mientras que los mínimos cuadrados se refieren al tipo de métrica de error que está minimizando.
4. Logistic Regression: La regresión logística es una poderosa manera estadística de modelar un resultado binomial con una o más variables explicativas. Mide la relación entre la variable dependiente categórica y una o más variables independientes estimando las probabilidades utilizando una función logística, que es la distribución logística acumulativa.

5. Support Vector Machines: SVM es un algoritmo de clasificación binario. Dado un conjunto de puntos de 2 tipos en el lugar N dimensional, SVM genera un hiperlano (N – 1) dimensional para separar esos puntos en 2 grupos. Digamos que usted tiene algunos puntos de 2 tipos en un papel que son linealmente separables. SVM encontrará una línea recta que separa esos puntos en 2 tipos y situados lo más lejos posible de todos esos puntos.
En términos de escala, algunos de los mayores problemas que se han resuelto utilizando SVMs (con implementaciones adecuadamente modificadas) son publicidad en pantalla, reconocimiento de sitios de empalme humanos, detección de género basada en imágenes, clasificación de imágenes a gran escala.
6. Métodos Ensemble: Los métodos Ensemble son algoritmos de aprendizaje que construyen un conjunto de clasificadores y luego clasifican nuevos puntos de datos tomando un voto ponderado de sus predicciones. El método de conjunto original es Bayesian promediando, pero los algoritmos más recientes incluyen error de corrección de salida de codificación.

UNSUPERVISED LEARNING

7. Algoritmos Clustering: Clustering es la tarea de agrupar un conjunto de objetos tales que los objetos en el mismo grupo (cluster) son más similares entre sí que a los de otros grupos.

8. Análisis de Componentes Principales: PCA es un procedimiento estadístico que usa una transformación ortogonal para convertir un conjunto de observaciones de variables posiblemente correlacionadas en un conjunto de valores de variables linealmente no correlacionadas llamadas componentes principales.

Análisis de componentes principales
Algunas de las aplicaciones de PCA incluyen compresión, simplificación de datos para un aprendizaje más fácil, visualización. Tenga en cuenta que el conocimiento del dominio es muy importante al elegir si seguir adelante con PCA o no. No es adecuado en los casos en que los datos son ruidosos (todos los componentes de PCA tienen una variación bastante alta).

9. Singular Value Decomposition: En el álgebra lineal, SVD es una factorización de una matriz compleja real. Para una matriz M * n dada, existe una descomposición tal que M = UΣV, donde U y V son matrices unitarias y Σ es una matriz diagonal.

10. Análisis de Componentes Independientes: ICA es una técnica estadística para revelar los factores ocultos que subyacen a conjuntos de variables, mediciones o señales aleatorias. ICA define un modelo generativo para los datos multivariados observados, que se suele dar como una gran base de datos de muestras. En el modelo, se supone que las variables de datos son mezclas lineales de algunas variables latentes desconocidas, y el sistema de mezcla también es desconocido. Las variables latentes se asumen no gaussianas y mutuamente independientes, y se les llama componentes independientes de los datos observados.

ICA está relacionado con PCA, pero es una técnica mucho más poderosa que es capaz de encontrar los factores subyacentes de fuentes cuando estos métodos clásicos fallan por completo. Sus aplicaciones incluyen imágenes digitales, bases de datos de documentos, indicadores económicos y mediciones psicométricas.

viernes, 10 de mayo de 2019

Existen hoy incontables programas y cursos en la web que prometen enseñarnos a los desarrolladores las ocultas habilidades de un verdadero Full-stack programmer, entonces, siendo conscientes y realistas… ¿podemos pensar que se puede ser verdaderamente Full-stack? ¿A que se refiere?
Que es un Full-stack Developer?
Un desarrollador web Full-stack es alguien que puede desenvolverse bien en ambas partes de una aplicación, tanto Frontend (parte visual) como Backend(parte lógica). El Frontend es conocido como la parte que interactúa y ven los usuarios, mientras que el Backend es la parte que maneja la lógica del negocio como conexiones de Bases de datos, Autenticaciones de usuario, configuraciones de servidor, etc. Ser Full-stack no significa que tienes que ser un maestro en cualquier tecnología de las partes implicadas, más bien pienso que significa que tienes que estar habilitado y capaz para trabajar con ambos lados de una aplicación y entender lo que hace, lo que se va hacer y cómo funciona cada parte del proceso de construir una aplicación.
Si quieres convertirte en un Full-stack developer, creo que las tecnologías que enumero abajo son vitales para que comiences, así que veamos rápidamente:

HTML/CSS

Casi cualquier programa, aplicación o sistema tiene en sus entrañas un poco o mucho de Html y CSS. También, casi cualquier persona que esté intentando enseñarte a programar tomará en cuenta estos dos. Esto es porque estos dos son los bloques constructores de la web (salvo algunas excepciones que no tratare aca). Html te permite agregar contenido a un sitio web y el CSS es lo que te permite darle estilos a tu contenido.
Para dominar estos, tendrias que estar capacitado para responder o trabajar con lo siguiente:
  • HTML Semántico
  • Beneficios y utilidad de preprocesadores CSS (habilidad muy importante que recomiendo, aunque no necesariamente tienes que conocer a fondo sobre estos, pero si quieres y te gusta ahorrar tiempo que nos conviene, deberías considerarlo).
  • CSS Media Queries para hacer completamente responsive y adaptables tus maquetaciones y sitios web.
  • Boostrap. Este es un framework muy conocido que particularmente me encanta mas que todo por su estructura de rejillas extremadamente responsive que evita complicarte mucho la vida cuando maquetas.

Javascript

El lenguaje Javascript se hace cada vez más popular entre los desarrolladores cada año. Una increíble cantidad de Frameworks, librerías, herramientas, snippets, etc. son lanzados cada dia a la web. Javascript es hoy el lenguaje más popular hoy entre los desarrolladores Full-stack porque tiene capacidades para funcionar de manera casi perfecta en ambos lados de la ecuación (Backend — Frontend).
Javascript es el único lenguaje que puede correr nativamente en el navegador y solo por esto puede doblar, triplicar y hasta cuadruplicar las velocidades de procesamiento y performance combinado con un buen código en el Frontend. Con su punta de lanza llamado NodeJs, si dominas Javascript en ambas partes, puedes llegar a ser imparable y un programador muy cotizado.
Algunos tópicos básicos que debes dominar con Javascript para ser Full-stack:
  • Entender su forma de trabajar con el DOM (llamado asi al documento en el frontend).
  • Comprender los términos básicos del lenguaje como lo son: herenciasprototiposclosuresdelegación de eventosscopefunciones higher-order, etc.
  • Flujo de trabajo Asíncrono (Asynchronous Control Flow), promises y los llamados callbacks que me costaron mucho comprender un día.
  • Como modularizar y estructurar correctamente cada una de sus partes. Cosas como webpackbrowserify o herramientas como gulp serán útiles conocerlas.
  • Saber utilizar al menos un Framework o librería popular. En realidad muchas veces algunos desarrolladores se centran demasiado en un framework en específico, opino que lo mejor es aprender y tener una buena plataforma de conocimientos sobre el lenguaje. De igual forma, si sabes Javascript lo suficiente, cualquier framework o librería será tarea de niños.
  • Aunque muchos digan, se quejen y renieguen de él, Jquery sigue estando presente en los corazones de cada desarrollador y en la mayoría de las aplicaciones hoy día. Te recomiendo aprender mucho sobre este.
  • Investigue, eduquese, infórmese sobre las características más importantes de ES6 y demás. Estos estándares y mejoras del lenguaje son realmente importantes para desarrollar aplicaciones modernas hoy.
Mantenerse aprendiendo e investigando con este lenguaje es vital, aprenderas que nunca terminas de aprender algo nuevo cuando de Javascript se trata.

Cualquier lenguaje Backend (Php, Java, Python, Ruby, etc)

Una vez que sientas que has comprendido bien Html/Css y Javascript, querrás pasar a un lenguaje Backend que se encargue de las operaciones más complicadas como lo son la lógica del negocio, las bases de datos, los comportamientos, eventos, etc. Las plataformas de cursos y Bootcamps usualmente se enfocan en lenguajes específicos, y en realidad no importa cual aprendes mientras que entiendas lo que está pasando y aprendas los matices y comportamientos del lenguaje que elijas.
Obtendrás montones de foros, respuestas, plataformas que harán tu aprendizaje más dinámico, cómodo y ameno. Las combinaciones más populares suelen estar entre estos rangos:
  • Nodejs: Es un entorno de Javascript, asi que si logras dominarlo, te sera mucho mas facil.
  • Ruby
  • Python
  • Java: Este lenguaje no se enseña tanto estos días para el campo Full-stack, pero algunas compañías todavía requieren desarrolladores en este lenguaje a montón.
  • Php: Es uno de los más populares hoy después de Javascript. Sigue teniendo muchísima demanda sobre todo con Frameworks como Laravel Cakephp.

Bases de Datos y Almacenamiento en la nube

Al aprender a crear aplicaciones web, en algún momento tendrás que almacenar datos en algún lugar y luego acceder a ellos más tarde. Debes tener una buena comprensión de algunos puntos relacionados con bases de datos y almacenamiento.
  • Comprender los beneficios de las bases de datos relacionales como las SQL .
  • Conocer las bases de datos NoSQL , como MongoDB (la más popular, creo).
  • Saber cómo conectar una base de datos con el lenguaje backend elegido (por ejemplo, Node.js + MongoDB).
  • Almacenamiento web y almacenamiento de sesiones, cookies, y datos en cache del navegador.
Básicamente, para no hacer interminable el post y mantenernos cortos y precisos, esos serian los puntos más fundamentales para conocer el mundo de un desarrollador Full-stack. Muchas veces dependiendo el área en la que te encuentres tendrás que conocer muchísimos términos como: Protocolos Http & REST, arquitectura de aplicaciones y sus tipos, controladores de versiones como GIT, algoritmos, etc.
El mundo de un desarrollador web, programador o cualquiera que sea la carrera que elijas en la tecnología será un aprendizaje constante que en la mayoría de los casos te volverá el mejor autodidacta que conozcas en tu entorno, si, tu mismo. Es importante entender que como desarrolladores debemos aprender y renovarnos rápida y constantemente para adaptarnos a los cambios. ¿Podría decirse que nuestro campo es mucho más dinámico que el de un Ingeniero en cualquier área? Creo que si.

martes, 30 de abril de 2019

Aprendizaje Virtual Ventajas

La formación virtual es la posibilidad de aprender a un ritmo propio y en un horario conveniente y flexible para cada quien, la interactividad, el estar basado en el aprendizaje colaborativo y en un concepto de formación al momento de necesitarla,  el estar apoyado en tutorías y mediado por un computador, el utilizar diversos recursos tecnológicos (herramientas audiovisuales y de comunicación sincrónica como asincrónica) para acceder a la información, la posibilidad de aumentar la matricula estudiantil con tan solo una aplicación , el adquirir conocimientos a través de un proceso activo de aprendizaje,  y el lograr reducir el tiempo de formación académica.


La educación virtual se caracteriza por 1) la separación profesor-alumno; 2) La utilización sistemática de medios y recursos técnicos; 3) El aprendizaje individual; 4) El apoyo de una organización de carácter tutorial; y 5) La comunicación bidireccional.