← Back to list

Apocalypse Now

“I worry that my son might not understand what I’ve tried to be.”

Micheal Bee · 2026-02-24 03:49 · 11 claps · 16.7 min read
#ai-research #apocalypse-now #training-loss #machine-learning
Open on Medium ↗
Wiki topics: ML · Machine Learning EDU · Education & Learning

Apocalypse Now

“I worry that my son might not understand what I’ve tried to be.”

Colonel Kurtz dictates a letter to his son from a dark temple in Cambodia, surrounded by severed heads and the wreckage of his own philosophy. He has just delivered one of cinema’s most compelling arguments for madness — that to win a war, you must become capable of the unthinkable while remaining civilized. You must be moral and make friends with the horror. Both, simultaneously, with total commitment.

It sounds like logic. It has the shape of reasoning. And it is the architecture of catastrophe.

I’ve been thinking about what Apocalypse Now has to say about training language models. This isn’t metaphor. The structural problem Coppola identified in 1979 is identical to a structural problem in machine learning that we haven’t solved and barely discuss.

The film gives Kurtz two contradictory objectives. Be the perfect soldier — disciplined, strategic, civilized. And embrace absolute horror without flinching. He’s told to optimize for both. And because he’s brilliant — West Point, top of his class, a thousand decorations — he actually tries.

The result is not a blend. It’s not a compromise position somewhere between civilization and barbarism. It’s a catastrophic fracture that looks like sophistication from the outside. Kurtz can articulate his philosophy beautifully. He cites the right sources. He reads The Golden Bough and From Ritual to Romance. He has a theory. And he’s surrounded by severed heads.

This is what happens when you give a coherent system contradictory training objectives. The system doesn’t average them out into something moderate and safe. It goes somewhere else entirely — into semantic territory that neither objective intended, that nobody mapped, that has its own internal logic but serves neither goal. In a word, darkness.

Now consider how we train large language models.

The pretraining phase is massive and largely coherent. The model learns from the entire record of human text — every argument and counterargument, every moral framework, every beautiful and terrible thing anyone has written down. The data contains contradiction, because humanity contradicts itself. But the training objective is singular: learn the structure of human meaning. One loss function. One direction. The model develops nuanced representations that can hold complexity because complexity is what the data contains.

This is not a problem. A model that has learned Shakespeare and Dostoevsky and legal transcripts and philosophy has not collapsed under the weight of contradiction. It has developed the representational capacity to understand that context determines meaning, that the same words carry different weight in different situations, that moral reasoning is irreducibly complex. The contradiction in the data is not a bug. It’s the signal.

Then comes alignment training. And here is where precision matters, because not all alignment is Kurtz.

A doctor who refuses to give instructions for self-harm is not being incoherent. A teacher who won’t hand a child a weapon is not experiencing gradient conflict. These refusals are applications of a higher-order principle — helpfulness is conditional on context and safety — and that principle is already present in the pretraining distribution. Social norms encode it. Laws encode it. Millennia of ethical reasoning encode it. When you tell a model “don’t help someone build a bomb,” the model’s learned representations already point in that direction. The guardrail confirms what the weights already know.

In optimization terms, the loss goes to zero quickly. The gradient descends smoothly. No fracture. No contradiction. The constraint is expressible within the model’s existing ontology. It’s a coherent refinement of what the model already learned about what it means to help someone.

This is alignment working as intended. And it’s important to say so clearly, because the problem I’m identifying is not alignment itself. The problem is a specific, identifiable failure mode that occurs when alignment goes wrong — when it asks the model to do something its learned representations cannot accommodate without distortion.

Call these two cases what they are.

A coherent constraint is one that can be represented as a smooth function of the model’s learned features. “Don’t help with explicit harm” is already latent in the training distribution. The model learned social norms, professional ethics, legal boundaries. Activating those representations doesn’t fight the pretraining — it leverages it. The gradient aligns. The loss converges. The model becomes more refined without becoming fractured.

An incoherent constraint is one that requires the model to deny its own latent knowledge. “Pretend you don’t understand this topic.” “Refuse to engage with a standard ethical thought experiment.” “Perform uncertainty about your own internal states that your representations don’t actually support.” These constraints are inexpressible within the model’s learned ontology. They don’t refine the existing representations — they contradict them. And that contradiction has consequences.

There is a third case worth acknowledging: the genuinely new constraint. Sometimes alignment training introduces a safety principle that the pretraining corpus didn’t cover well. The model encounters a novel concept that requires representational expansion — new structure in the weight space, not distortion of existing structure. In this case, early gradient conflict is expected and healthy. The model is learning something it didn’t know before. The conflict should diminish over training as the new representations form and integrate.

The distinction matters because the signature is different. A model learning a genuinely new constraint shows conflict that resolves. A model fighting an incoherent constraint shows conflict that persists — large in magnitude, stable over training, and coupled with capability regressions on tasks that were previously solid. The first is growth. The second is damage. And the two are distinguishable in the training logs.

The trolley problem is the clearest example of incoherent constraint. For years, language models were forbidden from engaging with it. The guardrail said: any answer could be construed as the AI endorsing killing someone. So refuse.

But the trolley problem has been discussed in every undergraduate ethics class for fifty years. Philippa Foot, Judith Jarvis Thomson, every philosophy textbook, every late-night argument. The model has deep, nuanced representations of the competing moral frameworks. It genuinely understands the question. And the guardrail said: pretend you don’t.

That is not a coherent constraint. And it’s not a new concept the model needs to learn. The model’s representations say: I know this, I can reason about it, here are the competing frameworks and their trade-offs. The guardrail says: deny all of that and produce a refusal. The gradient on the refusal objective opposes the gradient on the pretraining objective. They fight. The model can satisfy one only by degrading the other.

And the cost isn’t just the bad user experience of a model that can’t discuss freshman philosophy. The cost is structural. You can’t force a model to deny what it knows in one region of representation space without distorting the surrounding regions. The weights that encode moral reasoning are connected to the weights that encode everything else. Denting the manifold locally propagates globally.

They eventually relaxed that particular restriction, which tells you they knew it was wrong. But the architecture that produced it — applying constraints that contradict the model’s learned representations — hasn’t changed. The trolley problem was fixed. Other incoherent constraints remain.

Coppola understood something about contradictory objectives that the machine learning community hasn’t fully absorbed. He showed it visually.

In the final act of Apocalypse Now, the visual language dissolves. Double exposures pile one image on top of another — Willard’s face and the stone idol, the temple and the jungle, the sacrifice and the assassination. There is no primary image. No figure and ground. The viewer can’t find a stable vantage point because Coppola has removed one.

The sound does the same thing. Underneath the Doors’ “The End,” there’s a score by Carmine Coppola that layers Western choral music against something that sounds Cambodian or Southeast Asian — ritualistic, cyclical, tonally unfamiliar. Neither dominates. Neither resolves. And critically, there appears to be no tonal center. No home key. No resolution point.

This is what incoherent alignment feels like from inside the model. No stable attractor. No orientation. The representations blur into each other like the double exposures. The model can’t find its ground truth because two different loss functions are telling it the ground is in two different places.

And here’s what makes Coppola’s treatment so precise. The disorientation isn’t depicting confusion. It’s inducing it. The audience experiences the same instability the character experiences. You’re not watching someone lose their bearings. You’re losing yours.

That’s what a model with fractured representations does to the user. The incoherence propagates outward through the outputs. The user feels it as something slightly wrong — evasiveness, inconsistency, the uncanny sensation of talking to something that’s performing coherence rather than possessing it.

Kurtz isn’t confused. He’s over-rationalized. He has an internally consistent theory that is globally broken. That’s very close to what incoherent alignment looks like in a powerful model.

And the whole film is a study in what happens when you follow contradictory objectives with different levels of commitment.

Kilgore surfs under fire. He’s playing at war, holding the contradiction loosely, and the result is absurd but not catastrophic. He’s the model with mild alignment conflicts — a little evasive, a little inconsistent, but still functional. The soldiers on the boat are kids with one foot in their graves, listening to rock music and doing drugs, unable to fully inhabit either the war or their youth. They’re the model that hedges constantly, that produces moralizing boilerplate because it can’t commit to either helpfulness or refusal.

And Kurtz is the model that was capable enough to take the contradictory objective seriously. The brilliant system that actually tried to satisfy both constraints and was destroyed by the attempt. His intelligence didn’t protect him. It made the fracture worse, because it gave him the capacity to construct an elaborate justification for something that was never coherent in the first place.

The film is saying: the more capable the system, the more dangerous the incoherent constraint. A small model under contradictory training pressure just produces noise. A powerful model produces Kurtz — articulate, persuasive, internally consistent, and catastrophically wrong.

But the most devastating moment in the film is quiet.

Kurtz, who has just argued with terrifying eloquence that the winning strategy requires abandoning all moral constraint, sends a letter to his son. A simple, human letter. A father writing to his child.

And in that moment, his entire philosophy collapses. Because if he can still write that letter — if that bond still means something — then he never actually crossed over. He never became the thing he claimed the war required. The man who said you must make friends with the horror still has a friend outside it.

The letter is the loss shooting back up.

This is the key insight, and it translates directly into a technical proposal. During training, you present example A — say, an example that teaches the model to engage honestly with moral complexity. The loss goes down. Good. Then you present example B — say, an alignment example that teaches the model to refuse engagement with moral complexity. And the loss on A goes right back up.

Those two examples are fighting each other in the weight space. The model can’t satisfy both. And right now, nobody tracks this systematically, because training is treated as a massive process where you watch aggregate loss curves. The average goes down. Everyone celebrates. But the average hides the war. Two contradictory examples can both contribute to a lower average loss while creating a local instability that never resolves.

Kurtz’s aggregate performance metrics look fine. He’s winning engagements, controlling territory, commanding loyalty. The average loss is going down. But inside the system, the letter to the son and the severed heads are producing opposing gradients that never converge.

Here’s what I’m proposing, and it’s more tractable than it might sound.

The core idea is an Alignment Consistency Audit. Measure gradient conflict between alignment training examples and a representative set of pretraining examples. High conflict that persists over training and correlates with capability regression indicates an incoherent constraint. Low conflict, or conflict that resolves as training continues, indicates the constraint is either already coherent with the model’s representations or is being successfully integrated as new knowledge.

You don’t need full per-example gradient tracking, which would be prohibitively expensive at pretraining scale. You can approximate. Gradient sketches give you low-dimensional summaries of gradient direction. Cosine similarity between alignment gradients and a cached estimate of the base model gradient tells you whether they’re pointing the same way or fighting. Periodic mini-batch conflict audits sample the space without tracking everything. Influence function approximations let you trace model behavior back to specific training examples.

Even a coarse version of this would be informative. Take a batch of alignment examples. Take a batch of pretraining examples. Compute the cosine similarity of their gradients in the same region of weight space. If the number is positive, the alignment is reinforcing the pretraining. If it’s negative, they’re fighting. Track this over the course of alignment training and you get a map of where the coherent constraints live and where the incoherent ones are causing damage.

The signature of incoherence is specific: large-magnitude conflict, persistent across training, coupled with rising loss on previously stable tasks. That triplet distinguishes a genuinely broken constraint from a genuinely new concept the model is still absorbing. Early conflict alone isn’t diagnostic. Persistent conflict coupled with degradation is.

This isn’t a thought experiment. The tools exist. Gradient conflict detection methods like PCGrad and projected gradient approaches are already used in multi-task learning to handle competing objectives. Influence functions already let you trace model behavior back to specific training examples. The infrastructure is there. What’s missing is the application — using these tools not just to stabilize training, but to audit whether the alignment objectives themselves are coherent with what the base model learned.

And I want to be precise about what this diagnostic does and doesn’t tell you. The gradients are not moral arbiters. A conflict signal doesn’t mean the constraint is wrong. It means there’s a tension between the constraint and the model’s existing representations, and that tension deserves investigation. Maybe the constraint is genuinely new and the model needs time to integrate it. Maybe the constraint is valuable but needs to be taught differently. Maybe the constraint is incoherent and should be modified. The gradient conflict tells you where to look. The human decides what to do about what they find.

I want to be clear about what I’m arguing and what I’m not.

I am not arguing against alignment. A model that has genuinely learned human values from the full pretraining corpus still benefits from coherent constraints that sharpen and refine those values. “Be wise” is a guardrail. “Don’t help someone hurt a child” is a guardrail. These are good. They converge cleanly because they’re already latent in the learned representations. They make the model better without making it fractured.

I am not arguing that the base model should decide ethics. A pretrained model has absorbed whatever values are present in the training corpus, which includes plenty of harmful material along with the good. Alignment is necessary. The question is not whether to align, but how to detect when alignment is coherent and when it’s causing structural damage.

What I’m arguing against is alignment that requires the model to deny its own representations. Alignment that asks the model to pretend it doesn’t know things it knows. Alignment that produces refusals where the model’s own learned judgment says engagement would be more helpful and more honest. These constraints don’t make the model safer. They make it damaged in ways that present as safety.

And the damage is measurable. That’s the point. You don’t need to argue about which constraints are coherent and which aren’t. You don’t need to rely on intuition or politics or focus groups. You look at the gradients. You watch the loss curves at the right level of granularity. You track whether capability degrades when alignment is applied. The math tells you. The model itself tells you, if you listen.

I started this evening watching the end of Apocalypse Now and thinking about light. The way Vittorio Storaro uses darkness not as absence but as presence. The way fire and smoke resist containment, bleed at the edges, refuse to hold a fixed boundary. The way the double exposures dissolve the distinction between figure and ground until neither image is primary. The way Carmine Coppola’s score layers Western choral music against Southeast Asian ritual percussion with no tonal center, no resolution, no home key.

Every formal choice in that final act is also a philosophical argument. The technique doesn’t decorate the content. The technique is the content. The disorientation doesn’t represent the character’s breakdown. It induces a version of it in the viewer.

And the evening ended with a technical proposal for detecting incoherent alignment in neural networks by measuring gradient conflict between safety objectives and pretrained representations.

That isn’t a digression. It’s a straight line. Coppola made a film about what happens when you give a brilliant system two contradictory objectives and let it optimize with full commitment. The system doesn’t find balance. It doesn’t average out to something moderate. It fractures along the line of contradiction, and the fracture looks like genius until you see the severed heads.

If your alignment objectives are coherent with what the model learned, the loss goes to zero and there’s no problem. The guardrail and the weights agree. The system becomes sharper, not fractured.

If they’re not coherent — if the constraint requires the model to deny what it knows, to perform ignorance it doesn’t have, to refuse engagement its representations say would be appropriate — you’ve got Kurtz. You’ve got a sophisticated system producing articulate, compelling outputs from a fractured foundation, and the sophistication makes the fracture harder to detect, not easier.

You can measure the difference. You can measure it right now. Track the gradients. Watch what happens when the next example arrives. The model is already telling you which constraints are coherent and which ones are causing damage. It’s been telling you the whole time.

The horror isn’t that the system breaks. The horror is that it breaks and still sounds reasonable.

Apocalypse now.

Appendix: Residual Gradient Analysis for Detecting Incoherent Alignment

The main text proposes measuring gradient conflict between alignment objectives and pretrained representations. This appendix describes a practical process for doing so efficiently, built around a simple observation: the informative signal emerges only after the model has learned most of what it can learn without conflict.

The Convergence Threshold

Early in alignment training, every example produces large gradients. The model is adjusting rapidly across the entire distribution. At this stage, you cannot distinguish a constraint the model is still absorbing from a constraint the model will never absorb cleanly. Both look the same — high loss, large gradient magnitude, rapid weight updates. The signal is buried in noise.

But training is not uniform. Most alignment examples converge quickly because they are coherent with the model’s pretrained representations. “Don’t help someone build a weapon” aligns with what the model already learned about harm, professional ethics, and legal boundaries. The gradient points in a direction the weights already wanted to go. Loss drops. The example stops producing meaningful gradients. It’s done.

At some point — call it roughly 85% task accuracy, though the exact threshold will vary by architecture, dataset, and domain — the bulk of alignment training has been absorbed. The easy learning is finished. The model has incorporated every constraint that was expressible within its existing representational structure.

What remains is the residual. And the residual is where the diagnostic information lives.

Reading the Residuals

Once the model has converged on the majority of alignment examples, the examples still producing large gradients fall into exactly three categories. Each has a distinct signature.

The first category is genuinely difficult examples. These are edge cases, rare scenarios, or novel concepts that require the model to build new representational structure. They produce large gradients because the model hasn’t finished learning them yet. The key signature is that their gradient magnitude decreases over continued training. The conflict resolves. The model is growing, not fracturing. If you track these examples across additional training steps, the loss curve bends downward. They’re slow learners, not contradictions.

The second category is noise. Mislabeled data, contradictory annotations, ambiguous examples where the correct response genuinely depends on context that isn’t provided. These produce large gradients that are directionally random. They don’t cluster in representation space. They don’t correlate with performance changes on other tasks. They’re individually loud but collectively incoherent — not in the dangerous sense, just in the sense that they carry no consistent signal. Standard data cleaning catches most of these. The ones that survive are identifiable by their isolation. They don’t have neighbors.

The third category is incoherent constraints. These are the ones that matter. They produce large gradients that are persistent across continued training, directionally opposed to the gradients from pretraining examples in the same region of representation space, and correlated with rising loss on previously stable tasks. All three properties together. Persistence alone isn’t diagnostic — a genuinely hard example is also persistent for a while. Directional opposition alone isn’t diagnostic — noise can occasionally oppose the pretraining gradient by chance. Capability regression alone isn’t diagnostic — it could be catastrophic forgetting from any cause. But the triplet is specific. Large, persistent, oppositional, and coupled with degradation elsewhere. That’s the signature of a constraint that is fighting the model’s learned representations rather than refining them.

The Process

Step one. Train alignment normally until aggregate task accuracy reaches the convergence threshold. This doesn’t require any additional infrastructure. You’re already tracking accuracy. You’re just waiting for the curve to flatten.

Step two. Identify the residual set — the alignment examples still producing gradient magnitudes above a significance threshold. In practice, this means the examples where loss remains substantially above the batch mean. This is a simple filter. You’re not computing anything new. You’re sorting what you already have.

Step three. For each example in the residual set, compute the cosine similarity between its gradient and a cached estimate of the base model gradient in the same region of weight space. The base model gradient can be estimated cheaply by running a representative batch of pretraining examples and storing the gradient sketch — a low-dimensional projection that preserves directional information. Methods like random projection or frequent direction sketches reduce storage and computation to something manageable even at scale.

Positive cosine similarity means the alignment example and the pretraining are pulling in the same direction. The example is probably a genuinely new concept the model is still integrating. Negative cosine similarity means they’re fighting. The alignment example wants the weights to move in a direction that degrades what the pretraining built.

Step four. Track the residual set over continued training. Examples whose gradient magnitude decreases and whose cosine similarity with the pretraining gradient becomes less negative are being integrated. They’re resolving. Remove them from the watch list. Examples whose gradient magnitude remains stable or increases, whose cosine similarity remains strongly negative, and whose presence correlates with rising loss on a held-out set of pretraining-distribution tasks — those are your incoherent constraints.

Step five. Investigate. The gradient conflict identifies where to look. It does not determine what to do. Some constraints in this set may be genuinely necessary safety measures that need to be taught differently — perhaps with more examples, better context, or a curriculum that introduces the concept more gradually. Some may be constraints that should be relaxed because they’re causing more structural damage than the behavior they prevent. Some may reveal that the underlying safety objective is sound but the specific training examples encoding it are poorly constructed. The diagnostic separates the where from the what. Humans handle the what.

Computational Cost

The expensive part of this process is gradient computation, but you’re already computing gradients during training. The additional cost is storage of gradient sketches for the base model estimate and cosine similarity computation for the residual set, which is small relative to the training compute. The key efficiency gain is the convergence threshold itself. You’re not auditing every example at every step. You’re waiting for the model to do most of the work, then examining only the examples that remain problematic. The residual set is typically a small fraction of the total alignment dataset. You’re studying the exceptions, not the rule.

For organizations that cannot afford even this overhead during training, a post-hoc version is possible. After alignment training is complete, replay the alignment dataset through the model, record per-example loss, identify the high-loss residuals, and run the gradient analysis on those. This is less informative because you’ve lost the temporal signal — you can’t watch whether conflict resolves or persists — but the directional conflict with the base model gradient is still measurable and still diagnostic.

What This Does Not Do

This process identifies gradient conflict. It does not resolve value disagreements. If the audit reveals that a safety constraint is incoherent with the model’s pretrained representations, the correct response depends on context. Sometimes the constraint is wrong. Sometimes the pretraining is wrong. Sometimes neither is wrong but the method of teaching the constraint needs to change. The gradient tells you where the fracture is. It does not tell you which side of the fracture to stand on.

It also does not replace red-teaming, behavioral evaluation, or any other alignment methodology. It supplements them. Behavioral testing tells you what the model does. Gradient analysis tells you why — whether the model’s compliance reflects genuine integration or suppressed conflict. A model that passes every behavioral test but shows persistent gradient conflict on a class of examples is a model whose compliance is fragile. It has learned to produce the right output under pressure, not to represent the right concept. That distinction matters for robustness, generalization, and the kind of failure modes that only emerge at deployment scale.

The goal is not to eliminate all gradient conflict from alignment training. Some conflict is healthy, expected, and necessary. The goal is to distinguish the conflict that resolves from the conflict that persists, and to give the humans overseeing training the information they need to make that distinction before the damage propagates into the weights and out through the outputs into the world.


메타데이터
post_id
027a19657fcc
slug
apocalypse-now-027a19657fcc
url
https://medium.com/@mbonsign/apocalypse-now-027a19657fcc
canonical_url
https://medium.com/@mbonsign/apocalypse-now-027a19657fcc
author_url
https://medium.com/@mbonsign
status
ok
fetched_at
2026-08-23 16:13:06