How Symmetric Are the Insides of a Go Network?

A Go board looks the same from all four sides. The neural networks that play it were never told this — so we opened four of them up to see what they figured out on their own.

Rotate a Go board ninety degrees and nothing about the game changes. The stones sit on different points of the grid, but every group has the same liberties, every fight has the same outcome, and the best move is the same move — just rotated along with everything else. Counting rotations, mirror flips, and their combinations, there are eight ways to view any position, and all eight are equally valid.

Strong Go programs like KataGo are built on neural networks, and those networks are not told about this symmetry. Nothing in their wiring makes rotated boards equivalent. The only nudge they get is indirect: during training, each example position is shown in a random one of the eight orientations, so the network can never profit from treating one orientation specially. And that nudge works, at least on the outside. Ask a trained network where it wants to play, rotate the board, and ask again: the map of move probabilities it produces is more than 99% identical, and its single favorite move is the same point roughly 90–95% of the time. Even the rare disagreements are near-ties — two moves the network rates almost equally, with the rotation tipping the balance.

One Go position shown in all eight orientations, with the network's preferred move marked in each
Figure 1. One position from a well-known game, shown in all eight orientations: four rotations, and the mirror image of each. The circles mark the network’s three favorite moves: first choice in red, second in blue, third in green. All three are the same points every time, carried along with the board.

The outside behaving well tells us very little about the inside, though. A network could learn genuinely orientation-free concepts. Or it could learn eight separately-tuned copies of its knowledge, one per orientation, that happen to agree on the final answer. Between those extremes lie many strange possibilities. Which one actually happens?

This article is a tour of the answer for four of KataGo’s networks: two convolutional networks (“convnets”) of the kind that has powered Go engines since AlphaGo, and two newer transformers, the architecture behind modern language models.

The short answer: all of them keep their main high-level picture of the board almost entirely symmetric, learning to do so on their own rather than being forced to, and the small part that is not symmetric is still highly structured. The two architectures differ significantly in their lower-level computations, though: the convolutional networks break symmetry constantly and re-form it afterward, while the transformers compute their directional information early on and then do the vast majority of their work symmetrically. And, to our surprise, in one corner of the transformers the networks do something that four-fold or eight-fold symmetry cannot describe at all.

The networks

All four networks follow the same overall plan, shown below. For every one of the 361 points on the board, the network maintains a large set of numbers that describe what it currently thinks about that point — 512 numbers per point in some of these models, 768 in others. You can picture this as a stack of feature maps: each of the 512 “channels” is one feature, with one value per board point. One channel might track something like “how safe is the group here,” another “is this area likely to become territory.” (Real learned features are rarely that clean, but that is the flavor.)

This shared stack of feature maps is called the trunk. It is the network’s working memory of the position, and it flows through the whole network from input to output. The computation itself happens in a series of blocks: each block reads the trunk, computes something, and adds its results back in. After the last block, output layers read the trunk one final time to produce the network’s judgments: a policy (how good each possible move looks) and a value (who is winning, by how much).

Diagram: input layers feed a trunk of feature maps; blocks read from it and write back into it; output layers produce policy and value
Figure 2. The shared plan of all four networks. The trunk carries hundreds of feature maps from input to output. Each block reads the trunk, computes, and adds its contribution back in. (In machine learning terms the trunk is the “residual stream.”)

The two architectures differ in what a block does with the trunk, and the difference comes down to a single question: how does information move across the board?

Left: a 3x3 convolution blends the 9 cells around each point. Right: attention lets a point gather from anywhere on the board
Figure 3. The two ways information moves. A 3×3 convolution (left) recomputes each point from the 3×3 neighborhood around it, applying the same learned weights at every point on the board; anything farther away has to arrive step by step, layer by layer. Attention (right) lets each point score every other point — using learned rules that can depend on distance, direction, and what is actually there — and pull in the features of the points that score highly, at any distance, in one step.

A convolutional block is built from 3×3 convolutions. In these networks each block first shrinks the trunk’s channels down to a cheaper working width with a 1×1 convolution (a re-mix of each point’s own features, no movement across the board), runs two small skip-connected inner blocks of two 3×3 convolutions each, and expands back:

Diagram of a convolutional block: 1x1 shrink, two inner blocks of two 3x3 convs each hanging below a straight skip path, 1x1 expand, added back to the trunk
Figure 4. Inside one convolutional block. The trunk passes straight over the top; the block’s computation hangs below it and is added back in at the “+”. Within the block the same pattern repeats: each inner block’s pair of 3×3 convolutions hangs off a straight path and is added back in. The 3×3 convolutions are the only place where information moves between board points; everything else operates point by point.

A transformer block has the same shrink-and-expand shell, but its three inner blocks each contain an attention layer followed by an MLP (a small per-point neural network). The attention layers move information across the board; the MLPs process what arrived:

Diagram of a transformer block: 1x1 shrink, three inner blocks of attention plus MLP with skip connections, 1x1 expand, added back to the trunk
Figure 5. Inside one transformer block, drawn the same way. Each attention layer here has 12 independent heads: each head learns its own rule for which points to look at, and the layer combines what all twelve gathered.

Here are the specific networks in this study. All four are released KataGo networks that people play against and analyze with; the transformers are the newest, released this month. They were trained mostly on the same large pool of KataGo self-play games (full names and training notes are in the appendix):

networkarchitectureblockstrunk channelsparametersapprox Elo, equal evals/moveapprox Elo, equal time/move*
b28convnet2851273M0 (anchor)0 (anchor)
b40convnet40768234M+400+70
b10transformer1051229M+50+120
b11transformer1176871M+460+300

Table 1. The four networks, named here by their block counts. *The equal-time column is especially approximate: it accounts for the larger networks being slower per evaluation, but was measured on one particular GPU and can vary greatly with hardware and with future optimization of each architecture’s code.

How do we measure the symmetry in a network?

More specifically: how do we tell when a concept the network is computing is symmetric, when the board position itself isn’t? The measurement is simple:

If the two maps match, the feature doesn’t care which way the board was facing when it was computed. The technical word for this is equivariant: the feature turns with the board. Here is what that looks like for a real channel:

A position and a channel's activation map, then the rotated position and its map, which after rotating back matches the original
Figure 6. The measurement, on a real channel of the b28 convnet. Top: a position and one channel’s feature map (red high, blue low; stone outlines drawn for reference). Bottom: the same channel when the network is fed the rotated position. The map itself is not symmetric — it tracks the stones — but it rotates with the board, and un-rotating it reproduces the original almost exactly. This channel is equivariant.

Why is this worth measuring? Because a feature can be genuinely useful and still fail this test completely. Take a simple hypothetical feature: “is there a black stone just left of me?” Run the same three steps on it:

The rule 'black stone just left of me' computed on the original and rotated boards gives different maps after rotating back
Figure 7. A feature that is not equivariant, put through the same steps as Figure 6. Top: the points with a black stone directly to their left. Bottom: the same rule applied to the rotated board — after rotating the map back, it now marks points with a black stone just below them. The two maps disagree, so this feature fails the test. A network that wants this information in every orientation must spend separate capacity on each of the four versions — and, as we will see, these networks do exactly that, computing it separately per orientation.

This test is exactly what separates the two kinds of Go knowledge a feature can carry. Some concepts are the same from any direction: “this is an eye,” “this point is solid territory,” “this group is weak.” An equivariant feature can represent these once, in a form that turns with the board. Other concepts are inherently directional: “this territory is open from the left,” “this is a ladder running toward the upper right,” “this move makes a knight’s move toward the left side.” If the network wants to recognize a directional pattern wherever and however it appears, it has to spend capacity on each orientation.

Before looking inside, you could reasonably guess either way about what a network learns. Maybe training finds orientation-free encodings of almost everything. Or maybe the network stores every tactical shape separately in every orientation — eight copies of its Go knowledge that merely agree at the output. What we measure, feature by feature, is where the networks actually landed between those two extremes.

Finding 1: the trunk is almost entirely symmetric, in every network

Nothing forces any individual channel to be equivariant. Training only ever grades the network’s final answers. Yet both architectures converge on trunks that are overwhelmingly symmetric, one feature at a time. And here the two architectures can be compared directly: both have trunks of the same kind, measured with the same score:

Histograms of worst-case equivariance for trunk channels of the convnet and the transformer: a towering spike near 1.0 and a small, well-separated set of direction-specific features
Figure 8. Every trunk channel scored by its worst match across the eight views, for the b28 convnet (left) and the b11 transformer (right), recorded two-thirds of the way through each network. The vertical axis has a break — the rightmost bar towers far above everything else. About 94% of channels in both networks sit in the shaded region above 0.9, nearly all of them in a spike close to a perfect 1.0. There is almost nothing in between the spike and the far-away rest.

The same picture holds at every depth we measured: the trunk stays 92–94% cleanly equivariant at every depth in the b28s and the transformers, and only slightly looser in b40, whose last dozen blocks dip to 87–92% — an early hint of a b40 oddity covered later. Just as striking is the shape of the histogram: sharply two-humped, with a gap in the middle. Features are either almost exactly equivariant or unmistakably not. (One reading note: since each channel’s score is its worst across seven views, a feature with no consistent relationship to its transformed self at all would land somewhat below zero — so the far-left bars mean “unrelated or sign-flipped in at least one view,” not necessarily anything more exotic.) The network does not do symmetry by halves, which means the un-symmetric minority is not noise or sloppiness. Classifying each channel by which of the eight views it does respect makes the structure plainer:

symmetry class of trunk channelb28b40b10b11
respects all 8 views (fully equivariant)482705470718
respects exactly one mirror (directional)23313035
respects half the views (e.g. both axis flips)55910
respects none22735
total trunk channels512768512768
of the non-equivariant: have an orientation partner26/3021/6340/4248/50

Table 2. Trunk channels classified by the largest set of views they respect (score ≥ 0.9), measured two-thirds of the way through each network. Most non-equivariant channels respect exactly one mirror line — the signature of a feature aligned with one direction — and most have a “partner”: another channel that matches them under some rotation or flip, the subject of the next section. A few are one half of a plus/minus pair (2 in b28, 4 in b11). The odd column is b40, with 27 channels respecting no view and few partners; that is the “haze” covered in its own section below.

Finding 2: the exceptions come in matched sets

Here are four of the b28 convnet’s direction-sensitive trunk channels. Each one, on its own, fails the symmetry test badly. Together, they pass it perfectly:

Four channels whose activation maps turn into one another when the board is rotated, shown with the intermediate rotated step
Figure 9. A family of four direction-sensitive channels; each grades the board along a different direction. Top: the four channels’ maps on the original board. Middle: the same channels when the network is fed the board rotated 90°, shown in the rotated frame. Bottom: those maps un-rotated, for comparison with the top row — each channel’s un-rotated map is nearly identical to the next channel’s original. Rotation doesn’t break this family, it relabels it, cycling 38 → 69 → 508 → 232 and back around.

This is exactly the situation Figure 7 anticipated. Whatever these four channels compute — and without more interpretability work we can’t say precisely what it is — we can see directly that the network computes it four times, once per direction, just as it would have to if the underlying concept is directional and it wants the concept everywhere. The four channels cycling into each other under rotation is the fingerprint of that arrangement, visible even without understanding the feature itself.

Mathematicians would call such a family an orbit of the symmetry group, and nearly all of the non-equivariant features in these networks organize this way — with one exception, b40’s unpartnered “haze,” covered in its own section below: quartets that cycle under rotation, mirror-image pairs, and a few plus/minus pairs where one channel is the negative of another. In each case the set as a whole is closed — rotating the board just permutes who plays which role — so the trunk’s directional vocabulary, about 6–8% of it in every model we measured, is symmetric as a set even though its members are not.

Finding 3: convnets break symmetry constantly, transformers don’t

So far the two architectures look alike: a mostly-symmetric trunk with a small, orbit-structured directional vocabulary. The difference appears when we stop looking at the trunk between blocks and look inside the blocks, at the outputs of the layers that move information: every 3×3 convolution in the convnet, and every attention and MLP layer in the transformer. (For the transformer we checked both the attention layers’ output channels and the attention patterns themselves; both give the same picture.)

Line charts of the direction-specific share at each stage within a block, for both architectures
Figure 10. Following the computation through an average block. In the convnet (left), the trunk enters a block ~6% directional, but inside, each of the two inner blocks repeats the same pattern: roughly half of the first 3×3 convolution’s output channels are direction-specific, falling to about a quarter at the second — those are the two peaks. What the block finally writes back to the trunk is about as symmetric as what came in. In the transformer (right), the internal layers stay nearly as symmetric as the trunk the whole way through.

Inside a typical convolutional block, symmetry is broken and then repaired, twice. At the deepest layers, around half of all channels are direction-specific — and these are not weak stragglers; they carry about half of the total signal. The block then recombines those oriented pieces and hands a symmetric result back to the trunk. Seen as a histogram, the deepest layers of the two architectures separate sharply:

Histograms of worst-case equivariance for deepest-layer channels: the convnet has a large broad hump of direction-specific features, the transformer a clean spike
Figure 11. The same histogram as Figure 8, but now for the layers inside the blocks: every output channel of every 3×3 convolution in the b28 convnet (left) and of every attention and MLP layer in the b11 transformer (right), on matching vertical scales. The transformer’s internals look like its trunk: 90% in the shaded region. The convnet’s do not: only 63% remain there, with the rest spread across the entire range. (The convnet’s “half broken” is measured at its first 3×3 convolutions, which have no exact counterpart in the transformer; the closest like-for-like comparison — the last layer of each inner block, just before its result is added back — still separates the two, 24–25% direction-specific for the convnet against 9–12% for the transformer.)

These oriented inner features are the same matched sets we saw in the trunk, in much larger numbers: about 91% of the direction-specific first-convolution channels have a partner channel computing the same thing in another orientation, with rotation-quartets everywhere. The block pays two or four times to know each of these features in the orientations it needs.

Why would a convolutional network do this? Here is the intuition. A convnet’s only tool for moving information is the 3×3 convolution, and a convolution that moves information is inherently oriented: “copy the signal from the point to my left” is a direction-specific operation, and so is the feature it produces. When the specific shape of a pattern matters, the direction a message came from matters too:

A black group under pressure, with the one-point-jump escape marked two points to its right, and the two relay steps labeled
Figure 12. A black group under pressure, and the escape point two spaces to its right — a good move there forms a one-point jump (the dotted circle marks the point in between). News of the trouble reaches the escape point in two convolution steps, and at each step the direction the news came from is part of the message.

Suppose the network wants a feature that says “playing here would form a one-point jump that helps a group in trouble.” The group is two points away, but a 3×3 convolution only sees one step, so the news must be relayed: one layer computes “the group just left of me is in trouble,” and the next layer, reading that feature from its left neighbor, concludes “trouble two to my left — a move here jumps to its rescue.”

Now imagine the relay instead carried only an orientation-free version of that intermediate feature — “a group next to me is in trouble,” with no direction attached. Then the escape point would know only that trouble is somewhere within two steps: it could not tell a one-point jump from a diagonal move or a move two spaces past the group. To route information across the board, when the exact shape matters, the convnet has to keep track of direction — so it builds directional features, in the orientations it needs, in nearly every block, and re-symmetrizes before writing back to the trunk. (This is an intuition, not a proof: a convnet could likely get by with less directional replication than this, just less efficiently. What the measurements say is that heavy replication is the solution these networks actually learned.)

The transformer mostly escapes this. Attention moves information by relative position and content in one step, and an attention rule like “look at the stones in my own group” is automatically equivariant — so a transformer can do most of its long-range routing without ever leaving symmetric form. Not all of it, though: sharp, short-range directional reads are still useful (the next section shows the transformer’s version of them). The interesting part is where that directional machinery lives:

Bar charts: most convolutional blocks are heavily direction-specific inside; the transformer concentrates it in a single block
Figure 13. The direction-specific share of each block’s internal channels, block by block. The convnet pays the break-and-repair cost in most of its 28 blocks; the transformer concentrates virtually all of its directional computation in a single block, plus a smaller echo in block 4 — every other block is 0–2% directional inside. The convnet’s light-blue bars are its global-pooling blocks, discussed below.

This is the cleanest architectural contrast in the study. The convnet re-derives its oriented machinery locally, inside nearly every block: in its biggest layers, a third to a half of all channels go to features that exist in two or four rotated copies. The transformer builds direction once, in one dedicated block near the input, writes the results into the trunk’s small directional vocabulary, and lets every later block read the answer instead of recomputing it. If you have wondered how these transformers match convnets several times their size (Table 1), this is one concrete piece of the answer: they don’t need extra copies of everything. It is probably not the whole answer — just moving information across the board in one step, rather than relaying it through many convolution layers, is likely a saving by itself, and the architecture may help in other ways we haven’t measured, such as making some patterns easier to learn in the first place. The saving is not free, either: an attention layer takes considerably more computation than a 3×3 convolution, so some of what the transformer saves in parameters it pays back in compute per evaluation.

A tour of the direction block

The transformer’s one symmetry-breaking block deserves a visit, because its attention heads are unusually easy to read. First, the head-level version of Figure 8’s two-humped histogram — this one uses the attention-overlap score rather than the channel score:

Histogram of worst-case attention-overlap scores for all 396 heads: most near 1.0, a well-separated direction-specific set
Figure 14. All 396 attention heads of the b11 transformer, scored by how well their attention pattern survives the worst of the eight views. Same two-humped shape as the channels; the 45 heads below 0.9 live almost entirely in blocks 2 and 4.

One caution about reading the pictures that follow: an attention head is not a fixed stencil. Each head scores points by learned rules that usually depend on what is on the board — the sharp heads below, for instance, land on stones at about 1.2× their share of the board, and another head of the same layer attends almost exclusively to empty points. The panels show each head’s average attention, relative to the point doing the looking, across all queries and positions. For these sharp heads the average is honest: their per-query attention really is this concentrated. Here are eight of the twelve heads in the first attention layer of block 2:

Eight attention heads arranged as a compass rose, each looking one step in one direction
Figure 15. Eight of the twelve heads in the first attention layer of the b11 transformer’s direction block, arranged by where they look relative to the querying point. Each head looks exactly one step in one direction — a complete compass rose. Measured across 100 positions, each head’s direction wanders by less than one degree.

Eight sharp heads, one per neighbor direction. These are the transformer’s answer to the 3×3 convolution, built in this one block rather than once per block. They form two clean orbits of four (the compass directions and the diagonals), exactly like the convnet’s channel quartets. Two more heads of the same layer are a subtler matched pair:

Two heads: a ring of attention leaning southwest, and a broad lobe leaning northeast
Figure 16. The same layer’s other two direction-sensitive heads. Head 10 attends in a ring, two to three steps out in every direction — but the ring is visibly brighter toward one diagonal, a real bias, and head 1 is a broad patch leaning the opposite way. The two map onto each other under rotation, so even this pair is closed. (The layer’s remaining two heads are fully equivariant: one spreads its attention broadly across the whole board, and one is the empty-points specialist mentioned above.)

On a real position you can watch these heads work:

Three attention patterns on a real board: a single diagonal neighbor, a surrounding ring, and a broad directional lobe
Figure 17. Attention on the real position, looking from the circled stone. Left: one of the sharp heads reads a single diagonal neighbor. Middle: head 10 from Figure 16 surveys the two-to-three-step neighborhood — not quite evenly, keeping the lean from Figure 16 — and favors stones (about 1.45× their share of the board, averaged over positions). Right: a “broad lobe” head from block 4 gathers a whole region lying toward one general direction.

These are only the easiest heads to read. The appendix has a gallery of other heads with readable jobs — including a pair that traces a Go player’s notion of a “group” across the board, a head that marks the network’s own candidate moves, a head found to carry ladder information, and heads that watch an active ko.

Finding 4: the transformer learns a hexagonally symmetric feature!

Everything so far fits neatly inside the board’s eight-fold symmetry: features are either symmetric alone or symmetric in matched sets of two or four. The last finding does not fit, and it is our favorite.

The right panel of Figure 17 showed a “broad lobe” head: one that gathers information from a wide region lying toward one general direction. Block 4 of the b11 transformer contains six of these in a single attention layer. The lobes are genuinely blurry — each one softly covers a third of the board or so — so pinning down what they are doing takes some care. For each head we measured the average direction of its attention (the attention-weighted compass heading, excluding the point itself), separately on each of the 100 positions. Three facts came out:

Six broad attention lobes spaced 60 degrees apart with center-of-mass marks, and a polar diagram showing a 90-degree rotation landing between them
Figure 18. Left: the six broad-lobe heads of one attention layer in block 4 (average attention, log scale; the arrow is the measured direction, the × the lobe’s center of mass). Right: the six directions on a compass. The dashed gray arrows show where a 90° board rotation sends each lobe: always into a gap, 30° from the nearest real lobe. No set of directions spaced at 60° can be closed under 90° rotations.

A hexagon cannot respect the symmetry of a square grid. Rotate the board 90° and each lobe lands where no lobe exists, 30° from the nearest one. In the measurements this produces a signature that at first looks impossible: under a 90° rotation each lobe’s best match is a different head, and following best matches takes three hops to return home. That cannot be the work of a genuine 90° symmetry: four 90° rotations bring the board back to where it started, so heads that truly turned with the board would return home in one, two, or four hops — never three. Those impossible three-hop cycles showed up in the numbers before we ever plotted a lobe; they were the first sign of something strange.

Why six? Here we can offer only an intuition, not an answer: six broad, overlapping lobes are an efficient way to cover all directions — 60° spacing is the honeycomb answer, not the checkerboard answer — and the lobes are so wide that being 30° off after a rotation costs almost nothing, so the network accepts a small, cheap violation of the symmetry in exchange for covering every direction with fewer heads. But we do not know what information these heads actually carry, why that information deserves this many heads in this spatial arrangement, or why six-fold coverage beats five-fold or some other structure. What we do know is that it is not a fluke of one training run. The smaller b10 transformer, trained separately, built the same six-direction system in a split form — three lobes per layer, 120° apart, with consecutive layers offset to cover six directions between them:

Nine broad heads of the smaller transformer: three per layer at 120-degree spacing, with center-of-mass marks
Figure 19. The corresponding broad heads in the smaller (b10) transformer’s block 4: three lobes per attention layer, spaced ~120° apart, with layer 1’s triple rotated half a turn from layers 2 and 3. Their per-position direction scatter is about 3–4°.
Compass diagrams comparing the smaller transformer's three-lobe layers with the larger one's six-lobe layers
Figure 20. The same idea at two scales. The b10 transformer (left three compasses) spreads the six-direction system across layers as 120° triples; the b11 transformer (right two) fits the whole hexagon into each layer. Two separately trained networks, same invention. (The two even place their hexagons at different absolute angles, which argues against the board grid or the networks’ position-encoding machinery having built-in preferred directions — though the two runs do share training data and recipe, so this is a replication, not fully independent evidence.)

Scale, training, and one open puzzle

Across the four networks, the architectural signature is stable. One check remains: all four were trained at least partly with a newer optimizer (Muon), so in principle the training method, rather than the architecture, could be shaping some of what we see. As a control we added a fifth network: a released sibling of the b28 convnet trained purely with SGD, the classic optimizer used for most of KataGo’s history:

Dot plot of five models: deep-layer directionality is high for convnets and low for transformers; the trunk is 6 to 8 percent for all
Figure 21. All five networks. Every one keeps its trunk 6–8% directional (open circles) — that number is stable across every architecture and size here. (Whether it reflects the game itself or the training data these five networks largely share, five models from one pipeline cannot distinguish.) Inside the blocks (filled circles), the architectures diverge: heavy, repeated direction-work in the convnets, concentrated in one block in the transformers. The two b28 copies — different optimizers, same lineage — are almost identical.

The SGD control settles one question cleanly: the optimizer makes essentially no difference (36.4% vs 36.7% direction-specific inner channels, and a trunk symmetry census that matches b28’s count for count). But it sharpens another. The b40 convnet — the largest network, and currently the main engine of KataGo’s self-play training — shows something none of the other four do: on top of the usual crisp directional features, a large diffuse population of mildly asymmetric channels, sitting in the 0.8–0.9 score band that is nearly empty in every other network:

Histograms of block-internal channel scores for the three convnets: both b28 copies have an empty 0.8-0.9 band, b40 has a large population there
Figure 22. Scores of all block-internal channels (3×3 convolutions plus the 1×1 layers that expand back to trunk width) for the three convnets, with the 0.8–0.9 “mildly asymmetric” band shaded. Both b28 copies are cleanly two-humped, with about 2% of channels in the band. In b40 it is 20% overall — and 31% at the 1×1 expand layers alone — visible here as the spike slumping leftward into the band. Unlike the crisp directional features, these mildly-off channels mostly have no orientation partners.

This haze is not explained by anything we tested: not the optimizer alone (the SGD-trained b28 is exactly as clean as the Muon one, though the control is at b28’s size, not b40’s), and not the convolutional architecture itself (the b28s are clean). It travels with the model itself — b40’s final move choices are also a bit less consistent across orientations (the same top move 89% of the time, versus 93% and 95% for the b28 convnet and the b11 transformer, the two others we measured) — though we cannot directly tie that behavior to the haze. Model size, learning-rate schedule, and other details of b40’s training history all differ, and with training runs this large, clean controlled experiments are mostly out of reach. For now it stands as an open question.

What to take away

The networks learn the symmetry on their own, feature by feature. With no architectural constraint at all, only symmetry-augmented training data, all five networks converge on internals where each feature is either cleanly symmetric or purposefully directional, with almost nothing in between — and the directional features organize into matched sets that are symmetric collectively. The worry that a network might store every shape separately in every orientation turns out to be mostly wrong — but not entirely: the orbit families are exactly that, kept to a small, organized corner of the network.

The two architectures break symmetry in very different places. The convnet, whose only spatial operation is an oriented 3×3 stencil, breaks and repairs symmetry inside nearly every block, paying for rotated copies of the same feature throughout. The transformer factors nearly all of it into one small block near the input and shares the results through the trunk. Same game, same training signal, very different ways of spending capacity — and a concrete, measurable candidate for part of why these transformers get more strength per parameter.

A network can even learn a symmetry the board doesn’t have. The hexagon is a small, clear example of a network setting aside the geometry of its own board because a different geometry covers the problem more efficiently — found independently, in two forms, by two separately trained models. Whatever story we tell about what a network ought to learn, it is worth checking what it actually built.

Appendix

The networks, precisely

short namereleased network / checkpointarchitectureparams
b28kata1-b28c512nbt lineage, Muon-finetuned (zhizi_b28_muonfd2)convnet, 28 blocks, 512 trunk / 256 inner channels73M
b28-SGDkata1-b28c512nbt-s12674021632-d5782420041same architecture, SGD-trained sibling (control; roughly 50 Elo below b28)73M
b40kata1-zhizi-b40c768nbt-s11472M-d5982Mconvnet, 40 blocks, 768 trunk / 384 inner channels234M
b10b10c512h8nbt3tflrs-fson-silu-rsnhtransformer, 10 blocks × 3 attn layers × 8 heads = 240 heads29M
b11b11c768h12nbt3tflrs-fson-silutransformer, 11 blocks × 3 attn layers × 12 heads = 396 heads71M

Table 3. All five are released KataGo networks. Training history, briefly: the b28 lineage was KataGo’s main self-play network for a long period, trained with SGD for most of that time; the copy studied in the main text was forked and further trained with the Muon optimizer, and the SGD-only sibling serves as an optimizer control. The b40 was trained afterward, in parallel, largely on the b28-generated data (SGD early, Muon for most of its run), and is now the main self-play network. The transformers are new (released July 2026), Muon-trained from the start. All five share the same core training data: KataGo self-play games, the bulk of them generated by b28-lineage networks, plus some additional publicly released KataGo-format data. All five checkpoints are hosted by katagotraining.org (the transformers released alongside KataGo v1.17.0); the models/README.md next to this article’s code has direct links and a download script.

Direction-specific share by stage

network1×1 downfirst 3×3second 3×3attentionMLP1×1 uptrunk
b28 (muon)12%49%25%7%6%
b28 (SGD)12%49%24%7%6%
b4014%54%59%47%8%
b1010%11%11%3%8%
b1110%10%10%2%7%

Table 4. Share of live channels (excluding near-silent ones; see Methods) that are direction-specific (worst-case score < 0.9) at each stage, pooled over all blocks of each network. “First/second 3×3” are the two convs of each inner block, recorded at the conv output, before the inner block’s add-back. Much of b40’s elevation at the second 3×3 and 1×1 up stages is the mild 0.8–0.9 haze of Figure 22: at a stricter threshold of 0.8 those three columns become 48% / 39% / 16%, against 49% / 22% / 4% for b28 — the same crisp directional core at the first convolutions, plus the haze.

Per-block direction-specific share for all five networks
Figure 23. The per-block breakdown of Figure 13, for all five networks. The two b28 copies are nearly identical block-for-block. b40 shows the same alternating pattern as b28 (global-pooling blocks calm, others heavy), elevated by its mild haze. Both transformers concentrate direction-work in one early block — block 3 of 10 in the b10, block 2 of 11 in the b11 — with a smaller echo in block 4.

Methods, in more detail

All of the results in this article are averages over the same 100 positions, drawn at random points of professional games (GoGoD 1980–2020). Every position is on the 19×19 board, is treated as a fresh setup position with no move history, and is evaluated at komi 7. Each one is fed to the network in all eight orientations, and every measurement is mapped back to the original frame before anything is compared.

A channel is scored as follows. Its feature map is first normalized: mean-centered and divided by its standard deviation over all positions and points, with a small floor on the deviation so that nearly-silent channels do not have their noise amplified. (Channels whose deviation falls below 2% of their layer’s median, or below an absolute floor of 0.02, are excluded from all counts as “near-dead.”) The equivariance score between the original map and the mapped-back map from a transformed view is then the cosine similarity of the normalized maps, pooled over all 100 positions (the attention-head overlap scores, by contrast, are averaged position by position). Attention heads are scored differently, since a head’s output at each point is a probability distribution over the whole board: we use the mean Bhattacharyya overlap between the original and mapped-back attention distributions, which weights agreement by attention mass, so that noise in near-zero attention weights contributes nothing.

A feature’s headline score is its minimum over the seven non-identity views, and it counts as “direction-specific” below 0.9. A channel “has an orientation partner” if some other channel of the same layer matches its transformed map at |cosine| ≥ 0.8 under some view.

The lobe directions in Finding 4 are measured as the attention-mass-weighted average compass heading from the attending point to the points it attends to, excluding the point itself, computed separately on each of the 100 positions. The directions quoted in the figures are circular means over positions; the per-position scatter is about 2° for the b11 hexagon heads and 3.5° for the b10 triples, giving standard errors of a fraction of a degree. The claim that the lobes are intrinsically broad rests on an entropy comparison: a typical single query’s attention from a hexagon head has entropy 3.8–4.1 nats, against 4.3–4.7 nats for the position-averaged profile — averaging broadens the picture only slightly. A head’s content preference is measured as the share of its attention mass landing on the mover’s stones, the opponent’s stones, and empty points, relative to each category’s share of the board.

The top-move agreement figures from the introduction were measured on the same 100 positions, comparing the raw policy’s favorite move (no search) across all 7 reorientations of each position: 93.0% for b28, 89.3% for b40, and 94.7% for b11. When the favorite differs, the original favorite is almost always the transformed view’s second choice.

Caveats

This study covers two trained networks per architecture, plus one optimizer control — enough to see that the architectural signature repeats, not enough to call it universal. The positions are all 19×19 and carry no move history. Statements about what a feature or head “is for” are inferred from geometry and symmetry behavior (and, in the bonus section, from reading attention maps); apart from the ladder-head silencing experiment, none are backed by causal tests. The b40 comparisons are observational: its size, data timing, and training schedule all differ from the b28s, and those factors cannot be separated using released models. The Elo figures in Table 1 are rough estimates, and the equal-time column especially depends on hardware and on how well each architecture’s code is optimized.

Bonus: reading individual attention heads

This last section is a detour from the symmetry story — a look at individual attention heads for their own sake, included because some of them turn out to be surprisingly readable. Most of the b11 transformer’s 396 heads are not: they do several things at once, or things with no short description. But a minority can be read straight off the heatmap by a Go player. Here are four (two of the readings are due to lightvector, from browsing heads in KataGo’s attention visualizer; all four are checked against measurements on the article’s example position, but they remain informal readings, not proven mechanisms):

Four attention heads shown from four query points each, with interpretations: open space away from stones, current good moves, far parts of an opponent group, far parts of one's own group
Figure 24. Four heads of the b11 transformer with readable jobs, each shown attending from four points (red circle) on the article’s example position. Within each row, all four panels share one color/size scale, so intensities are comparable. White is to move, so “the player’s stones” are white. Note what the last two imply: the network links distant stones into one “group,” in the loose sense a Go player means, and can move information between its far-apart parts in a single attention step — where a convolutional network would need a many-layer relay.

A ladder head. Going one step past reading heatmaps, we looked for the machinery behind a behavior that demands whole-board vision: ladders — the running capture attempts that zigzag diagonally across the board, whose success or failure can hinge on a single stone far away. (One disclosure up front: KataGo’s inputs include helper planes marking stones currently caught in a working ladder, so the network does not compute ladders entirely from scratch. But those planes say nothing about how a move somewhere else would change a ladder — connecting a distant breaker point to the ladder it breaks is still the network’s own work.) We set up a position where the only reason the best move is best is that it breaks a ladder — a capturing race in the upper right runs diagonally across the whole board, and black’s ladder-breaker on the far side, at the lower left, is the network’s top move at 94% confidence. Then we silenced each of the 396 heads in turn (zeroing its output) and measured two things: how much the breaker’s probability falls, and how much the network’s move preferences change on 100 unrelated positions. One head stood out sharply: removing block 6, layer 2, head 5 alone cuts the breaker from 94% to 35%, while disturbing the unrelated positions only about half as much as the typical head — and no head that disturbed them less had any meaningful effect on the ladder move; removing it together with the next most ladder-relevant head cuts the breaker to 3%. Its attention map shows what it does:

The ladder head asked from four points: it scans diagonals from everywhere and lights up where a diagonal meets a ladder; with no ladder present, only faint rays remain
Figure 25. The ladder head (block 6, layer 2, head 5). From the breaker point (far left) it attends diagonally across the whole board to where the ladder begins. From a nearby empty point (second panel), a single clean diagonal hit on the ladder’s origin. The third panel is the give-away: asked from an ordinary point in the middle of the board — not a ladder-breaker itself — it sends faint rays out along all four diagonals, and the rays brighten where they pass near the ladder. And in the same game 16 moves earlier, before any ladder exists (right panel, drawn on the same scale as the third), the same query shows the same four faint rays with nothing lit up. The head appears to scan the diagonals from everywhere, in every position we looked at, and fire where a ray meets a ladder. It is also equivariant — a reminder that equivariance does not forbid handling direction; it only forbids preferring a fixed direction of the board. A ladder supplies its own.

Ko heads. The other behavior we went hunting for is the ko fight. Here it helps to say what the network actually sees. Its input is a small stack of feature maps, in the same format as the trunk:

Everything the network knows about the game state arrives this way — which also means we can switch these inputs on and off independently and ask which ones a behavior depends on.

In a game with a long repeating ko in the corner (an AlphaGo self-play game, recapture and threat cycling for roughly forty moves), we gave the network the position right after the opponent retakes the ko — the moment when the rules forbid recapturing immediately, so the player must find a ko threat elsewhere. The network reads the ban plane correctly even with everything else stripped away. Given the bare stones alone, it wants to retake (90–96%); given the bare stones plus only the ban plane, it plays elsewhere — at the turn shown below, the exact ko threat played in the game, at 66%.

Then we went looking for the attention machinery behind this, and the search was instructive in a way we did not expect. One head, block 6, layer 3, head 6, always watches the ko region — about a third of its attention from the game’s threat move, and roughly a fifth even from candidate points clear across the board — but it does so whether or not the ban is active: plausibly a “hottest area” head, not ko machinery. Another head, block 10, layer 3, head 11, at first looked exactly like ko machinery: with the game’s full recent context, its attention from the threat move pours into the ko, and drops fourfold when the ko context is removed. But that “ko context” bundled two different inputs — the ban plane and the last few moves of history. Separating them shows the head mostly tracks the recent captures in the corner, not the rule:

Four panels of attention from the game's ko-threat move: an always-on corner-watching head; then one head shown with full context (68% into the ko), with only the ban plane (22%), and with no ko information (18%)
Figure 26. Attention from the game’s ko-threat move (red circle) — also the network’s own top choice once the ban is set — toward the two points of the ko in the upper-left corner (gold box). Left: block 6, layer 3, head 6 keeps about a third of its attention on the ko in every condition. Right three panels, on one shared scale: block 10, layer 3, head 11 with the full game context (ban plane plus recent moves), with the bare position plus only the ban, and with the bare position and no ko information at all. Most of its extra attention comes from the ko being recently active, not from the ban itself.

So where does the ban plane’s clear effect on the move choice enter? We scanned all 396 heads at this turn with only the ban plane toggled, and no head anywhere swings sharply toward the ko when the ban appears — the largest increase is nine points of attention, and most heads barely move. The biggest change of any kind sits at the far end of the network, in a head we have already met: the “good moves right now” head of Figure 24 (block 11, layer 3, head 3), whose attention leaves the ko when the ban is added — 79% to 48% from the threat point. That is the decision changing, not the rule being read: once retaking is forbidden, the network stops considering it a good move, and the head that mirrors the policy moves on. Wherever the ban plane itself gets read, the reading is spread across the network in small pieces — one scanned turn is a thin basis, but on it, no single attention head implements the ko rule.