초파리 신경 회로를 활용하는 것의 의미
요약
본 글은 초파리(Drosophila)의 신경 연결성 데이터인 커넥톰을 활용하여 인공 신경망 모델을 구축하는 방법을 탐구합니다. MaleCNS와 같은 공개 데이터베이스를 통해 얻은 연결성 데이터를 기반으로, 뉴런 간의 신호 전달 강도(가중치)를 정의하고 이를 계산에 적용하는 과정을 설명합니다.
핵심 포인트
- 초파리 커넥톰(connectome)을 신경망 구조로 활용 가능
- MaleCNS 데이터베이스에서 연결성 및 주석 데이터를 얻음
- 연결성(Connectivity)과 가중치(Weights)를 정의하여 모델링함
- 생물학적 데이터와 직접 구현하는 것의 차이를 설명
초파리의 신경 회로를 활용한다는 것은 무엇을 의미할까요?
초파리의 신경 연결성 데이터(neural connectivity data)를 신경망(neural network)의 구조로 사용할 수 있습니다. 소셜 미디어에서 초파리에서 영감을 받은 모델 시연을 봤을 때, 제 첫 반응은 “초파리는 정말 인상적이다”였습니다. 하지만 그들의 회로를 실제로 사용한다는 것은 구체적으로 무엇을 포함할까요?
이 글에서는 측정된 연결성으로 만든 작은 모델부터 시작하여 루빅스 큐브 구현과 저의 스도쿠 실험까지 살펴보겠습니다. 목표는 생물학적 데이터에서 나오는 것, 우리가 직접 구현하는 것, 그리고 모델이 학습하는 것이 무엇인지 설명하는 것입니다.
제시된 Python 코드 조각들은 설명을 위한 발췌본이며, 초기화 및 기타 지원 코드는 생략되었습니다. 저의 전체 구현체는 공개되지 않았습니다.
1. 초파리의 신경 회로란 무엇인가요?
MaleCNS는 초파리 수컷의 중추신경계(central nervous system)를 포함하여 그 뇌와 신경다발을 재구성한 공개 데이터베이스입니다. 이러한 종류의 연결성 지도를 **커넥톰(connectome)**이라고 부릅니다.
예를 들어, 이 데이터는 뉴런 A가 357개의 시냅스(synapses)를 통해 뉴런 C에 연결된다고 알려줄 수 있습니다.
어떤 데이터가 사용 가능한가요?
공식 다운로드 페이지에는 여러 종류의 데이터가 설명되어 있습니다:
| 카테고리 | 내용 |
|---|---|
| 주석(Annotations) | 세포 분류 및 유형, 신경전달물질 예측, 시냅스 개수 요약 |
| ... | |
예시를 위해 저는 연결성(Connectivity) 카테고리에서 connectome-weights-male-cns-v1.0-minconf-0.5.feather 파일을 사용했습니다. 이 파일은 명시된 신뢰도 임계값(confidence threshold)에 따라 전체 연결 그래프로 배포됩니다. 세그먼트(Segments)는 재구성된 데이터의 식별자이며, 모두 완전히 식별된 뉴런을 나타낸다고 가정해서는 안 됩니다. 예시는 주석과 비교한 네 개의 뉴런을 사용합니다. |
연결성을 모델로 변환하기
이 데이터를 계산에 사용할 때 중요한 두 가지가 있습니다:
- 연결성(Connectivity): 어떤 유닛이 어느 다른 유닛으로 신호를 보낼 수 있는지.
- 가중치(Weights): 각 연결이 계산에 얼마나 강하게 영향을 미치는지.
A에서 C로의 연결이 357개의 시냅스를 가진다고 가정해 봅시다. 이 예시에서는 선택된 연결 중 가장 큰 수인 582로 그 개수를 나누어 약 0.61이라는 가중치(weight)를 얻습니다. A에서 입력값 1이 들어오면 C에는 약 0.61의 기여를 하게 됩니다.
이는 모델링 선택일 뿐입니다. 연결 테이블은 “A에 입력 1이 들어가면 C에서 활동성 0.61을 생성한다”라는 응답을 직접적으로 지정하지 않습니다. 우리는 입력 단위와 계산 방식을 정의하는 것입니다. 시냅스 개수는 전기적 전달 강도의 직접적인 측정값은 아닙니다.
2. “빛”과 “소리” 입력을 가진 작은 모델
빛과 소리 강도를 나타내는 두 개의 숫자를 받는 모델을 구축한 다음, 어느 쪽이 더 강한지 식별해 보겠습니다. 이들은 카메라나 마이크에서 얻은 측정값이 아니라 합성(synthetic) 입력값입니다.
우리는 네 개의 선택된 MaleCNS 뉴런 A, B, C, D에 라벨을 붙이고 다음과 같은 연결을 사용합니다:
| 연결 | 실제 뉴런 ID | 시냅스 개수 |
|---|---|---|
| A → C | 10039 → 11722 | 357 |
| ... | ||
| 출처: MaleCNS v1.0, HHMI Janelia FlyEM 및 MaleCNS 협력자들이 CC BY 4.0 하에 제공함. |
우리는 보내는 뉴런을 행(rows)으로, 받는 뉴런을 열(columns)으로 하는 매트릭스에 개수들을 배열합니다:
synapse_counts = [
[357, 113], # A to C와 D
[ 93, 582], # B to C와 D
...
582로 나누는 것은 이 개수들 사이의 비율을 유지할 뿐입니다. 이것들을 생물학적 단위(biological units)로 변환하는 것은 아닙니다. 실제 전달은 시냅스 개수 외의 속성에도 의존합니다.
우리는 빛 강도를 A에, 소리 강도를 B에 할당합니다:
def brain(inputs):
a, b = inputs
c = max(0.0, a * wiring[0][0] + b * wiring[1][0])
...
빛만 사용할 경우 C는 약 0.61이고 D는 0.19입니다. 소리만 사용할 경우 C는 약 0.16이고 D는 1.0입니다. 두 입력은 서로 다른 활동 패턴을 생성합니다.
이 뉴런들은 검증된 빛-소리 처리 회로를 형성해서가 아니라, 유용한 교육 예시를 위해 선택되었습니다. 입력 할당은 인위적이며, 다른 연결들은 생략되었습니다.
판독(Readout) 학습
활동 값 자체에는 “빛”이나 “소리”와 같은 레이블이 붙어 있지 않습니다. 우리는 이 활동 값을 점수(score)로 변환하는 **판독기(readout)**를 추가합니다:
def readout(activity):
c, d = activity
light_score = c * weights[0][0] + d * weights[1][0] + bias[0]
...
wiring에는 초파리 데이터에서 파생된 고정 가중치(fixed weights)가 포함되어 있습니다. weights와 bias는 판독기에 속하며 예시로부터 학습됩니다.
예측이 틀렸을 때, 우리는 올바른 정답의 점수를 높이고 선택된 오답의 점수를 낮추도록 판독기를 조정합니다:
for i in range(2):
weights[i][correct] += activity[i]
weights[i][chosen] -= activity[i]
...
이것은 역전파(backpropagation)가 아니라 퍼셉트론 학습 규칙입니다. 네 개의 입력-레이블 쌍으로 훈련한 후, 모델은 다음을 생성합니다:
| 입력 [빛, 소리] | 활동 [C, D] | 예측 |
|---|---|---|
| [1.0, 0.0] | [0.61, 0.19] | 빛 |
| ... |
마지막 두 개의 입력은 훈련 중에 사용되지 않았습니다. 이것은 광범위한 일반화 테스트가 아닌 작은 시연입니다.
여기서 초파리로부터 얻는 것은 단지 네 가지 측정된 연결과 그 개수일 뿐입니다. 이는 “초파리 뇌를 작동시킨다”고 암시하는 것보다 덜 극적합니다. 더 큰 예시를 살펴보겠습니다.
3. 루빅스 큐브 예시
FlyCube는 MaleCNS에서 추출된 8,192개 뉴런의 서브그래프를 사용하는 공개 구현체입니다. 이 코드는 가능한 이동에 대한 점수와 큐브 상태에 대한 값 추정치를 예측합니다. 저는 이것을 참고 구현체로 다루고 있으며, 소셜 미디어 데모에서 보여준 프로젝트가 맞는지 확인하지는 않았습니다.
Cube state
→ Learned input encoder
→ Activity updates through fly-derived wiring
...
입력은 이미지(image)가 아니라 54개의 스티커 색상을 인코딩한 것입니다. 입력 인코더는 이를 회로를 위한 신호로 변환합니다. 모델은 이전 활동의 일부를 유지하면서 지속적인 활동 값(continuous activity values)을 반복적으로 업데이트합니다. 개별 스파이크(spikes)를 시뮬레이션하지 않습니다. 프로젝트의 아키텍처와 방법론을 참조하십시오.
훈련(Training)은 기존 솔버(solvers)가 제공하는 해답과 얕은 상태(shallow states)에 대한 정확한 탐색을 사용합니다. 추론 시간(inference time)에는 교사 솔버(teacher solver)를 호출하지 않습니다. 한 모드는 모델의 점수(scores)에서 움직임을 선택하고, 다른 모드는 학습된 점수와 가치 추정치(value estimates)를 사용하여 제한된 탐색(bounded search)을 안내합니다.
따라서 리드아웃(readout)은 회로의 활동으로부터 행동을 선택하도록 학습합니다. 솔버가 생성한 답변으로 훈련하는 것은 해당 솔버를 플레이하면서 질의하는 것과는 다릅니다.
중요한 한 가지 주의사항이 있습니다: 발표된 결과는 연결성(connectivity)을 역방향으로 전파했던 구형 구현체로 얻어졌습니다. 코드는 수정되었지만, 수정된 방향으로 훈련한 결과는 아직 프로젝트 문서에 보고되지 않았습니다. 보고된 모델은 일부 얕은 스크램블(shallow scrambles)은 해결하지만, 명시된 예산 내에서 균일하게 샘플링된 100개의 합법적인 상태(legal states) 중 어느 것도 해결하지 못합니다. 리와이어드 회로(rewired circuits)와의 비교 또한 한 작업과 규모에 대한 구형 구현체의 결과입니다. 이러한 조건들은 프로젝트의 제한 사항에 문서화되어 있습니다.
4. 나의 스도쿠(Sudoku) 구현
나의 스도쿠 구현 역시 보드(board)를 초파리에서 파생된 회로(fly-derived circuit)에 공급하고 다음 행동을 읽어냅니다:
Board, 이전 행동, 그리고 심판 응답
→ 고정된 수치 인코딩
→ 초파리 유래 배선(fly-derived wiring)을 가진 회로의 입력...
각 셀은 10개의 위치를 사용하여 인코딩됩니다: 비어 있음과 숫자 1–9입니다. 예를 들어:
한 셀에 대한 간소화된 인코딩.
digit = 3
cell_signal = [0.0] * 10
...
이러한 신호들은 미리 정해진 뉴런들에 할당됩니다. 이 회로는 leaky integrate-and-fire (LIF) 모델을 사용합니다: 입력값들이 단위의 막 전위(membrane potential)를 변화시키고, 임계값을 넘어서면 스파이크가 발생하여 연결된 경로를 따라 전달됩니다. 연결성은 측정된 데이터에서 가져왔으며, 동역학은 선택된 근사치입니다.
9×9 보드의 경우, 판독기(readout)는 입력 집단(input populations)으로부터의 측정값과 회로 전체에 걸친 집계값을 포함하여 1,024개의 특징을 받습니다. 표준화 후, 선형 판독기가 행동 점수(action scores)를 생성합니다:
scores = standardized @ weights + bias
chosen = int(scores.argmax())
weights는 (1024, 811) 형태를 가집니다. 이 811개의 행동은 다음과 같습니다:
- 729 배치(placements): 81개 셀 × 9개 숫자.
- 81 지우기(erase) 행동.
- 하나의 대기(wait) 행동.
심사위원(referee)은 주어진 셀을 변경하거나 중복된 숫자를 도입하는 것과 같은 행동을 거부합니다. 이는 올바른 대안을 선택하지 않습니다. 모델은 응답을 받고 다음 행동을 선택합니다.
판독기는 교사(teacher)의 행동 예제에 대해 훈련됩니다. 또한, 계수 공유 방식(coefficient-sharing scheme)을 통합하여 행(row), 열(column), 상자(box) 대칭성을 포함하므로, 설계 자체에 작업별 가정(task-specific assumptions)이 포함되어 있습니다.
유지된 모델은 모델 선택을 위해 반복적으로 사용된 8개의 퍼즐 중 5개를 완료했습니다. 이 8개의 퍼즐은 독립적인 최종 테스트가 아니므로, 5/8을 일반적인 미지의 Sudoku에 대한 성공률로 해석해서는 안 됩니다.
제한된 컴퓨팅 자원이나 제 모델 설계의 단점이 영향을 주었을 수 있지만, 나머지 퍼즐에서 실패한 이유를 밝혀내지는 못했습니다.
FlyCube와 비교했을 때, 이 구현체는 고정된 입력 할당과 스파이킹 동역학을 가집니다. 훈련은 전체 회로를 통해 역전파(backpropagating)하는 것보다는 추출된 특징에 대한 판독기(readout)를 주로 목표로 합니다.
5. RRN이 Sudoku를 표현하는 방법
Recurrent Relational Networks (RRN)는 또 다른 접근 방식을 제공합니다. 각 셀은 내부 상태(internal state)를 가지고 있으며, 같은 행, 열 또는 3×3 박스에 있는 셀들이 연결됩니다.
내부 상태란 업데이트 사이에 유지되는 숫자 배열입니다. 예를 들어, 각 셀이 네 개의 값을 가진다고 가정해 봅시다:
states = [
[0.2, -0.5, 0.8, 0.1], # Cell 0
[0.3, 0.1, 0.2, 0.7], # Cell 1
...
이것은 81×4 행렬이 될 것입니다. 실제 모델은 더 큰 상태를 사용합니다.
각 셀은 자신의 숫자와 행/열 위치를 입력으로 받습니다. 각 업데이트 동안, 연결된 셀들의 상태로부터 계산된 메시지들이 해당 셀의 이전 상태 및 입력과 결합됩니다. "정보 교환(Exchanging information)"이란 한 셀의 수치 데이터를 사용하여 다른 셀의 상태를 업데이트하는 것을 의미합니다.
예를 들어, 빈 셀은 같은 행에 있는 7을 포함하는 셀로부터 정보를 받을 수 있습니다. 이 모델은 이러한 메시지를 사용하여 숫자를 예측하는 방법을 학습하며, "이 셀 후보에서 7을 제거하라"는 지침이 주어지는 것이 아닙니다.
훈련에는 퍼즐-해결 쌍(puzzle-solution pairs)과 반복적인 업데이트를 통한 역전파(backpropagation)가 사용됩니다. 저자들은 어렵다고 분류된 17개 주어진 Sudoku 평가 세트의 96.6%를 해결했다고 보고했습니다. 이는 모든 Sudoku를 해결한다는 보장이 아니라 특정 벤치마크에서의 결과입니다. 논문과 공개 코드를 참조하십시오.
RRN은 Sudoku 관계를 연결성(connectivity) 자체에 구축합니다. 파리에서 유래된 회로(fly-derived circuit)는 생물학적 재구성을 통해 연결성을 얻습니다. 둘 다 상태를 유지하고 정보를 교환할 수 있지만, 그 연결성이 나타내는 관계는 다릅니다.
6. 핵심 요약 (What to take away)
이러한 예시들에서 파리 배선(fly wiring)을 사용한다는 것은 측정된 연결성과 시냅스 개수를 계산 모델에 통합하는 것을 의미합니다. 입력 인코딩, 활동 역학(activity dynamics), 그리고 활동으로부터 정답으로의 매핑은 여전히 설계되어야 합니다.
작은 빛과 소리 예제는 네 개의 연결에 걸쳐 판독값(readout)을 학습합니다. FlyCube는 더 큰 서브그래프와 학습된 입력 및 출력 구성 요소를 사용합니다. 저의 Sudoku 실험은 고정된 입력 할당, 스파이킹 동역학, 그리고 행동 판독값을 사용합니다.
저는 Sudoku 실험에서 초파리 배선(fly wiring)을 사용하는 것의 이점을 입증하지 못했습니다. 또한 특정 작업에 특화된 RRN이 더 효율적인지 확립하는 통제된 비교도 수행하지 않았습니다.
중요한 차이는 생물학적 연결성(biological connectivity)을 사용한다는 것과 그것이 결과를 개선한다는 것을 보여주는 것 사이입니다. 데모는 보는 재미가 있지만, 그 입력, 훈련, 탐색, 그리고 평가를 이해하는 것이 실제로 무엇을 하는지 훨씬 명확하게 만듭니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기