From ea28c9b032ffe60ea3d9fdd62cdab28be29404ce Mon Sep 17 00:00:00 2001 From: juhyuni Date: Tue, 26 May 2026 23:26:21 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2014=20(1/3)=20?= =?UTF-8?q?=E2=80=94=20HybridGraphCausalSelfAttention?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/graphlm/neuron/graph_attention.py 신규 - qkv (hidden_dim → 3·hidden_dim) + out (hidden_dim → hidden_dim) 모두 HybridGraphLinear - sdpa 는 standard 그대로 - identity outer 미지원 (qkv rectangular) - 0-init 거부 + magnitude rule 은 HybridGraphLinear 상속 - 12 unit tests — function preservation (standard CausalSelfAttention 와 atol=1e-5 동치) / arch dispatch / gradient flow / 0-init 거부 --- src/graphlm/neuron/graph_attention.py | 88 +++++++++++++++++++ tests/neuron/test_graph_attention.py | 116 ++++++++++++++++++++++++++ 2 files changed, 204 insertions(+) create mode 100644 src/graphlm/neuron/graph_attention.py create mode 100644 tests/neuron/test_graph_attention.py diff --git a/src/graphlm/neuron/graph_attention.py b/src/graphlm/neuron/graph_attention.py new file mode 100644 index 0000000..e5ecdbc --- /dev/null +++ b/src/graphlm/neuron/graph_attention.py @@ -0,0 +1,88 @@ +"""Phase 14 — HybridGraphCausalSelfAttention (qkv + out 을 HybridGraphLinear 로). + +Phase 13 은 FFN 만 graph 였고 attention 은 표준 ``nn.Linear``. Phase 14 는 **qkv / out 도 +HybridGraphLinear** 로 교체하여 block 전체가 graph 가 되는 단계. + +설계: +- ``qkv``: hidden_dim → 3·hidden_dim (rectangular — identity outer 미지원) +- ``out``: hidden_dim → hidden_dim (square — identity 이론상 가능하나 통일성 위해 미사용) +- sdpa (scaled dot-product attention) 은 그대로 standard +- function preservation: adj_outer=full + adj_inner=full + 같은 W → standard CausalSelfAttention forward 동치 + +0-init 거부 + magnitude rule 은 underlying ``HybridGraphLinear`` 가 상속. +""" + +from __future__ import annotations + +import torch +import torch.nn.functional as F +from torch import Tensor, nn + +from graphlm.neuron.graph_hybrid import AdjInnerInit, AdjOuterInit, HybridGraphLinear + + +class HybridGraphCausalSelfAttention(nn.Module): + """Causal multi-head self-attention with HybridGraphLinear qkv + out. + + Args: + hidden_dim: Transformer hidden size (n_heads 의 배수). + n_heads: number of attention heads. + group_size: HybridGraphLinear 의 block size. hidden_dim 과 3·hidden_dim 모두 배수여야 함. + adj_outer_init: ``"full"`` / ``"uniform_around_one"`` (identity 는 qkv rectangular 라 미지원). + adj_inner_init: ``"full"`` / ``"uniform_around_one"``. + dropout: attention dropout (sdpa 의 dropout_p). + + Forward: + x: ``(B, T, hidden_dim)`` → y: same shape + function preserving when both adj = full and W = same as standard nn.Linear init. + """ + + def __init__( + self, + hidden_dim: int, + n_heads: int, + group_size: int, + *, + adj_outer_init: AdjOuterInit = "full", + adj_inner_init: AdjInnerInit = "full", + dropout: float = 0.0, + ): + super().__init__() + if hidden_dim % n_heads != 0: + raise ValueError(f"hidden_dim {hidden_dim} not divisible by n_heads {n_heads}") + if adj_outer_init == "identity": + raise ValueError( + "HybridGraphCausalSelfAttention 은 adj_outer_init='identity' 미지원 — " + "qkv 는 hidden_dim → 3·hidden_dim 으로 rectangular 라 정방 identity 정의 불가. " + "'full' 또는 'uniform_around_one' 사용." + ) + self.n_heads = n_heads + self.head_dim = hidden_dim // n_heads + self.qkv = HybridGraphLinear( + hidden_dim, + 3 * hidden_dim, + group_size=group_size, + adj_outer_init=adj_outer_init, + adj_inner_init=adj_inner_init, + bias=False, + ) + self.out = HybridGraphLinear( + hidden_dim, + hidden_dim, + group_size=group_size, + adj_outer_init=adj_outer_init, + adj_inner_init=adj_inner_init, + bias=False, + ) + self.dropout = dropout + + def forward(self, x: Tensor) -> Tensor: + B, T, C = x.shape + qkv = self.qkv(x).reshape(B, T, 3, self.n_heads, self.head_dim) + qkv = qkv.permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] + out = F.scaled_dot_product_attention( + q, k, v, is_causal=True, dropout_p=self.dropout if self.training else 0.0 + ) + out = out.transpose(1, 2).reshape(B, T, C) + return self.out(out) diff --git a/tests/neuron/test_graph_attention.py b/tests/neuron/test_graph_attention.py new file mode 100644 index 0000000..92f32cc --- /dev/null +++ b/tests/neuron/test_graph_attention.py @@ -0,0 +1,116 @@ +"""Tests for graphlm.neuron.graph_attention — Phase 14 graph attention.""" + +from __future__ import annotations + +import pytest +import torch + +from graphlm.neuron.backbone import CausalSelfAttention +from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention +from graphlm.neuron.graph_hybrid import HybridGraphLinear + + +def test_shape(): + attn = HybridGraphCausalSelfAttention(hidden_dim=32, n_heads=4, group_size=8) + x = torch.randn(2, 16, 32) + assert attn(x).shape == (2, 16, 32) + + +def test_qkv_out_are_hybrid_graph_linear(): + attn = HybridGraphCausalSelfAttention(hidden_dim=32, n_heads=4, group_size=8) + assert isinstance(attn.qkv, HybridGraphLinear) + assert isinstance(attn.out, HybridGraphLinear) + # qkv: 32 → 96, out: 32 → 32 + assert attn.qkv.in_features == 32 + assert attn.qkv.out_features == 96 + assert attn.out.in_features == 32 + assert attn.out.out_features == 32 + + +def test_identity_outer_rejected(): + """qkv 가 rectangular 라 identity outer 미지원.""" + with pytest.raises(ValueError, match="rectangular"): + HybridGraphCausalSelfAttention( + hidden_dim=32, n_heads=4, group_size=8, adj_outer_init="identity" + ) + + +def test_heads_not_divisible_raises(): + with pytest.raises(ValueError, match="not divisible by n_heads"): + HybridGraphCausalSelfAttention(hidden_dim=33, n_heads=4, group_size=11) + + +def test_function_preservation_full_full_matches_standard(): + """adj=full/full + 같은 W → standard CausalSelfAttention 와 forward 동치 (atol=1e-5).""" + torch.manual_seed(0) + hidden, n_heads, k = 32, 4, 8 + hg_attn = HybridGraphCausalSelfAttention(hidden, n_heads, group_size=k) + std_attn = CausalSelfAttention(hidden, n_heads, dropout=0.0) + + _copy_hybrid_to_plain(hg_attn.qkv, std_attn.qkv) + _copy_hybrid_to_plain(hg_attn.out, std_attn.out) + + hg_attn.eval() + std_attn.eval() + x = torch.randn(2, 8, hidden) + with torch.no_grad(): + y_hg = hg_attn(x) + y_std = std_attn(x) + assert torch.allclose(y_hg, y_std, atol=1e-5), ( + f"attention forward 차이: max |diff| = {(y_hg - y_std).abs().max().item()}" + ) + + +@pytest.mark.parametrize( + "outer,inner", + [ + ("full", "full"), + ("full", "uniform_around_one"), + ("uniform_around_one", "uniform_around_one"), + ], +) +def test_gradient_flows_all_params(outer, inner): + attn = HybridGraphCausalSelfAttention( + hidden_dim=16, + n_heads=4, + group_size=4, + adj_outer_init=outer, + adj_inner_init=inner, + ) + x = torch.randn(2, 4, 16, requires_grad=False) + attn(x).sum().backward() + null_grad = [n for n, p in attn.named_parameters() if p.grad is None] + assert not null_grad, f"grad 없는 파라미터: {null_grad}" + + +@pytest.mark.parametrize("bad", ["zero", "zeros"]) +def test_zero_init_outer_rejected(bad): + """0-init outer 거부 — underlying HybridGraphLinear 로부터 상속.""" + with pytest.raises(ValueError, match="vanishing"): + HybridGraphCausalSelfAttention( + hidden_dim=32, n_heads=4, group_size=8, adj_outer_init=bad # type: ignore[arg-type] + ) + + +@pytest.mark.parametrize("bad", ["zero", "zeros"]) +def test_zero_init_inner_rejected(bad): + """0-init inner 거부.""" + with pytest.raises(ValueError, match="vanishing"): + HybridGraphCausalSelfAttention( + hidden_dim=32, n_heads=4, group_size=8, adj_inner_init=bad # type: ignore[arg-type] + ) + + +# ── helpers ── + + +def _copy_hybrid_to_plain(hg, plain): + """HybridGraphLinear 의 block weight → nn.Linear 표준 weight 형식으로 복사.""" + in_f, out_f = hg.in_features, hg.out_features + k = hg.group_size + W_std = torch.zeros(out_f, in_f) + for go in range(hg.n_groups_out): + for gi in range(hg.n_groups_in): + W_std[go * k : (go + 1) * k, gi * k : (gi + 1) * k] = hg.weight[go, gi].T + with torch.no_grad(): + plain.weight.copy_(W_std) From 7c432c7fa01d08938cfb296da4ebd24d0d64f5b5 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Tue, 26 May 2026 23:28:10 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2014=20(2/3)=20?= =?UTF-8?q?=E2=80=94=20FullGraphTransformerBlock=20+=20make=5Ffull=5Fblock?= =?UTF-8?q?=20dispatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - src/graphlm/neuron/hybrid_transformer.py 확장: - FullGraphTransformerBlock: attention + FFN 모두 HybridGraphLinear (Phase 13 의 HybridGraphTransformerBlock 는 FFN-only graph 그대로 유지) - make_full_block: 4 arch dispatch (plain / hybrid_full_full / hybrid_full_around_one / hybrid_around_one_around_one) - __init__.py exports 갱신 - 7 신규 unit tests — full block function preservation (standard 와 atol=1e-5) / gradient flow / make_full_block arch dispatch --- src/graphlm/neuron/__init__.py | 6 ++ src/graphlm/neuron/hybrid_transformer.py | 96 ++++++++++++++++++++++++ tests/neuron/test_hybrid_transformer.py | 84 +++++++++++++++++++++ 3 files changed, 186 insertions(+) diff --git a/src/graphlm/neuron/__init__.py b/src/graphlm/neuron/__init__.py index 84d0c0b..28ff6c3 100644 --- a/src/graphlm/neuron/__init__.py +++ b/src/graphlm/neuron/__init__.py @@ -13,23 +13,28 @@ ) from graphlm.neuron.graph_channel import ChannelGraphLinear from graphlm.neuron.graph_group import GroupGraphLinear +from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention from graphlm.neuron.graph_hybrid import HybridGraphLinear from graphlm.neuron.growable import GrowableEmbedding, GrowableLayerNorm, GrowableLinear from graphlm.neuron.growth import add_attn_function_preserving, add_attn_smooth_start from graphlm.neuron.hybrid_transformer import ( + FullGraphTransformerBlock, HybridGraphFFN, HybridGraphTransformerBlock, PlainTransformerBlock, make_block, + make_full_block, ) from graphlm.neuron.rms_norm import RMSNorm __all__ = [ "ChannelGraphLinear", + "FullGraphTransformerBlock", "GroupGraphLinear", "GrowableEmbedding", "GrowableLayerNorm", "GrowableLinear", + "HybridGraphCausalSelfAttention", "HybridGraphFFN", "HybridGraphLinear", "HybridGraphTransformerBlock", @@ -42,4 +47,5 @@ "add_attn_function_preserving", "add_attn_smooth_start", "make_block", + "make_full_block", ] diff --git a/src/graphlm/neuron/hybrid_transformer.py b/src/graphlm/neuron/hybrid_transformer.py index 4e77b4a..4f29b12 100644 --- a/src/graphlm/neuron/hybrid_transformer.py +++ b/src/graphlm/neuron/hybrid_transformer.py @@ -23,6 +23,7 @@ from torch import Tensor, nn from graphlm.neuron.backbone import CausalSelfAttention +from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention from graphlm.neuron.graph_hybrid import AdjInnerInit, AdjOuterInit, HybridGraphLinear from graphlm.neuron.rms_norm import RMSNorm @@ -165,6 +166,53 @@ def forward(self, x: Tensor) -> Tensor: return x + self.ffn(self.rms2(x)) +class FullGraphTransformerBlock(nn.Module): + """Phase 14 — attention + FFN 둘 다 HybridGraphLinear 인 full graph block. + + Phase 13 의 ``HybridGraphTransformerBlock`` (FFN-only graph) 와 동일 forward 구조이되, + ``CausalSelfAttention`` (표준 nn.Linear) 대신 ``HybridGraphCausalSelfAttention`` + (qkv + out 도 HybridGraphLinear) 사용. **block 내 모든 Linear 가 graph**. + + adj_outer_init 의 ``"identity"`` 는 qkv (rectangular) + FFN fc1 (rectangular) 둘 다 + rejection 하므로 사용 불가. + """ + + def __init__( + self, + hidden_dim: int, + n_heads: int, + ffn_dim: int, + group_size: int, + *, + adj_outer_init: AdjOuterInit = "full", + adj_inner_init: AdjInnerInit = "full", + dropout: float = 0.0, + ): + super().__init__() + self.rms1 = RMSNorm(hidden_dim) + self.attn = HybridGraphCausalSelfAttention( + hidden_dim, + n_heads, + group_size=group_size, + adj_outer_init=adj_outer_init, + adj_inner_init=adj_inner_init, + dropout=dropout, + ) + self.rms2 = RMSNorm(hidden_dim) + self.ffn = HybridGraphFFN( + hidden_dim, + ffn_dim, + group_size=group_size, + adj_outer_init=adj_outer_init, + adj_inner_init=adj_inner_init, + dropout=dropout, + ) + + def forward(self, x: Tensor) -> Tensor: + x = x + self.attn(self.rms1(x)) + return x + self.ffn(self.rms2(x)) + + def make_block( arch: Arch, hidden_dim: int, @@ -207,3 +255,51 @@ def make_block( dropout=dropout, ) raise ValueError(f"unknown arch: {arch}") + + +def make_full_block( + arch: Arch, + hidden_dim: int, + n_heads: int, + ffn_dim: int, + group_size: int, + dropout: float = 0.0, +) -> nn.Module: + """4 가지 arch 중 하나로 Phase 14 **full graph** Transformer block 생성. + + Phase 13 ``make_block`` 과 동일 arch literal 이되, hybrid_* 는 attention 도 graph 화. + plain 은 Phase 13 와 동일 (PlainTransformerBlock). + """ + if arch == "plain": + return PlainTransformerBlock(hidden_dim, n_heads, ffn_dim, dropout=dropout) + if arch == "hybrid_full_full": + return FullGraphTransformerBlock( + hidden_dim, + n_heads, + ffn_dim, + group_size=group_size, + adj_outer_init="full", + adj_inner_init="full", + dropout=dropout, + ) + if arch == "hybrid_full_around_one": + return FullGraphTransformerBlock( + hidden_dim, + n_heads, + ffn_dim, + group_size=group_size, + adj_outer_init="full", + adj_inner_init="uniform_around_one", + dropout=dropout, + ) + if arch == "hybrid_around_one_around_one": + return FullGraphTransformerBlock( + hidden_dim, + n_heads, + ffn_dim, + group_size=group_size, + adj_outer_init="uniform_around_one", + adj_inner_init="uniform_around_one", + dropout=dropout, + ) + raise ValueError(f"unknown arch: {arch}") diff --git a/tests/neuron/test_hybrid_transformer.py b/tests/neuron/test_hybrid_transformer.py index f366a52..27f942b 100644 --- a/tests/neuron/test_hybrid_transformer.py +++ b/tests/neuron/test_hybrid_transformer.py @@ -7,11 +7,13 @@ from torch import nn from graphlm.neuron.hybrid_transformer import ( + FullGraphTransformerBlock, HybridGraphFFN, HybridGraphTransformerBlock, PlainFFN, PlainTransformerBlock, make_block, + make_full_block, ) # ── HybridGraphFFN ─────────────────────────────────────────── @@ -189,6 +191,88 @@ def test_block_dropout_propagates_to_ffn(block_cls, kwargs): assert block.ffn.dropout.p == 0.5, "FFN 의 dropout p 가 block dropout 과 불일치" +# ── FullGraphTransformerBlock (Phase 14) ───────────────────── + + +def test_full_block_shape(): + block = FullGraphTransformerBlock(hidden_dim=32, n_heads=4, ffn_dim=64, group_size=8) + x = torch.randn(2, 16, 32) + assert block(x).shape == (2, 16, 32) + + +def test_full_block_function_preservation_against_plain(): + """full graph block (adj=full/full) + plain block 의 동일 weight 로 forward 동일.""" + torch.manual_seed(0) + hidden, n_heads, ffn_d, k = 16, 4, 32, 4 + full = FullGraphTransformerBlock(hidden, n_heads, ffn_d, group_size=k) + plain = PlainTransformerBlock(hidden, n_heads, ffn_d) + + plain.rms1.load_state_dict(full.rms1.state_dict()) + plain.rms2.load_state_dict(full.rms2.state_dict()) + # attention: HybridGraphLinear qkv / out → standard nn.Linear 로 복사 + _copy_hybrid_to_plain(full.attn.qkv, plain.attn.qkv) + _copy_hybrid_to_plain(full.attn.out, plain.attn.out) + # FFN: 동일 패턴 + _copy_hybrid_to_plain(full.ffn.fc1, plain.ffn.fc1) + _copy_hybrid_to_plain(full.ffn.fc2, plain.ffn.fc2) + + full.eval() + plain.eval() + x = torch.randn(2, 8, hidden) + with torch.no_grad(): + y_full = full(x) + y_plain = plain(x) + assert torch.allclose(y_full, y_plain, atol=1e-5), ( + f"full graph block forward 차이: max |diff| = {(y_full - y_plain).abs().max().item()}" + ) + + +def test_full_block_gradient_flows_all_params(): + block = FullGraphTransformerBlock( + hidden_dim=16, + n_heads=4, + ffn_dim=32, + group_size=4, + adj_outer_init="uniform_around_one", + adj_inner_init="uniform_around_one", + ) + x = torch.randn(2, 4, 16) + block(x).sum().backward() + null_grad = [n for n, p in block.named_parameters() if p.grad is None] + assert not null_grad, f"grad 없는 파라미터: {null_grad}" + + +@pytest.mark.parametrize( + "arch", + ["plain", "hybrid_full_full", "hybrid_full_around_one", "hybrid_around_one_around_one"], +) +def test_make_full_block_all_archs_forward(arch): + block = make_full_block(arch, hidden_dim=16, n_heads=4, ffn_dim=32, group_size=4) + x = torch.randn(2, 8, 16) + assert block(x).shape == (2, 8, 16) + + +def test_make_full_block_plain_uses_nn_linear(): + """make_full_block 의 plain 은 make_block 의 plain 과 동일 (PlainTransformerBlock).""" + block = make_full_block("plain", 16, 4, 32, 4) + assert isinstance(block, PlainTransformerBlock) + + +def test_make_full_block_hybrid_uses_full_graph(): + """make_full_block 의 hybrid_* 는 FullGraphTransformerBlock (attention 도 graph).""" + block = make_full_block("hybrid_full_full", 16, 4, 32, 4) + assert isinstance(block, FullGraphTransformerBlock) + # attention 도 HybridGraphLinear 인지 확인 + from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention + + assert isinstance(block.attn, HybridGraphCausalSelfAttention) + + +def test_make_full_block_unknown_raises(): + with pytest.raises(ValueError, match="unknown arch"): + make_full_block("bogus", 16, 4, 32, 4) # type: ignore[arg-type] + + # ── helpers ────────────────────────────────────────────────── From 3e49605667489221700cf23bcc0feb833b66ca84 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Tue, 26 May 2026 23:29:53 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[FEAT]:=20neuron=20Phase=2014=20=E2=80=94?= =?UTF-8?q?=20demo=20/=20train=20helper=20=EC=97=90=20use=5Ffull=5Fgraph?= =?UTF-8?q?=20=EC=98=B5=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - HybridTransformerTrainConfig: use_full_graph: bool 필드 추가 (default False = Phase 13) - HybridGraphTransformerLM: use_full_graph=True 시 make_full_block 사용 → attention 도 graph - _snapshot_adj: full graph 일 때 attention qkv/out 의 adj 도 포함 (Phase 13 FFN-only 호환 유지) - 4 arch × {Phase 13, Phase 14} 동시 sweep 가능 (use_full_graph 토글) --- src/graphlm/neuron/hybrid_transformer_demo.py | 53 +++++++++++++------ 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/src/graphlm/neuron/hybrid_transformer_demo.py b/src/graphlm/neuron/hybrid_transformer_demo.py index 4d3343f..8e95892 100644 --- a/src/graphlm/neuron/hybrid_transformer_demo.py +++ b/src/graphlm/neuron/hybrid_transformer_demo.py @@ -23,8 +23,10 @@ from graphlm.data.tinyshakespeare import TinyShakespeareDataset, iter_random_batches from graphlm.neuron.hybrid_transformer import ( Arch, + FullGraphTransformerBlock, HybridGraphTransformerBlock, make_block, + make_full_block, ) from graphlm.neuron.rms_norm import RMSNorm from graphlm.utils import set_seed @@ -49,6 +51,9 @@ class HybridTransformerTrainConfig: group_size: int arch: Arch dropout: float = 0.0 + # Phase 14: True → make_full_block (attention + FFN 둘 다 graph), + # False → make_block (FFN-only graph, Phase 13 default) + use_full_graph: bool = False # train block_size: int = 64 @@ -80,15 +85,18 @@ def __init__( arch: Arch, group_size: int, dropout: float = 0.0, + use_full_graph: bool = False, ): super().__init__() self.arch = arch + self.use_full_graph = use_full_graph self.max_seq_len = max_seq_len self.tok_emb = nn.Embedding(vocab_size, hidden_dim) self.pos_emb = nn.Embedding(max_seq_len, hidden_dim) + block_factory = make_full_block if use_full_graph else make_block self.blocks = nn.ModuleList( [ - make_block( + block_factory( arch, hidden_dim=hidden_dim, n_heads=n_heads, @@ -114,31 +122,41 @@ def forward(self, x: Tensor) -> Tensor: return self.lm_head(h) -def _block_iter(model: HybridGraphTransformerLM) -> Iterator[HybridGraphTransformerBlock]: - """모델의 hybrid block 만 yield (plain 은 skip).""" +def _block_iter( + model: HybridGraphTransformerLM, +) -> Iterator[HybridGraphTransformerBlock | FullGraphTransformerBlock]: + """모델의 hybrid block 만 yield (plain 은 skip). Phase 13 + Phase 14 둘 다 지원.""" for blk in model.blocks: - if isinstance(blk, HybridGraphTransformerBlock): + if isinstance(blk, HybridGraphTransformerBlock | FullGraphTransformerBlock): yield blk +def _snapshot_layer(layer) -> dict[str, Tensor]: + """HybridGraphLinear 한 layer 의 outer/inner snapshot.""" + return { + "outer": layer.adj_outer.detach().cpu().clone(), + "inner": layer.adj_inner.detach().cpu().clone(), + } + + def _snapshot_adj(model: HybridGraphTransformerLM) -> list[dict[str, dict[str, Tensor]]] | None: - """hybrid arch 인 경우 각 block 의 FFN adj snapshot (Phase 12 demo 와 동일 hierarchy).""" + """hybrid arch 인 경우 각 block 의 adj snapshot. + + - Phase 13 (FFN-only graph): ``{"fc1", "fc2"}`` + - Phase 14 (full graph): ``{"qkv", "out", "fc1", "fc2"}`` — attention adj 까지 포함 + """ if model.arch == "plain": return None snapshots: list[dict[str, dict[str, Tensor]]] = [] for blk in _block_iter(model): - snapshots.append( - { - "fc1": { - "outer": blk.ffn.fc1.adj_outer.detach().cpu().clone(), - "inner": blk.ffn.fc1.adj_inner.detach().cpu().clone(), - }, - "fc2": { - "outer": blk.ffn.fc2.adj_outer.detach().cpu().clone(), - "inner": blk.ffn.fc2.adj_inner.detach().cpu().clone(), - }, - } - ) + snap: dict[str, dict[str, Tensor]] = { + "fc1": _snapshot_layer(blk.ffn.fc1), + "fc2": _snapshot_layer(blk.ffn.fc2), + } + if isinstance(blk, FullGraphTransformerBlock): + snap["qkv"] = _snapshot_layer(blk.attn.qkv) + snap["out"] = _snapshot_layer(blk.attn.out) + snapshots.append(snap) return snapshots @@ -159,6 +177,7 @@ def train_hybrid_transformer_lm(config: HybridTransformerTrainConfig) -> dict: arch=config.arch, group_size=config.group_size, dropout=config.dropout, + use_full_graph=config.use_full_graph, ).to(config.device) data_iter = iter_random_batches( config.dataset, batch_size=config.batch_size, block_size=config.block_size, seed=config.seed From 017633e040aadbc19fe579884b189038737aea70 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Tue, 26 May 2026 23:32:00 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[FEAT]:=20Phase=2014=20=EB=85=B8=ED=8A=B8?= =?UTF-8?q?=EB=B6=81=20+=20lint=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - notebooks/02-function-level/13-phase14-graph-attention.ipynb 신규 - 4 arch × 2 seed × {Phase 13 FFN-only, Phase 14 full graph} = 14 unique run - 자동 verdict 4가지: function preservation / attention graph not hurting / all-finite / dual scale-corrected 우위 - loss curve (Phase 13 실선 vs Phase 14 점선) + attention adj heatmap (qkv / out / fc1 / fc2) - ruff format / unused import 정리 (graph_attention.py, neuron/__init__.py, test_graph_attention.py) --- .../13-phase14-graph-attention.ipynb | 384 ++++++++++++++++++ src/graphlm/neuron/__init__.py | 2 +- src/graphlm/neuron/graph_attention.py | 1 - tests/neuron/test_graph_attention.py | 10 +- 4 files changed, 393 insertions(+), 4 deletions(-) create mode 100644 notebooks/02-function-level/13-phase14-graph-attention.ipynb diff --git a/notebooks/02-function-level/13-phase14-graph-attention.ipynb b/notebooks/02-function-level/13-phase14-graph-attention.ipynb new file mode 100644 index 0000000..1ac8a27 --- /dev/null +++ b/notebooks/02-function-level/13-phase14-graph-attention.ipynb @@ -0,0 +1,384 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# 13-phase14-graph-attention\n", + "\n", + "**neuron Phase 14** — attention 의 qkv / out 까지 `HybridGraphLinear` 로 교체 (**block 전체가 graph**). Phase 13 은 FFN 만 graph 였고, Phase 14 에서 paradigm 의 *full graph block* 단계 진입.\n", + "\n", + "핵심 가설:\n", + "1. **function preservation (attention 포함)** — full graph block (adj=full/full) ≈ plain block?\n", + "2. **attention graph 가 학습에 도움?** — Phase 13 (FFN-only) vs Phase 14 (full graph) 동일 arch 비교에서 final_loss 개선?\n", + "3. **dual scale-corrected 우위 재현** — Phase 12/13 의 `hybrid_around_one_around_one` 우위가 full graph 에서도 유지?\n", + "4. **파라미터 증가 대비 효과** — full graph 는 attention adj 도 추가되어 파라미터 ↑. ROI?\n", + "\n", + "설계: 4 arch × 2 seed × {Phase 13 (FFN-only), Phase 14 (full graph)} = 16 run.\n", + "- arch: plain / hybrid_full_full / hybrid_full_around_one / hybrid_around_one_around_one\n", + "- plain 은 use_full_graph 무관 (둘 다 PlainTransformerBlock)\n", + "- → 실제 비교: 4 arch × 2 seed × 2 mode - 2 (plain 중복) = 14 unique run\n", + "\n", + "데이터: TinyShakespeare (char-LM, block_size=64)\n", + "시드: [42, 123]\n", + "작성일: 2026-05-26\n", + "연관: Issue [#69](https://github.com/EinSofINTEREST/GraphLM/issues/69) / Phase 13 baseline PR [#68](https://github.com/EinSofINTEREST/GraphLM/pull/68)" + ] + }, + { + "cell_type": "markdown", + "id": "1", + "metadata": {}, + "source": [ + "## 0. 환경 / 의존성" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "from __future__ import annotations\n", + "\n", + "import math\n", + "import statistics\n", + "from pathlib import Path\n", + "\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "\n", + "from graphlm.data.tinyshakespeare import (\n", + " CharTokenizer,\n", + " TinyShakespeareDataset,\n", + " load_tinyshakespeare_text,\n", + ")\n", + "from graphlm.neuron.hybrid_transformer_demo import (\n", + " HybridGraphTransformerLM,\n", + " HybridTransformerTrainConfig,\n", + " count_parameters,\n", + " train_hybrid_transformer_lm,\n", + ")\n", + "from graphlm.utils import safe_perplexity\n", + "\n", + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "print(f\"device: {device}\")\n", + "print(f\"torch: {torch.__version__}\")" + ] + }, + { + "cell_type": "markdown", + "id": "3", + "metadata": {}, + "source": [ + "## 1. Config + 데이터" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4", + "metadata": {}, + "outputs": [], + "source": [ + "text = load_tinyshakespeare_text()\n", + "tokenizer = CharTokenizer(text)\n", + "dataset = TinyShakespeareDataset(text, tokenizer)\n", + "vocab_size = tokenizer.vocab_size\n", + "print(f\"vocab_size = {vocab_size}, dataset size = {len(dataset)}\")\n", + "\n", + "# Phase 13 과 동일 hyperparameter (공정 비교)\n", + "HIDDEN_DIM = 128\n", + "N_HEADS = 4\n", + "FFN_DIM = 256\n", + "N_LAYERS = 4\n", + "GROUP_SIZE = 16\n", + "BLOCK_SIZE = 64\n", + "BATCH_SIZE = 32\n", + "LR = 3e-4\n", + "MAX_STEPS = 1500\n", + "SEEDS = [42, 123]\n", + "ARCHS = [\n", + " \"plain\",\n", + " \"hybrid_full_full\",\n", + " \"hybrid_full_around_one\",\n", + " \"hybrid_around_one_around_one\",\n", + "]\n", + "MODES = [(\"phase13_ffn_only\", False), (\"phase14_full_graph\", True)]\n", + "\n", + "# arch x mode 별 파라미터 수 비교\n", + "print(\"\\n== Parameter count by arch × mode ==\")\n", + "for arch in ARCHS:\n", + " for mode_name, use_full in MODES:\n", + " if arch == \"plain\" and use_full:\n", + " continue # plain 은 use_full 무관 (PlainTransformerBlock 동일)\n", + " m = HybridGraphTransformerLM(\n", + " vocab_size=vocab_size,\n", + " hidden_dim=HIDDEN_DIM,\n", + " n_heads=N_HEADS,\n", + " ffn_dim=FFN_DIM,\n", + " n_layers=N_LAYERS,\n", + " max_seq_len=BLOCK_SIZE,\n", + " arch=arch,\n", + " group_size=GROUP_SIZE,\n", + " use_full_graph=use_full,\n", + " )\n", + " print(f\" {arch:32s} {mode_name:25s} params = {count_parameters(m):,}\")" + ] + }, + { + "cell_type": "markdown", + "id": "5", + "metadata": {}, + "source": [ + "## 2. Sweep 실행 (4 arch × 2 seed × 2 mode = 14 unique run)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6", + "metadata": {}, + "outputs": [], + "source": [ + "results = {}\n", + "for arch in ARCHS:\n", + " for mode_name, use_full in MODES:\n", + " if arch == \"plain\" and use_full:\n", + " continue\n", + " for seed in SEEDS:\n", + " key = (arch, mode_name, seed)\n", + " print(f\"\\n== arch={arch} mode={mode_name} seed={seed} ==\")\n", + " cfg = HybridTransformerTrainConfig(\n", + " dataset=dataset,\n", + " vocab_size=vocab_size,\n", + " hidden_dim=HIDDEN_DIM,\n", + " n_heads=N_HEADS,\n", + " ffn_dim=FFN_DIM,\n", + " n_layers=N_LAYERS,\n", + " group_size=GROUP_SIZE,\n", + " arch=arch,\n", + " use_full_graph=use_full,\n", + " block_size=BLOCK_SIZE,\n", + " batch_size=BATCH_SIZE,\n", + " lr=LR,\n", + " max_steps=MAX_STEPS,\n", + " seed=seed,\n", + " device=device,\n", + " )\n", + " out = train_hybrid_transformer_lm(cfg)\n", + " results[key] = out\n", + " print(\n", + " f\" final_loss = {out['final_loss']:.4f} (perplexity = {safe_perplexity(out['final_loss']):.2f})\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "7", + "metadata": {}, + "source": [ + "## 3. 결과 표 + 자동 verdict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8", + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"{'arch':32s} {'mode':25s} {'seed':>6s} {'final_loss':>12s} {'perplexity':>12s}\")\n", + "print(\"-\" * 95)\n", + "for (arch, mode_name, seed), out in results.items():\n", + " fl = out[\"final_loss\"]\n", + " print(f\"{arch:32s} {mode_name:25s} {seed:>6d} {fl:>12.4f} {safe_perplexity(fl):>12.2f}\")\n", + "\n", + "# arch × mode 별 평균\n", + "print(\"\\n== Arch × mode summary (mean ± σ across seeds) ==\")\n", + "summary = {}\n", + "for arch in ARCHS:\n", + " for mode_name, use_full in MODES:\n", + " if arch == \"plain\" and use_full:\n", + " continue\n", + " vals = [results[(arch, mode_name, s)][\"final_loss\"] for s in SEEDS]\n", + " mean = statistics.mean(vals)\n", + " std = statistics.stdev(vals) if len(vals) > 1 else 0.0\n", + " summary[(arch, mode_name)] = (mean, std)\n", + " print(\n", + " f\" {arch:32s} {mode_name:25s} {mean:.4f} ± {std:.4f} (perplexity ≈ {safe_perplexity(mean):.2f})\"\n", + " )\n", + "\n", + "# 자동 verdict\n", + "print(\"\\n== Verdict ==\")\n", + "plain_loss = summary[(\"plain\", \"phase13_ffn_only\")][0]\n", + "ff_p14 = summary[(\"hybrid_full_full\", \"phase14_full_graph\")][0]\n", + "aa_p13 = summary[(\"hybrid_around_one_around_one\", \"phase13_ffn_only\")][0]\n", + "aa_p14 = summary[(\"hybrid_around_one_around_one\", \"phase14_full_graph\")][0]\n", + "\n", + "# 1. function preservation 확장 — full graph 도 plain 근방?\n", + "diff_ff_p14 = abs(ff_p14 - plain_loss)\n", + "verdict_1 = \"PASS\" if diff_ff_p14 < 0.15 else \"FAIL\"\n", + "print(\n", + " f\"1. full graph function preservation: |hybrid_full_full(p14) - plain| = {diff_ff_p14:.4f} [{verdict_1}]\"\n", + ")\n", + "\n", + "# 2. attention graph 효과 — 동일 arch 에서 Phase 14 ≤ Phase 13 + 0.05?\n", + "diff_aa = aa_p14 - aa_p13\n", + "verdict_2 = \"PASS\" if diff_aa <= 0.05 else \"FAIL\"\n", + "print(f\"2. attention graph not hurting (aa): Phase14 - Phase13 = {diff_aa:+.4f} [{verdict_2}]\")\n", + "\n", + "# 3. 모두 finite\n", + "all_finite = all(math.isfinite(out[\"final_loss\"]) for out in results.values())\n", + "verdict_3 = \"PASS\" if all_finite else \"FAIL\"\n", + "print(f\"3. all-finite stability (RMSNorm + graph attention): {all_finite} [{verdict_3}]\")\n", + "\n", + "# 4. dual scale-corrected 우위 in full graph — aa_p14 가 ff_p14 보다 ≤?\n", + "diff_aa_vs_ff = aa_p14 - ff_p14\n", + "verdict_4 = \"PASS\" if diff_aa_vs_ff <= 0.05 else \"FAIL\"\n", + "print(\n", + " f\"4. around_one×around_one ≤ full_full + 0.05 (p14): diff = {diff_aa_vs_ff:+.4f} [{verdict_4}]\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9", + "metadata": {}, + "source": [ + "## 4. Loss curve 시각화 — Phase 13 (실선) vs Phase 14 (점선)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "10", + "metadata": {}, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(1, 1, figsize=(12, 6))\n", + "colors = {\n", + " \"plain\": \"tab:gray\",\n", + " \"hybrid_full_full\": \"tab:blue\",\n", + " \"hybrid_full_around_one\": \"tab:orange\",\n", + " \"hybrid_around_one_around_one\": \"tab:green\",\n", + "}\n", + "window = 50\n", + "\n", + "for arch in ARCHS:\n", + " for mode_name, use_full in MODES:\n", + " if arch == \"plain\" and use_full:\n", + " continue\n", + " losses_per_seed = [results[(arch, mode_name, s)][\"losses\"] for s in SEEDS]\n", + " smoothed = []\n", + " for losses in losses_per_seed:\n", + " smoothed.append(\n", + " [\n", + " sum(losses[max(0, i - window) : i + 1]) / min(i + 1, window)\n", + " for i in range(len(losses))\n", + " ]\n", + " )\n", + " arr = torch.tensor(smoothed)\n", + " mean = arr.mean(dim=0)\n", + " std = arr.std(dim=0)\n", + " steps = list(range(len(mean)))\n", + " color = colors[arch]\n", + " # Phase 13 = solid, Phase 14 = dashed\n", + " linestyle = \"-\" if mode_name == \"phase13_ffn_only\" else \"--\"\n", + " label = f\"{arch} ({mode_name.replace('_', ' ')})\"\n", + " ax.plot(steps, mean, label=label, color=color, linewidth=1.5, linestyle=linestyle)\n", + " ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.10)\n", + "\n", + "ax.set_xlabel(\"step\")\n", + "ax.set_ylabel(f\"loss (rolling mean w={window})\")\n", + "ax.set_title(\n", + " \"Phase 14 — full graph block: 4 arch × {Phase 13 FFN-only, Phase 14 full graph} (mean ± σ over 2 seeds)\"\n", + ")\n", + "ax.legend(loc=\"upper right\", fontsize=8)\n", + "ax.grid(alpha=0.3)\n", + "plt.tight_layout()\n", + "\n", + "out_dir = Path(\"../../runs/notebook-neuron-phase14\")\n", + "out_dir.mkdir(parents=True, exist_ok=True)\n", + "fig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\n", + "plt.show()\n", + "print(f\"saved: {out_dir / 'loss_curves.png'}\")" + ] + }, + { + "cell_type": "markdown", + "id": "11", + "metadata": {}, + "source": [ + "## 5. attention adj 시각화 (Phase 14, hybrid_around_one_around_one 만)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "12", + "metadata": {}, + "outputs": [], + "source": [ + "# Phase 14 의 attention qkv / out 의 학습된 adj_outer 모양 확인 (block 0, seed 42)\n", + "snap = results[(\"hybrid_around_one_around_one\", \"phase14_full_graph\", 42)][\"final_adj\"][0]\n", + "print(f\"snap keys (Phase 14 full graph): {sorted(snap.keys())}\")\n", + "\n", + "fig, axes = plt.subplots(2, 2, figsize=(10, 8))\n", + "for ax, layer_name in zip(axes.flat, [\"qkv\", \"out\", \"fc1\", \"fc2\"], strict=True):\n", + " outer = snap[layer_name][\"outer\"].numpy()\n", + " im = ax.imshow(outer, cmap=\"RdBu_r\", vmin=-2, vmax=2)\n", + " ax.set_title(f\"{layer_name} — adj_outer (block 0)\")\n", + " ax.set_xlabel(\"G_in\")\n", + " ax.set_ylabel(\"G_out\")\n", + " plt.colorbar(im, ax=ax, fraction=0.046)\n", + "\n", + "plt.tight_layout()\n", + "fig.savefig(out_dir / \"attention_adj.png\", dpi=150, bbox_inches=\"tight\")\n", + "plt.show()\n", + "print(f\"saved: {out_dir / 'attention_adj.png'}\")" + ] + }, + { + "cell_type": "markdown", + "id": "13", + "metadata": {}, + "source": [ + "## 6. 결론 / 다음 단계\n", + "\n", + "(셀 출력 보고 사용자가 채울 영역)\n", + "\n", + "- full graph block 도 function preservation 성립?\n", + "- attention graph 가 학습에 유의미한 효과?\n", + "- qkv vs out 의 adj 학습 패턴 차이?\n", + "\n", + "**Phase 15 후보**:\n", + "- sparsity-driven prune — adj magnitude < threshold edge 영구 제거 → dead channel 발생 (DST 계열, training-time dynamic parameter count 의 진정한 첫 단계)\n", + "- Net2Net / LiGO 식 grow — 학습 중 channel / group 추가 (function preservation 유지)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "GraphLM (uv .venv)", + "language": "python", + "name": "graphlm-uv-venv" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/graphlm/neuron/__init__.py b/src/graphlm/neuron/__init__.py index 28ff6c3..5151b8f 100644 --- a/src/graphlm/neuron/__init__.py +++ b/src/graphlm/neuron/__init__.py @@ -11,9 +11,9 @@ NeuronGrowingDecoder, SinusoidalAlpha, ) +from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention from graphlm.neuron.graph_channel import ChannelGraphLinear from graphlm.neuron.graph_group import GroupGraphLinear -from graphlm.neuron.graph_attention import HybridGraphCausalSelfAttention from graphlm.neuron.graph_hybrid import HybridGraphLinear from graphlm.neuron.growable import GrowableEmbedding, GrowableLayerNorm, GrowableLinear from graphlm.neuron.growth import add_attn_function_preserving, add_attn_smooth_start diff --git a/src/graphlm/neuron/graph_attention.py b/src/graphlm/neuron/graph_attention.py index e5ecdbc..d7be7ce 100644 --- a/src/graphlm/neuron/graph_attention.py +++ b/src/graphlm/neuron/graph_attention.py @@ -14,7 +14,6 @@ from __future__ import annotations -import torch import torch.nn.functional as F from torch import Tensor, nn diff --git a/tests/neuron/test_graph_attention.py b/tests/neuron/test_graph_attention.py index 92f32cc..c17ef32 100644 --- a/tests/neuron/test_graph_attention.py +++ b/tests/neuron/test_graph_attention.py @@ -88,7 +88,10 @@ def test_zero_init_outer_rejected(bad): """0-init outer 거부 — underlying HybridGraphLinear 로부터 상속.""" with pytest.raises(ValueError, match="vanishing"): HybridGraphCausalSelfAttention( - hidden_dim=32, n_heads=4, group_size=8, adj_outer_init=bad # type: ignore[arg-type] + hidden_dim=32, + n_heads=4, + group_size=8, + adj_outer_init=bad, # type: ignore[arg-type] ) @@ -97,7 +100,10 @@ def test_zero_init_inner_rejected(bad): """0-init inner 거부.""" with pytest.raises(ValueError, match="vanishing"): HybridGraphCausalSelfAttention( - hidden_dim=32, n_heads=4, group_size=8, adj_inner_init=bad # type: ignore[arg-type] + hidden_dim=32, + n_heads=4, + group_size=8, + adj_inner_init=bad, # type: ignore[arg-type] ) From 004bf142f98bfa47ebc2f9b6f6d90f4c5fe22676 Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 00:00:34 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[CHORE]:=20Phase=2014=20figure=20=EC=9E=90?= =?UTF-8?q?=EC=82=B0=20=EC=B6=94=EA=B0=80=20(Notion=20=EC=9E=84=EB=B2=A0?= =?UTF-8?q?=EB=93=9C=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/figures/neuron/phase14/attention_adj.png | Bin 0 -> 79692 bytes docs/figures/neuron/phase14/loss_curves.png | Bin 0 -> 152877 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/figures/neuron/phase14/attention_adj.png create mode 100644 docs/figures/neuron/phase14/loss_curves.png diff --git a/docs/figures/neuron/phase14/attention_adj.png b/docs/figures/neuron/phase14/attention_adj.png new file mode 100644 index 0000000000000000000000000000000000000000..d613e245b109d640e360d9dbb9a95bb8440767a9 GIT binary patch literal 79692 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 t^g7JTPM&zT%?r^M literal 0 HcmV?d00001 diff --git a/docs/figures/neuron/phase14/loss_curves.png b/docs/figures/neuron/phase14/loss_curves.png new file mode 100644 index 0000000000000000000000000000000000000000..c8e8d40524eef284987af212458e6ded76980e9a GIT binary patch literal 152877 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

w>F;b%`#C%(Oyd4C5-T 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 literal 0 HcmV?d00001 From b799411dea0479fab57d2dd721919ea07d00f34b Mon Sep 17 00:00:00 2001 From: juhyuni Date: Wed, 27 May 2026 00:10:57 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[FIX]:=20=ED=94=BC=EB=93=9C=EB=B0=B1=20?= =?UTF-8?q?=EB=B0=98=EC=98=81,=20=EB=85=B8=ED=8A=B8=EB=B6=81=20rolling=20m?= =?UTF-8?q?ean=20off-by-one=20=EC=88=98=EC=A0=95=20(Phase=2013=20+=20Phase?= =?UTF-8?q?=2014)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CodeRabbit #3304780219: slice 가 window+1 elements 인데 divisor 는 window 라 bias - 수정: slice 시작점을 `i - window + 1` 로 시프트 → window 정확히 일치 - Phase 13 / Phase 14 두 노트북에 동일 패턴 → 둘 다 일관 수정 - verdict 영향 없음 (Phase 13/14 결과는 이미 검증 완료) — figure 의 rolling mean 정확도만 개선 --- .../12-phase13-hybrid-transformer.ipynb | 44 +--------------- .../13-phase14-graph-attention.ipynb | 52 +------------------ 2 files changed, 3 insertions(+), 93 deletions(-) diff --git a/notebooks/02-function-level/12-phase13-hybrid-transformer.ipynb b/notebooks/02-function-level/12-phase13-hybrid-transformer.ipynb index 3d731db..fab0d65 100644 --- a/notebooks/02-function-level/12-phase13-hybrid-transformer.ipynb +++ b/notebooks/02-function-level/12-phase13-hybrid-transformer.ipynb @@ -144,49 +144,7 @@ "id": "10", "metadata": {}, "outputs": [], - "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(10, 5))\n", - "colors = {\n", - " \"plain\": \"tab:gray\",\n", - " \"hybrid_full_full\": \"tab:blue\",\n", - " \"hybrid_full_around_one\": \"tab:orange\",\n", - " \"hybrid_around_one_around_one\": \"tab:green\",\n", - "}\n", - "window = 50 # rolling mean for smoothing\n", - "\n", - "for arch in ARCHS:\n", - " losses_per_seed = [results[(arch, s)][\"losses\"] for s in SEEDS]\n", - " # rolling mean\n", - " smoothed = []\n", - " for losses in losses_per_seed:\n", - " smoothed.append(\n", - " [\n", - " sum(losses[max(0, i - window) : i + 1]) / min(i + 1, window)\n", - " for i in range(len(losses))\n", - " ]\n", - " )\n", - " # mean ± σ across seeds\n", - " arr = torch.tensor(smoothed)\n", - " mean = arr.mean(dim=0)\n", - " std = arr.std(dim=0)\n", - " steps = list(range(len(mean)))\n", - " color = colors[arch]\n", - " ax.plot(steps, mean, label=arch, color=color, linewidth=1.5)\n", - " ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.15)\n", - "\n", - "ax.set_xlabel(\"step\")\n", - "ax.set_ylabel(f\"loss (rolling mean w={window})\")\n", - "ax.set_title(\"Phase 13 — Transformer FFN: 4 arch loss curves (mean ± σ over 2 seeds)\")\n", - "ax.legend(loc=\"upper right\")\n", - "ax.grid(alpha=0.3)\n", - "plt.tight_layout()\n", - "\n", - "out_dir = Path(\"../../runs/notebook-neuron-phase13\")\n", - "out_dir.mkdir(parents=True, exist_ok=True)\n", - "fig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\n", - "plt.show()\n", - "print(f\"saved: {out_dir / 'loss_curves.png'}\")" - ] + "source": "fig, ax = plt.subplots(1, 1, figsize=(10, 5))\ncolors = {\n \"plain\": \"tab:gray\",\n \"hybrid_full_full\": \"tab:blue\",\n \"hybrid_full_around_one\": \"tab:orange\",\n \"hybrid_around_one_around_one\": \"tab:green\",\n}\nwindow = 50 # rolling mean for smoothing\n\nfor arch in ARCHS:\n losses_per_seed = [results[(arch, s)][\"losses\"] for s in SEEDS]\n # rolling mean — slice 시작점 +1 시프트로 window 와 divisor 일치 (CodeRabbit #3304780219)\n smoothed = []\n for losses in losses_per_seed:\n smoothed.append(\n [\n sum(losses[max(0, i - window + 1) : i + 1]) / min(i + 1, window)\n for i in range(len(losses))\n ]\n )\n # mean ± σ across seeds\n arr = torch.tensor(smoothed)\n mean = arr.mean(dim=0)\n std = arr.std(dim=0)\n steps = list(range(len(mean)))\n color = colors[arch]\n ax.plot(steps, mean, label=arch, color=color, linewidth=1.5)\n ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.15)\n\nax.set_xlabel(\"step\")\nax.set_ylabel(f\"loss (rolling mean w={window})\")\nax.set_title(\"Phase 13 — Transformer FFN: 4 arch loss curves (mean ± σ over 2 seeds)\")\nax.legend(loc=\"upper right\")\nax.grid(alpha=0.3)\nplt.tight_layout()\n\nout_dir = Path(\"../../runs/notebook-neuron-phase13\")\nout_dir.mkdir(parents=True, exist_ok=True)\nfig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\nplt.show()\nprint(f\"saved: {out_dir / 'loss_curves.png'}\")" }, { "cell_type": "markdown", diff --git a/notebooks/02-function-level/13-phase14-graph-attention.ipynb b/notebooks/02-function-level/13-phase14-graph-attention.ipynb index 1ac8a27..3fa3362 100644 --- a/notebooks/02-function-level/13-phase14-graph-attention.ipynb +++ b/notebooks/02-function-level/13-phase14-graph-attention.ipynb @@ -257,55 +257,7 @@ "id": "10", "metadata": {}, "outputs": [], - "source": [ - "fig, ax = plt.subplots(1, 1, figsize=(12, 6))\n", - "colors = {\n", - " \"plain\": \"tab:gray\",\n", - " \"hybrid_full_full\": \"tab:blue\",\n", - " \"hybrid_full_around_one\": \"tab:orange\",\n", - " \"hybrid_around_one_around_one\": \"tab:green\",\n", - "}\n", - "window = 50\n", - "\n", - "for arch in ARCHS:\n", - " for mode_name, use_full in MODES:\n", - " if arch == \"plain\" and use_full:\n", - " continue\n", - " losses_per_seed = [results[(arch, mode_name, s)][\"losses\"] for s in SEEDS]\n", - " smoothed = []\n", - " for losses in losses_per_seed:\n", - " smoothed.append(\n", - " [\n", - " sum(losses[max(0, i - window) : i + 1]) / min(i + 1, window)\n", - " for i in range(len(losses))\n", - " ]\n", - " )\n", - " arr = torch.tensor(smoothed)\n", - " mean = arr.mean(dim=0)\n", - " std = arr.std(dim=0)\n", - " steps = list(range(len(mean)))\n", - " color = colors[arch]\n", - " # Phase 13 = solid, Phase 14 = dashed\n", - " linestyle = \"-\" if mode_name == \"phase13_ffn_only\" else \"--\"\n", - " label = f\"{arch} ({mode_name.replace('_', ' ')})\"\n", - " ax.plot(steps, mean, label=label, color=color, linewidth=1.5, linestyle=linestyle)\n", - " ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.10)\n", - "\n", - "ax.set_xlabel(\"step\")\n", - "ax.set_ylabel(f\"loss (rolling mean w={window})\")\n", - "ax.set_title(\n", - " \"Phase 14 — full graph block: 4 arch × {Phase 13 FFN-only, Phase 14 full graph} (mean ± σ over 2 seeds)\"\n", - ")\n", - "ax.legend(loc=\"upper right\", fontsize=8)\n", - "ax.grid(alpha=0.3)\n", - "plt.tight_layout()\n", - "\n", - "out_dir = Path(\"../../runs/notebook-neuron-phase14\")\n", - "out_dir.mkdir(parents=True, exist_ok=True)\n", - "fig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\n", - "plt.show()\n", - "print(f\"saved: {out_dir / 'loss_curves.png'}\")" - ] + "source": "fig, ax = plt.subplots(1, 1, figsize=(12, 6))\ncolors = {\n \"plain\": \"tab:gray\",\n \"hybrid_full_full\": \"tab:blue\",\n \"hybrid_full_around_one\": \"tab:orange\",\n \"hybrid_around_one_around_one\": \"tab:green\",\n}\nwindow = 50\n\nfor arch in ARCHS:\n for mode_name, use_full in MODES:\n if arch == \"plain\" and use_full:\n continue\n losses_per_seed = [results[(arch, mode_name, s)][\"losses\"] for s in SEEDS]\n # rolling mean — slice 시작점 +1 시프트로 window 와 divisor 일치 (CodeRabbit #3304780219)\n smoothed = []\n for losses in losses_per_seed:\n smoothed.append(\n [\n sum(losses[max(0, i - window + 1) : i + 1]) / min(i + 1, window)\n for i in range(len(losses))\n ]\n )\n arr = torch.tensor(smoothed)\n mean = arr.mean(dim=0)\n std = arr.std(dim=0)\n steps = list(range(len(mean)))\n color = colors[arch]\n # Phase 13 = solid, Phase 14 = dashed\n linestyle = \"-\" if mode_name == \"phase13_ffn_only\" else \"--\"\n label = f\"{arch} ({mode_name.replace('_', ' ')})\"\n ax.plot(steps, mean, label=label, color=color, linewidth=1.5, linestyle=linestyle)\n ax.fill_between(steps, mean - std, mean + std, color=color, alpha=0.10)\n\nax.set_xlabel(\"step\")\nax.set_ylabel(f\"loss (rolling mean w={window})\")\nax.set_title(\n \"Phase 14 — full graph block: 4 arch × {Phase 13 FFN-only, Phase 14 full graph} (mean ± σ over 2 seeds)\"\n)\nax.legend(loc=\"upper right\", fontsize=8)\nax.grid(alpha=0.3)\nplt.tight_layout()\n\nout_dir = Path(\"../../runs/notebook-neuron-phase14\")\nout_dir.mkdir(parents=True, exist_ok=True)\nfig.savefig(out_dir / \"loss_curves.png\", dpi=150, bbox_inches=\"tight\")\nplt.show()\nprint(f\"saved: {out_dir / 'loss_curves.png'}\")" }, { "cell_type": "markdown", @@ -381,4 +333,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file