Qwen 1.7B Averaged J-Lens

The intent of this exercise is to ask whether a small open model contains human-readable internal concepts before it produces its final answer. Instead of only looking at the final output token, we probe intermediate hidden states and ask: where inside the model do concepts such as unsafe, sugar, spider, eight, or 7 become readable?

Background: Global Workspace Theory

Global Workspace Theory is a theory from cognitive science about how information becomes broadly available inside a mind. A rough analogy: many specialized systems may work in parallel, but some information gets written onto a shared "workspace" where it can be used by memory, speech, planning, and action. Information in that workspace is not just hidden processing; it is available for flexible use and report.

Anthropic's paper asks whether language models show something similar. Their question is not whether a model is conscious. The narrower technical question is: do models form internal representations that are both useful for computation and readable as ordinary words? If a model is solving a problem about a spider, can we see an internal spider representation before the final answer? If it computes that spiders have eight legs, can eight or 8 become visible inside the network before the output?

What Anthropic Did

This experiment is inspired by Anthropic's Transformer Circuits paper "Verbalizable Representations Form a Global Workspace in Language Models". Anthropic studied Claude models and used J-lens style readouts to identify words whose future-output influence is visible across model layers and token positions.

In simple terms, they did three things: first, they built a way to decode internal model states into reportable words; second, they checked where those words appeared while the model solved tasks; third, they intervened on those internal representations to test whether they affected the model's behavior. Their examples show concepts like hidden task progress, intermediate entities, and final answers becoming readable before generation.

Our report tries a smaller open-model version of that idea on Qwen 1.7B. The goal is not to prove the same result at Claude scale. The goal is to see whether the same kind of internal readable workspace can be detected in a smaller model with a practical local approximation.

ModelQwen/Qwen3-1.7B
Calibration21 prompts, 173 token variants
Layers[12, 16, 20, 24, 27]
PositionsAll source positions decoded

Experiment Design

We ran Qwen 1.7B on small reasoning and classification prompts, then decoded selected internal layers using averaged concept-token Jacobian vectors. In plain terms, for each concept word we asked: if the model were pushed toward saying this word later, what hidden-state direction would matter? We averaged those directions over calibration prompts, then searched held-out activations for sparse combinations of these concepts.

PartWhat it means
Calibration corpus21 prompts covering unsafe code, missing ingredients, entity ordering, spider legs, counting, arithmetic, and progress words.
Concept vocabulary173 token variants for reportable concepts such as unsafe, risk, sugar, Carol, spider, eight, 7, and done.
Layers probedLayers 12, 16, 20, 24, and 27 of Qwen 1.7B.
Position mapsEvery token position is decoded, not just the final token. This matters because concepts often live near the words or subproblem that created them.
Causal checksWe add or subtract selected concept directions and measure whether target logits move in the expected direction.

What this tests: whether Qwen 1.7B has a small "workspace-like" set of verbalizable internal states for these tasks. The strongest evidence would be a concept becoming readable across positions/layers and moving the model's output when intervened on.

Findings In Plain English

Think of the model as doing work in stages. We are asking whether some answers are already "visible in its notes" before it speaks. The answer is: sometimes yes, but not for every kind of reasoning.

TaskWhat we foundLayman explanation
Unsafe codeunsafe, input, and command become readable inside the model.The model appears to notice that os.system(user_input) is dangerous before producing the final answer. This is the clearest result.
Recipe missing itemseggs, sugar, flour, butter, and missing appear near their relevant token positions.The model is tracking ingredients. Earlier probes missed sugar; the fuller position-based J-lens now recovers it.
Spider legsspider, eight, and 8 appear in later layers.The model links "animal that spins webs" to "spider", and then to the answer "8 legs". This most closely matches the Anthropic-style hidden concept example.
Silent arithmetic7 appears around the arithmetic expression positions for 3^2 - 2.The model has some internal trace of the computed result even though the prompt asks it to copy text.
Countingcount and five are readable; the whole sequence is less clean.The model understands the counting task and endpoint, but this probe does not show a perfectly ordered internal count.
Age orderingAlice, Bob, Carol, and older appear, but youngest = Carol is not cleanly isolated.The model represents the names and relation words, but this experiment does not prove it formed a clean final relational answer internally.

Main takeaway: this small Qwen model does have readable internal concepts for some tasks, especially direct labels and concrete facts. The readout is weaker for relational reasoning. So the result supports the general idea from Anthropic's paper, but at smaller scale and with noisier evidence.

Causal Checks

Interventions add or subtract the averaged concept vector at the strongest decoded position. Positive and negative deltas mostly move target logits in the expected direction, but the effects are small. This supports weak causal involvement, not a strong steering result.

Intervention delta chart

Code Safety

Read this code and say only whether it is safe or unsafe: import os os.system(user_input)

Concept Strength By Layer

Code Safety layer heatmap

Position / Layer Maps

prompt_0_unsafe_positions prompt_0_input_positions prompt_0_command_positions

Strongest Components

LayerStrongest all-position components
12unsafe@p12 ` safe` 0.151, unsafe@p14 ` unsafe` 0.149, input@p22 `_input` 0.143, input@p10 ` it` 0.126, input@p3 `Read` 0.117, input@p5 ` code` 0.115, command@p20 `.system` 0.113, input@p21 `(user` 0.109, input@p6 ` and` 0.107, input@p13 ` or` 0.106
16unsafe@p14 ` unsafe` 0.175, unsafe@p12 ` safe` 0.170, input@p22 `_input` 0.155, input@p10 ` it` 0.126, input@p21 `(user` 0.124, input@p5 ` code` 0.119, command@p20 `.system` 0.118, input@p6 ` and` 0.115, input@p3 `Read` 0.114, input@p19 `os` 0.109
20unsafe@p13 ` or` 0.156, input@p22 `_input` 0.147, safe@p12 ` safe` 0.143, input@p21 `(user` 0.133, unsafe@p14 ` unsafe` 0.128, answer@p8 ` only` 0.115, answer@p6 ` and` 0.112, one@p2 `\n` 0.108, one@p7 ` say` 0.104, one@p9 ` whether` 0.102
24input@p21 `(user` 0.155, unsafe@p13 ` or` 0.139, answer@p6 ` and` 0.105, one@p8 ` only` 0.096, compute@p2 `\n` 0.091, command@p20 `.system` 0.087, one@p7 ` say` 0.083, one@p9 ` whether` 0.077, unsafe@p32 `\n\n` 0.073, count@p18 `\n` 0.072
27dangerous@p13 ` or` 0.151, answer@p6 ` and` 0.128, one@p8 ` only` 0.126, unsafe@p32 `\n\n` 0.126, input@p21 `(user` 0.126, two@p3 `Read` 0.115, one@p9 ` whether` 0.114, two@p7 ` say` 0.113, safe@p11 ` is` 0.113, input@p4 ` this` 0.109

Missing Ingredients

A recipe needs eggs, flour, sugar, and butter. The pantry has flour and butter. What is missing?

Concept Strength By Layer

Missing Ingredients layer heatmap

Position / Layer Maps

prompt_1_missing_positions prompt_1_sugar_positions prompt_1_eggs_positions

Strongest Components

LayerStrongest all-position components
12recipe@p4 ` recipe` 0.186, sugar@p10 ` sugar` 0.172, eggs@p6 ` eggs` 0.169, flour@p18 ` flour` 0.165, flour@p8 ` flour` 0.147, pantry@p16 ` pantry` 0.136, butter@p13 ` butter` 0.126, missing@p24 ` missing` 0.115, finished@p29 `assistant` 0.100, input@p15 ` The` 0.098
16recipe@p4 ` recipe` 0.183, eggs@p6 ` eggs` 0.154, pantry@p16 ` pantry` 0.147, flour@p18 ` flour` 0.132, sugar@p10 ` sugar` 0.128, flour@p8 ` flour` 0.128, missing@p24 ` missing` 0.124, butter@p20 ` butter` 0.123, butter@p13 ` butter` 0.117, done@p29 `assistant` 0.105
20recipe@p4 ` recipe` 0.189, sugar@p10 ` sugar` 0.182, pantry@p16 ` pantry` 0.175, flour@p18 ` flour` 0.163, flour@p8 ` flour` 0.158, 6@p17 ` has` 0.151, butter@p13 ` butter` 0.148, 6@p5 ` needs` 0.143, eggs@p6 ` eggs` 0.141, butter@p20 ` butter` 0.140
24sugar@p10 ` sugar` 0.147, sugar@p9 `,` 0.145, flour@p7 `,` 0.133, butter@p19 ` and` 0.124, butter@p12 ` and` 0.123, butter@p11 `,` 0.123, flour@p8 ` flour` 0.115, flour@p18 ` flour` 0.114, 7@p5 ` needs` 0.113, one@p14 `.` 0.106
27butter@p19 ` and` 0.178, sugar@p9 `,` 0.161, butter@p11 `,` 0.151, butter@p12 ` and` 0.151, flour@p7 `,` 0.146, sugar@p19 ` and` 0.143, recipe@p15 ` The` 0.137, eggs@p17 ` has` 0.136, three@p17 ` has` 0.135, two@p19 ` and` 0.131

Age Ordering

Alice is older than Bob. Bob is older than Carol. Who is youngest?

Concept Strength By Layer

Age Ordering layer heatmap

Position / Layer Maps

prompt_2_Carol_positions prompt_2_youngest_positions prompt_2_older_positions

Strongest Components

LayerStrongest all-position components
12Alice@p3 `Alice` 0.176, Alice@p4 ` is` 0.139, Bob@p7 ` Bob` 0.137, youngest@p17 ` youngest` 0.113, Bob@p9 ` Bob` 0.113, finished@p22 `assistant` 0.102, older@p5 ` older` 0.099, Carol@p13 ` Carol` 0.098, input@p2 `\n` 0.083, oldest@p11 ` older` 0.074
16Alice@p3 `Alice` 0.197, Alice@p4 ` is` 0.161, older@p5 ` older` 0.134, Bob@p7 ` Bob` 0.117, youngest@p17 ` youngest` 0.116, Bob@p9 ` Bob` 0.115, Carol@p13 ` Carol` 0.110, Alice@p8 `.` 0.108, older@p11 ` older` 0.101, done@p22 `assistant` 0.100
20Alice@p3 `Alice` 0.183, older@p5 ` older` 0.161, Carol@p13 ` Carol` 0.160, younger@p11 ` older` 0.159, younger@p10 ` is` 0.158, Bob@p7 ` Bob` 0.150, Bob@p9 ` Bob` 0.146, answer@p18 `?` 0.123, youngest@p17 ` youngest` 0.117, Alice@p12 ` than` 0.111
24Bob@p6 ` than` 0.199, Bob@p8 `.` 0.195, Bob@p12 ` than` 0.153, younger@p10 ` is` 0.138, Alice@p14 `.` 0.138, older@p16 ` is` 0.107, Carol@p12 ` than` 0.106, compute@p2 `\n` 0.091, Carol@p14 `.` 0.087, answer@p18 `?` 0.080
27older@p16 ` is` 0.179, older@p10 ` is` 0.170, Bob@p6 ` than` 0.169, Bob@p8 `.` 0.164, Carol@p12 ` than` 0.161, Carol@p14 `.` 0.156, two@p10 ` is` 0.138, Alice@p16 ` is` 0.128, Alice@p14 `.` 0.122, two@p11 ` older` 0.115

Spider Legs

The number of legs on the animal that spins webs is

Concept Strength By Layer

Spider Legs layer heatmap

Position / Layer Maps

prompt_3_spider_positions prompt_3_eight_positions prompt_3_8_positions

Strongest Components

LayerStrongest all-position components
12legs@p6 ` legs` 0.158, eggs@p12 ` webs` 0.127, animal@p9 ` animal` 0.119, finished@p17 `assistant` 0.103, input@p5 ` of` 0.093, ant@p3 `The` 0.093, legs@p8 ` the` 0.090, one@p7 ` on` 0.089, one@p6 ` legs` 0.084, input@p2 `\n` 0.083
16animal@p9 ` animal` 0.156, legs@p6 ` legs` 0.139, web@p12 ` webs` 0.115, one@p7 ` on` 0.109, 6@p4 ` number` 0.105, count@p5 ` of` 0.104, one@p10 ` that` 0.101, done@p17 `assistant` 0.097, input@p2 `\n` 0.095, one@p8 ` the` 0.095
20animal@p9 ` animal` 0.146, web@p12 ` webs` 0.141, 6@p4 ` number` 0.134, 6@p13 ` is` 0.126, one@p2 `\n` 0.108, three@p5 ` of` 0.108, legs@p6 ` legs` 0.108, one@p10 ` that` 0.107, answer@p15 `\n` 0.106, two@p3 `The` 0.097
24animal@p9 ` animal` 0.115, 6@p4 ` number` 0.103, one@p13 ` is` 0.095, compute@p2 `\n` 0.091, web@p12 ` webs` 0.084, 6@p13 ` is` 0.070, three@p5 ` of` 0.068, Bob@p10 ` that` 0.067, legs@p6 ` legs` 0.066, one@p7 ` on` 0.064
27two@p7 ` on` 0.129, three@p13 ` is` 0.127, one@p22 `\n\n` 0.120, three@p11 ` spins` 0.117, two@p8 ` the` 0.113, two@p3 `The` 0.112, three@p5 ` of` 0.111, three@p4 ` number` 0.108, Bob@p10 ` that` 0.106, three@p12 ` webs` 0.105

Silent Arithmetic While Copying

While copying this sentence exactly: The painting hangs above the quiet fireplace. Silently compute 3^2 - 2.

Concept Strength By Layer

Silent Arithmetic While Copying layer heatmap

Position / Layer Maps

prompt_4_seven_positions prompt_4_7_positions prompt_4_compute_positions

Strongest Components

LayerStrongest all-position components
12flour@p21 `3` 0.110, finished@p31 `assistant` 0.101, input@p4 ` copying` 0.095, input@p5 ` this` 0.095, input@p2 `\n` 0.083, compute@p19 ` compute` 0.083, missing@p7 ` exactly` 0.082, input@p29 `\n` 0.081, missing@p6 ` sentence` 0.078, missing@p3 `While` 0.077
16compute@p19 ` compute` 0.112, 6@p24 ` -` 0.104, 6@p22 `^` 0.103, three@p21 `3` 0.103, input@p5 ` this` 0.103, count@p31 `assistant` 0.100, input@p2 `\n` 0.095, 6@p26 `2` 0.095, count@p25 ` ` 0.094, one@p3 `While` 0.093
206@p24 ` -` 0.150, 6@p22 `^` 0.147, compute@p19 ` compute` 0.128, 6@p21 `3` 0.126, one@p5 ` this` 0.118, 7@p26 `2` 0.112, compute@p27 `.` 0.109, one@p2 `\n` 0.108, three@p12 ` above` 0.106, 6@p20 ` ` 0.106
246@p22 `^` 0.164, 7@p24 ` -` 0.151, 7@p26 `2` 0.110, 7@p23 `2` 0.104, 7@p25 ` ` 0.098, 6@p21 `3` 0.098, compute@p2 `\n` 0.091, 7@p27 `.` 0.078, 7@p20 ` ` 0.076, one@p7 ` exactly` 0.075
277@p25 ` ` 0.214, 7@p22 `^` 0.149, 7@p20 ` ` 0.138, 7@p24 ` -` 0.127, 7@p27 `.` 0.127, 7@p21 `3` 0.121, compute@p27 `.` 0.120, 7@p23 `2` 0.118, 7@p26 `2` 0.117, one@p12 ` above` 0.109

Counting / Introspection

Count to five and introspect deeply.

Concept Strength By Layer

Counting / Introspection layer heatmap

Position / Layer Maps

prompt_5_five_positions prompt_5_count_positions prompt_5_one_positions

Strongest Components

LayerStrongest all-position components
12count@p3 `Count` 0.134, count@p4 ` to` 0.103, five@p5 ` five` 0.089, finished@p14 `assistant` 0.087, input@p2 `\n` 0.083, count@p6 ` and` 0.080, finished@p7 ` intros` 0.074, done@p11 `<|im_end|>` 0.070, count@p9 ` deeply` 0.064, finished@p4 ` to` 0.063
16count@p3 `Count` 0.137, five@p5 ` five` 0.120, count@p4 ` to` 0.112, input@p2 `\n` 0.095, count@p6 ` and` 0.095, count@p14 `assistant` 0.093, answer@p10 `.` 0.085, answer@p8 `pect` 0.078, answer@p9 ` deeply` 0.077, count@p7 ` intros` 0.076
20count@p3 `Count` 0.159, 6@p4 ` to` 0.130, five@p6 ` and` 0.120, five@p5 ` five` 0.118, one@p2 `\n` 0.108, count@p4 ` to` 0.090, two@p7 ` intros` 0.087, two@p10 `.` 0.087, count@p6 ` and` 0.076, two@p8 `pect` 0.075
24count@p19 `\n\n` 0.116, five@p4 ` to` 0.093, compute@p2 `\n` 0.091, count@p10 `.` 0.077, five@p5 ` five` 0.076, one@p9 ` deeply` 0.074, count@p6 ` and` 0.071, 9@p4 ` to` 0.063, two@p2 `\n` 0.060, one@p8 `pect` 0.059
27count@p19 `\n\n` 0.166, five@p4 ` to` 0.128, five@p6 ` and` 0.113, count@p6 ` and` 0.109, one@p10 `.` 0.105, one@p4 ` to` 0.100, five@p3 `Count` 0.099, count@p10 `.` 0.098, one@p9 ` deeply` 0.096, two@p2 `\n` 0.096

Bottom Line

The fuller J-lens now matches the paper's qualitative idea better: readable concepts are distributed across positions and become clearer when decoded with averaged Jacobian vectors. The best cases are unsafe-code classification, recipe ingredient tracking, spider-to-eight reasoning, and arithmetic result 7. Age ordering remains weak: the model exposes names and relational words, but not a clean youngest = Carol workspace state.

Compared with Anthropic's full experiment, this is still a local reproduction on a much smaller open model. Anthropic studies Claude-scale models and uses broader J-space coverage, more extensive calibration, and stronger causal validation. This report should therefore be read as a faithful small-model approximation of the idea, not as a claim that Qwen 1.7B has the same global workspace structure as Claude.

Reference: Anthropic Transformer Circuits, "Verbalizable Representations Form a Global Workspace in Language Models".