{"id":223,"date":"2025-04-21T13:11:07","date_gmt":"2025-04-21T13:11:07","guid":{"rendered":"https:\/\/www.familie-kleinman.nl\/brain\/?p=223"},"modified":"2025-04-23T19:59:12","modified_gmt":"2025-04-23T19:59:12","slug":"how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal","status":"publish","type":"post","link":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/","title":{"rendered":"How this idiot got from a relational DB &#8216;LLM&#8217; concept to the real deal"},"content":{"rendered":"<blockquote><p>&#8216;How I used an LLM to learn about an LLM&#8217;<\/p><\/blockquote>\n<p><strong data-start=\"231\" data-end=\"254\">First things first:<\/strong> I\u2019ve been using LLMs for about a year now \u2014 and I absolutely love them. I use ChatGPT every single day, and in that time I\u2019ve applied it to almost everything: from learning and configuring Proxmox, to making the final switch from Windows to Linux, to picking up the basics of Ansible, solving a persistent JWT token issue, working through my weight-loss journey \u2014 and so much more.<\/p>\n<p><strong data-start=\"249\" data-end=\"271\">And truth be told:<\/strong> I had some idea of how an LLM worked, but I didn\u2019t really understand what \u201ctraining\u201d meant \u2014 or how an LLM actually arrives at an answer. Last night, I asked (in Dutch): <em data-start=\"442\" data-end=\"531\">\u201cVraag; Zou je meteen relationele database, zoals Oracle DB, een LLM op kunnen zetten?\u201d <\/em>Roughly translated: <em data-start=\"554\" data-end=\"661\">\u201cCould you use a relational database, like Oracle DB, to build a model that represents how an LLM works?\u201d<\/em><\/p>\n<p>And from that one question, the real journey began.<\/p>\n<p><!--more--><\/p>\n<h2>Relational database?<\/h2>\n<p>Why this specific question, and not a more generic \u201chow does an LLM work?\u201d The answer is simple: I know relational databases really, really well. I\u2019ve been working with Oracle for nearly three decades. I\u2019ve written countless SQL queries, designed dozens of database models from scratch, and authored more PL\/SQL code than any other language. I can visualize all of it clearly in my mind \u2014 which makes it the perfect starting point to attach new knowledge to something familiar.<\/p>\n<p><strong data-start=\"154\" data-end=\"189\">ChatGPT had the perfect answer. <\/strong>It created a few example tables to show how you <em data-start=\"240\" data-end=\"247\">could<\/em> model the basics of an LLM in a relational way \u2014 and then immediately pointed out that this would be a terrible way to actually implement one. It also stated this:<\/p>\n<blockquote><p>&#8220;You&#8217;re building a bridge between your familiar world (relational logic, Oracle, PL\/SQL) and the abstract world of LLMs (vectors, layers, attention). It&#8217;s the perfect starting point if you really want to understand how it all works.&#8221;<\/p><\/blockquote>\n<p class=\"\" data-start=\"194\" data-end=\"224\">It created four simple tables:<\/p>\n<ul data-start=\"226\" data-end=\"433\">\n<li class=\"\" data-start=\"226\" data-end=\"260\">\n<p class=\"\" data-start=\"228\" data-end=\"260\"><strong data-start=\"228\" data-end=\"238\">Tokens<\/strong>: <code data-start=\"240\" data-end=\"244\">ID<\/code>, <code data-start=\"246\" data-end=\"258\">TOKEN_TEXT<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"261\" data-end=\"344\">\n<p class=\"\" data-start=\"263\" data-end=\"344\"><strong data-start=\"263\" data-end=\"283\">Token_embeddings<\/strong>: <code data-start=\"285\" data-end=\"295\">TOKEN_ID<\/code>, <code data-start=\"297\" data-end=\"331\">[dim1, dim2, dim3, dim4... dimN]<\/code> (a vector)<\/p>\n<\/li>\n<li class=\"\" data-start=\"345\" data-end=\"398\">\n<p class=\"\" data-start=\"347\" data-end=\"398\"><strong data-start=\"347\" data-end=\"364\">Dense_weights<\/strong>: <code data-start=\"366\" data-end=\"376\">FROM_DIM<\/code>, <code data-start=\"378\" data-end=\"386\">TO_DIM<\/code>, <code data-start=\"388\" data-end=\"396\">WEIGHT<\/code><\/p>\n<\/li>\n<li class=\"\" data-start=\"399\" data-end=\"433\">\n<p class=\"\" data-start=\"401\" data-end=\"433\"><strong data-start=\"401\" data-end=\"415\">Dense_bias<\/strong>: <code data-start=\"417\" data-end=\"425\">TO_DIM<\/code>, <code data-start=\"427\" data-end=\"433\">BIAS<\/code><\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"435\" data-end=\"541\">And that was it.<br data-start=\"451\" data-end=\"454\" \/>And suddenly \u2014 everything started to click into place. <strong data-start=\"511\" data-end=\"541\">I actually got goosebumps<\/strong><\/p>\n<p>Every single token (word) is a vector in a multidimensional space. And the vector itself? <strong data-start=\"320\" data-end=\"347\">Completely meaningless.<\/strong><br data-start=\"347\" data-end=\"350\" \/>And somehow, it also clicked into place that <em data-start=\"395\" data-end=\"406\">attaching<\/em> a specific vector to a token \u2014 permanently \u2014 is actually wrong, at least to a certain extent. Only in the very last step is a vector converted back into a token. Before that, it&#8217;s all just&#8230; directions in space.<\/p>\n<p class=\"\" data-start=\"286\" data-end=\"731\">And the key to it all? The <code data-start=\"313\" data-end=\"328\">DENSE_WEIGHTS<\/code> \u201ctable\u201d. This defines the relationship between two vectors \u2014 not in terms of mass or strength like you might expect, but as a value used in a vector transformation.<br data-start=\"495\" data-end=\"498\" \/>The weight itself is meaningless in isolation. But when applied through vector multiplication between a FROM and TO vector (remember: two words), it gives you a new vector \u2014 one that represents the most likely <em data-start=\"708\" data-end=\"714\">next<\/em> step in meaning.<\/p>\n<p class=\"\" data-start=\"733\" data-end=\"754\">Or put more simply:<\/p>\n<blockquote data-start=\"755\" data-end=\"850\">\n<p class=\"\" data-start=\"757\" data-end=\"850\"><strong data-start=\"757\" data-end=\"850\">The power of an LLM isn\u2019t in the words themselves, but in the relationships between them.<\/strong><\/p>\n<\/blockquote>\n<p>And with the <code data-start=\"331\" data-end=\"343\">DENSE_BIAS<\/code> \u201ctable\u201d, you can nudge the output vector toward a more specific point in space \u2014 and remember, <strong data-start=\"439\" data-end=\"493\">every single word lives in that space as a vector.<\/strong><\/p>\n<p><strong data-start=\"661\" data-end=\"670\">Note:<\/strong> No, there\u2019s no actual SQL table with weights in a real LLM. (Sorry, fellow PL\/SQL fans.) These \u201cdense_weights\u201d are just a simplified analogy \u2014 in practice, LLMs use massive matrices and pass each token through dozens of dense layers, each with its own set of learned weights and biases. But hey, don\u2019t let that ruin the fun of thinking about neural networks in SELECT * FROM style. \ud83d\ude1b<\/p>\n<h2>Vectors<\/h2>\n<p>I\u2019ve used the word <em data-start=\"534\" data-end=\"542\">vector<\/em> a few times now, so let\u2019s break that down. The simplest way to describe a vector is to imagine it as an arrow \u2014 pointing from a starting point to an endpoint in space. Picture a 2D chart with an X and Y axis: a vector <code data-start=\"763\" data-end=\"771\">[2, 2]<\/code> simply means \u201cgo two units right and two units up\u201d from the origin <code data-start=\"839\" data-end=\"847\">[0, 0]<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-224\" src=\"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22-300x294.png\" alt=\"\" width=\"300\" height=\"294\" srcset=\"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22-300x294.png 300w, https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22-1024x1002.png 1024w, https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22-768x752.png 768w, https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22-850x832.png 850w, https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png 1125w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<h2>Mindfuck, thinking in X dimensions<\/h2>\n<p class=\"\" data-start=\"283\" data-end=\"500\">Most of us can still picture a 2D chart, like the one above. Imagining a 3D world with X, Y, and Z axes? Still doable. Thinking in 4D? Okay, that\u2019s where it starts to get weird \u2014 do I need to mention a Tesseract here? But what happens when you\u2019re dealing with <strong data-start=\"544\" data-end=\"551\">768<\/strong> or even <strong data-start=\"560\" data-end=\"581\">12,288 dimensions<\/strong>?<\/p>\n<p>The vectors I mentioned earlier? They use way more than just 2 or 3 dimensions. Some models operate in <strong data-start=\"341\" data-end=\"366\">768-dimensional space<\/strong>, while modern LLMs go all the way up to <strong data-start=\"407\" data-end=\"428\">12,288 dimensions<\/strong> \u2014 that\u2019s <em data-start=\"438\" data-end=\"456\">16 times as much<\/em>.<br data-start=\"457\" data-end=\"460\" \/>There\u2019s absolutely no way to visualize that \u2014 at least, I sure can\u2019t. \ud83d\ude1b<\/p>\n<p>But here\u2019s the thing \u2014 the math doesn\u2019t really change.<br data-start=\"299\" data-end=\"302\" \/>In 2D, it\u2019s <code data-start=\"314\" data-end=\"322\">[2, 2]<\/code>.<br data-start=\"323\" data-end=\"326\" \/>In 3D, it\u2019s <code data-start=\"338\" data-end=\"349\">[2, 2, 2]<\/code>.<br data-start=\"350\" data-end=\"353\" \/>In 768D? It\u2019s just <code data-start=\"372\" data-end=\"394\">[2, 2, 2, 2, 2... 2]<\/code>.<br data-start=\"395\" data-end=\"398\" \/>Still just an array of numbers.<\/p>\n<p>And here\u2019s the best part: You don\u2019t need to <em data-start=\"249\" data-end=\"255\">know<\/em> the math to <em data-start=\"268\" data-end=\"280\">understand<\/em> how an LLM works. That\u2019s the real secret.<\/p>\n<h2>Training<\/h2>\n<p class=\"\" data-start=\"250\" data-end=\"469\">Now imagine every single word you know \u2014 including all the typos you\u2019ve ever made.\u00a0 Now picture that each of those words has its own vector in that insane multidimensional space. Words are <em data-start=\"442\" data-end=\"454\">everywhere<\/em> in that space. Or to put it differently: imagine our entire universe. <strong data-start=\"528\" data-end=\"557\">Galaxies. Stars. Planets. <\/strong>And every single one of them? A word. And every typo ever made? Just another moon orbiting one of those planets.<\/p>\n<p data-start=\"263\" data-end=\"447\">But how does an LLM <em data-start=\"266\" data-end=\"271\">get<\/em> to this structure \u2014 this entire cosmos of galaxies, stars, planets, moons\u2026 and Pluto, of course? That\u2019s where the <strong data-start=\"388\" data-end=\"400\">training<\/strong> of an LLM comes into play.<\/p>\n<p class=\"\" data-start=\"253\" data-end=\"389\">To stick with the universe analogy: Let\u2019s imagine a completely empty universe. There are no stars, no planets \u2014 no words. Just void.<\/p>\n<p class=\"\" data-start=\"253\" data-end=\"389\">Then the vocabulary is loaded. All the words are pulled into this universe, and every single one of them gets assigned a completely random vector.<\/p>\n<p class=\"\" data-start=\"253\" data-end=\"389\">And yes \u2014 you read that correctly: <strong data-start=\"266\" data-end=\"276\">random<\/strong>. Not only does every token get a random vector, but random weights are also assigned between those vectors. So after loading the vocabulary, both the <strong data-start=\"431\" data-end=\"444\">positions<\/strong> of the words <em data-start=\"458\" data-end=\"463\">and<\/em> the <strong data-start=\"468\" data-end=\"485\">relationships<\/strong> between them are completely random.<\/p>\n<p class=\"\" data-start=\"247\" data-end=\"524\">Then the training starts. All the text is fed back into the system \u2014 but now, the algorithm tries to <strong data-start=\"350\" data-end=\"375\">predict the next word<\/strong> in a sentence. Take this example: <em data-start=\"412\" data-end=\"453\">\u201cThe cat always goes to the litterbox.\u201d <\/em>The algorithm starts by trying to predict the next word after \u201cTHE\u201d.<\/p>\n<p class=\"\" data-start=\"247\" data-end=\"524\">And I\u2019ll keep it simple from here on. The algorithm <strong data-start=\"580\" data-end=\"614\">remembers the previous context<\/strong> from the sentence. We, as humans, know that \u201clitterbox\u201d is the most predictable outcome. But here\u2019s the catch: the links between <code data-start=\"748\" data-end=\"755\">\"THE\"<\/code>, <code data-start=\"757\" data-end=\"764\" data-is-only-node=\"\">\"CAT\"<\/code>, <code data-start=\"766\" data-end=\"776\">\"ALWAYS\"<\/code>, <code data-start=\"778\" data-end=\"786\">\"GOES\"<\/code> and <code data-start=\"791\" data-end=\"797\">\"TO\"<\/code> are still completely <strong data-start=\"819\" data-end=\"829\">random<\/strong> at this point.<\/p>\n<p data-start=\"247\" data-end=\"524\">Before we dive deeper into the training phase, let me first show you what a trained LLM actually <em data-start=\"489\" data-end=\"501\">looks like<\/em> \u2014 just to give you a feel for the destination.<\/p>\n<h3>Cat &amp; Litterbox<\/h3>\n<p class=\"\" data-start=\"368\" data-end=\"654\">Imagine the sentence again: <em data-start=\"411\" data-end=\"452\">\u201cThe cat always goes to the litterbox.\u201d <\/em>This is where <strong data-start=\"469\" data-end=\"485\">tokenization<\/strong> comes into play \u2014 it\u2019s the process of breaking a sentence into its most basic components. In this case, it becomes:<br data-start=\"603\" data-end=\"606\" \/><code data-start=\"606\" data-end=\"654\">[THE, CAT, ALWAYS, GOES, TO, THE, LITTER, BOX]<\/code><code data-start=\"606\" data-end=\"654\"><\/code><code data-start=\"606\" data-end=\"654\"><\/code>Notice how even a single word like \u201clitterbox\u201d can be broken down into multiple tokens: \u201clitter\u201d and \u201cbox\u201d.<\/p>\n<p data-start=\"368\" data-end=\"654\">Every single token has its own vector in that insane, multidimensional, and trained, space. Now imagine the link between <code data-start=\"438\" data-end=\"445\">\"CAT\"<\/code> and <code data-start=\"450\" data-end=\"457\">\"THE\"<\/code> \u2014 remember: <strong data-start=\"470\" data-end=\"480\">WEIGHT<\/strong>.<\/p>\n<p data-start=\"368\" data-end=\"654\">In table form, it might look like this:<\/p>\n<table border=\"0\" cellspacing=\"0\">\n<colgroup span=\"3\" width=\"102\"><\/colgroup>\n<tbody>\n<tr>\n<td align=\"left\" height=\"20\" data-sheets-value=\"{ &quot;1&quot;: 2, &quot;2&quot;: &quot;FROM_DIM&quot;}\">FROM_DIM<\/td>\n<td align=\"left\" data-sheets-value=\"{ &quot;1&quot;: 2, &quot;2&quot;: &quot;TO_DIM&quot;}\">TO_DIM<\/td>\n<td align=\"left\" data-sheets-value=\"{ &quot;1&quot;: 2, &quot;2&quot;: &quot;WEIGHT&quot;}\">WEIGHT<\/td>\n<\/tr>\n<tr>\n<td align=\"left\" height=\"20\" data-sheets-value=\"{ &quot;1&quot;: 2, &quot;2&quot;: &quot;\u201cCAT\u201d&quot;}\">\u201cCAT\u201d<\/td>\n<td align=\"left\" data-sheets-value=\"{ &quot;1&quot;: 2, &quot;2&quot;: &quot;\u201cTHE\u201d&quot;}\">\u201cTHE\u201d<\/td>\n<td align=\"right\">80<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"\" data-start=\"620\" data-end=\"910\">I\u2019ve used tokens here for readability, but don\u2019t be fooled: these are still <strong data-start=\"696\" data-end=\"707\">vectors<\/strong>. There\u2019s a relationship between the two vector representations, and when you apply the weight (in this case, <code data-start=\"819\" data-end=\"823\">80<\/code>) to the <code data-start=\"832\" data-end=\"842\">FROM_DIM<\/code> vector, you get a <strong data-start=\"861\" data-end=\"875\">new vector<\/strong> \u2014 through a vector multiplication.<\/p>\n<p class=\"\" data-start=\"912\" data-end=\"1051\">That new vector now points somewhere in the vector space. And odds are, it&#8217;s very close to the vector associated with&#8230; <strong data-start=\"1035\" data-end=\"1050\">\u201cLITTERBOX\u201d<\/strong>.<\/p>\n<p class=\"\" data-start=\"269\" data-end=\"427\">So when an LLM is fully trained, <strong data-start=\"302\" data-end=\"344\">every word has its own specific vector<\/strong> \u2014 and similar words end up in the same general area of vector space.\u00a0 Even typos!<\/p>\n<p class=\"\" data-start=\"429\" data-end=\"667\">After training, you get <strong data-start=\"453\" data-end=\"465\">galaxies<\/strong> of related meanings, <strong data-start=\"487\" data-end=\"496\">stars<\/strong> representing more specific clusters of words, and typos? You can literally think of them as <strong data-start=\"591\" data-end=\"600\">moons<\/strong> orbiting their correct word \u2014 that\u2019s how closely related they are.<\/p>\n<h2 data-start=\"912\" data-end=\"1051\">Training part 2<\/h2>\n<p>Now, back to the training. How do we get from that chaotic, random mess&#8230; to a structured universe of meaning?<\/p>\n<p class=\"\" data-start=\"258\" data-end=\"431\">The weight table is still random. So when new vectors are calculated for <code data-start=\"333\" data-end=\"338\">CAT<\/code>, <code data-start=\"340\" data-end=\"348\">ALWAYS<\/code>, <code data-start=\"350\" data-end=\"354\">TO<\/code>, and <code data-start=\"360\" data-end=\"365\">THE<\/code>, we\u2019d expect to land somewhere near the vector for <code data-start=\"419\" data-end=\"430\">LITTERBOX<\/code>. But after the vector multiplication? We end up with: <strong data-start=\"487\" data-end=\"505\"><code data-start=\"489\" data-end=\"502\">PARTYPOOPER<\/code>.<\/strong><\/p>\n<p class=\"\" data-start=\"287\" data-end=\"451\">The training algorithm sees that the next word in the sentence should have been <code data-start=\"367\" data-end=\"378\">LITTERBOX<\/code> \u2014 but the model predicted <code data-start=\"407\" data-end=\"420\">PARTYPOOPER<\/code>. So the prediction is wrong.<\/p>\n<p class=\"\" data-start=\"453\" data-end=\"482\">And now&#8230; the magic happens.<\/p>\n<p class=\"\" data-start=\"237\" data-end=\"477\">The vectors for <code data-start=\"253\" data-end=\"258\">CAT<\/code>, <code data-start=\"260\" data-end=\"268\">ALWAYS<\/code>, <code data-start=\"270\" data-end=\"274\">TO<\/code>, and <code data-start=\"280\" data-end=\"285\">THE<\/code> are each nudged \u2014 just slightly \u2014 within the universe. The weights between those vectors are also adjusted by tiny fractions. <em data-start=\"416\" data-end=\"477\">(Remember: we\u2019re still talking about tokens \u2014 about words!)<\/em><\/p>\n<p class=\"\" data-start=\"479\" data-end=\"642\">There\u2019s quite a bit of intricate math involved \u2014 you can absolutely look it up if you&#8217;re into that sort of thing. But it&#8217;s outside the scope of this blog post :P.\u00a0 Just imagine: <strong data-start=\"658\" data-end=\"663\">Q<\/strong>, <strong data-start=\"665\" data-end=\"670\">K<\/strong>, and <strong data-start=\"676\" data-end=\"681\">V<\/strong> matrix multiplications quietly doing their thing in the background&#8230;<\/p>\n<p class=\"\" data-start=\"299\" data-end=\"541\">But here\u2019s the beautiful part:<\/p>\n<p class=\"\" data-start=\"299\" data-end=\"541\">Every single relationship between words causes stars, planets, and moons to shift \u2014 just a little \u2014 across the entire universe.\u00a0 And if you apply enough of those tiny shifts\u2026<br data-start=\"507\" data-end=\"510\" \/><strong data-start=\"510\" data-end=\"541\">you end up with a universe.<br \/>\n<\/strong><\/p>\n<p class=\"\" data-start=\"299\" data-end=\"541\">And that\u2019s exactly why an LLM needs to be trained on an <em data-start=\"599\" data-end=\"607\">insane<\/em> amount of data.<\/p>\n<h2>Simplified<\/h2>\n<p class=\"\" data-start=\"295\" data-end=\"417\">This is, of course, a very simplified explanation of how an LLM works. I\u2019ve deliberately left out a <em data-start=\"397\" data-end=\"402\">lot<\/em> of complexity.<\/p>\n<p class=\"\" data-start=\"419\" data-end=\"631\">But just try to imagine our universe again. Every single dot is a word. Every word is connected to every other word. And between any two words, there&#8217;s a <strong data-start=\"579\" data-end=\"589\">weight<\/strong> \u2014 a value we can use to do a calculation.<\/p>\n<p class=\"\" data-start=\"633\" data-end=\"775\">That calculation gives us a <strong data-start=\"661\" data-end=\"671\">vector<\/strong>, which points us to another location in the universe \u2014 where the most probable <em data-start=\"755\" data-end=\"766\">next word<\/em> will be.<\/p>\n<p data-start=\"633\" data-end=\"775\">I haven\u2019t even mentioned backpropagation, cosine similarity, or the whole Query\u2013Key\u2013Value (Q, K, V) mechanism and how it\u2019s used. I haven\u2019t touched on how layers work, or what it means to operate in a space with 768 or even 12,288 dimensions.<br data-start=\"483\" data-end=\"486\" \/>And still \u2014 even just dropping those phrases feels like I\u2019m keeping things simple.<\/p>\n<p data-start=\"633\" data-end=\"775\">Trust me, I\u2019m still nowhere near being an LLM expert. But the journey ChatGPT took me on \u2014 last night and again this morning \u2014 gave me just enough clarity to actually <em data-start=\"424\" data-end=\"429\">see<\/em> how an LLM works. And honestly? That journey alone was more than interesting enough to write an article about.<\/p>\n<p data-start=\"633\" data-end=\"775\">When translated into a 3D world, I could <em data-start=\"285\" data-end=\"290\">see<\/em> the words floating in that space. I could see how the relationship between two words forms a new vector \u2014 one that points toward the most probable set of words that might follow.<br data-start=\"469\" data-end=\"472\" \/>That realization alone was a complete eye-opener.<\/p>\n<p data-start=\"633\" data-end=\"775\">I hope this article gives you a bit of insight into how an LLM works \u2014 and that next time you use ChatGPT or another model, you\u2019ll know just a little more about what\u2019s going on under the hood.<\/p>\n<p><strong data-start=\"443\" data-end=\"458\">Disclaimer:<\/strong> This blog post was proudly co-written, edited, sanity-checked and vector-approved by ChatGPT. \ud83d\ude1b<\/p>\n<p>Got thoughts, questions, or an inspired vector of your own? Drop a comment below \u2014 I\u2019d love to hear it.<\/p>\n<p>Brain out!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8216;How I used an LLM to learn about an LLM&#8217; First things first: I\u2019ve been using LLMs for about a year now \u2014 and I absolutely love them. I use ChatGPT every single day, and in that time I\u2019ve applied it to almost everything: from learning and configuring Proxmox, to making the final switch from&#8230;<\/p>\n","protected":false},"author":1,"featured_media":224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[135,96],"tags":[139,75,138,137,136,16,21,141,140],"class_list":["post-223","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-computers","tag-ai","tag-analogy","tag-chatgpt","tag-gpt","tag-llm","tag-oracle","tag-token","tag-universe","tag-vector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How this idiot got from a relational DB &#039;LLM&#039; concept to the real deal - Brain&#039;s Ramblings<\/title>\n<meta name=\"description\" content=\"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How this idiot got from a relational DB &#039;LLM&#039; concept to the real deal - Brain&#039;s Ramblings\" \/>\n<meta property=\"og:description\" content=\"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/\" \/>\n<meta property=\"og:site_name\" content=\"Brain&#039;s Ramblings\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-21T13:11:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-23T19:59:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1125\" \/>\n\t<meta property=\"og:image:height\" content=\"1101\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/\"},\"author\":{\"name\":\"Brain\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#\\\/schema\\\/person\\\/24700e1628cfd605409636397a9bb6ab\"},\"headline\":\"How this idiot got from a relational DB &#8216;LLM&#8217; concept to the real deal\",\"datePublished\":\"2025-04-21T13:11:07+00:00\",\"dateModified\":\"2025-04-23T19:59:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/\"},\"wordCount\":1952,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#\\\/schema\\\/person\\\/24700e1628cfd605409636397a9bb6ab\"},\"image\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/vector22.png\",\"keywords\":[\"AI\",\"Analogy\",\"ChatGPT\",\"GPT\",\"LLM\",\"Oracle\",\"Token\",\"Universe\",\"Vector\"],\"articleSection\":[\"AI\",\"Computers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/\",\"url\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/\",\"name\":\"How this idiot got from a relational DB 'LLM' concept to the real deal - Brain&#039;s Ramblings\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/vector22.png\",\"datePublished\":\"2025-04-21T13:11:07+00:00\",\"dateModified\":\"2025-04-23T19:59:12+00:00\",\"description\":\"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/vector22.png\",\"contentUrl\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/vector22.png\",\"width\":1125,\"height\":1101},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/2025\\\/04\\\/21\\\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How this idiot got from a relational DB &#8216;LLM&#8217; concept to the real deal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#website\",\"url\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/\",\"name\":\"Brain's Ramblings\",\"description\":\"Code, commitment, caffeine, and the odd mindfart\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#\\\/schema\\\/person\\\/24700e1628cfd605409636397a9bb6ab\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/#\\\/schema\\\/person\\\/24700e1628cfd605409636397a9bb6ab\",\"name\":\"Brain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/brain_brain.png\",\"url\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/brain_brain.png\",\"contentUrl\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/brain_brain.png\",\"width\":1024,\"height\":1024,\"caption\":\"Brain\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/wp-content\\\/uploads\\\/2025\\\/04\\\/brain_brain.png\"},\"sameAs\":[\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\"],\"url\":\"https:\\\/\\\/www.familie-kleinman.nl\\\/brain\\\/index.php\\\/author\\\/brain\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How this idiot got from a relational DB 'LLM' concept to the real deal - Brain&#039;s Ramblings","description":"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/","og_locale":"en_US","og_type":"article","og_title":"How this idiot got from a relational DB 'LLM' concept to the real deal - Brain&#039;s Ramblings","og_description":"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.","og_url":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/","og_site_name":"Brain&#039;s Ramblings","article_published_time":"2025-04-21T13:11:07+00:00","article_modified_time":"2025-04-23T19:59:12+00:00","og_image":[{"width":1125,"height":1101,"url":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png","type":"image\/png"}],"author":"Brain","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brain","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#article","isPartOf":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/"},"author":{"name":"Brain","@id":"https:\/\/www.familie-kleinman.nl\/brain\/#\/schema\/person\/24700e1628cfd605409636397a9bb6ab"},"headline":"How this idiot got from a relational DB &#8216;LLM&#8217; concept to the real deal","datePublished":"2025-04-21T13:11:07+00:00","dateModified":"2025-04-23T19:59:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/"},"wordCount":1952,"commentCount":0,"publisher":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/#\/schema\/person\/24700e1628cfd605409636397a9bb6ab"},"image":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#primaryimage"},"thumbnailUrl":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png","keywords":["AI","Analogy","ChatGPT","GPT","LLM","Oracle","Token","Universe","Vector"],"articleSection":["AI","Computers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/","url":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/","name":"How this idiot got from a relational DB 'LLM' concept to the real deal - Brain&#039;s Ramblings","isPartOf":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#primaryimage"},"image":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#primaryimage"},"thumbnailUrl":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png","datePublished":"2025-04-21T13:11:07+00:00","dateModified":"2025-04-23T19:59:12+00:00","description":"Discover how a simple database analogy led to a deep understanding of LLMs \u2014 vectors, weights, attention and all \u2014 in one late-night epiphany.","breadcrumb":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#primaryimage","url":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png","contentUrl":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/vector22.png","width":1125,"height":1101},{"@type":"BreadcrumbList","@id":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/2025\/04\/21\/how-this-idiot-got-from-a-relational-db-llm-concept-to-the-real-deal\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.familie-kleinman.nl\/brain\/"},{"@type":"ListItem","position":2,"name":"How this idiot got from a relational DB &#8216;LLM&#8217; concept to the real deal"}]},{"@type":"WebSite","@id":"https:\/\/www.familie-kleinman.nl\/brain\/#website","url":"https:\/\/www.familie-kleinman.nl\/brain\/","name":"Brain's Ramblings","description":"Code, commitment, caffeine, and the odd mindfart","publisher":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/#\/schema\/person\/24700e1628cfd605409636397a9bb6ab"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.familie-kleinman.nl\/brain\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.familie-kleinman.nl\/brain\/#\/schema\/person\/24700e1628cfd605409636397a9bb6ab","name":"Brain","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/brain_brain.png","url":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/brain_brain.png","contentUrl":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/brain_brain.png","width":1024,"height":1024,"caption":"Brain"},"logo":{"@id":"https:\/\/www.familie-kleinman.nl\/brain\/wp-content\/uploads\/2025\/04\/brain_brain.png"},"sameAs":["https:\/\/www.familie-kleinman.nl\/brain"],"url":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/author\/brain\/"}]}},"_links":{"self":[{"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/posts\/223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/comments?post=223"}],"version-history":[{"count":4,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/posts\/223\/revisions"}],"predecessor-version":[{"id":243,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/posts\/223\/revisions\/243"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/media\/224"}],"wp:attachment":[{"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/media?parent=223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/categories?post=223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.familie-kleinman.nl\/brain\/index.php\/wp-json\/wp\/v2\/tags?post=223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}