<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Ju Lin's AI Weblog: Neural-Networks</title><subtitle>An independent research notebook on AI engineering, agents, models and the systems around them.</subtitle><id>https://julin.ai/atom/tags/neural-networks/index.xml</id><link rel="self" type="application/atom+xml" href="https://julin.ai/atom/tags/neural-networks/index.xml"/><link rel="alternate" type="text/html" href="https://julin.ai/tags/neural-networks/"/><author><name>Ju Lin</name></author><updated>2026-08-28T00:00:00+12:00</updated><entry><title>Vanilla Neural Networks</title><id>https://julin.ai/2026/08/28/vanilla-neural-networks/</id><link rel="alternate" type="text/html" href="https://julin.ai/2026/08/28/vanilla-neural-networks/"/><published>2026-08-28T00:00:00+12:00</published><updated>2026-08-28T00:00:00+12:00</updated><category term="explainer"/><category term="learning"/><category term="neural-networks"/><content type="html">&lt;p&gt;A neural network is just a math function: &lt;code&gt;y = FNN(x)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;FNN&lt;/code&gt; has a nested form. Think of it as a stack of layers. A 3-layer neural network that returns a scalar value looks like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;y = FNN(x) = f₃(f₂(f₁(x)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="/2026/08/28/vanilla-neural-networks/diagram-fnn.svg" alt="x flows through three layers, f one, f two, f three, each computing g of W x plus b, to produce y."&gt;&lt;/p&gt;
&lt;p&gt;Each &lt;code&gt;f&lt;/code&gt; — &lt;code&gt;f₁&lt;/code&gt;, &lt;code&gt;f₂&lt;/code&gt;, &amp;hellip; &lt;code&gt;fₙ&lt;/code&gt; — has the same form:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;f(x) = g(Wx + b)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;W&lt;/code&gt; (the weight matrix) and &lt;code&gt;b&lt;/code&gt; (a bias vector) are the learned parameters, usually trained via gradient descent. &lt;code&gt;g&lt;/code&gt; is the activation function, and it can be chosen differently for each layer.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Wx + b&lt;/code&gt; is linear — wrapping it in &lt;code&gt;g&lt;/code&gt; is what makes each layer non-linear. Without &lt;code&gt;g&lt;/code&gt; (or with &lt;code&gt;g&lt;/code&gt; chosen to be linear), the whole &lt;code&gt;FNN&lt;/code&gt; collapses into a single linear function: stack 100 such layers and the composition of linear maps is still just one linear map, no matter how deep the network looks. &lt;code&gt;g&lt;/code&gt; is what lets a stack of layers approximate anything more than a straight line. Popular choices for &lt;code&gt;g&lt;/code&gt; are sigmoid and ReLU.&lt;/p&gt;
&lt;p&gt;There are many variants of neural networks — CNNs, RNNs, transformers, and more — each shaped by assumptions about the data they process. The example above, where every neuron in one layer connects to every neuron in the next, is the plainest of them: a multilayer perceptron (MLP), also called a vanilla neural network.&lt;/p&gt;</content></entry></feed>