Close Menu
AI News TodayAI News Today

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    What's Hot

    Rocket Lab is seeing red about NASA’s decision on a Mars spacecraft

    Trump throws out power plant climate pollution rules

    Astronaut Christina Koch chats with Google’s James Manyika

    Facebook X (Twitter) Instagram
    • About Us
    • Contact Us
    Facebook X (Twitter) Instagram Pinterest Vimeo
    AI News TodayAI News Today
    • Home
    • AI News
    • AI Reviews
    • AI Tools
    • AI Tutorials
    • Chatbots
    • Free AI Tools
    • Artificial Intelligence
    AI News TodayAI News Today
    Home»AI Tools»Your Model’s MSE Is Lying to You
    AI Tools

    Your Model’s MSE Is Lying to You

    By No Comments30 Mins Read
    Share Facebook Twitter Pinterest LinkedIn Tumblr Reddit Telegram Email
    Your Model’s MSE Is Lying to You
    Share
    Facebook Twitter LinkedIn Pinterest Email

    Two models, one number, opposite realities

    Imagine you have a sensor recording something you care about, for example seismic background at a detector site, electrical load on a grid, or strain in a bridge cable, and you’ve trained a model to forecast the next value. The model looks at the recent history, thinks for a moment, and gives you a single number: 0.50.50.5.

    There’s a threshold τ=1.0tau = 1.0τ=1.0 that fires an alarm. The question is: should you worry?

    You can’t answer that. Not because you’re missing information about the model, but because the model is missing a way to tell you what it knows. That single number 0.50.50.5 is all it can say. Let’s see why that’s a problem.

    Imagine you actually have two models, both watching the same signal, both predicting x^=0.5hat{x} = 0.5x^=0.5 at the same timestep. They even post the same mean squared error on your test set, not approximately, but identically to three decimal places. By every standard ranking metric, they are interchangeable. Except they’re not.

    Here’s what’s hiding underneath.

    • Model A is looking at a moment where the true conditional distribution, the actual spread of values the signal could realistically take, given its recent history is very tight:

      x  ∼  N(0.5,  0.012)x ;sim; mathcal{N}(0.5,; 0.01^{2})x∼N(0.5,0.012)

      If this notation is new to you: N(μ,σ2)mathcal{N}(mu, sigma^{2})N(μ,σ2) is a Gaussian distribution (the classic bell curve), where μ=0.5mu = 0.5μ=0.5 is the center, and σ=0.01sigma = 0.01σ=0.01 is the standard deviation, which controls the width. A small σsigmaσ means the values cluster tightly around the center. Here, 99.7% of the probability mass sits within 3σ=0.033sigma = 0.033σ=0.03 of the mean, roughly between 0.47 and 0.53. The threshold at 1.0 is 50 standard deviations away. That alarm will not fire in the lifetime of the experiment.

    • Model B is looking at a moment where the true distribution is wide:

      x  ∼  N(0.5,  2.02)x ;sim; mathcal{N}(0.5,; 2.0^{2})x∼N(0.5,2.02)

      Same center, but σ=2.0sigma = 2.0σ=2.0. The bell curve is now extremely spread out. The threshold at 1.0 is onlyτ−μσ  =  1.0−0.52.0  =  0.25frac{tau – mu}{sigma} ;=; frac{1.0 – 0.5}{2.0} ;=; 0.25στ−μ​=2.01.0−0.5​=0.25 standard deviations away. That’s nothing. Roughly 40% of the time, the signal will cross the alarm.

    Same forecast. Same MSE. Same test set. But the actual risk of triggering the alarm is ≈0%approx 0%≈0% versus ≈40%approx 40%≈40%. If you’re deciding whether to evacuate, reroute power, or flag a detector event, those are opposite conclusions and the number you ranked both models with cannot tell you which is which.

    Figure 1: Two models making the same point prediction of x^=0.5hat{x} = 0.5x^=0.5 but with radically different underlying uncertainty. Model A (blue) knows the answer very precisely; Model B (orange) is essentially guessing. A deterministic loss function like MSE cannot distinguish them. Image by author.

    The problem isn’t that either model is broken. Both predicted the correct mean. The problem is that a single number can’t express I’m sure versus I’m guessing and the reason the model can’t express that isn’t a training bug or a missing feature. It’s a direct, provable consequence of the loss function it was trained with.

    That’s what this post unpacks. We’ll see exactly why MSE hands you the mean and discards everything else, what to replace it with, and what that replacement costs once a real optimizer gets hold of it.

    ···

    What forecasting actually asks

    Let’s set up the problem properly, because the assumption we’re going to break is hiding in the setup itself.

    A time series is a sequence of numbers recorded in order over time.

    For instance, temperature every hour, stock price at market close each day, or displacement of a seismometer sampled at 100Hz. The key property is that the order carries information, the value at time ttt tells you something about the value at t+1t+1t+1 . Shuffle the sequence and that information is destroyed. That’s what separates a time series from, say, a bag of independent measurements.

    We write the observed sequence as:

    x1, x2, …, xTx_{1},, x_{2},, ldots,, x_{T}x1​,x2​,…,xT​

    where xtx_{t}xt​ is the value at timestep ttt. Forecasting means predicting the future values:

    xT+1, xT+2, …, xT+Hx_{T+1},, x_{T+2},, ldots,, x_{T+H}xT+1​,xT+2​,…,xT+H​

    Two numbers control the setup:

    • TTT= context length: how far back the model looks.

    • HHH= forecast horizon: how far ahead the model predicts.

    The simplest case is H=1H = 1H=1 , which means predicting only the very next value. That’s where we’ll focus. In practice, HHH can be dozens or hundreds, but the argument about MSE versus NLL applies identically regardless of HHH.

    Figure 2: The forecasting setup. The blue region is the observed context window; the red region is the forecast horizon we must predict. Open circles are the model’s predictions. At this stage they are just single numbers per step, point predictions. Image by author.

    Now here’s the subtle part that most textbooks gloss over. When you write down your prediction as a single number x^T+1hat{x}_{T+1}x^T+1​ , you’ve made a philosophical commitment without realizing it. You’re treating the future as though it’s determined by the past, as though knowing the history perfectly would tell you the next value exactly.

    Think about what that single number means. The model says the next value is 0.5, not probably around 0.5, not somewhere between 0.3 and 0.7, just 0.5, full stop. That format has no room for doubt. There is no field in the output for by the way, I’m not sure about this one.

    Nobody agrees to this assumption on purpose. You agree to it by picking a loss function. The loss decides what the model can and cannot express, and the standard loss, MSE, decides for you: the answer is a point, not a distribution.

    ···

    The simplest loss, and what it actually optimizes

    The most natural thing a model can do is emit one real number x^T+hhat{x}_{T+h}x^T+h​ for each future step. Training needs a loss function, that is, a way to measure how wrong the prediction was. The near-universal choice is of this problem is the mean squared error:

    LMSE  =  1N∑i=1N(xi−x^i)2mathcal{L}_{mathrm{MSE}} ;=;frac{1}{N}sum_{i=1}^{N}bigl(x_{i} – hat{x}_{i}bigr)^{2}LMSE​=N1​∑i=1N​(xi​−x^i​)2

    where the sum runs over all training examples and timesteps. It’s zero when the prediction is exact, and grows quadratically as the prediction drifts away:

    • An error of 2 costs four times an error of 1.

    • An error of 10 costs a hundred times an error of 1.

    Large errors dominate the gradient, which is exactly what you want, miss the spike and you’ve missed the point.

    Figure 3: The MSE loss as a function of the residual r=x−x^r = x – hat{x}r=x−x^. The parabolic shape means that large errors are penalised quadratically. The minimum is at r=0r = 0r=0. Image by author.

    So far, so good. The trouble starts when you ask: what prediction does MSE actually reward? If the model could be perfect, what would MSE push it toward?

    The proof: without history first

    Let’s forget about neural networks, architectures, everything. Just pure math. Bear with me, the derivation is short, and it tells you something fundamental.

    You have a random variable xxx, the next value the signal will take. You don’t know what it will be, but it has some distribution with mean μ=E[x]mu = mathbb{E}[x]μ=E[x]. Your model must commit to a single numberccc. Think of it as writing one number on a piece of paper and handing it over, before the truth is revealed. Which ccc minimizes the expected squared error?

    We want to minimize:

    E[(x−c)2]mathbb{E}bigl[(x – c)^{2}bigr]E[(x−c)2]

    Expand the square (just (a−b)2=a2−2ab+b2(a-b)^{2} = a^{2} – 2ab + b^{2}(a−b)2=a2−2ab+b2, then take the expectation of each term):

    E[(x−c)2]  =  E[x2]  −  2c E[x]  +  c2mathbb{E}bigl[(x – c)^{2}bigr] ;=; mathbb{E}[x^{2}] ;-; 2c,mathbb{E}[x] ;+; c^{2}E[(x−c)2]=E[x2]−2cE[x]+c2

    E[x2]mathbb{E}[x^{2}]E[x2] is a fixed number (depends on the distribution of xxx , not our choice). E[x]mathbb{E}[x]E[x] is also fixed, that’s μmuμ. So as a function ofccc , this is a parabola opening upward. It has exactly one minimum.

    Differentiate with respect to ccc and set to zero:

    ddc[E[x2]−2c E[x]+c2]  =  −2 E[x]+2c  =  0frac{d}{dc}Bigl[mathbb{E}[x^{2}] – 2c,mathbb{E}[x] + c^{2}Bigr];=; -2,mathbb{E}[x] + 2c ;=; 0dcd​[E[x2]−2cE[x]+c2]=−2E[x]+2c=0

     c∗=E[x]boxed{c^{*} = mathbb{E}[x]}c∗=E[x]​

    The optimal single-number prediction under squared error is the mean. Geometrically: the point closest on average, in squared distance, to a cloud of possible outcomes is the center of that cloud.

    Now with history

    In forecasting, xxx isn’t drawn from a fixed distribution. Its distribution depends on the history, that is, what the signal has been doing. Different pasts lead to different futures. Now, write H=(x1,…,xT)mathcal{H} = (x_{1}, ldots, x_{T})H=(x1​,…,xT​) for the observed history. Run the exact same argument, but condition everything on Hmathcal{H}H :

    E[(x−c)2∣H]  =  E[x2∣H]  −  2c E[x∣H]  +  c2mathbb{E}bigl[(x – c)^{2} mid mathcal{H}bigr];=; mathbb{E}[x^{2} mid mathcal{H}] ;-; 2c,mathbb{E}[x mid mathcal{H}] ;+; c^{2}E[(x−c)2∣H]=E[x2∣H]−2cE[x∣H]+c2

    Differentiate with respect to ccc , set to zero:

    −2 E[x∣H]+2c=0⟹c∗=E[x∣x1,…,xT]-2,mathbb{E}[x mid mathcal{H}] + 2c = 0 quadLongrightarrowquad c^{*} = mathbb{E}bigl[x mid x_{1}, ldots, x_{T}bigr]−2E[x∣H]+2c=0⟹c∗=E[x∣x1​,…,xT​]

    Nothing changed structurally. The derivation is exactly the same as before, we just added “∣H| mathcal{H}∣H” everywhere.

    This is what the MSE optimizes for:

    c∗=E[x∣x1,…,xT]c^{*} = mathbb{E}bigl[x mid x_{1}, ldots, x_{T}bigr]c∗=E[x∣x1​,…,xT​]

    The MSE-optimal prediction is the conditional mean. This is what any model trained with MSE is pushed toward, regardless of architecture (transformer, LSTM, linear regression, anything). Given infinite data and enough capacity, the model converges to predicting the average of where the signal could go next, given the past it has seen.

    The mean is a perfectly reasonable thing to predict. No other single number does better under squared error. But the mean is a single summary of location. It tells you where the center of the distribution sits. However, it tells you nothing about:

    • Width: Is the distribution tight σ=0.01sigma = 0.01σ=0.01) or wide σ=2.0sigma = 2.0σ=2.0)?

    • Shape: Symmetric? Skewed? Heavy-tailed?

    Two completely different situations can share an identical conditional mean and MSE, but by construction, cannot tell them apart. It has no term that rewards getting the width right, and no term that punishes getting it wrong. The spread is invisible to the loss. This is Model A and Model B restated in the language of the math. Same conditional mean, incompatible futures, one number.

    ···

    The assumption nobody writes down

    Here’s where it gets worse. MSE doesn’t merely ignore the spread, ignoring it would be survivable. Training with it is mathematically equivalent to assuming the spread is the same everywhere. To see this, we need a short detour through maximum likelihood estimation (MLE). Don’t let the name intimidate you, the idea is actually quite simple.

    Maximum likelihood: the intuition

    Forget loss functions for a moment and think about it differently. Your model, with parameters θthetaθ , looks at the history and makes a prediction. Instead of just asking how close was the prediction, ask a richer question: how probable did the model think the true outcome was?.

    Say the true value turned out to be 3.7. A good model should have thought 3.7 was likely. A bad model thought 3.7 was a one-in-a-million event and then it happened, which means the model had a bad picture of reality.

    Maximum likelihood just says: pick the model parameters θthetaθ that make the observed data as probable as possible. The settings under which reality looks least surprising. But to assign probabilities to outcomes, we need a noise model, an assumption about how observed values scatter around the prediction. The most natural starting point is a Gaussian with some fixed width.

    The noise assumption

    Assume that what you observe equals the model’s prediction plus random noise:

    x=x^+ε,ε∼N(0, σ2)x = hat{x} + varepsilon, qquad varepsilon sim mathcal{N}(0,, sigma^{2})x=x^+ε,ε∼N(0,σ2)

    In words: the true value is the prediction, plus a small random perturbation drawn from a Gaussian centered at zero with variance σ2sigma^{2}σ2 . The key word here is fixed, the same σ2sigma^{2}σ2 for every data point, every timestep, every input. Under this assumption, the probability density of observing xxx given the prediction x^hat{x}x^ is the Gaussian density:

    p(x∣x^)  =  12πσ2 exp⁡ ⁣(−(x−x^)22σ2)p(x mid hat{x}) ;=; frac{1}{sqrt{2pisigma^{2}}}, exp!Biggl(-frac{(x – hat{x})^{2}}{2sigma^{2}}Biggr)p(x∣x^)=2πσ2​1​exp(−2σ2(x−x^)2​)

    If this formula is new to you: it’s tallest when x=x^x = hat{x}x=x^ (perfect prediction), and falls off as xxx moves away from x^hat{x}x^ . The speed of falloff is controlled by σsigmaσ , small σsigmaσ means a sharp peak, large σsigmaσ means a broad gentle curve.

    Figure 4: Two Gaussians centered on the same prediction x^hat{x}x^ . Both peak where x=x^x = hat{x}x=x^ (the model’s prediction exactly matches the outcome). The parameter σ controls how quickly the density falls off: a small σ produces a sharp, confident peak; a large σ produces a broad, gentle curve that spreads probability over a wider range of outcomes. The double-arrows along the bottom show each σ as a physical width. Image by author.

    From probability to loss function

    Now you have NNN independent observations. Each one has a probability under the model. The total probability of the entire dataset is the product:

    L=∏i=1Np(xi∣x^i)mathcal{L} = prod_{i=1}^{N} p(x_{i} mid hat{x}_{i})L=∏i=1N​p(xi​∣x^i​)

    Products of many small numbers underflow to zero on a computer, and their derivatives are messy. So we take the logarithm. Since log⁡loglog is monotonically increasing, the parameters that maximize the product also maximize the logarithm. The product becomes a sum:

    log⁡L  =  ∑i=1Nlog⁡ p(xi∣x^i)log mathcal{L} ;=; sum_{i=1}^{N} log, p(x_{i} mid hat{x}_{i})logL=∑i=1N​logp(xi​∣x^i​)

    Plug in the Gaussian density. For a single term:

    log⁡ p(xi∣x^i)  =  log⁡ ⁣(12πσ2)  −  (xi−x^i)22σ2log, p(x_{i} mid hat{x}_{i}) ;=; log!biggl(frac{1}{sqrt{2pisigma^{2}}}biggr) ;-; frac{(x_{i} – hat{x}_{i})^{2}}{2sigma^{2}}logp(xi​∣x^i​)=log(2πσ2​1​)−2σ2(xi​−x^i​)2​

    The first part is −12log⁡(2πσ2)-tfrac{1}{2}log(2pisigma^{2})−21​log(2πσ2), which is the same for every data point (since σsigmaσ is fixed). Sum over all NNN observations:

    log⁡L  =  −N2log⁡(2πσ2)  −  12σ2∑i=1N(xi−x^i)2log mathcal{L} ;=; -frac{N}{2}log(2pisigma^{2}) ;-; frac{1}{2sigma^{2}}sum_{i=1}^{N}(x_{i} – hat{x}_{i})^{2}logL=−2N​log(2πσ2)−2σ21​∑i=1N​(xi​−x^i​)2

    Now, maximize over the predictions x^ihat{x}_{i}x^i​ (i.e., over the model parameters). Look at the two terms:

    • First term: −N2log⁡(2πσ2)-tfrac{N}{2}log(2pisigma^{2})−2N​log(2πσ2). Contains no x^ihat{x}_{i}x^i​ at all. It’s a constant. Ignore it.

    • Second term: −12σ2∑i(xi−x^i)2-tfrac{1}{2sigma^{2}}sum_{i}(x_{i} – hat{x}_{i})^{2}−2σ21​∑i​(xi​−x^i​)2. The factor12σ2tfrac{1}{2sigma^{2}}2σ21​ is a positive constant. It rescales but doesn’t change which parameters produce the maximum.

    Strip both away, and maximizing the log-likelihood is precisely minimizing:

    ∑i=1N(xi−x^i)2sum_{i=1}^{N}(x_{i} – hat{x}_{i})^{2}∑i=1N​(xi​−x^i​)2

    That’s MSE. Now read it backwards.

    Every time you train with MSE, you have implicitly assumed that the residuals (xi−x^i)(x_{i} – hat{x}_{i})(xi​−x^i​) are Gaussian with constant variance σ2sigma^{2}σ2, identical for every input. You made a probabilistic assumption. You never said it out loud. The loss function said it for you.

    And once training ends, even that single σsigmaσ is gone. It lived only inside the derivation. The trained model hands you x^hat{x}x^ and nothing else.

    Why constant variance is almost always wrong

    Think about what constant σsigmaσ means in practice. The model is forced to be equally confident everywhere:

    • Forecasting electricity demand on an ordinary Tuesday night: easy, low variance. Forecasting it during a surprise heatwave: hard, high variance. Same σsigmaσfor both? That’s the assumption.

    • Seismic background at a detector site on a quiet day: almost flat, very predictable. During a teleseismic event: wild fluctuations. Same σsigmaσfor both? That’s the assumption.

    The technical term for constant variance is homoscedastic. However, in a realistic situation, variance that changes with the input is heteroscedastic. Almost every real physical and economic signal is heteroscedastic. MSE can’t represent that.

    This is exactly what separated Model A from Model B discussed above. The true conditional variance was 0.0120.01^{2}0.012 in one case and 2.022.0^{2}2.02 in the other. An MSE-trained model fits one σsigmaσ for the whole dataset and applies it everywhere, too wide when things are calm, too narrow when things are volatile, wrong in both directions. That’s the crack in the foundation, but, the fix is shorter than you’d think.

    ···

    The leap: predict a distribution

    The whole problem comes down to one thing: σsigmaσ never appears in the model’s output. It was hiding inside the derivation that produced MSE, it was fixed to one value for the entire dataset, and it vanished after training. The model literally has no way to say I’m uncertain here.

    The fix is very simple. Instead of emitting a single number, make the model emit the parameters of a probability distribution.

    The simplest choice, and the natural one, given that MSE was already implicitly Gaussian, is two numbers:

    (μ,  σ)  =  fθ(x1,…,xT)(mu,; sigma) ;=; f_{theta}(x_{1}, ldots, x_{T})(μ,σ)=fθ​(x1​,…,xT​)

    where μmuμ is the predicted center and σ>0sigma > 0σ>0 the predicted width. The model now claims:

    xT+1  ∼  N(μ,  σ2)x_{T+1} ;sim; mathcal{N}(mu,; sigma^{2})xT+1​∼N(μ,σ2)

    In words: I think the next value is drawn from a bell curve centered at μmuμ with standard deviationσsigmaσ.

    Figure 5: The architectural change from deterministic to probabilistic forecasting. The model gains a second output head: instead of predicting only x^hat{x}x^, it now predicts (μ,σ)(mu, sigma)(μ,σ), the parameters of a distribution. The backbone is unchanged. Image by author.

    That is a bigger change than one extra output neuron suggests. The output space changes from RRR (a single point on the number line) to a distribution over RRR. The model stops committing to one answer and starts reporting a weighted range of possibilities, including how wide that range should be at this particular moment, given this particular history.

    And σsigmaσ is no longer a single global number. It’s a function of the input. The same model can output σ=0.01sigma = 0.01σ=0.01 when the signal is in a calm stretch and σ=2.0sigma = 2.0σ=2.0 when the signal enters a noisy regime. It gets to decide, at each timestep, how confident to be.

    Architecturally, the change is minimal. The backbone, every attention head, every hidden layer, all the feature extraction, stays identical. The final layer gains one extra output neuron. One neuron produces μmuμ, the other produces σsigmaσ. That’s it. But now we need a new loss. MSE only knows how to compare one number to one number, it has no idea what to do with σsigmaσ. If you train with MSE, the μmuμ head will learn (MSE can score it), but the σsigmaσ head will get no gradient signal at all. We need something that trains both.

    ···

    Asking a better question

    Your model predicts that the next value follows:

    y  ∼  N(μθ(x),    σθ2(x))y ;sim; mathcal{N}bigl(mu_{theta}(mathbf{x}),;; sigma_{theta}^{2}(mathbf{x})bigr)y∼N(μθ​(x),σθ2​(x))

    Then the true value yyy is revealed. How do we score the prediction?

    Forget formulas for a second. Think about it intuitively. The model drew a bell curve. That bell curve assigns a probability density to every possible outcome, high density near the center, low density out in the tails.

    Then reality handed us a specific number yyy. If yyy landed near the peak, where the model put lots of probability, the model did well. It thought this outcome was likely, and it was right. If yyy landed way out in the tails, where the model put almost no probability, the model did poorly. It was surprised by reality. So the natural score is: how much probability density did the model assign to the value that actually occurred?

    That density is:

    pθ(y∣x)  =  12πσθ2 exp⁡ ⁣(−(y−μθ)22σθ2)p_{theta}(y mid mathbf{x}) ;=; frac{1}{sqrt{2pisigma_{theta}^{2}}}, exp!biggl(-frac{(y – mu_{theta})^{2}}{2sigma_{theta}^{2}}biggr)pθ​(y∣x)=2πσθ2​​1​exp(−2σθ2​(y−μθ​)2​)

    We want this to be large. Since −log⁡-log−log is monotonically decreasing, maximizing this density is the same as minimizing the negative log-likelihood:

    L(y, μθ, σθ)  =  −log⁡ pθ(y∣x)mathcal{L}(y,, mu_{theta},, sigma_{theta}) ;=; -log, p_{theta}(y mid mathbf{x})L(y,μθ​,σθ​)=−logpθ​(y∣x)

    Why the logarithm? Two reasons. Practically: training minimizes losses, so we negate to flip maximize into minimize. In addition, numerically: likelihoods over many data points are products of small numbers (which underflow); log⁡loglog turns products into sums, keeping things stable. Notice the shift in philosophy:

    • MSE asks: How far was your number from the truth?

    • NLL asks: How surprised should you have been by the truth, given the distribution you predicted?

    The second question is richer because it involves both the center and the width.

    Now let’s derive the formula. No tricks, just algebra. Bear with me, it’s just four lines and then we’re done. Start from the Gaussian density:

    p(y∣μ,σ)  =  12πσ2 exp⁡ ⁣(−(y−μ)22σ2)p(y mid mu, sigma) ;=; frac{1}{sqrt{2pisigma^{2}}}, exp!biggl(-frac{(y-mu)^{2}}{2sigma^{2}}biggr)p(y∣μ,σ)=2πσ2​1​exp(−2σ2(y−μ)2​)

    Step 1: take the logarithm: The expression is a product (fraction times exponential), so log⁡loglog splits it into a sum:

    log⁡p(y∣μ,σ)  =  log⁡ ⁣(12πσ2)  −  (y−μ)22σ2log p(y mid mu, sigma) ;=; log!biggl(frac{1}{sqrt{2pisigma^{2}}}biggr) ;-; frac{(y – mu)^{2}}{2sigma^{2}}logp(y∣μ,σ)=log(2πσ2​1​)−2σ2(y−μ)2​

    Step 2: expand the first term. Using log⁡(1/a)=−log⁡alog(1/a) = -log alog(1/a)=−loga andlog⁡a=12log⁡alogsqrt{a} = tfrac{1}{2}log aloga​=21​loga:

    log⁡ ⁣(12πσ2)  =  −12log⁡(2π)  −  12log⁡(σ2)  =  −12log⁡(2π)  −  log⁡(σ)log!biggl(frac{1}{sqrt{2pisigma^{2}}}biggr) ;=; -tfrac{1}{2}log(2pi) ;-; tfrac{1}{2}log(sigma^{2}) ;=; -tfrac{1}{2}log(2pi) ;-; log(sigma)log(2πσ2​1​)=−21​log(2π)−21​log(σ2)=−21​log(2π)−log(σ)

    Step3: assemble.

    log⁡p(y∣μ,σ)  =  −12log⁡(2π)  −  log⁡(σ)  −  (y−μ)22σ2log p(y mid mu, sigma) ;=; -tfrac{1}{2}log(2pi) ;-; log(sigma) ;-; frac{(y – mu)^{2}}{2sigma^{2}}logp(y∣μ,σ)=−21​log(2π)−log(σ)−2σ2(y−μ)2​

    Step 4: negate and drop the constant. The term 12log⁡(2π)≈0.919tfrac{1}{2}log(2pi) approx 0.91921​log(2π)≈0.919 depends on neither μmuμ nor σsigmaσ, so its gradient is zero. Drop it:

    LGauss(y, μ, σ)  =  (y−μ)22σ2⏟fit term  +  log⁡(σ)⏟honesty termboxed{mathcal{L}_{mathrm{Gauss}}(y,,mu,,sigma) ;=; underbrace{frac{(y-mu)^{2}}{2sigma^{2}}}_{text{fit term}};+; underbrace{log(sigma)}_{text{honesty term}}}LGauss​(y,μ,σ)=fit term2σ2(y−μ)2​​​+honesty termlog(σ)​​​

    Two terms, two jobs. And they don’t cooperate, they fight. The fight is the mechanism.

    ···

    Two terms and the fight between them

    Understanding this competition is the key to understanding every failure mode you’ll potentially meet later. Let’s take the two terms one at a time.

    The fit term: (y−μ)2 / 2σ2(y – mu)^{2},/,2sigma^{2}(y−μ)2/2σ2

    The numerator is the squared residual, exactly MSE. The new element is the denominator: 2σ22sigma^{2}2σ2, which is the model’s claimed variance (times 2).

    Dividing by σ2sigma^{2}σ2makes the penalty relative to the confidence the model claimed before seeing the answer.

    Imagine the model predicted μ=0.5mu = 0.5μ=0.5and the truth is y=1.5y = 1.5y=1.5. The squared residual is 1.0. Now:

    • σ=0.1sigma = 0.1σ=0.1 (very confident): fit term =1.02×0.01=50= tfrac{1.0}{2 times 0.01} = 50=2×0.011.0​=50. Enormous. The model said I’m certain, and was badly wrong.

    • σ=1.0sigma = 1.0σ=1.0 (modest): fit term =1.02×1.0=0.5= tfrac{1.0}{2 times 1.0} = 0.5=2×1.01.0​=0.5. The miss was within the claimed spread.

    • σ=10.0sigma = 10.0σ=10.0 (very uncertain): fit term=1.02×100=0.005= tfrac{1.0}{2 times 100} = 0.005=2×1001.0​=0.005. Nearly free.

    The model is allowed to make mistakes, but only if it admitted beforehand that those mistakes were possible. The value of σsigmaσwas chosen before yyy was revealed, no cheating after the fact. But here’s the catch. The fit term gets cheaper as σsigmaσ grows. Always. For any fixed residual, a bigger σsigmaσmeans a smaller penalty. So if this were the only term, the model would discover a trivial strategy: set σ=∞sigma = inftyσ=∞ and never be punished for anything. This is obviously useless, a model that says I have no idea everywhere isn’t forecasting, it’s giving up.

    The honesty term:log⁡σlogsigmalogσ

    This closes that door.log⁡σlogsigmalogσ increases as σsigmaσ increases. That’s it. That’s the whole mechanism.

    • Small σsigmaσ (high confidence): log⁡σlogsigmalogσ is small or even negative. This reduces the total loss. The model is rewarded for precision.

    • Large σsigmaσ (low confidence): log⁡σlogsigmalogσ is large and positive. This increases the total loss. The model pays a price for hedging.

    The balance

    Put both terms together:

    L  =  (y−μ)22σ2  +  log⁡(σ)mathcal{L} ;=; frac{(y – mu)^{2}}{2sigma^{2}} ;+; log(sigma)L=2σ2(y−μ)2​+log(σ)

    The fit term says: make σsigmaσ bigger so my errors cost less, while the honesty term says: make σsigmaσ smaller so I get rewarded for precision. These two forces pull in opposite directions, and the model has to find where they balance. That balance is not a hand-tuned tradeoff. There is no hyperparameter weighting the two terms, they came from the same derivation, from the same logarithm of the same Gaussian density. The balance falls out of the math.

    Figure 6: The minimum occurs atσ∗≈∣r∣=1.5sigma^* approx |r| = 1.5σ∗≈∣r∣=1.5, the model should predict exactly the size of the residual it expects to make. Image by author.

    To make this concrete, fix the residual at r=y−μ=1.5r = y – mu = 1.5r=y−μ=1.5 and look at the total loss for different σsigmaσ:

    σsigmaσ

    Fit term

    Honesty term

    Total

    0.50.50.5

    2.2502.2502.250

    −0.693-0.693−0.693

    1.557

    1.01.01.0

    1.1251.1251.125

    0.0000.0000.000

    1.125

    1.51.51.5

    0.5000.500 0.500

    0.4050.4050.405

    0.905

    2.02.02.0

    0.2810.2810.281

    0.6930.6930.693

    0.974

    3.03.03.0

    0.1250.1250.125

    1.0991.0991.099

    1.224

    5.05.05.0

    0.0450.0450.045

    1.6091.6091.609

    1.654

    The minimum is at σ≈1.5sigma approx 1.5σ≈1.5, which is exactly ∣r∣|r|∣r∣, the size of the residual. At small σsigmaσ, the fit term dominates. At large σsigmaσ, the honesty term takes over. The sweet spot is where the model’s claimed uncertainty matches the actual error.

    Wow, that’s not a coincidence. The next section proves it exactly.

    ···

    What the optimum has to be

    We’ve seen the intuition. Now let’s find the balance exactly.

    Optimal μ∗mu^{*}μ∗

    Hold σsigmaσ fixed and optimize μmuμ. The only μmuμ-dependent part of the loss is:

    Ey ⁣[(y−μ)22σ2]  =  12σ2  Ey ⁣[(y−μ)2]mathbb{E}_{y}!biggl[frac{(y-mu)^{2}}{2sigma^{2}}biggr] ;=; frac{1}{2sigma^{2}};mathbb{E}_{y}!bigl[(y-mu)^{2}bigr]Ey​[2σ2(y−μ)2​]=2σ21​Ey​[(y−μ)2]

    This is MSE multiplied by the positive constant 12σ2tfrac{1}{2sigma^{2}}2σ21​. Multiplying by a positive constant stretches the function vertically but doesn’t move the minimum. We already know MSE is minimized by the conditional mean, so:

    μ∗=E[y∣x]boxed{mu^{*} = mathbb{E}[y mid mathcal{x}]}μ∗=E[y∣x]​

    NLL and MSE agree completely on where the center should be. The σsigmaσ in the denominator rescales the penalty but doesn’t shift the optimum. Everything the model already knew how to do is preserved.

    Optimal σ∗sigma^{*}σ∗

    Now fix μ=μ∗mu = mu^{*}μ=μ∗ and optimize σsigmaσ. Define the true conditional variance:

    v  =  E[(y−μ∗)2∣x]v ;=; mathbb{E}bigl[(y – mu^{*})^{2} mid mathbb{x}bigr]v=E[(y−μ∗)2∣x]

    This is how spread out yyy actually is around its mean, given the input. It’s a property of the data, not the model. From σsigmaσ‘s perspective, vvv is just a fixed positive number.

    The expected loss as a function of σsigmaσ:

    f(σ)  =  v2σ2  +  log⁡(σ)f(sigma) ;=; frac{v}{2sigma^{2}} ;+; log(sigma)f(σ)=2σ2v​+log(σ)

    Differentiate. The derivative of v2σ−2tfrac{v}{2}sigma^{-2}2v​σ−2 is −vσ3-tfrac{v}{sigma^{3}}−σ3v​.

    The derivative of log⁡σlogsigmalogσ is 1σtfrac{1}{sigma}σ1​:

    dfdσ  =  −vσ3  +  1σ  =  0frac{df}{dsigma} ;=; -frac{v}{sigma^{3}} ;+; frac{1}{sigma} ;=; 0dσdf​=−σ3v​+σ1​=0

    1σ=vσ3⟹σ2=vfrac{1}{sigma} = frac{v}{sigma^{3}} qquadLongrightarrowqquad sigma^{2} = vσ1​=σ3v​⟹σ2=v

    σ∗2  =  E[(y−μ∗)2∣x]  =  Var(y∣x)boxed{sigma^{*2} ;=; mathbb{E}bigl[(y – mu^{*})^{2} mid mathbb{x}bigr] ;=; mathrm{Var}(y mid mathbb{x})}σ∗2=E[(y−μ∗)2∣x]=Var(y∣x)​

    Gaussian NLL pushes σ2sigma^{2}σ2 toward the true conditional variance.

    The model learns both the conditional mean and the conditional variance simultaneously, one loss function, two targets.

    This means the uncertainty is not a manually chosen constant. The model produces a different σsigmaσ for every input, matching the actual local noise. When the signal is in a calm regime, Var(y∣x)mathrm{Var}(y mid mathbb{x})Var(y∣x) is small and so is σsigmaσ. When the signal enters a noisy regime, both grow. The model learns to be confident where it should be confident, and uncertain where it should be uncertain, automatically, from the data.

    That’s the missing piece from Sections 1-4. Model A’s small variance 0.0120.01^{2}0.012) and Model B’s large variance (2.022.0^{2}2.02) can finally be distinguished, because the loss gives the model a reason to learn them.

    ···

    Why this is the right loss, not merely a good one

    Everything so far has been: here’s a loss, the math works out, the optimum is nice. But you could reasonably ask why this loss? Could you cook up a different two-term penalty that also balances μmuμ and σsigmaσ? Something like MSE+λ⋅σ2text{MSE} + lambda cdot sigma^{2}MSE+λ⋅σ2 with a hand-tuned λlambdaλ?

    Indeed, that would also penalize large σsigmaσ. It might even work okay. But it would be an arbitrary recipe with no principled interpretation. Gaussian NLL isn’t one recipe among many. It has a deeper justification from information theory.

    KL divergence: the intuition

    Let ptrue(y∣x)p_{mathrm{true}}(y mid mathbb{x})ptrue​(y∣x) be the true conditional distribution (how reality actually generates outcomes) and pθ(y∣x)p_{theta}(y mid mathbb{x})pθ​(y∣x) the model’s prediction. The Kullback-Leibler divergence measures how different they are How much information is lost when you use the model’s distribution as a stand-in for the true one?

    If they match perfectly, KL is exactly zero, no information lost. The more they differ, the larger the KL. The KL divergence is defined as:

    DKL ⁣(ptrue ∥ pθ)  =  Eptrue ⁣[log⁡ptrue(y)pθ(y)]D_{mathrm{KL}}!bigl(p_{mathrm{true}} ,|, p_{theta}bigr) ;=; mathbb{E}_{p_{mathrm{true}}}!biggl[log frac{p_{mathrm{true}}(y)}{p_{theta}(y)}biggr]DKL​(ptrue​∥pθ​)=Eptrue​​[logpθ​(y)ptrue​(y)​]

    Expand the log ratio:

    =  Eptrue ⁣[log⁡ptrue(y)]  −  Eptrue ⁣[log⁡pθ(y)]=; mathbb{E}_{p_{mathrm{true}}}!bigl[log p_{mathrm{true}}(y)bigr] ;-; mathbb{E}_{p_{mathrm{true}}}!bigl[log p_{theta}(y)bigr]=Eptrue​​[logptrue​(y)]−Eptrue​​[logpθ​(y)]

    The first term is the negative entropy of the true distribution, this is a fixed number that depends only on ground truth (reality), not on the model. From θthetaθ‘s perspective, it’s a constant. The second term is the expected log-likelihood under the model. So:

    DKL ⁣(ptrue ∥ pθ)  =  Eptrue ⁣[ −log⁡pθ(y)⏟NLL ]  +  constD_{mathrm{KL}}!bigl(p_{mathrm{true}} ,|, p_{theta}bigr) ;=; mathbb{E}_{p_{mathrm{true}}}!bigl[,underbrace{-log p_{theta}(y)}_{text{NLL}},bigr] ;+; text{const}DKL​(ptrue​∥pθ​)=Eptrue​​[NLL−logpθ​(y)​​]+const

    The deep connection

    Minimizing expected NLL  =  Minimizing DKL(ptrue ∥ pθ)textbf{Minimizing expected NLL} ;=; textbf{Minimizing } D_{mathrm{KL}}(p_{mathrm{true}} ,|, p_{theta})Minimizing expected NLL=Minimizing DKL​(ptrue​∥pθ​)

    When you minimize NLL, you are minimizing the information-theoretic distance between the model’s predicted distribution and the ground truth. You’re dragging pθp_{theta}pθ​ toward ptruep_{mathrm{true}}ptrue​.

    In addition, KL divergence doesn’t just care about the mean or the variance. It cares about every aspect of the distribution, such as skewness, kurtosis, tail behavior, everything. The only reason we learn just mean and variance here is that we chose a Gaussian for pθp_{theta}pθ​, and a Gaussian is fully determined by those two numbers. Choose a richer family, and the same NLL principle pushes the model to learn those extra aspects too.

    The cleanest way to see the fundamental difference:

    • MSE minimizes a distance between two numbers.

    • NLL minimizes a distance between two distributions.

    MSE operates in the space of values. NLL operates in the space of probability distributions. The second is infinitely richer. And here’s the beautiful part: when you restrict NLL to a Gaussian with fixed σsigmaσ, it collapses back to MSE, that was Section 4. MSE is a special case of NLL, the case where you’ve given up on learning uncertainty. NLL is the general framework; MSE is what you get when you freeze σsigmaσ and throw it away.

    ···

    Practical Engineering

    Beautiful objective. Now make it survive when it works with an optimizer. To achieve this, two engineering details must be taken into account and one deeper issue stands between the derivation and the code that trains.

    Predict log⁡σlogsigmalogσ, not σsigmaσ

    The output layer produces any real number, but σsigmaσ must be strictly positive. How do you enforce that?

    • ReLU: σ=max⁡(0,h)sigma = max(0, h)σ=max(0,h). Positive (or zero), but terrible. For h≤0h leq 0h≤0 the output is zero, the gradient is zero, the network can’t learn. Half the range is dead. And σ=0sigma = 0σ=0 is catastrophic, the fit term blows up to infinity.

    • Softplus: σ=log⁡(1+eh)sigma = log(1 + e^{h})σ=log(1+eh). Better, always positive, never zero. But the gradient saturates near h=0h = 0h=0, making learning sluggish exactly where precision matters.

    • The standard move: let the network predict s=log⁡σs = logsigmas=logσ (unconstrained, any real number) and recover σ=essigma = e^{s}σ=es. The exponential is always positive, smooth everywhere, and its own derivative. Rewritten in sss, the NLL becomes:

    LGauss  =  (y−μ)22e2s  +  smathcal{L}_{mathrm{Gauss}} ;=; frac{(y – mu)^{2}}{2e^{2s}} ;+; sLGauss​=2e2s(y−μ)2​+s

    Both μmuμ and sss now range freely over RRR. Nothing for the optimizer to fight.

    Clamp the range

    Even reparameterized, sss can wander somewhere useless:

    • s→−∞s to -inftys→−∞ (σ→0sigma to 0σ→0): the fit term explodes on the tiniest residual. Gradients blow up.

    • s→+∞s to +inftys→+∞ (σ→∞sigma to inftyσ→∞): the model claims total ignorance. Useless.

    A simple clamp keeps things sane:

    log_sigma = torch.clamp(log_sigma, min=-6.0, max=2.0)sigma     = torch.exp(log_sigma)

    This gives σ∈[e−6,e2]≈[0.0025, 7.4]sigma in [e^{-6}, e^{2}] approx [0.0025,, 7.4]σ∈[e−6,e2]≈[0.0025,7.4], wide enough for normalized time series. The lower bound e−6e^{-6}e−6 is called the σsigmaσ-floor. If you see the model’s σsigmaσ pinned at the floor across many inputs, something is likely wrong with the floor setting or the data normalization.

    The optimization trap

    This one is subtler. It’s not about numerical stability, it’s about the optimization landscape. Look at the gradient of the fit term with respect to μmuμ:

    ∂∂μ[(y−μ)22σ2]  =  − y−μσ2frac{partial}{partialmu}biggl[frac{(y-mu)^{2}}{2sigma^{2}}biggr] ;=; -,frac{y – mu}{sigma^{2}}∂μ∂​[2σ2(y−μ)2​]=−σ2y−μ​

    See the 1/σ21/sigma^{2}1/σ2? The gradient that updates μmuμ is scaled by the inverse of σ2sigma^{2}σ2. When σsigmaσ is well calibrated, this is fine. But early in training, here’s what happens:

    • The model starts with random parameters. Predictions are bad, large residuals everywhere.

    • Two paths to reduce the loss: improve μmuμ (hard, requires learning signal structure) or increase σsigmaσ (easy, just shift the sss output upward).

    • The model takes the easy path, σsigmaσ grows.

    • As σsigmaσ grows, the 1/σ21/sigma^{2}1/σ2 factor shrinks. The gradient on μmuμ weakens.

    • The model stops improving μmuμ for the hard examples, because it already labeled them as uncertain.

    A vicious cycle: large σsigmaσ →to→ weak μmuμ-gradient →to→ μmuμ stays bad →to→ large residuals justify large σsigmaσ. The model learns to explain away its own mistakes by claiming uncertainty, instead of actually getting better. And the examples where this happens most are exactly the hardest ones, the ones the model most needs to learn from.

    There are two practical fixes:

    • MSE warmup. Train with plain MSE first, ignoring the σsigmaσ head. Once μmuμ is reasonably accurate, switch to NLL. Now σsigmaσ has a meaningful signal to learn from, and the shortcut of inflating σsigmaσ is less tempting because the predictions aren’t that bad anymore.

    • βbetaβ-NLL. Multiply each sample’s loss by a detached factor of σ2βsigma^{2beta}σ2β.

    This reweights gradients so hard examples keep contributing even when σsigmaσ is large. At β=0beta = 0β=0 you get standard NLL; at β=1beta = 1β=1 the weighting exactly cancels the 1/σ21/sigma^{2}1/σ2 effect. In practice β=0.5beta = 0.5β=0.5 is a good default.

    The key lesson: a loss function can have a mathematically correct optimum and still be difficult to optimize in practice. Proving that σ∗2=Var(y∣x)sigma^{*2} = mathrm{Var}(y mid mathbb{x})σ∗2=Var(y∣x) tells you what the model should learn. It does not guarantee that gradient descent will get there.

    ···

    Where the notebook picks up

    Everything above is the derivation. Now the question we parked: does this actually happen when you train a real model?

    The companion notebook builds two transformers with the same backbone, on the same synthetic signal. The signal is designed so that its noise level changes over time, quiet stretches and noisy stretches, and nobody tells either model where the boundaries are.

    • Model 1: trained with MSE. Outputs one number per timestep.

    • Model2: trained with Gaussian NLL. Outputs μmuμ and σsigmaσ.

    On plain point accuracy, they finish nearly similar. We already predicted this: NLL and MSE agree on the optimal μmuμ, so adding σsigmaσ doesn’t hurt point predictions. On this metric alone, you’d call them interchangeable. But they’re not. Split the test set into quiet and noisy regimes. Ask each model to draw a 90% prediction interval, a band that should contain the true value 90% of the time. For the point model, the only option is one fixed band width computed from the global residual variance. For the probabilistic model, each timestep has its own σsigmaσ, so the band is μ±1.645σmu pm 1.645sigmaμ±1.645σ.

    Quiet regime

    Noisy regime

    Point model (fixed band)

    95.0%95.0%95.0%

    63.1%63.1%63.1%

    Probabilistic model (learned σsigmaσ)

    ≈87.7%approx87.7 %≈87.7%

    ≈83.3%approx83.3%≈83.3%

    The point model overshoots the 90% target when things are calm (the fixed band is too wide) and catastrophically undershoots when things are noisy (the band is far too narrow). One in three values that should be inside the interval falls outside. The probabilistic model stays roughly honest in both regimes, because its band actually tracks the local noise. Right on average, wrong where it matters. That’s the whole argument in one table.

    The notebook also closes the circle on the threshold question from the opening. Given a threshold, the point predictor can only say yes or no. The probabilistic model returns a real probability, the quantity a decision actually needs. And there is a plot of the predicted σsigmaσ widening and narrowing with the true noise. The model learned that from the data, because the loss gave it a reason to.

    ···

    Conclusion

    MSE is not a bad loss function. It does a good job of learning the center of the target distribution. But it says nothing about the uncertainty. σsigmaσ never appears in the MSE formula. If the loss never sees uncertainty, it cannot learn it or evaluate it. That is, training with MSE implicitly assumes that the same amount of uncertainty applies everywhere, an assumption that is rarely true in real-world data.

    Gaussian NLL fixes this by letting the model predict both μmuμ and σsigmaσ. The loss has two competing parts: one encourages the model to explain the data accurately, the other discourages it from claiming unnecessary uncertainty. Together, these forces drive the model toward the true conditional variance. Through the KL divergence connection, this objective isn’t a convenient heuristic, it minimizes the information-theoretic gap between the model’s distribution and reality’s. With one extra output neuron and a simple clamp, the model learns both the mean and the uncertainty in a single training run.

    Two important lessons to carry forward:

    • First, predicted uncertainty is only as reliable as the optimization process that produced it. Even though Gaussian NLL has a correct optimum, training doesn’t always reach it. The 1/σ21/sigma^{2}1/σ2 weighting creates a shortcut that can trap early learning. Practical techniques, such as MSE warmup and βbetaβ-NLL, make the path to the optimum more reliable.

    • Second, the Gaussian is still an assumption. Predicting σsigmaσ gives the model an input-dependent measure of uncertainty, but the predicted distribution remains unimodal (one peak) and symmetric (equal probability above and below the mean). Some problems don’t fit this shape. Imagine a ball balanced on a ridge: it could roll left or right, and the mean (the ridge top) is the one place it won’t stay. Data with multiple possible futures, sudden regime changes, or heavy tails requires richer predictive distributions than a single Gaussian can provide.

    That is where more expressive approaches, such as quantized-token models and flow matching, become useful, and where the next part of this series begins. Until then, think back to the question we started with: Should I worry about this prediction? A model trained only with MSE has no meaningful way to answer. A probabilistic model trained with Gaussian NLL finally can.

    ···

    References

    [1] D. A. Nix and A. S. Weigend, Estimating the mean and variance of the target probability distribution, Proc. IEEE International Conference on Neural Networks, 1994.

    [2] A. Kendall and Y. Gal, What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?, Advances in Neural Information Processing Systems (NeurIPS), 2017.

    [3] T. Gneiting and M. Katzfuss, Probabilistic Forecasting, Annual Review of Statistics and Its Application, 2014.

    [4] M. Seitzer, A. Tesch, N. Rasiwasia, and G. Martius, On the Pitfalls of Heteroscedastic Uncertainty Estimation with Probabilistic Neural Networks, ICLR 2022.

    Lying Models MSE
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Previous ArticleAmazon Prime Video takes on TikTok with short-form news clips
    Next Article AI infrastructure company Cornelis raises $205M to chip away at Nvidia’s dominance
    • Website

    Related Posts

    AI Tools

    When to Use One Model and When to Use a Team of Agents

    AI Tools

    Hugging Face: Inside the Hub Where a Million AI Models Live

    AI News

    Microsoft’s new AI ‘code of conduct’ tells models not to hack systems or trick humans

    Add A Comment
    Leave A Reply Cancel Reply

    Top Posts

    Rocket Lab is seeing red about NASA’s decision on a Mars spacecraft

    0 Views

    Trump throws out power plant climate pollution rules

    0 Views

    Astronaut Christina Koch chats with Google’s James Manyika

    0 Views
    Stay In Touch
    • Facebook
    • YouTube
    • TikTok
    • WhatsApp
    • Twitter
    • Instagram
    Latest Reviews
    AI Tutorials

    Quantization from the ground up

    AI Tools

    David Sacks is done as AI czar — here’s what he’s doing instead

    AI Reviews

    Judge sides with Anthropic to temporarily block the Pentagon’s ban

    Subscribe to Updates

    Get the latest tech news from FooBar about tech, design and biz.

    Most Popular

    Rocket Lab is seeing red about NASA’s decision on a Mars spacecraft

    0 Views

    Trump throws out power plant climate pollution rules

    0 Views

    Astronaut Christina Koch chats with Google’s James Manyika

    0 Views
    Our Picks

    Quantization from the ground up

    David Sacks is done as AI czar — here’s what he’s doing instead

    Judge sides with Anthropic to temporarily block the Pentagon’s ban

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    Facebook X (Twitter) Instagram Pinterest
    • About Us
    • Contact Us
    • Terms & Conditions
    • Privacy Policy
    • Disclaimer

    © 2026 ainewstoday.co. All rights reserved. Designed by DD.

    Type above and press Enter to search. Press Esc to cancel.