<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Tomás Vergara Browne on Medium]]></title>
        <description><![CDATA[Stories by Tomás Vergara Browne on Medium]]></description>
        <link>https://medium.com/@tomvergara?source=rss-485cf808c778------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*vuWjgizKELp0MUDUA-QfQw.jpeg</url>
            <title>Stories by Tomás Vergara Browne on Medium</title>
            <link>https://medium.com/@tomvergara?source=rss-485cf808c778------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 23 Jun 2026 05:45:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@tomvergara/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Guía para postular a doctorado (siendo chileno)]]></title>
            <link>https://medium.com/@tomvergara/gu%C3%ADa-para-postular-a-doctorado-siendo-chileno-21cd1c4785dd?source=rss-485cf808c778------2</link>
            <guid isPermaLink="false">https://medium.com/p/21cd1c4785dd</guid>
            <category><![CDATA[research]]></category>
            <category><![CDATA[admissions]]></category>
            <category><![CDATA[phd]]></category>
            <category><![CDATA[chile]]></category>
            <dc:creator><![CDATA[Tomás Vergara Browne]]></dc:creator>
            <pubDate>Sat, 13 Jan 2024 17:48:52 GMT</pubDate>
            <atom:updated>2024-01-13T17:48:52.888Z</atom:updated>
            <content:encoded><![CDATA[<p>Este ensayo está pensado para alumnos de universidades chilenas, que planean hacer un doctorado en otras partes del mundo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q945SXrvqaAa4h7Rt8mUzw.png" /><figcaption>Imagen generada por DALL-E</figcaption></figure><p>El consejo es también valioso para quienes planeen hacer un doctorado en Chile, pero hay una pequeña diferencia: <em>Puedes conocer a los profesores antes de postular</em>. Eso es difícil con profesores que trabajan afuera.</p><p>No voy a describir qué requisitos tienes que cumplir para postular. Varían de universidad a universidad, y es fácil de googlear.</p><p>Estos consejos no es una lista de requisitos, sino que consejos a nivel general.</p><p>El resumen de este ensayo es muy directo: <em>Los alumnos aceptados son los que tienen credibilidad.</em></p><p>Nunca te van a aceptar porque sólo porque tienes buenas notas, porque tu tesis está bien escrita o porque hayas hecho muy buenas respuestas en su formulario de postulación. Ninguna de esas cosas por sí sola genera <em>credibilidad</em>.</p><p>Hay 3 maneras de generar credibilidad.</p><h3>Papers</h3><p>Un doctorado es una posición de trabajo. Las universidades aceptan alumnos no porque sean inteligentes, agradables o muy emocionados por ir a esa universidad. La universidad acepta alumnos por su capacidad de hacer investigación.</p><p>Cuál es la credibilidad de un postulante que nunca ha hecho investigación? Ninguna.</p><p>La mejor manera de tener credibilidad es teniendo un paper publicado. Esto significa que has hecho investigación, y que ha sido de suficiente calidad como para que otra gente lo publique. Es decir, otra gente ya te dio credibilidad.</p><p>Pero los papers no es la única manera. Necesitas mostrar que puedes hacer investigación, y no necesariamente siempre implica papers.</p><p>Hay que mostrar tu trabajo de investigación, entre más mejor. Las investigaciones con malos resultados también generan credibilidad (todos los profesores también tuvieron malos resultados en sus propios proyectos), o proyectos novedosos pero no necesariamente tienen que ser en formato de una publicación.</p><p>Lo que sí es importante, es dar fuentes externas para mostrar este trabajo. Idealmente, tienes un link en donde se pueda encontrar más información de tus proyectos que mencionas. Si no tienes eso, también puede ser útil (pero en menor medida) mencionar con mucho detalle con quienes trabajaste y explícitamente en qué. Los detalles son importantes. En los detalles está la credibilidad.</p><h3>Relaciones personales</h3><p>Muchos candidatos aceptados a un doctorado ya conocían a gente cercana al profesor al que postularon.</p><p>Esto es muy razonable. Si el profesor leyendo tu postulación le puede preguntar a sus conocidos acerca de ti. Tiene una manera directa de confirmar lo que dices y quién eres. No existe ninguna respuesta en un formulario que sea más confiable que el juicio de un conocido.</p><p>Esto es más fácil de lo que suena. Hacer investigación no es sólo hacer experimentos, sino que es difundir los resultados y conocimiento que tiene. En este proceso, es inevitable que conozcas gente del área que te interesa investigar. Naturalmente vas a conocer personas que tu profesor al que postulas también conoce.</p><p>Algo importante es que este proceso de conocer gente no tiene que ser forzado. Si te interesa la investigación de una persona es muy bueno hablarle y comentarlo.</p><p>En cambio, si te interesa una persona sólo por quiénes conoce, eso daña gravemente tu credibilidad. El falso interés se nota a kilómetros. No lo intentes.</p><p>Por lástima en Chile estamos en la punta del mundo, y resulta difícil conocer a muchos de los autores de las investigaciones que nos interesa. La mejor solución es saliendo de Chile, a conferencias, charlas y eventos. Obviamente, eso implica un costo económico no menor. Muchas universidades tienen fondos para asistir, y recomiendo postular (es más factible ganárselo de lo que parece). Aún sin tener fondos de tu universidad, es importante pensar estos viajes como una inversión y aceptar el costo. Nacen más oportunidades de las que uno se imagina.</p><h3>Todo el resto</h3><p>Es trampa poner “todo el resto” como el tercer punto, pero es la verdad.</p><p>Al generar credibilidad, es importante que no hayan <em>red flags</em>. Esto abarca todo el rango posibles cosas que podrían afectar tu postulación.</p><p>Tener malas notas, escribir una mala tesis o hacer malas respuestas en los formularios son pequeños red flags. Levantan preguntas como: <em>Por qué esta persona tiene buena investigación, pero malas notas?</em> Lo grave no es la pregunta, sino que no hay respuesta. Puede que haya una explicación muy razonable, pero la persona leyendo la postulación no tiene cómo saber.</p><p>La manera ideal de evitar estas preguntas sin respuestas es evitando que se levante la pregunta en primer lugar. Dedica mucho tiempo a escribir muy bien tu postulación, y que no salten dudas al leer tus respuestas.</p><p>De todas maneras, no podemos predecir las preguntas que podrían surgir al leer nuestra postulación. Si esas personas pueden preguntarle a alguien de su confianza al respecto, sabemos que esas preguntas van a tener una respuesta. Por eso es importante conocer gente.</p><p>De igual manera, las cartas de recomendación tienen que ser consistentes con tu postulación. Elige personas que te realmente te conocen, y que te hayan visto dedicarte a investigación.</p><p>Elegir un profesor que no te conoce sólo porque tiene renombre, no vale la pena.</p><p>Un muy buen tip que leí una vez decía que es malo preguntarle a alguien:</p><blockquote>“Me puedes escribir una carta de recomendación?”</blockquote><p>Esta pregunta no dice <em>cómo</em> debiera ser la carta de recomendación. Puede que esa persona tenga un template preparado, y que simplemente rellene tu nombre.</p><p>En cambio, lo que se proponía preguntar es:</p><blockquote>“Me puedes escribir una carta de recomendación <strong><em>exageradamente</em></strong> buena?”</blockquote><p>Si no sientes la confianza de preguntarle a alguien esta pregunta, es poco probable que su carta de recomendación hubiera sido buena de todas maneras.</p><p>Esta pregunta comunica que realmente te importa lo que ellos escriban. Te importe porque… es verdad. Las carta de recomendación son importantes, y es bueno dar a entender esto es algo que te afecta.</p><p>El resumen de todo el consejo es que: <em>Los alumnos aceptados son los que tienen credibilidad.</em></p><p>Por qué este consejo es particularmente para gente en Chile? Nosotros estamos empezando con las chances en nuestra contra.</p><p>Casi nadie conoce la investigación que se hace en Chile. Casi nadie conoce universidades chilenas. Casi nadie conoce Chile.</p><p>Por qué un profesor te tendría que aceptar a ti, y no al alumno de China/EEUU/Francia/etc? Existen miles de investigadores exitosos de esos países, y es fácil sentir confianza con alumnos de esas partes del mundo.</p><p>Es mucho más riesgoso aceptar el alumno chileno, y los profesores no siempre están dispuestos a tomar riesgos.</p><p>Si diseñas tu postulación con el foco en la <em>credibilidad</em>, tu postulación va a ser buena.</p><p>Por supuesto, eso no signifique que quedes aceptado. Siempre hay cosas que no podemos prevenir, y es mejor postular a varias universidades y profesores para disminuir el riesgo.</p><p>Pero es esencial enfocarse en la credibilidad. Empezamos desde una base muy baja, y hay que disminuir la sensación de riesgo que va a tener quien lea nuestra postulación.</p><p>Notas extra:</p><ul><li>Todavía no he postulado a doctorado, sino que lo voy a hacer este año. He investigado mucho del proceso, y siento confianza de todo lo que afirmo aquí a pesar de todavía no estar aceptado en un programa de doctorado. Si hay puntos para discutirme, felizmente recibo feedback y puedo cambiar cosas del ensayo.</li><li>Está pensado para la postulación a doctorados en computación. Dentro de mi conocimiento es similar en otras áreas.</li><li>Para postular a un doctorado en Chile el consejo es similar, pero no hay tantas barreras. Es importante conocer al profesor al que postulas, y ellos generalmente están abiertos a conocer gente interesada en su investigación.</li><li>Escribí consistentemente “profesor”, en lugar de “profesor o profesora”. No es un intento de mostrar un sesgo, sino que se hace verboso escribir tantas palabras de más. Mi objetivo es únicamente maximizar la claridad del mensaje del ensayo.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=21cd1c4785dd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The technical debt of LLMs]]></title>
            <link>https://medium.com/@tomvergara/the-technical-debt-of-llms-3b9bb55c687b?source=rss-485cf808c778------2</link>
            <guid isPermaLink="false">https://medium.com/p/3b9bb55c687b</guid>
            <category><![CDATA[large-language-models]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[phd]]></category>
            <category><![CDATA[research]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Tomás Vergara Browne]]></dc:creator>
            <pubDate>Fri, 27 Oct 2023 22:10:26 GMT</pubDate>
            <atom:updated>2023-10-27T22:10:26.539Z</atom:updated>
            <content:encoded><![CDATA[<p>Large Language Models have taken over in the ML research space. So now, there is someone researching anything you might think about these models.</p><p>Maintaining focus on what to research on, is much more important than working hard in research (although working hard is also necessary). It might be harder, but it will be much more rewarding in the long term.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fmJ8839FP98YDxjpqBBopA.png" /></figure><p>And while I am by no means the leading expert on knowing the way forward in LLMs (or foundational models in general), I wanted to write my list of “technical debts” these current models have. This list is focused on problems which might <strong>improve</strong> the capabilities of these models.</p><h3>Multimodality</h3><p>Well, this one is not a shocker. A lot of researchers are already working to add more modalities (generally images) into these models.</p><p>Although I have not dived deep into this area of research, current approaches sound like “stitching” two models together and hope they work together well. I have not read an approach which feels like an elegant solution to the multimodality problem, and we definitely need multimodality for these models to have a wide range of applications, rather than just a chat bot.</p><h3>Removing auto regression</h3><p>We call this LLMs to be “generative models”, but I do not quite agree. These LLMs were trained to predict the next token, not to generate large portions of text. Of course, if you predict the next word enough times, you can produce large portions of text, but this seems to be a hacky way of producing text.</p><p>This autoregressive strategy of predicting token after token does not <em>feel right</em>. It wastes a lot of compute (having to essentially make a forward pass with each token) and it is slow. This does not seem like a long term solution.</p><p>Our current use case of these LLMs is text to text, not text to word. We should somehow figure out how to do that task efficiently (instead of next-word prediction).</p><p>This does not mean that the next-word prediction pre-training is bad (it has proven to be quite impressive). But leveraging these models into a text-to-text objective is a potentially fruitful area of research.</p><h3>Adaptive computation</h3><p>There are questions which are inherently harder to answer. Some questions require many steps of reasoning to answer correctly.</p><p>The problem with current LLMs, is that they have a fixed amount of compute. Easy questions have the same amount of computation as harder. How can we expect these models answer correctly these hard questions if they get the same amount of compute each time?</p><p>Current models are resorting to memorization, instead of leveraging some sort of systematic process, because they cannot even implement these systematic processes.</p><p>Adding some sort of adaptive computation, with repeating computation steps, might be a way to improve the lack of systematic thinking in these models. Figuring out how to do that efficiently is not easy, but it is definitely a huge area of improvement in these models.</p><h3>Continual Memory</h3><p>We want these models to have some sort of memory. We want them to remember our conversations, even if they happened days ago.</p><p>Currently we are trying to extend the context window. If we put our whole history in this prompt, then the model does not have to explicitly remember anything.</p><p>I do not think that is the correct approach. It is computationally expensive, and also does not <em>feel right</em>. We definitely do not remember <em>everything</em>, but rather keep in our heads the most important information that we remember of events that happen.</p><h3>Search instead of predict</h3><p>Next-word prediction limits the creativity of these models. They learn to predict what a human might answer, but we want to be better than humans. It is like training a chess engine to predict human moves. It would never be able to beat a grandmaster.</p><p>As in chess (or go), the models which superseded human performance used some sort of <em>search</em>.</p><p>In these algorithms, they search in the space of possible moves, and evaluate how <em>good</em> is it. That is how Alpha Go made the move 37. If Alpha Go was just trained to predict human professional go players moves, then it would have never predicted that move.</p><p>Of course, implementing some sort of notion like that in LLMs is not easy, but it is an area of research that could change the state of the art of these models.</p><p>And given this, what should <em>you</em> work on?</p><p>There are no clear answers.</p><p>I believe the most important thing, is to work on something that <em>interests</em> you. Research is hard, and there is no point in making it harder by researching something you fundamentally do not care about.</p><p>But you should not ignore how important a problem is. It probably is a frustrating experience to work on something no one (besides you) really cares.</p><p>Finding a problem which is both <em>important</em> and <em>interesting</em> might be the real key behind any good career in research.</p><p>This post was very much inspired in “<a href="http://paulgraham.com/greatwork.html">How to do Great Work</a>” by Paul Graham, but directed to Machine Learning research (and much more scoped).</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3b9bb55c687b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Minimalist Transformer]]></title>
            <link>https://medium.com/@tomvergara/minimalist-transformer-5f625763ba46?source=rss-485cf808c778------2</link>
            <guid isPermaLink="false">https://medium.com/p/5f625763ba46</guid>
            <category><![CDATA[deep-learning]]></category>
            <category><![CDATA[chatgpt]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[transformers]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Tomás Vergara Browne]]></dc:creator>
            <pubDate>Mon, 22 May 2023 03:25:33 GMT</pubDate>
            <atom:updated>2023-05-23T01:14:11.048Z</atom:updated>
            <content:encoded><![CDATA[<p>If you are just starting to learn about Deep Learning, you might struggle to understand the Transformer architecture (I know by personal experience).</p><p>I have not seen (as of yet) an easy explanation for the Transformer. Most of the explanations assume you have got a good background in deep learning, and they get tangled up in details which are not essential for the architecture.</p><p>I’ll try to give the most basic explanation on the <em>how</em> and the <em>why</em> the Transformer is such a good architecture.</p><p>For this, I will show a variation of the Transformer: the <em>Minimalist Transformer</em>. You’ll just need to know the basics of neural nets, and some basic linear algebra to understand it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bOZFy2TKl3TDB0DxwZutgA.png" /><figcaption>Minimalist Transformer architecture diagram</figcaption></figure><p>This architecture will, however, leave out some details of the architecture. These details are important, but are not essential in understanding the core functionality of the transformer.</p><p>But first, lets understand why the Transformer was necessary.</p><h3>Before the Transformer</h3><p>This is 2017. The deep learning models in NLP (natural language processing) were bad. Do you remember Google Translate in 2017? It was terrible.</p><p>The architecture used for NLP tasks were mostly variations of LSTMs (Long Short Term Memory Architecture) which had two big problems:</p><ul><li><strong>Sequential execution</strong>: LSTMs “read” one word at a time. Consider if we wanted to read the entire Wikipedia (29 billion words), and lets consider 0.01 seconds for each word. That would sum up to more than 200,000 days.</li><li><strong>Terrible long term dependencies</strong>: LSTMs are made to “remember” everything they read, without ever going back. That implies if the word “John” is said at the beginning of a text, and only mentioned again much later, the LSTM might struggle to recognize it is the same person.</li></ul><p>Recognizing these problems, many papers attempted to implement a notion of <em>attention</em>. We refer as attention to our notion of focusing on different parts of a text at different times.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZqAxuzxb6lWTyq37KmtBtg.png" /><figcaption>Example of how attention would work in solving a math problem</figcaption></figure><p>Attention is this notion of ignoring unimportant details, and paying attention to what really matters in our objective. The Transformer leverages this notion, by using <strong>self-attention</strong>.</p><h3>Self-Attention</h3><p>Self-attention means that each word of the input, pays attention to other words of the same input. This is extremely useful for natural language, as a word might gain substantial meaning when seeing its context.</p><p>For example, the word “spring” means different things in different contexts. This way, “spring” might mean something when it is paying attention to words like “mechanics” or “force” , while having another meaning when seeing “winter” or “summer”.</p><p>To understand the implementation, its better to use an analogy to databases. You’ll need just a bit of lineal algebra (and attention).</p><h3><strong>Key-value Databases</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MKRQfFUtUjf_n_nbSeCVcA.png" /></figure><p>Lets say that we want to <em>query </em>this database. Suppose we query the value 1 (<em>Q=1</em>). Then, the associated value would be 4, because when it exists the key 3, such that its value is 4.</p><p>What would happen if we query the value <em>Q=1.1</em>? That exact key does not exist, so it would not return any value. But, there is a sense that we might want something between the values of 4 and -1, because 1.1 exists in between their respective keys (1 and 2).</p><p>Better yet, lets suppose the keys and values are no longer integers, but <strong>vectors</strong>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jNCtBBDVCMtDpeFYYsZ5rg.png" /></figure><p>We might want to query this table by another vector, lets say <em>Q=(1,0)</em>. It would be great if we compared this vector to every key and know if the key is similar or not.</p><p>If you remember your linear álgebra, you might recall that dot-product actually does this. A dot-product of two same length vectors is greater when the vectors have similar direction.</p><p>Lets compute this.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/950/1*t6gHKJyekr0rwjzvmyqBjg.png" /></figure><p>So we now have a notion of which vector is more similar to the query vector. But, it is not simple to determine what to return as a value. We would like for every value to be between 0 and 1, and for the sum of the values to be 1. That way it would be easy to interpretate this as proportions.</p><p>For that, we use <a href="https://en.wikipedia.org/wiki/Softmax_function">Softmax</a>. Softmax maps a range of values as if it were a probability distribution.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HN7JT8DI8Erh8k_22wzZ6w.png" /></figure><p>So now we multiply can each value with its corresponding probability.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pE8QTiUfeW6Nc-hzLn2e8A.png" /></figure><p>So we computed what that (3.2147, 1) is the value associated to the query of <em>Q=(1,0).</em></p><p>Imagine we not only want a single query, but rather many queries at the same time. Then we can represent that as an array of the queries. Such for example, if we were to query (1,0) and (0,1), we would say that:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1008/1*_ppyONMVFgpYnrSvtrFmlQ.png" /></figure><p>(we computed the result of querying<em> (0,1)</em> by the same process as before)</p><p>It would be nice to actually do this by managing matrices, rather than going each query and computing its value. And actually, we can.</p><p>So now, we rearrange our queries, keys and values on the following way.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ozU9Gy6x5taac99fj49xQg.png" /></figure><p>Now to compute that exact notion as before, we have to do:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HAIDdKXs41BTm2soibLH6Q.png" /></figure><p>See that Q multiplied by K transposed is actually the same as doing a dot multiplication for every pair of query-values.</p><p>So, after applying the Softmax along the vertical axis in this new matrix, we can just multiply by the values to compute the final matrix.</p><p>This is the notion behind self-attention. For the input we will compute three matrices: query, key and value. Each word in the input, will compute a query vector, a key vector, and a value vector. The array of these vectors will be the Q, K and V matrices.</p><p>This way each word will be compared to each word’s key. If the comparison shows that they are similar to another words key, the value vector that key will be represented strongly in the output.</p><p>We can put this in code simply by</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/bba9db5f7221845ed7753006ad5d7c57/href">https://medium.com/media/bba9db5f7221845ed7753006ad5d7c57/href</a></iframe><p>Now, these results are passed through a feedforward layer. If you do not remember this layer, it is basically just two linear layers, separated by an activation function.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3000a5edfcae25ed6e454d9ff92b6ccb/href">https://medium.com/media/3000a5edfcae25ed6e454d9ff92b6ccb/href</a></iframe><p>These Layers add the capability of computing <em>between </em>the outputs of the self attention module. Now the words can be used together to form new vectors which represent a much richer understanding of the input.</p><p>And with this, we have everything to put together our <em>Minimalist Transformer</em>.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/5ee35c56accd0b293e4f4006814f8d30/href">https://medium.com/media/5ee35c56accd0b293e4f4006814f8d30/href</a></iframe><p>We note that we use Residual connections (fancy way of saying we sum the input with the output of a layer). That is useful, because the layer does not have to try and “remember” the input, which might be useful later, but rather it tries to enhance the input with additional information. In practice it works pretty well.</p><p>Remember the 2 problems for which the transformer was created?</p><ul><li><strong>Sequential execution</strong>: The transformer can execute everything in parallel, due to using matrix multiplication for every operation. This way, enormous amounts of text can be processed in parallel.</li><li><strong>Terrible long term dependencies</strong>: Transformers can recognize long term dependencies in the self attention module. It does not matter if the words are far apart, they will still be a place for computing the attention between these words in the Q by K^T matrix.</li></ul><p>But the greatest achievement is shown only in practice. As in most things in deep learning, outcomes are hard to predict. The greatest thing the transformer has done is to continue to perform consistently in data. GPT, DALL-E, LLaMa would not have existed if this architecture was not able to scale.</p><p>But as I said before, this architecture is not exactly the Transformer architecture. If you have read and understand everything of the <em>Minimalist Transformer</em>, I do not suggest reading the real Transformer architecture.</p><p>On the other hand, if you got the idea of this architecture, you might want to research on:</p><ul><li><strong>Positional encodings</strong>: They add information about the words/inputs position before the first transformer layer. This way the attention model might understand how the order of words matter.</li><li><strong>Encoders/Decoders: W</strong>e might not want for every word to be able to pay attention to any other word. This is leveraged in the difference between encoders and decoders.</li><li><strong>Multi-head attention:</strong> We can actually compute several query, key, value vectors for a single word.</li><li><strong>Normalization layers and dropout layers: </strong>They tend to improve the generalization of the net, and prevent overfitting.</li></ul><p>If you have read this far, I hope I was able to help you through your journey starting to understand Deep Learning :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5f625763ba46" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Afila la sierra]]></title>
            <link>https://medium.com/@tomvergara/afila-la-sierra-66981e79311b?source=rss-485cf808c778------2</link>
            <guid isPermaLink="false">https://medium.com/p/66981e79311b</guid>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[tools]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Tomás Vergara Browne]]></dc:creator>
            <pubDate>Tue, 07 Feb 2023 14:21:39 GMT</pubDate>
            <atom:updated>2023-02-07T14:21:39.371Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>Un hombre se tropieza con un leñador en medio de una montaña.</blockquote><blockquote>El hombre se detiene a observar al leñador, viendo cómo sierra febrilmente un árbol enorme.</blockquote><blockquote>La sierra del leñador se mueve, de lado a lado, sin descanso. A pesar de esto, no parece avanzar mucho a través del árbol.</blockquote><blockquote>El hombre nota que la sierra del leñador está tan afilada como un cuchillo de mantequilla, por lo cual dice:</blockquote><blockquote>“Perdone, señor leñador, pero no he podido evitar darme cuenta de lo duro que está trabajando en ese árbol, pero sin llegar a ninguna parte”</blockquote><blockquote>“Sí… lo sé. Parece que este árbol me está dando problemas” responde el leñador, mientras una gota de sudor se le cae de la frente.</blockquote><blockquote>“Pero señor leñador, su sierra está tan desafilada que es imposible que corte nada”.</blockquote><blockquote>“Lo sé”, dice el leñador, “pero estoy demasiado ocupado aserrando como para dedicar tiempo a afilar mi sierra”.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/496/0*04tT_2mKqofhgePq.png" /></figure><p>Todos estamos ocupados. Tenemos más cosas por hacer que tiempo para hacerlas.</p><p>Pero siempre va a ser así, y no siempre priorizamos lo importante un lugar de lo “urgente”.</p><p>Creo que esto es particularmente importante para un dev.</p><p>Estamos constantemente trabajando para hacer ciertos procesos más eficientes, rápidos y confiables. Sin embargo, pocas veces nos detenemos a pensar si nuestro propio proceso de trabajo es eficiente, rápido y confiable.</p><p>Si bien nuestras sierras no se desafilan con el uso, sí se pueden afilar. Se pueden afilar cada vez más, sin tener un límite.</p><p>Hay muchas actividades que nos hacen mejores desarrolladores de software. Son esas actividades que constantemente pensamos “debería hacer más de esto, pero ahora no tengo tiempo”.</p><p>La razón por la cual no solemos hacer estas actividades, es porque el beneficio de hacerlas es en un largo plazo.</p><p>Es muy fácil enfocarse en programar todo el día, y construir cada vez más código. Eso da una sensación de satisfacción productividad inmediata.</p><p>Sin embargo, probablemente mejoraríamos más como ingenieros dedicando nuestro tiempo de otra manera.</p><p>Voy a hacer énfasis en una manera de “afilar la sierra” siendo dev. Es la importancia de programar… rápido.</p><h3>Programa… rápido ⚡️</h3><p>Como es de esperar, un dev pasa una cantidad considerable de tiempo programando.</p><p>Sin embargo, el tiempo que gastamos programando, es decir, físicamente apretando teclas del teclado, nunca es el cuello de botella. En general, pasamos más tiempo pensando y diseñando soluciones.</p><p>A pesar de eso, programar rápido tiene más ventajas de lo que uno podría esperar.</p><p>Primero, si bien la mayoría del tiempo no estamos programando, sí lo hacemos una cantidad considerable. Podrían ser simplemente 2 horas al día, pero si podemos hacer esas 2 horas en 1 hora y media o incluso 1 hora, ahorramos mucho tiempo. Pero ese efecto diría que no es lo más importante.</p><p>La gran ventaja que tiene programar rápido, es que el teclado termina siendo una extensión de tus pensamientos.</p><p>Una vez te acostumbras a programar extremadamente rápido, el cambio de contexto de pensar una solución a tenerla en código es cada vez menor.</p><p>Eso hace que podamos pensar más profundamente en nuestras soluciones. En lugar de tener una idea, y después pensar “¿Cómo agrego una indentación a todo este bloque?”, uno puede tener la cabeza absolutamente enfocada en el problema, y que las manos, de manera casi automática, implementen lo que pensaste.</p><p>Hay varias maneras de aumentar la velocidad a la que programas, voy a mencionar algunas que creo que valen la pena.</p><h3>Dedica tiempo a tu editor de texto</h3><p>Estamos casi todo el tiempo con nuestro editor de texto abierto.</p><p>La gran mayoría de nosotros, estamos estancados en la cantidad de funcionalidades que utilizamos de él.</p><p>Llegamos a una especie de punto de inflexión, en donde decidimos que no vale la pena seguir aprendiendo más cosas del editor. Estamos acostumbrados a lo que usamos y creemos que estamos bien.</p><p>Sin embargo, esta visión no toma en cuenta lo mucho que escala sentirse cómodo con tu editor de texto.</p><p>Cosas sencillas, como saber cómo borrar toda una línea con un par de teclas, o saber cómo copiar la palabra con la que estás o cómo indentar una selección de líneas, puede terminar ahorrando algunos segundos por día.</p><blockquote><em>¿Segundos por día? Meh…</em></blockquote><p>Pero, si aprendes en 10 minutos algo que te acelera 1 segundo todos los días, en 10 años más habrás ahorrado 60,8 horas.</p><p>Pero eso no es lo realmente importante. Cuando aprendes algo nuevo de tu editor, te sientes más cómodo con él.</p><p>Esa comodidad se traduce en que ya no sientes que debes “pensar” para programar. La actividad de programar pasa a ser un mero trámite, que no te quita mucha capacidad mental.</p><p>Así puedes probar más cosas, implementar ideas más rápido, y todo sin tener el costo mental de pensar cómo hacerlo. Te puedes enfocar en hacer mejores soluciones, con mejor código, en lugar de enfocarse en cómo escribirlo.</p><p>Si quieres mejorar en tu editor de texto hasta no tener límites, recomiendo <a href="https://www.youtube.com/watch?v=wlR5gYd6um0">Vim</a>. Si bien hay muchos otros editores de texto muy buenos, creo que el paradigma de Vim es el que más escala en términos de velocidad y comodidad para programar.</p><h3>Herramientas externas de código</h3><p>Pero programar no sólo implica tu editor de texto. Tenemos muchas herramientas que usamos cuando programamos: desde googlear, buscar archivos, revisar monitoreos, etc.</p><p>En general, existen numerosas herramientas para hacer todo eso más eficiente. Algunas herramientas que yo uso en mi día a día (y recomiendo profundamente) son:</p><ul><li><a href="https://arc.net/">Arc</a></li><li><a href="https://github.com/features/copilot">Copilot</a></li><li><a href="https://github.com/gokcehan/lf">LF</a></li><li><a href="https://akiflow.com/">Akiflow</a></li><li><a href="https://chrome.google.com/webstore/detail/merlin-openai-chatgpt-pow/camppjleccjaphfdbohjdohecfnoikec">Merlin</a></li><li><a href="https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb">Vimium</a></li></ul><p>Cada uno de esos siento que me ha logrado ser más rápido en términos marginales. Pero todas juntas, y soy por lo menos el doble de rápido de antes.</p><p>Es por eso que siempre vale la pena investigar nuevas herramientas. Puedes encontrar nuevas herramientas para usar, simplemente:</p><ul><li>Pregunta a otros devs las herramientas que usan en su día a día.</li><li>Revisa <a href="https://www.producthunt.com/">Product Hunt</a>.</li><li>Googlea (parece obvio, pero muchas veces estamos acostumbrados a resolver los mismos problemas de la misma manera, sin investigar si hay mejores formas).</li></ul><h3>Automatiza tu workflow</h3><p>Finalmente, me parece siempre curioso que no usamos la misma filosofía del código para nuestra propia manera de programar.</p><p>Todo dev, si ve que unas mismas líneas de código se repiten una y otra vez, generalmente nos cuestionamos si debiésemos abstraerlo en una función, y reutilizar esa función.</p><p>La misma filosofía aplica para cuando programamos.</p><p>Si haces una serie de cosas una y otra vez, ¿No debiera existir una manera de abstraer eso?</p><p>Un ejemplo, es git. Usamos una serie de comandos de git una y otra vez, y se puede automatizar mucho con eso. Algunas Cosas que yo tengo automatizadas con git son:</p><ul><li>git ca: Es una alias para git commit --amend . Además, tiene la ventaja que tiene la flag -reuse-message=HEAD , de tal forma que no tengo que volver a confirmar el mensaje del commit.</li><li>git fix : En lugar de hacer git commit --fixup cada vez que quiero cambiar una cosa de un commit viejo, simplemente uso git fix</li><li>git wip: Hay varias veces que quiero guardar lo que hice, pero no me gusta la abstracción del stash . Con git wip hago un commit de nombre wip de absolutamente todos mis cambios. Además tiene la ventaja que no llama callbacks de commits (yo en particular tengo un callback que revisa errores de linter, el cual tarda 1 o 2 segundos).</li><li>git dewip: Como uno esperaría, es lo contrario a git wip. Deshace el último commit, pero no descarta los cambios.</li></ul><p>Cada una de estas me ahorra unos segundos. Considerando que uso cada una unas cuantas veces al día, me ahorra mucho tiempo.</p><p>Pero hay otras maneras de automatizar tu workflow, como:</p><ul><li>¿Tienes que correr 3 comandos sólo para correr localmente lo que desarrollas? ¿Por qué no automatizar en un sólo comando que corra las 3?</li><li>¿Monitoreas activamente cierta métrica de tu aplicación? ¿Por qué no poner una alerta cuando llegue a los valores extremos en lugar de estar constantemente pendiente?</li><li>¿Usas demasiado el mouse para ciertas acciones básicas? ¿Por qué no investigas cómo aprender (o incluso programar) un shortcut para hacer esa acción?</li></ul><p>Por último, cabe mencionar que hay otras maneras de afilar la sierra, que no involucran programar más rápido, pero que de todas maneras nos hacen muchos mejores ingenieros. Algunas de estos son:</p><ul><li>Aprender lenguajes/frameworks nuevos</li><li>Leer libros técnicos</li><li>Leer (y escribir) blogs de ingeniería</li></ul><p>Lo único importante que quiero que te lleves de este post, es que vale la pena dedicar tu tiempo a afilar la sierra.</p><p>Al igual que el leñador terminaría más rápido de talar el árbol si se diese el tiempo para afilar la sierra, tu vas a avanzar más como dev si le dedicas tiempo a las cosas importantes, en lugar de siempre priorizar lo urgente.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66981e79311b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[La receta]]></title>
            <link>https://medium.com/@tomvergara/la-receta-9a4bd3bb28c5?source=rss-485cf808c778------2</link>
            <guid isPermaLink="false">https://medium.com/p/9a4bd3bb28c5</guid>
            <category><![CDATA[dropout]]></category>
            <category><![CDATA[startup]]></category>
            <dc:creator><![CDATA[Tomás Vergara Browne]]></dc:creator>
            <pubDate>Tue, 23 Aug 2022 14:03:36 GMT</pubDate>
            <atom:updated>2022-08-23T15:15:18.605Z</atom:updated>
            <content:encoded><![CDATA[<p>La vida es fácil. Para tener una buena vida sólo debes seguir una receta:</p><ol><li>Ir al colegio</li><li>Ir a la universidad</li><li>Conseguir un trabajo estable</li><li>Tener una familia</li><li>The end</li></ol><p>O por lo menos eso es lo que a mi me enseñaron.</p><p>Yo llegué a terminar el colegio. En aquel entonces pensaba que mi vida iba a seguir esta receta.</p><p>Es difícil cuestionar las cosas que uno aprende de pequeño. Pero si uno no lo cuestiona, puede perderse oportunidades que uno ni conoce.</p><p>Empecé a trabajar estando en la universidad. Lo hice por aburrimiento más que nada, la pandemia limitaba bastante lo que podía hacer.</p><p>De mera casualidad, entré a trabajar a un ecosistema de personas que no siguen la receta.</p><p>Pensé que todos terminaban la universidad, ¿Por qué la empezaste si no es para terminar? Pero conocí a una multitud de gente que se fue de la universidad sin ningún cartón.</p><p>Vi a niños*, hacer una startup que hoy tiene más de 80 personas, a lo largo de latinoamérica. Obviamente, ninguno había ido a la universidad.</p><p>Conocí a devs que rechazaron sueldos millonarios en Silicon Valley, para vivir la emoción de una startup.</p><p>Todas estas personas, se habían desviado de la receta.</p><p>No digo que seguir la receta esté mal. Hay gente que quiere tener una vida tranquila, segura, relajada. Esta receta asegura eso, y no hay nada malo en ello.</p><p>Pero hay otro tipo de personas. Personas que no aguantan estar encerradas en una sala de clases. Personas que no soportan la cotidianidad de un trabajo estable. Personas que no quieren seguir la receta.</p><p>Me di cuenta que no quiero seguir la receta. La vida es una, y para mí no vale la pena hacer lo estándar.</p><p>Tampoco es que tenga claro qué es lo que quiero hacer. En una de esas quiero viajar por todo el mundo. O quizás algún día quiera hacer mi propia startup. Ni siquiera descarto volver a estudiar.</p><p>Lo que tengo claro, es que estando en la universidad no lo iba a averigüar.</p><p>Así que sí. Perdón mamá. Soy un dropout.</p><p>¿Es una buena decisión? No tengo idea… pero veremos.</p><p>:)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/625/0*fwgyom3Nw5Kmw3Ae.jpg" /><figcaption><a href="https://www.theeditorialcartoons.com/subject/The-High+School+Dropout-Editorial-Cartoons.php">https://www.theeditorialcartoons.com/subject/The-High+School+Dropout-Editorial-Cartoons.php</a></figcaption></figure><p>*No realmente niños, pero tampoco están tan lejos</p><p>**Llegué a obtener una licenciatura en ciencias de la ingeniería, así que me fui con alguna especie de cartón (fue para que mi mamá no me rete tanto)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9a4bd3bb28c5" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>