CoolFace
Apppublic

whatpull/neuronface

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
README.md128 linesDownload Raw Back to root
1---2title: NeuronFace3emoji: ๐Ÿง 4colorFrom: purple5colorTo: blue6sdk: docker7app_file: app.py8pinned: false9---10 11# NeuronFace12 13> **PatternKey API๋Š” ์™„์ „ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.**14> API ํšŸ์ˆ˜ ์ œํ•œ ์—†์Œ ยท ์˜คํ”ˆ์†Œ์Šค ยท MIT ๋ผ์ด์„ ์Šค15 16์ƒ๋ฌผํ•™์  LIF (Leaky Integrate-and-Fire) ๋‰ด๋Ÿฐ๊ณผ ํ”ผ์งˆ ๊ณ„์ธต ๊ตฌ์กฐ ๊ธฐ๋ฐ˜์˜ ์—ฐ๊ตฌ์šฉ ์‹ ๊ฒฝ๋ง ๋ฐฑ์—”๋“œ. ๋ณ„๋„ ๋ธŒ๋ผ์šฐ์ € ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ [handface](https://github.com/whatpull/handface) (MediaPipe ๊ธฐ๋ฐ˜ ์† ์ œ์Šค์ฒ˜/์‹œ์„  ์ถ”์ ) ๊ฐ€ ์ถ”์ถœํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ž๊ทน์œผ๋กœ ๋ฐ›์•„ ๋ฐœํ™” ํŒจํ„ด์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. FastAPI ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ ๋‰ด๋Ÿฐ ์ฝ”์–ด๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์ถ”๊ฐ€ ์˜์กด์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.17 18## Quickstart19 20```bash21pip install -r requirements.txt22uvicorn app:app --reload --port 786023```24 25๊ธฐ๋™ ํ›„ [http://localhost:7860/docs](http://localhost:7860/docs) ์—์„œ Swagger UI ๋กœ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.26 27## Docker28 29```bash30docker build -t neuronface .31docker run -p 7860:7860 neuronface32```33 34API ํ‚ค ๋ณดํ˜ธ๊ฐ€ ํ•„์š”ํ•˜๋ฉด `NEURONFACE_API_KEY` ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌ:35 36```bash37docker run -p 7860:7860 -e NEURONFACE_API_KEY=your-secret neuronface38```39 40ํ‚ค๊ฐ€ ์„ค์ •๋˜๋ฉด ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ์— `Authorization: Bearer <key>` ๋˜๋Š” `X-API-Key: <key>` ํ—ค๋”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ์„ค์ • ์‹œ ์˜คํ”ˆ ๋ชจ๋“œ (์—ฐ๊ตฌ ํ™˜๊ฒฝ ๊ธฐ๋ณธ๊ฐ’).41 42## Version43 44`v0.2.4-zero-init-dynamic-cluster` (2026-05-10) โ€” zero-init dynamic cluster paradigm. `build_feature16_preset` default `n_cluster=0` (legacy 4-cluster baseline ํ๊ธฐ). ๋ชจ๋“  cluster ์˜์—ญ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์˜์—ญ `_grow_cluster` ์˜์—ญ ๋™์  spawn. ์‹ ๊ทœ endpoint `POST /networks/{id}/cluster/auto_train_or_spawn` โ€” vigilance evaluate + spawn-or-reinforce 1-call (์‚ฌ์šฉ์ž catch: ์ฒซ ์ž…๋ ฅ ์˜์—ญ cluster 0 first-spawn, ์‹ ๊ทœ distinct pattern ์˜์—ญ cluster N+1 spawn, ๋™์ผ ์ž…๋ ฅ ์˜์—ญ ๊ธฐ์กด cluster ๊ฐ•ํ™”). novel decision = (n_cluster=0 OR top_rate < min_winner_rate_hz=30 OR top_share < ฯ). ํšŒ๊ท€: test_stdp 29/29 PASS, e2e 3/3 PASS (n_cluster=4 ๋ช…์‹œ fixture ์ •ํ•ฉ), n=20 spawn path 10/10 PASS.45 46`v0.2.3-anchor-sync` (2026-05-10) โ€” STDP_W_MAX 3-way SOT ์ •ํ•ฉ (CLAUDE/PAPER/test_stdp). SOT=40 (PAPER ยง5.2 ํ•™์ˆ  ์ •ํ•ฉ, Diehl-Cook 2015 normalized w_max 1.0 + base 0.2-0.5 ์˜ 3ร— ratio). Phase 4 historic baseline ์ •์ง ๋ช…์‹œ (README Roadmap L110). ํšŒ๋กœ ๋ณ€๊ฒฝ 0, sanity recalc only.47 48 49`v0.2.2-cascade-restore` (2026-05-10) โ€” selectivity 0/4 โ†’ 10/10 ํšŒ๋ณต (B+17 V2 cascade wiring restore: `_grow_cluster` ์˜์—ญ stale B+15 weight (0.30/5.0, 0.45/9.0) โ†’ B+17 (0.40/7.0, 0.65/11.0, 0.70/12.0, 0.65/13.0) sync. audit round 4 fix #11). vigilance spawn ํ›„ ์‹ ๊ทœ cluster cascade dead ์˜์—ญ root cause ํ•ด์†Œ.50 51`v0.2.1-dynamic-cluster` (2026-05-10) โ€” backend ART vigilance scaffolding (Carpenter-Grossberg ฯ share metric + `_grow_cluster` + dynamic `range(N)` training). `POST /networks/{id}/cluster/vigilance` (share metric, novelโ†’spawn, max_clusters cap=64), `cluster_train_supervised` / `cluster_train_rstdp` ์˜์—ญ dynamic cluster N (`_active_n_clusters` ์˜์—ญ out_*_* prefix scan).52 53**v0.2.2 ๊ฒ€์ฆ**: `tests/probes/probe_dynamic_cluster_n20.py` ์˜์—ญ spawn 10/10 PASS + match 10/10 PASS. novel-then-train: `_grow_cluster` cascade weights B+17 sync ์ •ํ•ฉ (weight_changes_count=457, cluster 4 STDP ์ง์ ‘ ์ฆ๊ฑฐ) โ€” ๋‹จ inject self-match ๋ฏธ๋‹ฌ์„ฑ, root cause = probe `[0.7]*16` uniform pattern ์˜์—ญ cluster 1 ์˜ canonical IN[4..7] strong cascade ์˜์—ญ ๋ถˆ์ผ์น˜ (probe wiring ํ•œ๊ณ„, ๋ณ„ turn ์ถ”์ ).54 55## API ๊ฐœ์š” (~70 endpoints, 2026-05-05 ํ˜„์žฌ)56 57์ „์ฒด endpoint ๋Š” `/docs` ๋˜๋Š” [app.py](app.py) ์ฐธ์กฐ. ์•„๋ž˜๋Š” (a) handface frontend ๊ฐ€ ์‹ค์ œ๋กœ ํ˜ธ์ถœํ•˜๋Š” main path ์™€ (b) backend ์—๋Š” ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋‚˜ handface ๊ฐ€ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” advanced/research path ๋ฅผ ์ •์งํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•œ๋‹ค.58 59### Main path โ€” handface ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ60 61handface ํด๋ผ์ด์–ธํŠธ ([src/lib/backend/client.ts](https://github.com/whatpull/handface/blob/main/src/lib/backend/client.ts)) ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” 4 ๋‹จ๊ณ„:62 63| ๋‹จ๊ณ„ | Method | Path | ์„ค๋ช… |64|------|--------|------|------|65| 1 | `POST` | `/networks` | ์ƒˆ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„ธ์…˜ ์ƒ์„ฑ |66| 2 | `POST` | `/networks/{id}/presets/feature16` (๋˜๋Š” `/presets/basic`) | N3 cortical preset (default `v1_l4e_count=200` โ†’ 472 neurons / OUT 32 cluster 4ร—8 / WTA / NMDA; handface default `v1_l4e_count=50` โ†’ 322 neurons) |67| 3a | `POST` | `/networks/{id}/inject_feature16` | 16-dim ์ž๊ทน + cascade fire (B+3 ์‘๋‹ต schema: `out_rates` 32 OUT Hz / `cluster_rates` 4-cluster mean Hz / `winner_cluster` argmax (idle ์‹œ -1) / `winner_margin` (topโˆ’2nd)/max(top,1.0) โˆˆ [0..1] / `synapses_changed` delta only โ€” handface state_payload round-trip ์ ˆ๊ฐ ๋ชฉ์ ) |68| 3b | `POST` | `/networks/{id}/cluster_train_supervised` | cluster prefix `out_{c}_` 8 OUT ๋ชจ๋‘ supervisor batch ํ•™์Šต (N3 ํ•ต์‹ฌ ํ•™์Šต path) |69| 3c | `POST` | `/networks/{id}/cluster_lock` | TRAINED cluster 8 OUT incoming ์‹œ๋ƒ…์Šค freeze |70| 4 | `DELETE` | `/networks/{id}` | ์„ธ์…˜ ์‚ญ์ œ |71 72์ด ๊ฒฝ๋กœ๊ฐ€ handface ์‹ค์‹œ๊ฐ„ hand-gesture โ†’ SNN ํ•™์Šต ๋ฃจํ”„์˜ ์ „๋ถ€์ด๋‹ค. cluster_lock ์ดํ›„ backend STDP gate ๋งŒ frozen ์œผ๋กœ ์ •ํ•ฉ๋˜๋ฉฐ, ์ถ”๊ฐ€ reward-modulated ํŽ„์Šค๋‚˜ V_th regulation ์€ ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.73 74### Advanced / research path โ€” backend ๊ตฌํ˜„, handface ๋ฏธํ˜ธ์ถœ75 76์•„๋ž˜ endpoint ๋Š” backend ์— ์‚ฌ์‹ค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ณ  `/docs` ์—์„œ ์ง์ ‘ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํ˜„์žฌ handface frontend ๋Š” ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•™์ˆ  reference / ๋‹ค๋ฅธ ํด๋ผ์ด์–ธํŠธ / ํ–ฅํ›„ ํ™•์žฅ์„ ์œ„ํ•ด ๋ณด์กด๋œ๋‹ค.77 78| Method | Path | ์„ค๋ช… | handface ์‚ฌ์šฉ |79|--------|------|------|--------------|80| `POST` | `/networks/{id}/snapshot-weights` + `/rstdp-pulse` | R-STDP 2-step reward-modulated ์ฆํญ | ๋ฏธ์‚ฌ์šฉ |81| `POST` | `/networks/{id}/astrocytes/homeostasis_step` | per-neuron V_th regulation (Turrigiano 1998 ์ •ํ•ฉ, silence escape) | ๋ฏธ์‚ฌ์šฉ |82| `POST` | `/networks/{id}/homeostatic` | synaptic scaling | ๋ฏธ์‚ฌ์šฉ (client method ์ •์˜๋งŒ ์กด์žฌ, callsite 0) |83| `GET` | `/networks/{id}/training/snapshot` + `POST /training/load` | ํ•™์Šต weight Save/Load | ๋ฏธ์‚ฌ์šฉ |84| `POST` | `/networks/{id}/reset` | ๋™๋ ฅ๋งŒ reset (๊ตฌ์กฐ ๋ณด์กด) | ๋ฏธ์‚ฌ์šฉ |85| `POST` | `/networks/{id}/run` | ์ง€์ • ์‹œ๊ฐ„๋งŒํผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์ง„ํ–‰ ํ›„ ์ŠคํŒŒ์ดํฌ ์‹œ์  ๋ฐ˜ํ™˜ | ๋ฏธ์‚ฌ์šฉ |86 87์ถ”๊ฐ€ 90+ brain regions / verification suite / oscillation tools / paper export endpoint ๋„ ๋™์ผํ•œ advanced ๋ฒ”์ฃผ์ด๋ฉฐ `/docs` ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.88 89## Project structure90 91```92neuronface/93โ”œโ”€โ”€ app.py                  FastAPI ์„œ๋ฒ„94โ”œโ”€โ”€ modules/95โ”‚   โ”œโ”€โ”€ __init__.py96โ”‚   โ”œโ”€โ”€ neuron.py           LIF ๋‰ด๋Ÿฐ + Synapse97โ”‚   โ”œโ”€โ”€ monitoring.py       SpikeMonitor (ring buffer + ๋ฐœํ™”์œจ)98โ”‚   โ”œโ”€โ”€ network.py          REST ์„ธ์…˜์šฉ ํ‰ํƒ„ NeuralNetwork + Registry (๋Ÿฐํƒ€์ž„ ํ•ต์‹ฌ)99โ”‚   โ”œโ”€โ”€ vectorized.py       NumPy vectorization ๋ชจ๋“œ (์˜ต์…˜)100โ”‚   โ”œโ”€โ”€ d1_db.py            Cloudflare D1 marketplace ์—ฐ๋™101โ”‚   โ””โ”€โ”€ _archive/102โ”‚       โ””โ”€โ”€ brain.py        ๊ณ„์ธต ๊ตฌ์กฐ ๋ฐ๋ชจ (Network/Region/Column/Population)103โ”‚                           โ€” runtime import 0, ํ•™์ˆ  reference ๋ณด์กด์šฉ archived (commit de4a658)104โ”œโ”€โ”€ requirements.txt105โ”œโ”€โ”€ Dockerfile106โ”œโ”€โ”€ README.md107โ”œโ”€โ”€ CLAUDE.md               ๊ฐœ๋ฐœ์ž์šฉ ์ƒ์„ธ ๊ฐ€์ด๋“œ (์ƒ๋ฌผํ•™ ์ƒ์ˆ˜, ์ œ์•ฝ, ํšŒ๊ท€ ๊ธฐ์ค€์„ )108โ””โ”€โ”€ .gitignore109```110 111์„ค๊ณ„ ์›์น™ยท์ƒ๋ฌผํ•™์  ์ƒ์ˆ˜ยท๋‚ด๋ถ€ ์ œ์•ฝยท๊ฒฐ์ •๋ก  ๊ธฐ์ค€์„ ์€ [CLAUDE.md](CLAUDE.md) ์ฐธ์กฐ.112 113## Roadmap114 115- [x] Phase 1 โ€” LIF neurons116- [x] Phase 2 โ€” Cortical hierarchy117- [x] Phase 3 โ€” Monitoring layer (SpikeMonitor)118- [x] Phase 4 โ€” STDP (A_LTP=0.01, A_LTD=0.0105, W_MAX=320, tau=20ms) [historic baseline; SOT v0.2.2: A_LTP=0.0005, W_MAX=40, see PAPER ยง5.2 / Phase E commit 25ba2aa]119- [x] Phase 5 โ€” Neuromodulation (DA/ACh/5-HT/NE)120- [x] Phase 6 โ€” FastAPI backend121- [x] Phase 7 โ€” NumPy vectorization (`modules/vectorized.py`, ํ™œ์„ฑ ์—ฌ๋ถ€๋Š” ๋ชจ๋“œ ์„ ํƒ)122- [x] P200 milestone โ€” 90+ brain regions, ~70 endpoints, 6 verification suite, 5 oscillation tools, 4 cluster preset, E2E pipeline, paper export123- [x] Session 53 (2026-05-05) โ€” N3 cortical preset (feature16: default `v1_l4e_count=200` โ†’ 472 neurons; handface client default `v1_l4e_count=50` โ†’ 322 neurons / OUT 32 cluster) + cluster_train_supervised + cluster_lock + R-STDP 2-step (snapshot-weights + rstdp-pulse) + per-neuron astrocyte homeostasis124 125## License126 127Apache License 2.0. See [LICENSE](./LICENSE) for details.128