
『한가할 때 AI는 무엇을 할까?』 뇌의 버그로부터 자발적 활동이 솟아나오는 SNN 모델을 NumPy로 만든 기록
요약
SNN(Spiking Neural Network) 모델을 활용하여 외부 입력이 없는 상태에서도 뉴런이 자발적인 활동 패턴을 생성하는 창발적 거동을 연구한 실험 기록입니다. NumPy를 이용해 LIF 뉴런 모델을 구현하고, 항상성 유지를 보상으로 설정하여 자발성이 부산물로 나타나는지 검증하는 과정을 다룹니다.
핵심 포인트
- SNN 모델에서 외부 입력 차단 후 자발적 활동 유지 여부를 핵심 지표로 설정
- 복잡성이 아닌 항상성(Homeostasis)을 보상으로 설정하여 창발성 검증 시도
- 단순 노이즈 주입만으로는 입력 차단 시 모델이 침묵하는 한계 확인
- 실패 과정을 통해 SNN 모델링 시 고려해야 할 메커니즘의 중요성 강조
※본 기사에서의 「자발성」은 외부 입력을 차단한 후에도 스파이킹 뉴럴 네트워크 (SNN)가 활동을 유지하며, 내부에서 구조화된 패턴을 생성하는 현상을 가리킨다. 생물학적인 「의식」이나 「의지」의 존재를 주장하는 것이 아니라, 어디까지나 수리 모델상의 창발적 거동(Emergent behavior)을 관측한 기록이다.
1. 서론: 「한가할 때 멋대로 움직이는 뇌」를 계산기로 만들 수 있을까
인간은 외부로부터의 명령(Task)이 없을 때, 멋대로 다리를 떨거나, 콧노래를 부르거나, 의미 없이 손가락을 톡톡 두드리곤 한다. 이 「한가할 때 솟아나는, 의미 없는 자발적인 행동」이 어디에서 오는가 하는 것이 본 연구의 출발점이다.
세운 가설은 다음과 같다.
외부로부터의 명령이 없어져 뇌가 「한가해」지면, 뇌 내에 전기 신호의 노이즈(≒지루함·근질거림)가 쌓인다. 뇌는 그것을 처리하기 위해 멋대로 의미 없는 행동을 생성하고 있으며,
생명체의 자발성이란 뇌의 노이즈를 처리하는 과정에서 솟아나오는 부산물이 아닐까.
이를 SNN으로 컴퓨터 안에 재현하려고 시도했다. 결론부터 말하자면, 소박한 방식으로는 전혀 뜻대로 되지 않았고, 몇 번이고 「침묵」으로 떨어졌다. 최종적으로는 생물이 실제로 가지고 있는 메커니즘을 모델에 하나씩 추가함으로써, 외부 입력이 제로인 상태에서 뉴런 군집끼리 서로 주고받기(Interaction)를 시작하는 단계까지 도달했다.
본 기사는 성공 사례만을 나열한 것이 아니다. 어디에서 막혔고, 왜 막혔는지를 어떻게 언어화하여 극복했는가라는 실패의 과정을 주축으로 삼은 실험 노트이다. 동종의 실험을 시도하는 사람에게는 성공 매뉴얼보다 실패의 지도가 더 도움이 된다고 생각하기 때문이다.
2. 실험의 뼈대와 판정 기준
할 일은 세 가지로 집약된다.
- 뇌의 그릇을 만든다: 1,000개 미만의 LIF 뉴런을 결합한다. 일부에 핑크 노이즈 (1/f fluctuation)를 주입하여 「항상 가볍게 자극받아 지루해하는 상태」를 강제로 만든다.
- 일정 시간 후 입력을 끊는다: 이것이 본 실험의 핵심이다. 외부 노이즈를 OFF로 해도 활동이 지속된다면, 그것은 「밖에서 시켜서 움직이는 것」이 아니라 「스스로 움직이는 것」 = 자발성이 있다고 판정할 수 있다.
- 관찰한다: 입력 OFF 후에 뉴런이 멋대로 리듬을 새기거나, 무리를 지어 서로 주고받기 시작하면 성공으로 본다.
판정 기준은 매우 심플하게 설정했다. 입력을 끊은 후, 활동이 지속되는가. 이것에 달려 있다. 이 단순한 기준이 후술하듯 몇 번이고 나를 좌절시키게 된다.
시뮬레이션 환경은 numpy만을 사용했다. M1 Pro / 16GB 로컬 환경에서 몇 분 내에 돌아가는 규모로 설정했다.
3. 제1의 실패: 노이즈를 흘려보내는 것만으로는 뇌가 「침묵한다」
첫 번째 설계는 다음과 같다.
- 1,000 뉴런 (흥분성 800 · 억제성 200)의 랜덤 결합
- 전체에 핑크 노이즈 주입
- 유전 알고리즘 (GA)으로 진화. 단, 보상은 「복잡성」이 아니라 「발화율을 일정하게 유지하는 항상성 (Homeostasis)」으로만 설정했다.
보상에 복잡성을 포함하지 않은 데에는 명확한 이유가 있다. 「복잡한 리듬을 내면 승리」라고 채점하면 복잡성이 나타나는 것은 당연하며, 그것은 「자발성이 창발했다」가 아니라 「복잡성을 보상으로 설정했더니 복잡해졌다」를 나타낼 뿐이다. 가설을 검증하려면 복잡성의 내용을 일절 지정하지 않고, 항상성이라는 생존 조건만을 부여하여 그로부터 부산물로서 구조가 나타나는지를 지켜봐야 의미가 있다.
GA는 순조롭게 진행되어 발화율은 생물학적으로 타당한 8Hz 전후로 수렴했다. 손맛을 느끼며 입력을 끊었다. 결과는 다음과 같다.
OFF 직전 8.67Hz / OFF 직후 0.00Hz / 최종 단계 0.00Hz
자주(Self-running) 판정: NG 입력을 끊으면 침묵
입력을 끊은 순간, 활동은 완전히 침묵했다.
이는 구현 실수가 아니라 설계 자체가 초래한 필연이었다. 「발화율을 일정하게 유지하라」만을 보상으로 한 결과, 진화는 가장 저비용인 해답에 도달했다. 그것은 「입력이 오면 반응하고, 오지 않으면 침묵한다」는 완전히 수동적인 뇌이다. 스스로 움직일 필요가 어디에도 없었기에, 움직이지 않는 것이 최적해(Optimal solution)였던 것이다.
다만, 이 실패는 그 자체로 의미 있는 결과이기도 하다. 「노이즈를 흘려보내는 것만으로는 자발성이 생기지 않는다」는 반증 데이터로서 기능하고 있다. 가설의 소박한 버전은 이 시점에서 한 번 부정되었다.
4. 제2의 실패: 「스스로 움직여라」라고 보상에 써도, 여운을 잡을 뿐
그렇다면 보상에 「입력 OFF 구간에서도 활동을 유지하라」를 추가하면 된다. 복잡성의 내용은 여전히 지정하지 않으므로 정답을 주입하는 것은 아니다. 이 방침으로 평가 함수를 다시 작성했다.
적응도 = -(입력 ON 구간의 항상성 편차) # 기존 방식
- (입력 OFF 구간에서 침묵한 것에 대한 페널티) # 추가: 자율 주행(Self-running) 요구
진화 도중, 적응도가 갑자기 점프하는 개체가 출현했다. 자율 주행에 성공했다고 판단하여 그 개체를 추출해 장시간 구동시켰다. 결과는, 다시 침묵했다.
원인은 평가 구간의 설계에 있었다. OFF 구간의 평가가 짧았기 때문에, "입력을 끊은 직후, 여운으로 인해 활동이 잠시 지속되는" 현상을 자율 주행으로 오판했던 것이다. 길게 계속 유지하면 여운은 다하고 사라진다. 이 오류를 깨닫지 못한 채, 나는 이후로도 몇 번이고 "여운"을 "자율 주행"으로 착각하게 된다. 과도적인 감쇠(Transient decay)와 진정한 자기 유지(Self-maintenance)는 본질적으로 다르다——이 구분이 당시의 나에게는 부족했다.
나아가 구조적인 문제도 보이기 시작했다. GA(유전 알고리즘)로 진화시키고 있었던 것은 w_scale, plas_rate, plas_decay 단 3개의 **글로벌 파라미터(Global parameter)**였다. 하지만 진정한 자율 주행에는 "특정 뉴런군이 특정 순서로 서로 흥분하는 회로 구조"가 필요하다. 3개의 평균적인 조절 다이얼을 조정하는 것만으로는 회로의 형태 그 자체를 진화시킬 수 없다. 낚싯대의 길이만 바꾸고 있을 뿐, 물고기가 있는 곳으로 줄을 내리지 못하고 있었던 것이다.
5. 제3의 실패: 임계성(스펙트럼 반지름)도 이 모델에는 통하지 않는다
회로 그 자체를 진화시키는 것은 차원이 너무 높아 비현실적이다. 그래서 리저버 컴퓨팅(Reservoir Computing)의 발상을 빌려왔다. 랜덤 결합 행렬의 스펙트럼 반지름(Spectral radius)을 임계값(≈1.0)으로 조정하면, 수학적으로 에코 상태(Echo state, 자율 주행)가 보장될 것이다——라고 생각했다.
SR=0.95 ON 구간 1.39Hz OFF 최종 단계 0.00Hz 침묵
SR=1.00 ON 구간 1.38Hz OFF 최종 단계 0.00Hz 침묵
SR=1.10 ON 구간 1.15Hz OFF 최종 단계 0.00Hz 침묵
...
전멸이다. 에코 상태 이론은 연속값 리저버(Continuous-valued reservoir)를 전제로 한 이론이며, 스파이킹(Spiking) + 불응기(Refractory period) + 고정 임계값(Fixed threshold)이라는 이산적인 모델에는 직접 적용할 수 없다. ON 구간에서조차 1~2Hz밖에 나오지 않는 것은 시냅스 입력이 임계값에 도달하지 못하기 때문이다. 이론을 그대로 이식해도 기능하지 않는다는 당연한 사실을, 직접 손을 움직여 확인했다.
6. 막힌 원인을 언어화하기: 포화인가 침묵인가의 이지선다
여기서 잠시 멈춰 서서, 왜 무엇을 해도 침묵하는지를 정리했다. 파라미터 탐색을 통해 판명된 것은, 이 모델의 거동이 본질적으로 "포화(200Hz로 계속 울림)" 아니면 "침묵(0Hz)"의 이지선다이며, 그 중간은 "긴 여운을 거쳐 침묵할 뿐"이라는 사실이다.
아래 그림은 실패 패턴의 전형적인 예시다. 입력 OFF(빨간 점선) 이후, 활동은 언뜻 지속되는 것처럼 보이지만 이는 과도적 감쇠에 불과하며, 최종적으로는 완전히 사라진다.

(침묵의 실패 사례. 입력 OFF 후에 활동이 감쇠하고, 이윽고 완전히 사라짐)
"적절한 발화율로 영속하는 자발적 리듬"이라는 형편 좋은 상태는, 단순한 LIF(Leaky Integrate-and-Fire) + 랜덤 결합의 순수한 파라미터 범위에는 존재하지 않았다.
생물의 뇌가 자발 활동을 유지할 수 있는 것은, 단순한 LIF + 랜덤 결합보다 훨씬 정교한 메커니즘——구조화된 회로, 흥분과 억제의 정밀한 균형, 그리고 내인성 탈분극 전류(Endogenous depolarizing current)——를 갖추고 있기 때문이다. 이를 깨달은 시점에서 방침을 근본적으로 전환했다. 다이얼 찾기를 그만두고, 모델의 표현력 그 자체를 생물학적으로 끌어올리기로 했다.
7. 전환점 ①: 내인성 전류로 뇌에 "불씨"를 주다
생물의 뉴런은 외부 입력이 없어도 자발적으로 발화하려는 내인성 전류(페이스메이커 전류와 유사한 것)를 가진다. 이를 모델에 한 항 추가했다. 각 흥분성 뉴런에 개체 차이를 둔 작은 정적 입력을 상시 부여한다.
bias = np.zeros(N)
bias[:N_EXC] = I_BIAS * (0.5 + rng.random(N_EXC)) # 내인성 전류 (불씨)
# ...
...
이것은 가설을 위한 속임수가 아니다. 오히려 "한가한 뇌가 멋대로 근질근질하며 움직이기 시작하는" 불씨 그 자체의 수리적 모델화이다. 내인성 전류 I_BIAS를 변화시킨 결과는 다음과 같다.
I_bias=0.02: ON 63Hz OFF 최종 0Hz 침묵
I_bias=0.04: ON 75Hz OFF 최종 25Hz ★영속 자율 주행
I_bias=0.05: ON 88Hz OFF 최종 40Hz ★영속 자율 주행
...
I_bias=0.04 이후, 입력 OFF 후에도 마지막까지 활동이 지속되었다. 그것도 25~50Hz라는 생물학적으로 타당한 범위 내에서 말이다. 수많은 실패 끝에, 마침내 "입력 없이도 스스로 계속 움직이는 뇌"를 얻었다.
8. 전환점 ②: 클러스터 (Cluster) 구조로 뇌를 "무리"로 나누기
자율 주행은 달성했다. 하지만 이대로라면 모든 뉴런이 일제히 똑같이 발화할 뿐, "물결"이나 "주고받기"와 같은 구조가 없다. 그래서 흥분성 뉴런을 4개의 그룹으로 분할하고, 그룹 내부는 밀결합 (Dense coupling) 시켰다.
그런데 그룹 내부를 밀접하게 연결하자, 이번에는 모든 그룹이 완전히 동기화되어 버렸다 (그룹 간 상관관계 (Inter-group correlation) +0.9). 모두가 함께 울리고 있을 뿐, 주고받기에는 한참 미치지 못했다. 분화는 되었으나 통제력이 지나치게 강했다.
9. 전환점 ③: 측방 억제와 적응 전류로 그룹을 "주고받게" 하기
주고받기, 즉 "어느 그룹이 울리고 있을 때 다른 그룹은 침묵하는" **교대 (Alternation)**를 만들어내고 싶다. 이를 위해서는 두 가지 요소가 필요했다.
측방 억제 (Lateral Inhibition): 각 그룹의 억제 뉴런이 "다른 그룹"을 억제한다. 특정 그룹이 우세해지면 다른 그룹을 눌러버리는, 승자 독식적인 구조를 만든다.
적응 전류 (Adaptation Current, 스파이크 적응): 계속해서 발화한 뉴런은 피로해져 발화하기 어려워지며, 시상수 (Time constant)에 따라 천천히 회복된다. 이를 통해 "계속 울린 그룹이 지쳐서 다른 그룹에 주역을 양보하는" 움직임이 생긴다.
thr = thr0 + adapt # 피로한 만큼 발화하기 어려워짐
adapt = adapt * (1 - DT/ADAPT_TAU) + fired * ADAPT_STR # 발화로 피로 축적, 시상수로 회복
이것들을 도입하고, 그룹별 활동을 시간 평활화 (Time smoothing)하여 관찰하면——
50ms 평활화 후 그룹 활동 (500ms 마다, Hz):
그룹0: 0.1 20.0 0.0 20.0 0.0 20.0 0.0 0.0
그룹1: 0.0 0.0 20.0 0.0 37.8 0.0 20.0 0.0
...
그룹 0과 그룹 1이 깔끔하게 교대로 발화하고 있었다. 그룹 0이 울릴 때 그룹 1은 침묵하고, 다음에는 그룹 0이 침묵하고 그룹 1이 울린다. 외부 입력은 제로이다. 1ms 단위의 생데이터 (Raw data)로는 너무 세밀해서 보이지 않았을 뿐, 그룹 레벨에서는 명확한 교대 리듬, 즉 캐치볼이 존재하고 있었다.
아래 그림은 OFF 이후의 그룹 활동을 확대한 것이다. 빨강, 파랑, 초록, 보라색의 각 그룹이 서로 산(Peak)을 양보하고 있는 것을 볼 수 있다.

(그룹 간의 주고받기. 입력 OFF 후, 4개의 그룹이 서로 산을 양보하며 교대로 발화한다)
중요한 점은, 이 주고받기의 타이밍이나 순서를 어디에도 지정하지 않았다는 점이다. 보상으로 "교대해라"라고 가르친 것도, 리듬의 형태를 써넣은 것도 아니다. 내인성 전류 (Intrinsic current), 클러스터 구조, 적응 전류라는 물리적 조건만을 배치한 결과, 그룹 간의 주고받기가 자연스럽게 솟아나왔다. 당초의 가설인 "자발성은 노이즈 처리의 부산물로서 솟아난다"에 마침내 구체적인 형태가 동반된 순간이다.
10. 결과
최종적인 라스터 플롯 (Raster plot)을 보여준다. 검은 점선이 "입력 OFF" 순간이며, 그 오른쪽은 외부 입력이 전혀 없는 영역이다.

(최종 결과. 입력 OFF 후에도 4개 그룹이 색상별로 구분되어 활동을 계속하며, 그룹별로 줄무늬 형태로 분리되어 있다)
상단의 라스터에서는 input OFF 이후에도 활동이 마지막까지 끊기지 않고, 그룹별 색상(빨강, 파랑, 초록, 보라)이 줄무늬 형태로 분리되어 있다. 하단의 그룹 활동을 보면 그룹끼리 산을 양보하고 있음을 알 수 있다. 입력이 제로인 상태에서 뇌가 스스로 무리로 나뉘어 주고받기를 계속하고 있다.
얻은 결과를 정리한다.
| 요소 | 부여한 장치 | 결과 |
|---|---|---|
| 영속 자율 주행 | 내인성 전류 | 입력 OFF 후에도 5~50Hz로 지속 |
| ... |
11. 본 실험은 무엇을 보여주었으며, 무엇을 보여주지 않았는가
■ 보여준 것
- 단순한 노이즈 주입만으로는 자발 활동이 생기지 않으며, 모델은 포화(Saturation) 혹은 침묵(Silence)이라는 이지선다에 빠진다는 것.
- 글로벌 파라미터인 GA(Genetic Algorithm)로는 자율 주행을 담당하는 회로 구조 그 자체를 진화시킬 수 없다는 것.
- 내인성 전류, 클러스터 구조, 적응 전류라는 생물학적 요소를 더함으로써, 외부 입력이 제로인 상태에서도 영속하는 자발 활동과 그룹 간의 주고받기(교대 리듬)가 창발(Emergence)한다는 것.
■ 보여주지 않은 것 (일반화의 한계)
- 이것은 「자발성의 기원을 증명한」 것이 아니다. 어디까지나 특정 SNN (Spiking Neural Network) 모델 위에서 자발적 패턴이 창발(Emergence)하는 조건을 하나 찾아냈을 뿐이다.
- 주고받기(교대 리듬)의 군 간 상관관계(Inter-group correlation)는 -0.25로, 통계적으로는 명확하지만 라스터 플롯(Raster plot) 상의 시각적 임팩트는 군의 줄무늬 분리만큼 극적이지 않다. 더 강한 교대 현상을 이끌어내기 위해서는 군의 시상수(Time constant)나 적응(Adaptation) 파라미터의 추가적인 조정이 필요할 것으로 보인다.
- 파라미터는 수동 탐색을 통해 발견한 것이며, 이 구성이 유일해 혹은 최적해인 것은 아니다.
12. 결론: 자발성은 「현명하게 탐색해서 내는」 것이 아니라 「몸의 구조」에 깃드는 것
본 실험에서 가장 강하게 실감한 것은, **「자발성의 창발은 소박한 모델에서는 놀라울 정도로 나타나지 않는다」**는 사실이다. 노이즈를 흘려보내면 알아서 술렁일 것이라는 직관은 컴퓨터 안에서는 쉽게 실현되지 않는다. 현실은 포화(Saturation) 아니면 침묵(Silence)이라는 이지선다였으며, 그 사이의 간극은 과도적 감쇠(Transient decay)에 불과했다.
그리고 그것을 돌파한 것은 교묘한 보상 설계가 아니라, 생물이 실제로 갖추고 있는 메커니즘(내인성 전류(Intrinsic current)·회로 구조·스파이크 적응(Spike adaptation))을 모델에 솔직하게 더하는 것이었다. 자발성이란 「현명하게 탐색하면 나오는」 것이 아니라, 「그런 몸의 구조를 가지고 있다면 자연스럽게 나오는」 것일지도 모른다.
소박한 가설이 몇 번이고 침묵 속으로 떨어졌고, 생물의 메커니즘을 하나씩 더해간 끝에 입력이 제로인 상태에서 뇌가 스스로 춤추기 시작했다. 이 과정 자체가 자발성이라는 현상이 얼마나 비자명하며, 얼마나 「몸의 구조」에 뿌리를 두고 있는지를 가르쳐 주었다.
코드
구현 전체는 1개 파일로 묶어 GitHub에 공개하고 있다. numpy와 matplotlib만으로 동작한다.
리포지토리: https://github.com/naikaku1/spontaneous-snn
git clone https://github.com/naikaku1/spontaneous-snn.git
cd spontaneous-snn
pip install -r requirements.txt
...
실행하면 본 기사의 최종 결과도(spontaneous_result.png)가 생성된다. 파라미터(내인성 전류의 세기 I_BIAS, 측면 억제 W_INH, 적응의 세기·시상수 ADAPT_STR / ADAPT_TAU, 군의 수 N_CLUSTER)는 파일 서두의 상수로 조정할 수 있으며, 각각의 의미는 README에 정리되어 있다. 본 기사에서 다룬 실패의 경위나 메커니즘의 상세 내용도 README에 정리했으므로, 코드를 돌려보며 읽는다면 그쪽을 참조해 주길 바란다.
다음에 시도해보고 싶은 것은 이 주고받기의 「어휘」가 어디까지 풍부해질 수 있는가 하는 점이다. 군의 수를 늘리거나, 적응 시상수를 바꾸거나, 군 간의 억제 구조를 비대칭으로 만드는 등의 방법을 통해 더 복잡한 「외계인 언어」를 낼 수 있는지 검증하고 싶다. 진전이 있으면 다시 쓰겠다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기