Bitácora de fernand0 Cambiando de aires

El enlace, la atribución y el flujo de información

Huesca.Semana Santa. Cadenas.

Este sitio se basa, casi exclusivamente, en comentarios sobre diversas notas que voy encontrando por la red. En estos casos siempre, sin excusa, hay un (o más) enlaces a lo que originó la publicación así que me gusta mucho traer Why I Attribute donde Stephen Downes nos da sus razones para hacerlo.

Una de las claves es que cuando hay atribución se puede ver no sólo el comentario de la persona que estamos leyendo, sino también los de las personas referenciadas, si el tema nos interesa lo suficiente.

By the time it got to you, you had not only the original story but also some interpretations or perspectives on that story.

También se muestra un cierto apoyo: no significa que estemos de acuerdo con lo que se pueda comentar en los otros sitios, pero al menos la historia ha interesado a una serie de personas y no solo a la que te lo muestra.

It means each of us felt that this story was important enough to pass along. By the time you got it, the story had been vetted three times.

Al final, se construye una red de relaciones, que puede verse como una comunidad, porque normalmente no habrá un solo seguidor de este contenido, ni del enlazado, ni del…

Few people have only one follower. Most people have several. Some have thousands. Nobody has millions, as on mass social networks - there's an upper limit somewhere where too many followers doesn't really work on a federated social network (which is why we are very unlikely to see advertising-supported federated social networks). These followers constitute a community.

Y como resultado de este ‘entramado’ puede ser más sencillo darle credibilidad a algunas ideas, o simplemente evaluarlas.

Getting the message in this way puts you in a much better position to assess the message, evaluate whether it is true, and decide whether to act on it (or pass it along to your own community).

Luego elabora sobre las redes sociales y cómo cortocircuitan este mecanismo, de la misma forma que lo hacen muchas veces los medios de masas, más preocupados por la cantidad de atención sobre todas las cosas. Sin olvidar del esfuerzo que supone la validación a través de la atribución.

These functions, though, have all but disappeared from news media. Because news media depended on advertising, and therefore mass audiences, it came to value engagement over all. The layers of validation and verification were not only expensive overhead, they got in the way of prioritizing engagement.

De hecho, iba a comentar arriba que en redes sociales no suelo enlazar a las fuentes tanto: por una cuestión práctica (o dos), que tiene que ver con el espacio limitado, y porque parece que nada importa demasiado allí.

Contando cantidades muy grandes con la ayuda de una moneda

Expo. Agua, flores, monedas

Si hablamos de contar pensaremos que se trata de una tarea fácil, porque es algo que hacemos habitualmente sin demasiados problemas. Incluso disponemos de herramientas que nos ayudan: cuántas fotos he hecho, cuántos pasos he dado, … Aunque a veces no es tan sencillo. En Computer Scientists Invent an Efficient New Way to Count nos preguntan cómo contaríamos el número de seres vivos en un bosque. Incluso con herramientas como ese contador de la cámara de fotos y disparando una foto cada vez que lo necesitemos sería complicado.

Imagine that you’re sent to a pristine rainforest to carry out a wildlife census. Every time you see an animal, you snap a photo. Your digital camera will track the total number of shots, but you’re only interested in the number of unique animals — all the ones that you haven’t counted already. What’s the best way to get that number?

¿Y el número de usuarios distintos que se conectan cada día a una red social como Facebook? Tendríamos que comparar cada nueva entrada de un usuario con una lista inmensa de entradas previas, para asegurarnos de que era un nuevo usuario.

It gets worse. What if you’re Facebook, and you want to count the number of distinct users who log in each day, even if some of them log in from multiple devices and at multiple times? Now we’re comparing each new login to a list that could run to the billions. </blockquote> El problema tiene nombre propio, el problema de los elementos diferentes (the distinct elements problem) y recientemente Sourav Chakraborty del Indian Statistical Institute, Vinodchandran Variyam de la University of Nebraska, Lincoln, y Kuldeep Meel de la University of Toronto han propuesto una solución novedosa, que se puede ver en Distinct Elements in Streams: An Algorithm for the (Text) Book. El algoritmo evita almacenar todo lo que se ha contado hasta el momento, basado en la aleatoriedad: podemos ir tomando elementos, hasta llegar a los 100, evitando las repeticiones. Cuando los tenemos, lanzamos una moneda al aire (¡aleatoriedad!) por cada elemento contado: si sale cara, se queda en la lista; si sale cruz, lo borramos. Al final deberíamos tener unos 50 elementos.
When the space is full, press pause and flip a coin for each word. Heads, and the word stays on the list; tails, and you delete it. After this preliminary round, you’ll have about 50 distinct words left.
Ahora seguimos contando y cada vez que encontramos un elemento que ya tenemos en la lista volvemos a lanzar la moneda: si sale cruz la borramos, y si sale cara la mantenemos en la lista. Continuamos hasta que volvamos a tener 100 elementos y volvemos a borrar de manera aleatoria aproximadamente la mitad. Con esto hemos terminado la primera ronda.
Proceed in this fashion until you have 100 words on the whiteboard. Then randomly delete about half again, based on the outcome of 100 coin tosses. That concludes Round 1.
Para la segunda, haremos algo parecido; pero en este caso será más difícil que un elemento permanezca en la lista. Si sale la cruz la borramos, igual que antes; pero si sale cara, lanzamos la moneda otra vez y mantenemos el elemento solo si vuelve a salir cara. Una vez que tenemos los 100 elementos ocupados de nuevo eliminamos alrededor de la mitad de las palabras otra vez, igual que en la vuelta anterior.
ontinue as in Round 1, only now we’ll make it harder to keep a word. When you come to a repeated word, flip the coin again. Tails, and you delete it, as before. But if it comes up heads, you’ll flip the coin a second time. Only keep the word if you get a second heads.
En la tercera ronda, hará falta que salga cara tres veces para mantener el elemento, en la cuarta, cuatro. Y así sucesivamente.
In the third round, you’ll need three heads in a row to keep a word. In the fourth round you’ll need four heads in a row. And so on.
En algún momento habremos terminado con los elementos que tenemos que contar y por la forma de proceder cada elemento tiene exactamente la misma probabilidad de estar allí que el resto: 1/2k. Por ejemplo, si hay 61 elementos en la lista y el proceso ha costado seis rondas, podemos dividir 61 por la probabilidad (1/26) lo que nos da un resultado de 3904 elementos.
The point of the exercise has been to ensure that every word, by virtue of the random selections you’ve made, has the same probability of being there: 1/2k. If, for instance, you have 61 words on your list at the conclusion of Hamlet, and the process took six rounds, you can divide 61 by the probability, 1/26, to estimate the number of distinct words — which comes out to 3,904 in this case.
Lo que han demostrado es que la precisión de este método aumenta con el tamaño del espacio que usamos para contar. Si la memoria es suficientemente grande podemos obtener una precisión del 100%.
Variyam and his colleagues mathematically proved that the accuracy of this technique scales with the size of the memory.
¿Por qué es interesante? Como dice William Kuszmaul, incluso para problemas sencillos de entender, básicos y que han sido muy estudiados se pueden encontrar soluciones simples pero no obvias.
“This is a great example of how, even for very basic and well-studied problems, there are sometimes very simple but non-obvious solutions still waiting to be discovered,” said William Kuszmaul (opens a new tab) of Harvard University.
Para personas menos acostumbradas a estas cosas también puede servir cómo, a veces, lanzar una moneda al aire nos ayuda a obtener resultados que no seríamos capaces de conseguir sin ella en un tiempo razonable.

Tiempos complicados, malos comportamientos y vigilancia

Expo. Máscara

Vivimos tiempos verdaderamente complicados. Aunque no entraremos en los detalles más técnicos, este verano fue noticia el casi conseguido ataque a un conjunto de programas desconocidos por la gente menos técnica, pero muy importantes en muchas distribuciones de Linux (xz utils). La cosa tiene casi las características de una película de intriga, porque el análisis posterior de la cosa nos muestra como alguien se infiltra en un proyecto de software libre, con tácticas de ingeniería social (esencialmente dar la lata, presionar, …) consigue hacerse con el control del proyecto e insertar código malicioso; pero no de cualquier manera, porque lo esconcía en alguna parte de la batería de pruebas, despistando a cualquier examinador que intentara encontrar algo raro. Pero algo raro había, porque un desarrollador de Microsoft se da cuenta que una determinada operación tarda más tiempo de lo que debería y, tirando del lío, descubre el problema. Justo cuando esos programitas ya habían empezado a entrar en las actualizaciones de las distribuciones, pudiendo ser un peligro muy importante.

En Jia Tan and SocialCyber ilustran el caso desde una perspectiva interesante, que es la actividad de las personas que contribuyen a este tipo de proyectos. No sólo desde el punto de vista puramente ténico, sino a través de otras señales que se pueden observar.

Jia Tan era el nombre de este contribuidor (seguramente un equipo) que estuvo a punto de liarla gordísima.

Pero aquí nos queremos centrar hoy en el punto de vista de los indicios cuando algo va mal, porque en el desarrollo de los programas hay una parte técnica y tecnológica, claro, y otra parte que podemos llamar ‘social’. Esto es, están las instrucciones y las líneas de código, la interacción con los repositorios donde se pone el trabajo en común…. pero también están los mensajes que se intercambian, la red social de personas que se relacionan directamente con el trabajo de desarrollar …

..., and that software includes both the technical artifacts (aka, the commits) and the social artifacts (messages around software, and the network of people that build the software), holds true to this day, and has not, in my opinion, received the attention it deserves.

En el caso del tal Jia Tan, si prestamos atención a los detalles podíamos ver:

  • Problemas en la línea de tiempo (fechas/horarios que no son compatibles/razonables).
  • Medidas de la actividad del usuario en cuestión.
  • Modificaciones en ‘zonas’ del código que normalmente no tocan.
  • Amistades ‘peligrosas’.
  • Verificación de las direcciones de correo electrónico utilizadas, a través del análisis en los sitios de divulgación de incidentes relacionados con ellas (ahora resulta que si tu dirección de correo no aparece en ningún indicente hay bastantes probabilidades de que sea peligrosa).
  • Comparación de similaridades con otros programas maliciosos
- Time zones (easily forged, but often forgotten), sometimes you see "impossible travel" or time-of-life anomalies as well - Pagerank (measures "importance" of any user in the global or local scope of the repo). "Low" is relative but I just pick a random cutoff and then analyze from there. - Users committing to areas of the code they don't normally touch (requires using Community detection algorithms to determine areas of code) - Users in the community of other "bad" users - Have I Been Pwned or other methods of determining the "real"-ness of an email address - especially email addresses that come from non-corpo realms, although often you'll see people author a patch from their corpo address, and commit it from their personal address (esp. in China) - Semantic similarity to other "bad" code (using an embeddings from CodeBERT and Neo4j's vector database for fast lookup)

Podemos estar de acuerdo en que no siempre es muy sencillo hacer estas comprobaciones y menos todavía si no somos personas de perfil técnico; pero también lo estaremos en que podemos detectar situaciones ‘raras’ prestando un poco de atención y haciendo las preguntas o las indagaciones correctas. Y eso está en la mano de casi todo el mundo.

Apasionante.

Sobre el ataque se puede leer en The Mystery of ‘Jia Tan,’ the XZ Backdoor Mastermind.

Los modelos de lenguaje, los datos y las instrucciones

Velas

Uno de los problemas fundamentales en la seguridad informática aparece cuando por el mismo canal de comunicación aparecen información y datos de control (instrucciones): aunque los marques para diferenciarlos, alguien lo hará mal alguna vez o alguien encontrará una forma de saltarse las medidas que pongamos.

Cuando hablamos de inteligencias artificiales estos días casi siempre nos referimos a los modelos gigantes de lenguaje (large language models, LLMs) y Bruce Schneier nos hablaba del problema en LLMs’ Data-Control Path Insecurity.

Comienza recordando que las primeras centralitas telefónicas eran vulnerables al problema y cómo alguna gente enviaba tonos especiales que les permitían llamar gratis.

Back in the 1960s, if you played a 2,600Hz tone into an AT&T pay phone, you could make calls without paying.

El problema era el que comentábamos: por la misma línea iban los datos (el sonido de la llamada) y la información de control (esos tonos y otros que se usaban).

This general problem of mixing data with commands is at the root of many of our computer security vulnerabilities.

Es el mismo problema que la inyección de SQL, los desbordamientos de memoria… que son un poco técnicos para ponerlos aquí.

Cuando han llegado los modelos de lenguaje, se ha empezado a hablar de la inyección de preguntas (prompt injection) y la idea vuelve a ser la misma: el mismo canal que nos sirve para interrogar al modelo, permite controlar determiandas formas en que responderá. Por lo tanto, alguien podrá engañar al modelo para que proporcione información que no debería.

Prompt injection is a similar technique for attacking large language models (LLMs). There are endless variations, but the basic idea is that an attacker creates a prompt that tricks the model into doing something it shouldn’t.

Es relativamente sencillo tratar de evitar estos ataques cuando se conocen, pero el problema es que hay muchas formas en las que esto puede suceder y esto es, en sí mismo, un problema.

Individual attacks are easy to prevent once discovered and publicized, but there are an infinite number of them and no way to block them as a class.

Además, y a diferencia de los sistemas previamente mencionados, no es posible separar en estos sistemas los datos de las instrucciones, porque justo esa es una de sus características: queremos que los datos cambien el comportamiento de la cosa.

But unlike the phone system, we can’t separate an LLM’s data from its commands. One of the enormously powerful features of an LLM is that the data affects the code. We want the system to modify its operation when it gets new training data. We want it to change the way it works based on the commands we give it. The fact that LLMs self-modify based on their input data is a feature, not a bug. And it’s the very thing that enables prompt injection.

Muy interesante.

La inteligencia artificial y algunos argumentos alrededor de ella

Decoración galería comercial

Me gustó escuchar la intervención de Simon Willison en la PyCon US sobre inteligencia artificial. Ha puesto a disposición del que quiera verlo una transcripción con imágenes que creo que puede ser muy interesante: Imitation Intelligence, my keynote for PyCon US 2024. Se puede escuchar/ver en Keynote Speaker - Simon Willison.

Empieza desde los oríenes de la IA (eso me gusta) allá por el año 1956 (desde que tenemos computadoras hay gente pensando en que podrían pensar) y reformula el término de inteligencia articial de los modelos grandes de lenguaje (LLMs) como inteligencia emulada. Y no para despreciarla, sino para poder trabajar a partir de ese concepto.

When discussing Large Language Models, I think a better term than “Artificial Intelligence” is “Imitation Intelligence”. It turns out if you imitate what intelligence looks like closely enough, you can do really useful and interesting things.

Pero sin olvidar que no son inteligentes, sino que simplemente imitan lo que se les ha mostrado previamente.

It’s crucial to remember that these things, no matter how convincing they are when you interact with them, they are not planning and solving puzzles... and they are not intelligent entities. They’re just doing an imitation of what they’ve seen before.

Habla un poco de los diversos aspectos que pueden preocuparnos de la IA (licencias, sesgos, las preguntas -prompts- y sus riesgos de seguridad, da algún ejemplo …

Finalmente, hace otra reformulación cambiando lo de inteligencia artificial generativa en inteligencia artificial transformativa, porque considera que la aplicación más interesante es justamente esa: proporcionar grandes cantidades de texto y utilizarlo para evluar y hacer cosas con ello.

I think the most interesting applications of this stuff when you feed large amounts of text into it, and then use it to evaluate and do things based on that input.

Termina hablando de ética, desde la procedencia de los datos de entrenamiento (que no le preocupa demasiado) pero también cómo se utiliza para generar contenidos y, si estamos en ese lado, la pregunta sería si estamos generando algo valioso con la IA o simplemente aumentando el contenido automáticamente sin proporcionar nada de valor. Esto es, ¿la usamos de manera responsable?

I love this term. As a practitioner, this gives me a mental model where I can think, OK, is the thing I’m doing-is it just slop? Am I just adding unwanted AI-generated junk to the world? Or am I using these tools in a responsible way?

También habla del fraude (cheating), en particular entre los estudiantes. Nos dice: es malo porque les hace daño (si eres un estudiante y estás usando estas herramientas para que parezca que sabes algo que realmente no sabes, eso es un problema) y, además, es malo porque les puede estar dando una ventaja frente a otros.

I think there are two reasons. Firstly, it hurts them. If you’re a student who cheats and you don’t learn anything, that’s set you back. Secondly, it gives them an unfair advantage over other students. So when I’m using this stuff, I try and bear that in mind.

También habla de compartir las preguntas (al estilo de compartir código) y lo interesante que son estas herramientas a la hora de programar (es un foro de programadores, al fin y al cabo) por la sencilla razón de que la sintáxis y la gramática de los programas es muchísimo más simple que la de los lenguajes naturales y eso hace que funcionen bastante bien.

It turns out language models are better at generating computer code than they are at generating prose in human languages, which kind of makes sense if you think about it. The grammar rules of English and Chinese are monumentally more complicated than the grammar rules of Python or JavaScript.

Y se pregunta si habremos llegado al punto donde no es necesario ser un ingeniero para automatizar tareas aburridas.

This offends me. You shouldn’t need a computer science degree to automate tedious tasks in your life with a computer.

Pero esto también es una responsabilidad: que nadie se quede atrás, que tenemos que ayudar a otros a aprender, comprender y manejarse razonablemente en este nuevo mundo.

I think that means we have a responsibility not to leave anyone behind, to help pull other people up, to understand the stuff and be able to explain it and help people navigate through these weird (and slightly dystopian at times) waters.

Muy interesante.

Willison es un viejo conocido por aquí, aunque veo que no lo he enlazado apenas. Por ejemplo, en 2008, Sitios para visitar en Londres (para geeks).