개인용 오프라인 기반 LLM 시스템 MINJI2에 대하여.

MINJI : The Architecture of Autonomous Neural Intelligence
M - Memory-Mapped Persistence (mmap & File-Linked SSD Architecture)모든 뇌세포, 시냅스 연결 청크, 그리고 가상 프로세서의 실행 코드가 mmap() 가상 메모리를 통해 SSD 파일 영역과 완벽히 동기화되어 영속성과 고속 접근을 동시에 달성합니다.
I - Interconnected Dynamic Synapses (Direct Cell-to-Cell Network)미리 고정된 NxN 블록 레이어의 한계를 뛰어넘어, 오직 연관성이 있는 셀들끼리만 직접 연결되고 확장되는 유연한 의미망(Semantic Sea)을 형성합니다.
N - Negative & Positive Thresholds (Bipolar Polarity Management)양수 입력뿐만 아니라 부정 레벨(-)의 임계값 설정과 마이너스 가중치 강화를 지원하여, 대립되거나 억제해야 하는 의미(예: 동음이의어 상호 억제)까지 입체적으로 관리합니다.
J - JIT-Like VLIW Virtual Execution (Procedural vCPU Integration)순수 추론만으로는 불가능한 절차적 연산과 서브루틴 호출을 위해, 세포 발화 시 즉시 구동되는 128비트 VLIW 가상 프로세서 능력을 탑재했습니다.
I - Imitative & Generative Language Evolution (Babbling to Polymorphic Sentences)토큰셀과 초성 인덱스 체인을 거쳐, 옹알이에서 시작해 고유 코드를 통한 단기 기억 스냅샷과 사용자 교정 피드백을 반복하며 상황에 맞는 키워드를 스스로 채워 넣는 발달형 언어 학습 엔진을 완성합니다.
* 기존의 Deep learning 방식의 신경망 구조와 MINJI 시스템의 신경망 구조의 차이점.

1. 기존의 NxNxN 연결 구조의 딥 러닝 방식의 신경망의 경우 N(N개의 입력층)x N(N개의 은닉층)x N(N개의 출력층) 형식으로 꽉 짜여진 신경망의 구성에 모든 입력 요소를 짜 넣고 상황에 따라 가중치를 조절하여 원하는 방식의 출력을 얻는 구조로 되어 있으며, 가중치 연산에 부동소숫점 연산을 사용하여 GPU의 행렬 연산 처리에 맞추어 한번에 대량의 가중치 연산을 처리하는 방식으로 동작하고 있으며, 이 과정에서 많은 경우 서로 연관성도 없는 요소들이 연산에 개입하게 됩니다.
신경망 처리 과정에서 이런 불필요한 요소들은 가중치를 0이나 0에 가깝게 낮추어 영향을 배제하고 있으나, 부동소숫점 연산의 특성상 완전한 0이 되지 않아 (그들은 이걸 '노이즈'라 부릅니다) 미미하게나마 연산 결과에 영향을 주게되며, 만약 의미있는 요소들의 값이 충분히 크지 않을경우 경우에 따라 원치않는 결과를 얻을수도 있게되며, 이를 환각(hallucination) 이라 부르며, 종종 '거짓말 하는 A.I'의 원인으로 작용하게 됩니다.

2. 이에 반해 MINJI2 시스템의 경우 NxNxN의 짜여진 연결망 구조를 원천 배제하고 Cell 이라 부르는 개별 의미셀 유닛을 다수 배열하고 이 의미 셀들이 필요시에 어떤 대상과도 서로 가중치를 갖고 연결될 수 있는 구조로 만들어 져 있으며, 가중치 연산 과정에서 부동소숫점을 배제하고 32bit+32bit(정수+소수) 규격의 고정소숫점을 사용하여 가중치 연산을 하게되어 매우 높은 정밀도와 완전한 0 까지 표현할 수 있는 '노이즈 없는' 연산이 이루어지게되고, 신경망 처리 과정에서 GPU를 사용하지 않아 시스템의 성능 제약을 받지 않게 됩니다.

3. 시스템의 구성.
시스템의 구성은 핵심 요소로 Cell 어레이를 최대 4G셀 까지 배열할 수 있는 '의미셀의 바다' 를 중심으로, 셀의 구조를 간략화 하여 사용자가 입력하는 텍스트만 인식/분류 하기 위한 토큰셀 어레이가 최대 400M 셀 까지 배열되어 사용자의 텍스트 입력을 받아 토큰 단위로 분류하여 의미셀로 넘기도록 구성되어 있고, vCPU 유닛은 그 자체가 하나의 가상 CPU로서 VLIW 타입의 자체 명령어 체계를 채용한 시스템으로서, 의미셀과 함께 쌍으로 구성되어 의미셀이 발화될때 프로그램된 기능을 실행하여 신경망 구성으로 처리하기 불편한 '절차 처리 방식'의 구현이 가능하도록 하고 있습니다.
또한 시스템 관리자 블록에서는 학습 과정에서 실수로 입력하였거나, 입력후 거의 사용되지 않는 셀들을 정리해 주는 망각 기능도 구현하고 있습니다.
참고 : vCPU 블록은 128비트 폭의 VLIW(very long Instruction Word)로 구성된 가상 명령어 세트를 사용하는 일종의 인터프리터 방식의 가상 CPU로서 어디까지나 신경망 구조의 시스템이 처리하기 불편한 '절차 처리'나 '계산기와 같은 정확한 연산'을 처리하기 위한 요소이며, 학습 과정에서 해당 의미셀에 배당된 vCPU의 실행 여부는 켜고 끌 수 있게 되어 있습니다.
기존의 LLM 시스템은 연산이 필요할 경우에도 학습과 통계에 의해 '추정치의 결과'를 내놓아 정확하지 않은 값을 출력하기 쉬웠으나, MINJI2 시스템의 경우 '연산이 필요하다'는 상황에 대한 학습만 이루어 지고 나면 vCPU의 프로그램을 호출하여 64bit+64bit(정수+소수) 정밀도의 고정소숫점 연산 결과를 출력하게 됩니다.
P.S : 기존의 LLM 시스템은 시스템의 성능을 평가하는 요소로 단순히 ‘가중치 숫자’ 만을 내세우고 있으나, 냉정히 판단하자면 그 가중치들중 상당수는 추론 과정에서 0만 곱하는 ‘사실상 의미 없는’ 요소들이 대부분이며, 오히려 ‘노이즈의 원인’와 ‘환각’의 원인 일 뿐인데도 이를 ‘가능성’으로 미화하여 선전하고 있습니다.
반면, 본 시스템의 경우 애초부터 의미 없는 요소들은 일절 학습에 개입하지 않고, 가중치 연산시에도 노이즈 없는 고 정밀도의 (정수와 소수 각각 32bit 의 : 기존 딥러닝 기반의 LLM의 경우 16비트 부동소숫점) 고정 소숫점 연산을 사용하며, 무의미한 숫자 뿐인 ‘가중치 숫자 자랑’이 아니라 실제 의미를 갖고 뭔가를 처리하기 위한 의미셀로 40억개 까지(다만, 엄청난 용량의 SSD가 필요합니다) 배열하여 시스템을 구성할 수 있습니다.

유지 관리 시스템에 대하여 : 본 시스템의 특징중 하나로 '망각 기능'이 있습니다.
개인적인 철학중 하나인 '망각도 지능이다' 를 바탕으로 시스템에 구현 한 것으로, 사용자가 시스템을 학습하여 생성된 의미셀들중 장시간 다시 호출 되지 않거나 추가 학습(가중치 강화)가 이루어 지지 않는 셀들의 연결을 약화 시키고 결국 시스템에서 제거하는 역할을 합니다.
일반적 환경 하에서 대략 6개월 정도 재 호출 되지 않으면 이후 로그인시마다 일정 값 만큼 연결이 약화되고 가중치가 0이 되면 시스템에서 제거됩니다.
물론, 충분히 연결이 강화되어 '영구 기억'에 이른 셀들은 망각에서 제외 되도록 하고 있습니다.
+와 -의 스레시 홀드 개념 적용 :
본 시스템의 특징으로 '전향적인 음수 영역의 수용'이 있습니다.
기존 딥러닝 시스템의 경우 에너지 레벨이 음수가 되면 0으로 강제 치환 시켜 버리고 음수 영역은 사용하지 않습니다만, 본 시스템의 경우 음수 영역까지 그대로 사용하며 이는 학습시에도 반영됩니다. (즉, 음수 가중치로 학습이 가능합니다) 또한 에너지 레벨을 감지하여 셀을 발화시키는 스레시홀드 설정에도 양수 (pThredhold)와 음수(nThreshold)를 모두 설정 가능하게 하여 필요시 '강한 부정'에 의해서도 발화 될수 있게 하였습니다.

4. 시스템 전체를 관리하기 위한 OS : vShell.
신경망 구조의 시스템은 시스템 자체의 개발보다 학습이 더 큰 장벽으로 작용합니다.
특히 LLM 시스템의 경우 방대한 언어 데이타를 기반으로 학습과 가중치 튜닝을 반복하는 지난한 작업으로 알려져 있습니다.
이와 관련하여 본 시스템의 경우 vShell 이라는 리눅스의 쉘 스크립트 스타일의 자체 shell 엔진을 내장하여 학습과 운영의 대부분을 쉘 스크립트로 자동화 할 수 있게 구성 되어 있습니다.
예를들어 일상 지식의 대부분을 차지하는 단순 문장 (예 : 'A는 B다' 형식의 문장)의 경우 link_fact <주어> <목적어> [가중치] 명령어를 사용하여 단번에 셀을 연결 할 수 있습니다.
vShell의 경우 대략 60여개 정도의 스크립트 명령과 스크립트 코드를 작성하기 위한 인라인 에디터를 내장하고 있습니다.
명령어중에는 파일 생성이나 액세스 명령도 포함되어 외부에서 장문의 학습 데이터를 파일로 읽어와서 자동으로 학습 하도록 스크립트 코드를 작성하는것도 가능하게 배려하고 있습니다.
P.S : vShell의 명령어중에는 의미셀의 vCPU를 프로그램 하기 위한 VLIW 컴파일러(사실은 어셈블러)도 포함 되어 있습니다.
5. 기존의 NxNxN 블록 레이어 구성의 신경망도 지원합니다.
본 시스템은 개별 셀이 시스템 전체의 어느 셀과도 자유롭게 연결되어 에너지를 주고받을 수 있는 특성이 있으므로 필요하다면 기존의 NxNxN 구조의 블록 레이어 구조의 신경망 영역을 시스템 내부 일정 구역에 형성하고 기존 방식의 학습을 구현할 수도 있습니다.
아울러, 이 경우 설정된 블록 레이어 영역에 대한 자동 학습을 위한 함수도 갖추고 있습니다.

vShell 환경에서의 학습시의 장점.
기존의 Deep learning 방식의 신경망 구조에서는 일단 시스템의 학습이 이루어지면 외부에서의 추가나 보충 학습이 불가능 했습니다.
하지만, 본 시스템의 경우 '의미셀의 바다'가 항상 열려 있는 상태로, 사용자는 언제든 어느 영역에든 추가 학습이 가능하며, 오픈소스의 장점을 활용할 경우 각자 '전문 분야'의 학습 데이타를 공유하여 자신만의 특정 분야에 기반한 LLM으로 특화 시킬 수도 있습니다.
즉, 본 시스템을 사용하는 사용자들은 각자 자신들이 부분적으로 학습 시킨 특정 분야의 지식들을 온라인에서 공유하며 자신에게 필요한 지식만 다운로드 받아 각자의 개성과 전문성을 가진 시스템으로 구축이 가능 하다는 것입니다.

#참고자료 : 동음이의어 분류 기능 확인을 위한 스크립트 코드 예제.
echo ==============================================================
echo 🧠 [System] 동음이의어 문맥 인지 및 기초 공사 시작 (v2.0)
echo ==============================================================
# 🔻 메인 실행 흐름 (Main Routine)
call @Phase1_Init
call @Phase2_Mapping
call @Phase3_Training
call @Phase4_MathLimit
call @Phase5_Benchmark
jmp @ProgramEnd
# ==============================================================
# 🔻 서브루틴 영역 (Subroutines)
# ==============================================================
@Phase1_Init
echo ▶ [Phase 1] 의미셀 및 토큰 생성
create 과일_배
create 선박_배
create 신체_배
create 시각_눈
create 날씨_눈
create 견과_밤
create 시간_밤
token_create 배
token_create 눈
token_create 밤
token_create 아삭하고
token_create 바다
token_create 점심을
token_create 안경을
token_create 겨울
token_create 고소한
token_create 캄캄한
create 아삭하고
create 바다
create 점심을
create 안경을
create 겨울
create 고소한
create 캄캄한
ret
@Phase2_Mapping
echo ▶ [Phase 2] 토큰과 의미셀 매핑 및 팩트 링커
token.배.link 과일_배
token.배.link 선박_배
token.배.link 신체_배
token.눈.link 시각_눈
token.눈.link 날씨_눈
token.밤.link 견과_밤
token.밤.link 시간_밤
token.아삭하고.link 아삭하고
token.점심을.link 점심을
token.안경을.link 안경을
token.고소한.link 고소한
token.캄캄한.link 캄캄한
link_fact 아삭하고 과일_배 0.6
link_fact 바다 선박_배 0.6
link_fact 점심을 신체_배 0.6
link_fact 안경을 시각_눈 0.6
link_fact 겨울 날씨_눈 0.6
link_fact 고소한 견과_밤 0.6
link_fact 캄캄한 시간_밤 0.6
ret
@Phase3_Training
echo ▶ [Phase 3] 비트 패턴 학습 및 임계값 튜닝
train_token 배 10
train_token 눈 10
train_token 밤 10
train_token 아삭하고 10
train_token 바다 10
train_token 점심을 10
train_token 안경을 10
train_token 겨울 10
train_token 고소한 10
train_token 캄캄한 10
token.배.auto_threshold 0.95
token.눈.auto_threshold 0.95
token.밤.auto_threshold 0.95
token.아삭하고.auto_threshold 0.95
token.바다.auto_threshold 0.95
token.점심을.auto_threshold 0.95
token.안경을.auto_threshold 0.95
token.겨울.auto_threshold 0.95
token.고소한.auto_threshold 0.95
token.캄캄한.auto_threshold 0.95
ret
@Phase4_MathLimit
echo ▶ [Step 1] 변수를 활용한 이론적 한계치 수학 연산 (시뮬레이션 분석)
var F_BaseEng
var F_Context
var F_Enemies
var F_TargetW
F_BaseEng = 1.0
F_Context = 0.6
F_Enemies = 2.0
F_TargetW = ( F_BaseEng + F_Context - 1.0 ) / F_Enemies
print [이론적_생존_마지노선(억제력_절댓값)]_=>_%f F_TargetW
echo -> (계산된 수치보다 억제 가중치 절댓값이 작아야 공멸을 피할 수 있습니다.)
echo --------------------------------------------------------------
ret
@Phase5_Benchmark
echo ▶ [Step 2] 시뮬레이션 환경 초기화
reset_energy_all
echo ▶ [Step 3] 가중치 -0.8 주입 및 테스트 (강한 억제 모델)
과일_배.(선박_배) = -0.8
과일_배.(신체_배) = -0.8
선박_배.(과일_배) = -0.8
선박_배.(신체_배) = -0.8
신체_배.(과일_배) = -0.8
신체_배.(선박_배) = -0.8
scan_tokens 아삭하고 배
propagate 1
echo [결과] 가중치 -0.8 적용 시 발화된 노드:
print_fired
echo --------------------------------------------------------------
echo ▶ [Step 4] 가중치 -0.6 주입 및 테스트 (중간 억제 모델)
reset_energy_all
과일_배.(선박_배) = -0.6
과일_배.(신체_배) = -0.6
선박_배.(과일_배) = -0.6
선박_배.(신체_배) = -0.6
신체_배.(과일_배) = -0.6
신체_배.(선박_배) = -0.6
scan_tokens 아삭하고 배
propagate 1
echo [결과] 가중치 -0.6 적용 시 발화된 노드:
print_fired
echo --------------------------------------------------------------
echo ▶ [Step 5] 가중치 -0.2 주입 및 테스트 (최적 밸런스 도달 모델)
reset_energy_all
과일_배.(선박_배) = -0.2
과일_배.(신체_배) = -0.2
선박_배.(과일_배) = -0.2
선박_배.(신체_배) = -0.2
신체_배.(과일_배) = -0.2
신체_배.(선박_배) = -0.2
scan_tokens 아삭하고 배
propagate 1
echo [결과] 가중치 -0.2 적용 시 발화된 노드:
print_fired
echo -> 🏆 (성공! 최적 가중치 -0.2 확정)
echo --------------------------------------------------------------
echo ▶ [Step 6] 확정된 가중치로 나머지 네트워크 동기화
시각_눈.(날씨_눈) = -0.2
날씨_눈.(시각_눈) = -0.2
견과_밤.(시간_밤) = -0.2
시간_밤.(견과_밤) = -0.2
sync
ret
@ProgramEnd
echo ==============================================================
echo [System] 벤치마크 시뮬레이션 종료 및 최적 가중치 디스크 저장 완료.
echo ==============================================================
추신 : 본 프로젝트는 개인적으로 오랫동안 구상해온 내용을 Gemini의 도움을 받아 코딩 작업을 진행중이며, 현재 GPL3 라이센스로 오픈소스로 공개중입니다. 목표는 오프라인 기반의 개인용 LLM 시스템으로 GPU 없이 넉넉한 SSD만 있다면 실행 가능한 시스템을 목표로 개발중이며, 위에 설명된 모든 내용은 현재 코드로 구현 되어 있으나, 아직 충분한 디버그 작업이 이루어지지 않았으며, 시스템 전체적으로는 미완성 상태로 작업 중이며, 만약 제 프로젝트에 힘을 보태실 분이 계시다면 언제나 환영 하겠습니다.
전체적으로 아직 많이 불안정한 상태로 계속 작업 중이며, 실제 추론 후 문장으로 출력하는 부분은 개념만 잡혀 있는 상태로 나머지 부분의 기능이 충분히 검증 되면 추가 할 계획입니다. (그럼에도 현재 vShell을 사용하여 부분적인 학습과 추론은 가능한 상태입니다)
현재 목표는 사용자의 텍스트를 받아 추론후 ‘옹알이’ 상태로 연관 셀들이 활성화 되고 그 내용이 출력되면 제대로 된 문장으로 조합하여 출력하도록 할 계획입니다.
본 시스템은 리눅스 기반의 코맨드라인 환경에서 동작하며, 윈도우 버전으로의 포팅 계획은 없습니다. (하지만, 누군가 소스 코드를 사용하여 윈도우 기반으로 포팅 하시겠다면 막지는 않겠습니다)
소스코드의 공개에 대하여 :
소스코드는 현재 Github (https://github.com/Hyukjae-yu/Dynamic-Cell-Based-LLM-System)에 공개중이나 최신 버전으로의 업데이트는 아직 이루어지지 않은 상태입니다.
프로젝트가 어느정도 검증되고 나면 본격적으로 코드를 정리하고 다시 업로드 하겠습니다.
아울러 개인 블로그에도 소식을 업데이트 중입니다. (네이버 : yoohj3456)
