[{"content":"최근에 아들이 태어났다. 이 아이는 어떤 재능을 갖고 있을까. 그 재능은 이 아이의 인생에서 어떤 역할을 하게 될까. 그런데 이 질문에는 한 겹이 더 있다. 이 아이가 어른이 될 무렵이면, 인지 노동의 대부분을 AI가 대신하는 세상이 와 있을 것이다. 그런 세상에서 재능이란 무엇이고, 노력은 무엇을 뜻하게 될까. 그런 생각을 하다 보니, 오랫동안 품어온 고민을 다시 꺼내 정리하게 되었다. 재능과 노력의 관계에 대해, 그 사이에 놓인 잔인한 구조에 대해, 그리고 특이점 이후에 그 구조가 어떻게 변할지에 대해.\n노력의 가격 노력에는 시간이 든다. 그런데 재능이 있으면 같은 목표에 더 빨리 도달한다. 적게 들이고도 결과를 얻는 경험이 반복되면, 마음속에 기준선이 하나 생긴다. \u0026ldquo;이 정도면 충분히 노력했다.\u0026rdquo;\n재능이라는 축복이 \u0026ldquo;이 정도면 됐다\u0026quot;는 저주로 변하는 순간이다.\n심리학에서는 이것을 고정 마인드셋의 함정이라 부른다. 재능에 기대온 사람일수록 애쓰는 모습 자체를 \u0026ldquo;재능이 부족하다는 증거\u0026quot;로 받아들인다. 그래서 결과가 바로 나오지 않으면 길을 이탈한다. 재능이 클수록 이 함정에 빠질 확률도 커진다.\n왜 재능 있는 사람은 자기가 적게 투자했다는 사실을 모를까. 비교 대상이 없기 때문이다. 평범한 사람이 같은 목표를 위해 얼마나 오래 버텨야 하는지 지켜볼 기회가 없었던 것이다. 자신의 \u0026ldquo;두 달\u0026quot;이 남들의 \u0026ldquo;몇 년\u0026quot;에 해당한다는 것을 모른 채, 그 두 달을 온전한 노력으로 기억한다.\n기회주의자의 탄생 이 착각이 쌓이면 이상한 경험 데이터가 만들어진다. \u0026ldquo;나는 노력했지만 보상은 없었다.\u0026rdquo;\n행동심리학의 오래된 법칙이 있다. 보상이 없으면 행동은 사라진다. 재능 있는 사람은 실제로는 충분히 투자하지 않았는데도 \u0026ldquo;투자했는데 실패했다\u0026quot;는 기억을 쌓는다. 그 기억이 임계치를 넘으면, 노력이라는 행위 자체가 위험한 투자로 분류된다. 실패를 배운 것이 아니라 \u0026ldquo;노력은 무의미하다\u0026quot;는 믿음을 배운 것이다. 학습된 무력감의 변종이다.\n그 결과 이들은 단기 보상만 좇는 기회주의자가 된다. 기회주의자는 파도를 기다린다. 운 좋게 파도를 잡으면 그것을 자기 전략의 결과라고 착각한다. 하지만 단기 성과에 취한 전략은 결국 큰 변동성 앞에서 무너진다.\n위대함의 조건 물론 모든 재능 있는 사람이 기회주의자가 되는 것은 아니다. 갈림길은 하나다. 오래 노력한 것이 보상으로 돌아오는 경험을 해봤는가.\n수학에 재능 있는 아이가 있다고 하자. 학교 시험은 별다른 공부 없이 통과한다. 여기까지는 짧은 보상 주기의 세계다. 그런데 수학 올림피아드에 도전하면서 처음으로 몇 달간 풀리지 않는 문제를 만난다. 여기서 포기하면 기회주의자의 길로 들어선다. 하지만 그 몇 달을 버텨 문제를 풀어내면, 다른 믿음이 생긴다. \u0026ldquo;오래 버티면 결국 된다.\u0026rdquo;\n이 믿음은 눈덩이처럼 굴러간다. 한 번의 성공이 다음 도전의 자신감이 되고, 그 자신감이 더 긴 호흡의 투자를 가능하게 하고, 그 투자가 다시 보상으로 돌아온다. 마태 효과다. 이 선순환 안에 있는 사람은 성공을 운에 맡기지 않는다. 지지 않는 구조를 직접 설계한다.\n가장 잔인한 진실 그런데 문제가 있다. 그 \u0026ldquo;첫 번째 성공 경험\u0026quot;을 얻는 것부터가 운이다.\n그 아이는 왜 몇 달을 버틸 수 있었을까. 옆에서 격려해주는 부모가 있었을지 모른다. 함께 고민하는 친구가 있었을지 모른다. 아니면 그저 그 시기에 다른 선택지가 없었을 수도 있다. 어느 쪽이든 본인의 의지만으로는 설명되지 않는 조건들이다.\n성실함, 노력하려는 의지조차 부모의 양육 방식과 유전적 기질과 사회적 환경이라는 운으로 결정된다. 성공한 사람들이 \u0026ldquo;내 노력으로 여기까지 왔다\u0026quot;고 말할 때, 그 노력을 가능하게 한 조건이 애초에 선택의 영역이 아니었다는 사실은 편리하게 생략된다.\n결국 \u0026ldquo;노력할 수 있는 힘\u0026rdquo; 자체가 일종의 재능이다. 그리고 이 재능도 다른 재능처럼 불균등하게 분배된다. 개천에서 용이 나기 어려운 이유는 돈이 없어서만이 아니다. 오래 버티면 보상이 돌아온다는 확신을 심어줄 환경 자체가 없기 때문이다. 실패만 배운 환경에서 노력은 위험한 도박처럼 느껴질 수밖에 없다.\n근성이라는 착시 여기까지 나는 버티는 힘 — 근성 — 을 이야기의 주인공으로 놓았다. 그런데 한 걸음 더 들어가 보자. 그 근성은 대체 어디서 오는가.\n오래 버티는 사람들을 가까이서 보면 이상한 점이 있다. 정작 본인은 \u0026ldquo;버텼다\u0026quot;고 생각하지 않는 경우가 많다. 몇 달간 안 풀리는 문제를 붙들고 있던 그 아이를 다시 보자. 그 아이는 정말 이를 악물고 견뎠을까. 어쩌면 그 문제가 그냥 좋았던 것은 아닐까. 궁금해서 놓지 못했던 것은 아닐까. 밖에서 근성으로 보이는 것이, 안에서는 즐거움이었을 수 있다는 얘기다. 논어의 오래된 문장이 정확히 이 지점을 가리킨다. 아는 자는 좋아하는 자만 못하고, 좋아하는 자는 즐기는 자만 못하다(知之者不如好之者 好之者不如樂之者).\n즐거움은 이 글이 내내 문제 삼아온 보상 주기를 우회한다. 근성이 필요한 이유는 보상 없는 구간이 있기 때문이다. 그런데 과정 자체가 보상인 사람에게는 그 구간이 아예 없다. 남들이 사막이라 부르는 길을 그는 산책한다. 취향에 맞는 영역을 찾은 사람에게 노력은 지불이 아니라 소비다.\n그렇다면 근성을 기를 게 아니라 취향을 찾으면 되는 걸까. 그렇게 간단하지 않다. 즐거움에는 치명적인 약점이 있다. 오래가지 않는다는 것이다. 어떤 길이든 재미가 증발하는 구간이 반드시 온다. 실력이 늘지 않는 정체기, 반복 작업만 남는 마무리 단계. 즐거움만으로 달리던 사람은 여기서 멈추고, 다음 재미를 찾아 떠난다. 취향을 좇아 영원히 떠도는 딜레탕트. 기회주의자의 쾌락 버전이다.\n결핍이라는 엔진 그래서 한 층 더 내려가야 한다. 즐거움이 당기는 힘이라면, 그 아래에는 미는 힘이 있다. 결핍이다.\n인정받지 못한 기억. 증명해야 한다는 압박. 채워지지 않은 무언가. 이런 결핍은 즐거움처럼 증발하지 않는다. 앞서 보상이 없으면 행동이 사라진다고 했지만, 결핍이 미는 행동은 이 법칙을 비껴간다. 보상이 밖에서 오는 것이 아니라 안에서 오기 때문이다. 한 걸음 나아갈 때마다 마음의 빚이 조금씩 갚아지는 느낌 — 그것이 보상이라서, 세상이 알아주지 않아도 연료가 마르지 않는다. 무명 시절 십 년을 버티는 창작자들이 대체로 낙관이 아니라 \u0026ldquo;이대로는 끝날 수 없다\u0026quot;는 마음으로 버티는 이유다. 위대한 작업의 상당수가 상처에서 출발한 것은 우연이 아니다.\n앞서 \u0026ldquo;노력할 수 있는 힘 자체가 운으로 분배되는 재능\u0026quot;이라고 썼다. 이제 그 운의 정체를 조금 더 구체적으로 말할 수 있다. 어떤 환경이 심어준 취향, 그리고 어떤 환경이 남긴 결핍. 근성은 하늘에서 떨어진 능력이 아니라, 이 두 엔진이 밖으로 드러난 증상에 가깝다. 우리가 \u0026ldquo;그릿\u0026quot;이라고 측정하는 것은 원인이 아니라 결과일지 모른다.\n물론 결핍도 만능이 아니다. 결핍은 최강의 연료지만 위험한 조향 장치다. 풀 가치가 있는 문제 대신 상처를 달래줄 것 같은 문제를 고르게 만든다. 목표에 도달해도 채워지지 않아 골대를 계속 옮기게 한다. 그 끝은 종종 번아웃이다.\n그래서 위계를 이렇게 정리하고 싶다. 결핍이 영역을 고르고, 취향이 하루하루의 루프를 굴리고, 근성은 그 둘이 침묵하는 구간을 메우는 보조 장치다. 즐거움 없는 결핍은 사람을 태워버리고, 결핍 없는 즐거움은 표류하고, 둘 다 없는 근성은 오래가지 못한다.\n특이점 이후 — 규칙이 바뀐다 이제 서두에 미뤄둔 질문을 꺼낼 차례다. 아들이 살아갈 세상의 이야기다.\n여기까지의 이야기는 하나의 전제 위에 서 있다. 재능이란 인지 능력이고, 노력이란 그 능력을 갈고닦는 데 시간을 쓰는 것이라는 전제. 그런데 AI가 특이점을 넘으면 이 전제부터 무너진다.\n계산 빠른 아이가 \u0026ldquo;수학 천재\u0026quot;라 불리던 시절이 있었다. 계산기가 나온 뒤로 암산은 더 이상 재능이 아니다. AI는 이 일을 인지 능력 전반에 반복한다. 코딩, 글쓰기, 분석, 디자인. 수년의 숙련이 필요했던 모든 영역에서 AI가 평균 이상의 결과물을 즉시 만들어낸다. 인지적 재능이 상품이 되는 것이다.\n그러면 무엇이 남는가.\n두 사람이 같은 AI 도구를 쓸 수 있다고 하자. 한 사람은 \u0026ldquo;이걸로 뭘 만들지?\u0026ldquo;라는 질문의 답을 찾아 불확실한 방향으로 6개월을 밀고 나간다. 다른 사람은 이것저것 해보다가 일주일 만에 \u0026ldquo;별로네\u0026rdquo; 하고 놓는다. 두 사람의 인지 능력은 같다. 차이를 만든 것은 코딩 실력이 아니다. 앞에서 본 그 두 엔진이다.\nAI 시대의 재능은 세 가지로 다시 정의된다.\n질문하는 재능. 답은 AI가 낸다. 어떤 문제를 풀어야 하는지, 무엇이 물어볼 가치가 있는지 정하는 일은 인간에게 남는다.\n편집하는 재능. AI가 쏟아내는 결과물 중 무엇이 아름답고 가치 있는지 골라내는 심미안. 생성은 기계가 하지만 선별은 인간이 한다.\n거절하는 재능. AI가 내미는 더 빠른 길의 유혹을 뿌리치고 자기 방향을 고집하는 힘.\n셋의 공통분모는 하나다. 지루함과 불확실성을 견디는 능력. 그리고 방금 봤듯이, 이 능력의 실체는 이 악물기가 아니라 취향과 결핍이다. 과거에 지능이 계급을 결정했다면, AI 시대에는 이것이 새로운 계급 자본이 된다. 인지 노동은 AI가 대신해주지만, 목적을 잃지 않고 기다리는 일은 인간의 몫으로 남기 때문이다.\n노력의 모양도 바뀐다. 과거의 노력은 정해진 기술을 반복해서 숙련도를 올리는 것이었다. 피아노를 매일 네 시간 치는 것. 코드를 수천 줄 쓰며 감을 익히는 것. 길이 정해져 있으니 \u0026ldquo;이만큼 하면 이만큼 는다\u0026quot;는 계산이 섰다. AI 시대의 노력은 다르다. 어떤 문제가 풀 가치가 있는지 탐색하고, 시도하고, 실패하고, 방향을 고치는 과정이다. 길 자체가 불확실하니 보상 주기는 더 길고 더 불규칙해진다.\n여기서 잔인한 역설이 생긴다. AI가 실행 비용을 0에 가깝게 낮추면 \u0026ldquo;시도\u0026quot;의 문턱이 사라진다. 누구나 앱을 만들고 글을 쓰고 사업을 시작할 수 있다. 그런데 진입이 쉬워지면 보상에 대한 기대도 빨라진다. \u0026ldquo;AI로 하루 만에 만들었는데 왜 결과가 안 나오지?\u0026rdquo; 예전에는 재능 있는 소수만 걸리던 짧은 보상 주기 중독에, 이제 모두가 걸린다. 두 달이 아니라 이틀 만에 \u0026ldquo;노력했다\u0026quot;고 느끼는 시대가 오는 것이다.\n결국 AI는 재능의 역설을 없애는 게 아니라 민주화한다. 누구나 재능 있는 사람의 함정에 빠질 수 있는 세상. 기회주의자는 파도를 기다리지만 거목은 뿌리를 내린다. AI 시대의 파도는 너무 잦아서, 뿌리 없는 이들은 매일 표류하게 될 것이다.\n끈기의 양극화가 시작된다. 그리고 그 양극화에서 살아남는 쪽은 이를 악문 사람이 아니라, 견딜 필요가 없는 영역을 찾은 사람, 놓을 수 없는 이유를 가진 사람일 것이다.\n결국 남는 질문 그렇다면 우리는 무엇을 할 수 있는가.\n노력에 대한 믿음이 운으로 결정된다면, 그 운을 설계할 수 있는 환경을 만드는 것이 사회의 역할일 것이다. 방향은 둘이다. 하나는 취향이 걸릴 때까지 다양한 영역에 노출될 기회. 다른 하나는 그 안에서 \u0026ldquo;해냈다\u0026quot;는 경험을 반복할 수 있는, 보상 주기가 견딜 만하게 설계된 성장의 사다리. 개천에서 용이 나기 어려운 진짜 이유는 이 둘이 모두 없기 때문이다. 그리고 AI 시대에는 그 사다리의 모양도 바뀌어야 한다. 숙련의 사다리가 아니라, 탐색과 방향 설정의 사다리로.\n아들이 자라 어떤 세상을 만나게 될지 모른다. 처음에 나는 아이의 시계에 맞는 작은 성공을 설계해주는 것이 아버지의 역할이라고 생각했다. 감당할 수 있는 크기의 도전과 그에 맞는 작은 보상들. 지금은 그 앞에 순서가 하나 더 있다고 생각한다. 보상을 설계하기 전에, 아이의 시간이 다르게 흐르는 영역을 함께 찾는 일이다. 몰입해서 시계를 잊는 영역. 남들이 사막이라 부르는 길을 산책할 수 있는 영역. 결핍은 부모가 설계할 수 없고, 해서도 안 된다. 하지만 취향이 걸릴 확률은 노출의 함수다. 그리고 취향이 걸린 영역 안에서라면, 성공 경험의 사다리는 훨씬 적은 비용으로 작동한다.\n사실 나는 그 증거이기도 하다. 1990년, 단칸방 살림에도 아버지는 다섯 살짜리 아들에게 컴퓨터를 사주셨다. 아버지 본인은 컴퓨터를 잘 다루지 못하셨다. 그런데 그 노출에 내 취향이 걸렸고, 삼십 년이 넘게 지난 지금도 나는 그 영역 안에서 살고 있다. 내 시간이 다르게 흐르는 영역은 내가 찾아낸 것이 아니다. 아버지가 놓아준 자리에서 발견된 것이다. 이 이야기는 아버지의 기술 연대기에 따로 적어두었다.\n물려줄 수 있는 것이 있다면 재능도 근성도 아니다. 자기 시간이 다르게 흐르는 영역을 찾아본 경험, 그리고 그 안에 오래 머물러본 경험이다. 그 경험은 누군가가 함께 찾아줄 수 있다. 내가 받은 것처럼.\n참고문헌 캐럴 드웩, \u0026ldquo;마인드셋\u0026rdquo; (2006) 앤절라 더크워스, \u0026ldquo;그릿\u0026rdquo; (2016) 나심 니콜라스 탈레브, \u0026ldquo;행운에 속지 마라\u0026rdquo; (2001) 마이클 샌델, \u0026ldquo;공정하다는 착각\u0026rdquo; (2020) 미하이 칙센트미하이, \u0026ldquo;몰입 Flow\u0026rdquo; (1990) 알프레드 아들러, \u0026ldquo;인간 이해\u0026rdquo; (1927) ","permalink":"https://3rdlayer.uk/ko/posts/paradox-of-talent/","summary":"재능은 축복인가, 함정인가. 짧은 보상 주기에 길들여진 재능이 어떻게 장기적 노력을 방해하는지 분석하고, 근성이라 불리는 것의 밑바닥에 놓인 두 개의 엔진 — 취향과 결핍 — 을 들여다본다.","title":"재능이라는 저주, 기질이라는 축복"},{"content":"학부생 시절, \u0026lsquo;시스템 이론\u0026rsquo;이라는 말을 우연히 봤다.\n논리적 완결성을 찾아 헤매는 합리주의자였던 나는 당연히 설계에 관한 것이려니 했다. \u0026lsquo;시스템\u0026rsquo;이라는 단어가 주는 인상이 그랬다. 큰 프로그램을 어떻게 짜임새 있게 쌓아 올리는가, 그런 이야기일 거라고. 게다가 앞에 \u0026lsquo;일반\u0026rsquo;까지 붙어 있었다. 특정 언어나 도메인을 넘어서는 궁극의 설계 원리 같은 것 — 읽고 나면 어떤 내공이 손에 잡힐 것만 같았다.\n하필 그 무렵 나는 스콧 마이어스의 『More Effective C++』를 탐독하고 있었다. 주화입마에 빠지는 마서. 다 읽고 나면 설계의 지옥에 빠져 정작 작업은 한 발도 못 나가게 되는, 그런 책. 포인터와 소멸자와 예외 안전성의 온갖 미세한 함정을 알아버린 탓에 한 줄을 쓰려 해도 지뢰밭을 걷는 기분이던 시기였으니, \u0026lsquo;일반 시스템 이론\u0026rsquo;이라는 키워드를 그냥 지나칠 수가 없었다.\n그런데 이걸 이해할 만한 책을 구하는 게 생각보다 어려웠다. 처음 잡히는 것들은 죄다 추상적이고 딱딱해서 도무지 발 들일 틈이 없었다. 나는 학교 도서관 서가를 훑고, 신촌 책방들을 며칠에 걸쳐 돌아다녔다. 초심자가 읽을 만한 한 권을 찾겠다고.\n그렇게 겨우 손에 넣은 책을 열자, 나온 건 생물이었다.\n세포와 유기체와 신진대사. 설계 패턴 대신 열린 시스템, 아키텍처 대신 흐름평형. 나는 놀랐다.\n생명은 물질이 아니라 조직이다 일반시스템이론을 만든 사람은 루트비히 폰 베르탈란피, 오스트리아의 생물학자다. 그의 출발점은 당시 과학의 기본기였던 환원주의에 대한 반발이었다. 환원주의는 생명을 이해하려면 잘게 쪼개 부품을 들여다보면 된다고 본다.\n그는 아니라고 했다. 생명을 만드는 건 특별한 물질이 아니라 부품들이 짜인 방식, 즉 조직이라는 것이다. 생기(生氣) 같은 걸 찾지 마라. 살아있음은 부분이 아니라 부분들의 관계 속에 있다.\n핵심 개념 몇 개만 눈높이로 풀면 이렇다.\n첫째, 생명체는 열린 시스템이다. 물질과 에너지가 끊임없이 통과한다. 우리 몸을 이루는 원자는 세월이 지나면 대부분 교체된다. 그런데도 \u0026lsquo;나\u0026rsquo;는 유지된다. 실체는 흘러가는데 형태는 남는 것 — 베르탈란피는 이를 흐름평형이라 불렀다. 흔히 동적평형이라고도 한다. 촛불이나 강물의 소용돌이를 떠올리면 된다. 모양은 그대로인데, 그 모양을 이루는 재료는 매 순간 바뀐다.\n둘째, 등종국성이다. 등결과성이라고도 옮긴다. 열린 시스템은 서로 다른 출발점에서, 서로 다른 경로로도 같은 최종 상태에 도달한다. 닫힌 물리계는 초기조건이 결과를 못박지만, 살아있는 시스템은 그렇지 않다. 발생 중인 배아를 좀 흔들어놔도 결국 같은 성체가 되는 것처럼.\n셋째, 계층성이다. 살아있는 것은 층으로 쌓인다. 세포가 모여 조직이 되고, 조직이 기관이, 기관이 개체가, 개체가 생태계가 된다. 각 층은 아래층으로 이루어져 있으면서, 아래층엔 없던 성질을 새로 갖는다.\n넷째, 창발이다. 방금 그 \u0026lsquo;새로 갖는 성질\u0026rsquo;이 창발이다. 전체는 부분의 합 이상이고, \u0026lsquo;살아있음\u0026rsquo;은 바로 그 조직된 전체에 깃든다.\n그리고 놀라운 건, 같은 원리가 이 층들 어디에서나 되풀이된다는 점이다. 세포든 개체든 생태계든, 심지어 사회든. 그래서 \u0026lsquo;일반\u0026rsquo;이다. 특정 생물이 아니라 살아있는 시스템 일반에 관한 이론이라는 뜻이었다.\n설계 내공은 못 찾았지만 그러니 시스템 이론은 소프트웨어 아키텍처 이야기가 아니었다. 내 착각이었다.\n하지만 그 밑바닥 주장 하나는, 돌이켜보면 논리적 완결성에 목마른 사람이라면 오히려 귀를 쫑긋했어야 할 것이었다. 생명이 물질이 아니라 조직이라면, 다시 말해 어떤 특정한 재료가 아니라 짜임새의 문제라면, 원리적으로 그 짜임새를 담을 수 있는 무엇으로든 생명을 만들 수 있다는 뜻이 된다.\n탄소가 아니어도. 심지어, 격자 위의 숫자로도.\n당시엔 이 함의를 몰랐다. 그걸 눈앞에서 보여주는 물건은 한참 뒤에야 만났다.\n반세기 뒤, 레니아 출발은 콘웨이의 생명게임(1970)이다. 격자 위 칸이 켜지거나 꺼지고, 몇 개의 단순한 규칙만으로 글라이더 같은 움직이는 패턴이 생겨난다. 딱 봐도 계단처럼 각진, 디지털 티가 나는 생명이다.\n레니아는 여기서 한 걸음 더 간다. 버트 챈이 2018년 무렵 내놓은 것으로, 생명게임의 모든 걸 연속으로 바꾼다. 칸의 값이 0 아니면 1이 아니라 그 사이 어디든 될 수 있고, 공간도 시간도 규칙도 매끄럽다.\n결과는 놀랍다. 각진 글라이더 대신, 유기적으로 생긴 \u0026lsquo;생명체\u0026rsquo;가 나온다. 가장 유명한 오르비움은 현미경 속 미생물이나 해파리처럼, 화면 위를 부드럽게 미끄러져 간다.\n위는 레니아를 만든 Bert Chan의 공식 WebGL 데모다(출처: Lenia). 여러 종의 생명체를 불러와 실시간으로 돌려볼 수 있다. 규칙은 단 하나 — 매 칸이 이웃을 보고 값을 조금 올리거나 내릴 뿐인데, 그 위로 생명체가 떠올라 스스로 형태를 유지하며 미끄러진다. 툭 건드려도 웬만하면 원래 모습으로 되돌아온다. 앞서 말한 등종국성을 눈으로 확인하는 셈이다.\n이 생명체들은 움직이면서도 제 형태를 유지하고, 툭 건드리면 흔들렸다가 원래 모습으로 돌아오며, 종류도 하나의 동물원을 이룰 만큼 다양하다. 누가 칸 하나하나를 설계한 게 아니다. 규칙에서 저절로 생겨나, 스스로를 지탱하는 패턴으로 존재할 뿐이다.\n베르탈란피의 정의를 컴퓨터로 레니아 생명체가 기어다니는 걸 보고 있으면, 나는 베르탈란피의 정의가 그대로 돌아가는 걸 보고 있는 셈이다.\n흐름평형. 생명체는 매 프레임 셀 값이 통째로 갱신되는데도 형태를 유지한다. 재료(숫자)는 흘러 지나가고 패턴만 남는다. 계산으로 만든 소용돌이다.\n등종국성. 교란을 주면 원래 모습으로 자가복구한다. 다른 초기 얼룩에서 시작해도 같은 생명체로 수렴한다. 같은 종착점, 여러 경로.\n계층성. 칸 하나는 죽어 있다. 칸들이 짜이면 생명체가 되고, 생명체들끼리도 부딪히고 밀어내며 관계를 맺는다. 하나의 평평한 규칙에서 층이 솟아오른다.\n창발. \u0026lsquo;생명체\u0026rsquo;는 어느 한 곳에도 없다. 살아있는 셀 같은 건 없다. 조직된 패턴 자체가 그 동물이다.\n그리고 결정적으로, 여기엔 화학도, 탄소도, 생물학이 조금도 없다. 오직 조직뿐이다. 물질 기질을 남김없이 걷어냈는데도 여전히 기어다니고, 스스로를 꿰매고, 제 몸을 붙들고 있다면 — 베르탈란피가 옳았던 것이다. 살아있음은 재료가 아니라 짜임새에 있다. 레니아는 오직 패턴만 남겼기에, 그의 주장을 가장 극단적으로 증명한다.\n기계를 거부한 이론의 가장 아름다운 증거 여기에 반전이 있다.\n베르탈란피가 일반시스템이론을 세운 건, 부분적으로는 기계론에 대한 저항이었다. 생명을 기계로 환원하는 것에 대한 거부. 말하자면 휴머니즘적 몸짓이었다 — 생명은 기계 이상이라는.\n그런데 그 이론의 가장 아름다운 실증이 하필 기계다. 컴퓨터 위에서 도는 결정론적 오토마타.\n그가 레니아를 봤다면 어땠을까. 자기 조직 개념의 승리라며 반겼을까, 아니면 \u0026ldquo;그건 살아있음을 흉내 낸 또 하나의 메커니즘일 뿐\u0026quot;이라며 손을 내저었을까. 창시자가 자기 후계를 알아보지 못하는 건, 생각의 역사에서 드문 일이 아니다.\n크리스 랭턴은 인공생명을 \u0026ldquo;있을 수 있는 생명\u0026quot;이라 불렀다. 우리가 아는 생명만이 아니라, 있을 수 있는 모든 형태의 생명. 이 분야 전체가 사실 베르탈란피의 내기를 물려받았다 — 생명은 매질에 얽매이지 않는 조직이라는 내기. 레니아는 그 내기가 화면 위에서 배당을 지급하는 장면이다.\n인공생명, 인공지능과 만나다 요즘 이 흐름은 인공지능과 만난다.\n한쪽에서는 신경망에게 오토마타의 규칙을 배우게 한다. 사람이 규칙을 손으로 정하는 대신, 신경망이 스스로 자라고 상처를 복구하는 규칙을 익히도록. 도마뱀 꼬리처럼, 잘려나가도 다시 제 모습으로 자라는 패턴이 학습으로 만들어진다.\n다른 쪽에서는 인공지능이 레니아 같은 우주를 대신 탐색한다. 오르비움 같은 생명체는 원래 사람이 손으로 찾아낸 것인데, 이제 거대 AI 모델이 \u0026lsquo;살아있어 보이는\u0026rsquo; 패턴을 알아보고 새 생명체를 자동으로 발굴한다. 오르비움의 후예들을 기계가 찾아 나서는 셈이다.\n그리고 더 깊은 물음이 있다. 지능을 설계하는 대신, 생명처럼 자라나게 할 수는 없을까. 끝없이 새로움을 낳는 열린 진화를 지능의 조건으로 보는 흐름이다. 완성된 설계도가 아니라, 계속 자기를 넘어서는 과정으로서의 지능.\n그리고 개인적으로는, 한 바퀴 돌아 제자리로 온 이야기이기도 하다. 설계 내공을 찾다 생물을 만나 실망했던 그 합리주의자에게, 반세기의 아이디어가 흐른 끝에 그 생물이 다시 계산으로 돌아왔다. 젊은 날의 착각 — \u0026ldquo;시스템 이론이라면 응당 설계에 관한 것이겠지\u0026rdquo; — 은 틀린 게 아니었다. 그저 일렀을 뿐이다.\n생명은 결국 설계의 문제였다. 다만 내가 C++ 책에서 찾던 그 설계는 아니었다.\n출처 · 더 보기 레니아와 오르비움: Bert Wang-Chak Chan, \u0026ldquo;Lenia — Biology of Artificial Life\u0026rdquo; — 프로젝트 페이지, 논문 arXiv:1812.05433, 확장판 arXiv:2005.03742. 위에 임베드한 데모는 Chan의 공식 WebGL 구현이다 (소스·생명체 데이터). 브라우저에서 직접 돌려보기: Lenia WebGL 데모 · 입문용 From Conway to Lenia 튜토리얼. 루트비히 폰 베르탈란피, 『일반시스템이론』(1968). 자라고 스스로 복구하는 신경 세포자동자: Mordvintsev et al., \u0026ldquo;Growing Neural Cellular Automata\u0026rdquo; (Distill, 2020). AI로 인공생명을 탐색: Kumar et al. (Sakana AI), \u0026ldquo;Automating the Search for Artificial Life Using Foundation Models\u0026rdquo; (arXiv:2412.17799). 변종 Particle Lenia (Google). ","permalink":"https://3rdlayer.uk/ko/posts/bertalanffy-lenia/","summary":"학부생 때 \u0026lsquo;일반시스템이론\u0026rsquo;을 궁극의 설계 원리인 줄 알고 폈다가 생물학을 만났다. 반세기 전 베르탈란피는 \u0026lsquo;생명은 물질이 아니라 조직\u0026rsquo;이라 했고, 레니아는 그것을 컴퓨터로 증명한다.","title":"인공생명과 일반시스템이론"},{"content":"구글 드라이브 한구석에는 예전에 받아 둔 내 전장유전체(WGS, Whole-Genome Sequencing) 데이터가 잠자고 있다. 이 데이터를 공개된 곳에 올려 볼까 싶었는데, 아직 망설이고 있다. 그 망설임의 이유가 바로 이 이야기다.\n연구용으로 공개되는 유전체 데이터에는 이름이 붙어 있지 않다. ID는 NA12878 같은 익명 코드이고, 개인정보는 지워졌다고 여겨진다. 그런데 2013년 Science에 실린 Gymrek et al.의 논문은 그 익명성이 생각보다 얇다는 것을 보여줬다. 유전체 서열과, 그 옆에 무심코 붙어 있던 몇 가지 메타데이터만으로 참가자의 실제 성씨와 신원을 되찾을 수 있었다.\n열쇠: 부계로 함께 흐르는 두 가지 핵심 아이디어는 놀랄 만큼 단순하다. 두 가지가 아버지에서 아들로 함께 전달된다는 점이다.\nY 염색체 — 남성만 가지며, 부계를 따라 거의 그대로 대물림된다. 성씨(姓) — 많은 문화권에서 역시 아버지 → 아들로 이어진다. 그래서 Y 염색체의 짧은 반복서열 마커인 Y-STR(Y-chromosome Short Tandem Repeat) 패턴과 성씨 사이에는 통계적 상관이 생긴다. 같은 성씨를 가진 남성들은 (부계 조상을 공유하는 만큼) Y-STR haplotype도 비슷할 확률이 높다.\n📝 Y-STR haplotype이란? STR은 GATA GATA GATA …처럼 짧은 DNA 단위가 여러 번 반복되는 구간이고, 사람마다 반복 횟수가 다르다. Y 염색체 위 여러 STR 위치에서 이 반복 횟수를 하나씩 세어 늘어놓은 숫자 조합(예: DYS391=10, DYS389=13, …)이 바로 Y-STR haplotype이다. 지문처럼 개인·가계를 구분하는 부계 식별자로, 검사 마커 수가 많을수록 해상도가 높아진다.\n여기에 결정적 재료가 하나 더 있었다. 취미로 족보를 파는 사람들이 자기 Y-STR 프로파일과 성씨를 자발적으로 올려 둔 유전자 계보(genetic genealogy) 데이터베이스(Ysearch, SMGF 등)다. 즉, \u0026ldquo;이 Y-STR 패턴 → 이 성씨\u0026quot;를 이어 주는 공개 조회 테이블이 이미 인터넷에 존재했다.\n📝 Ysearch와 SMGF 둘 다 논문 당시 실제로 공개돼 있던 Y-STR 계보 데이터베이스다.\nSMGF(Sorenson Molecular Genealogy Foundation): 1999년경 사업가 James LeVoy Sorenson과 BYU의 Scott Woodward가 시작한 비영리 프로젝트. 전 세계에서 10만 건 이상의 DNA 샘플을 가계도(pedigree)와 함께 모아 공개했다. 이후 Ancestry.com이 인수했고, 공개 DB는 2015년경 폐쇄됐다. Ysearch: 유전자 검사업체 FamilyTreeDNA가 운영하던 무료 공개 Y-STR 데이터베이스로, 이용자가 자기 프로파일과 성씨를 직접 올렸다. 2018년 프라이버시 우려 속에 서비스가 종료됐다. 흥미로운 반전은, 이 논문이 드러낸 위험 때문에 두 DB 모두 이후 문을 닫았다는 점이다.\n추적 방법 논문이 보여준 재식별 과정은 세 단계다.\nY-STR 프로파일 추출 — 공개된 남성 유전체 서열에서 Y-STR 마커 패턴을 계산한다. 성씨 조회 — 이 패턴을 유전자 계보 DB에 질의해, 가장 가까운 공통 조상까지의 시간을 추정하고 가장 그럴듯한 성씨 후보를 얻는다. 삼각측량(triangulation) — 회수한 성씨에, 데이터와 함께 공개되던 나이·거주 주(州) 같은 메타데이터를 더한다. 성씨 + 나이 + 주만 있으면 인구 기록·검색엔진으로 개인을 좁혀 특정할 수 있다. 주목할 점: 이 모든 과정이 무료로 접근 가능한 공개 인터넷 자원만으로 이루어졌다. 특별한 내부 접근 권한도, 해킹도 필요 없었다.\n결과 연구진은 이 방법으로 익명 유전체 참가자와 그 가족들을 실제로 추적해 신원을 밝혀냈다. 911명의 Y-STR을 출발점으로 삼았을 때, 미국 내 성씨 회수 **성공률은 약 12%**로 추정됐다. 유전체 하나가 뚫리면 같은 부계의 친척들까지 함께 노출된다는 점에서, 영향 범위는 개인을 넘어선다.\n그리고 정작 신원을 확정 짓는 마지막 한 조각은 유전체 서열 자체가 아니라, 그 옆에 아무렇지 않게 붙어 있던 나이와 지역 정보였다는 사실이 특히 뼈아팠다.\n여파 논문이 나온 직후 미국 NIH는 dbGaP 같은 공개 저장소에서 나이 등 준식별 메타데이터를 통제 접근(controlled access)으로 옮겼다. \u0026ldquo;익명화된 유전체는 안전하다\u0026quot;는 통념이 깨졌고, 유전체 데이터 공유의 동의(consent)와 거버넌스를 다시 설계하는 계기가 됐다. 이후 이 논문은 유전체 프라이버시 연구의 표준 참고문헌이 됐다.\n참고문헌: Gymrek, M., McGuire, A. L., Golan, D., Halperin, E., \u0026amp; Erlich, Y. (2013). Identifying Personal Genomes by Surname Inference. Science, 339(6117), 321–324. doi:10.1126/science.1229566\n","permalink":"https://3rdlayer.uk/ko/posts/genome-surname-inference/","summary":"Y 염색체와 성씨는 둘 다 부계로 유전된다. 이 단순한 사실 하나로 \u0026lsquo;익명\u0026rsquo; 유전체에서 실명을 되찾을 수 있음을 보인 2013년 Science 논문 이야기.","title":"유전체에서 얻을 수 있는 개인정보"},{"content":"들어가며 신경망은 \u0026lsquo;비선형 함수 근사기\u0026rsquo;라고 배운다. 맞는 말이다. 하지만 활성함수가 ReLU처럼 조각선형(piecewise-linear)이면, 훨씬 더 구체적이고 놀라운 사실이 성립한다.\nReLU로 이루어진 신경망은 전역적으로도 조각별 어파인(piecewise-affine) 함수다. 입력공간이 다면체(polytope) 조각들로 잘게 쪼개지고, 각 조각 안에서는 딥네트워크의 모든 비선형성이 사라져 정확히 하나의 어파인 사상 $\\mathbf{x} \\mapsto W_{\\text{eff}}\\mathbf{x} + \\mathbf{b}_{\\text{eff}}$ 로 붕괴한다.\n이 글은 그 사실을 뉴런 하나에서 출발해 층층이 쌓아 올린다. 중간중간 인터랙티브 데모로 직접 확인할 수 있다.\n1. 뉴런 하나 = 경계선 하나 ReLU 뉴런 하나부터 보자.\n$$a(\\mathbf{x}) = \\mathrm{ReLU}(\\mathbf{w}^\\top \\mathbf{x} + b) = \\max(0,\\ \\mathbf{w}^\\top \\mathbf{x} + b)$$이건 두 조각짜리 함수다.\n$\\mathbf{w}^\\top \\mathbf{x} + b \u003c 0$ → 출력 $0$ (꺼짐, 기울기 $0$) $\\mathbf{w}^\\top \\mathbf{x} + b \\ge 0$ → 입력을 그대로 통과 (켜짐, 기울기 $1$) 이 둘을 가르는 경계는 초평면 $\\mathbf{w}^\\top \\mathbf{x} + b = 0$ 하나다. 뉴런 하나 = 입력공간에 그어진 칼금 하나라고 생각하면 된다.\n여러 개를 선형결합하면 어떻게 될까? 1D 입력에 대해 $f(x) = \\sum_i v_i\\,\\mathrm{ReLU}(w_i x + b_i)$ 를 그려 보자. ReLU 하나마다 꺾이는 점(knot) 이 하나씩 생기고, 그 사이 구간은 전부 직선이다.\nRandomize ReLUs 5 그래프 아래 띠는 이 데모의 뉴런들이 모두 속한 하나의 은닉층을 펼쳐 보여준다. 각 행이 뉴런 하나이고, 그 뉴런이 켜진($w_i x + b_i \u003e 0$) 구간을 색으로 칠했다. $x$가 knot을 하나 지날 때마다 띠 하나가 토글되고(색이 knot 수직선에 맞춰져 있다), 그렇게 나뉜 직선 구간 하나하나가 곧 하나의 활성 패턴이다. 즉 구간들은 서로 다른 층이 아니라, 같은 한 층 안에서 켜진 뉴런들의 조합이 다른 것이다.\nReLU 개수를 늘리면 꺾임이 늘어나고 곡선처럼 보이지만, 확대해 보면 여전히 직선 조각들의 이음일 뿐이다. ReLU $n$개는 조각 $n+1$개를 만든다. 이게 1D에서의 그림이다. 이제 이걸 임의 차원·임의 깊이로 일반화하자.\n2. 활성 패턴과 대각 마스크 핵심 트릭은 ReLU를 곱셈 마스크로 다시 쓰는 것이다. 한 층의 순전파는\n$$\\mathbf{h}^{(l)} = \\mathrm{ReLU}\\!\\left(W^{(l)} \\mathbf{h}^{(l-1)} + \\mathbf{b}^{(l)}\\right)$$이다. 입력 $\\mathbf{x}$ 를 하나 고정하면, 이 층의 각 뉴런은 켜짐(1)/꺼짐(0)이 정해진다. 이 켜짐/꺼짐을 대각행렬 $D^{(l)}(\\mathbf{x})$ 에 담는다. 켜진 뉴런은 대각 $1$, 꺼진 뉴런은 $0$.\n$$\\mathbf{h}^{(l)} = D^{(l)}(\\mathbf{x})\\,\\big(W^{(l)} \\mathbf{h}^{(l-1)} + \\mathbf{b}^{(l)}\\big)$$이건 근사가 아니라 정확한 등식이다 — 켜진 뉴런은 $z \\mapsto z$(항등), 꺼진 뉴런은 $z \\mapsto 0$ 이니까. 다만 마스크 $D^{(l)}$ 이 $\\mathbf{x}$ 에 의존한다는 게 전부다.\n네트워크 전체의 켜짐/꺼짐 벡터(모든 층·모든 뉴런)를 활성 패턴(activation pattern) 이라 부른다. 은닉 뉴런이 총 $N$개면 패턴은 $\\{0,1\\}^N$ 의 한 점이다.\n3. 패턴을 고정하면 → 어파인으로 붕괴 이제 $\\mathbf{x}$ 를 조금씩 움직여도 모든 뉴런의 켜짐/꺼짐이 그대로 유지되는 영역을 생각하자. 그 영역 안에서는 모든 $D^{(l)}$ 이 상수행렬이 된다. 그러면 $L$개 층의 순전파는\n$$\\mathbf{y} = D^{(L)}W^{(L)} \\cdots D^{(2)}W^{(2)}\\,D^{(1)}W^{(1)}\\,\\mathbf{x} + (\\text{편향 항들})$$이고, $D$ 와 $W$ 가 전부 상수이므로 이 합성은 하나의 어파인 사상으로 뭉개진다.\n$$\\boxed{\\ \\mathbf{y} = W_{\\text{eff}}\\,\\mathbf{x} + \\mathbf{b}_{\\text{eff}}, \\qquad W_{\\text{eff}} = D^{(L)}W^{(L)} \\cdots D^{(1)}W^{(1)}\\ }$$여기서 $D^{(l)}W^{(l)}$ 은 \u0026ldquo;꺼진 뉴런에 해당하는 행을 $0$으로 지운 가중치 행렬\u0026quot;이다. 즉 그 조각 안에서 네트워크는 정확히 하나의 선형변환 + 이동이다. 딥네트워크의 온갖 비선형성이 특정 영역 안에서는 완전히 사라진다.\n말로만 보면 안 믿기니, 임의의 입력점에서 그 점이 속한 조각의 유효 어파인 사상 $(W_{\\text{eff}}, \\mathbf{b}_{\\text{eff}})$ 을 직접 뽑아 보자.\nimport numpy as np def relu_net(x, Ws, bs): \u0026#34;\u0026#34;\u0026#34;ReLU MLP 순전파 (마지막 층은 선형)\u0026#34;\u0026#34;\u0026#34; a = x for i, (W, b) in enumerate(zip(Ws, bs)): z = W @ a + b a = np.maximum(0, z) if i \u0026lt; len(Ws) - 1 else z return a def effective_affine(x, Ws, bs): \u0026#34;\u0026#34;\u0026#34;x가 속한 조각의 유효 어파인 사상 (W_eff, b_eff)를 추출\u0026#34;\u0026#34;\u0026#34; W_eff = np.eye(len(x)) b_eff = np.zeros(len(x)) a = x for i, (W, b) in enumerate(zip(Ws, bs)): z = W @ a + b if i \u0026lt; len(Ws) - 1: mask = (z \u0026gt; 0).astype(float) # 이 층의 활성 패턴 D^(l) D = np.diag(mask) a = mask * z else: D = np.eye(len(z)) # 마지막 선형층 a = z W_eff = D @ W @ W_eff # W_eff \u0026lt;- D W W_eff b_eff = D @ (W @ b_eff + b) # 편향 누적 return W_eff, b_eff # 랜덤 네트워크 하나 rng = np.random.default_rng(0) dims = [4, 16, 16, 3] Ws = [rng.normal(size=(dims[i+1], dims[i])) for i in range(len(dims)-1)] bs = [rng.normal(size=dims[i+1]) for i in range(len(dims)-1)] x = rng.normal(size=4) W_eff, b_eff = effective_affine(x, Ws, bs) # 검증 1: 그 점에서 정확히 일치 print(np.allclose(relu_net(x, Ws, bs), W_eff @ x + b_eff)) # True # 검증 2: 같은 조각 안(아주 가까운 점)에서도 일치 x2 = x + 1e-4 * rng.normal(size=4) print(np.allclose(relu_net(x2, Ws, bs), W_eff @ x2 + b_eff)) # True (같은 패턴이면) W_eff @ x + b_eff 가 실제 순전파와 정확히 같다. 그리고 같은 조각 안에 있는 다른 점에도 같은 $(W_{\\text{eff}}, \\mathbf{b}_{\\text{eff}})$ 가 그대로 통한다. 조각 경계를 넘어가면(패턴이 바뀌면) 다른 어파인 사상으로 갈아탄다.\n4. 조각의 정체 = 다면체, 전체 = 연속 조각별 어파인 각 뉴런의 켜짐/꺼짐 조건은 부등식 하나(그 뉴런의 pre-activation $\\ge 0$)다. 활성 패턴 하나를 고정한다는 건 이런 선형 부등식 $N$개를 동시에 만족시키는 것이고, 선형 부등식들의 교집합 = 볼록 다면체(convex polytope) 다.\n주의: 1층 뉴런의 경계는 곧은 초평면이지만, 2층 이후 뉴런의 pre-activation은 앞 층 ReLU들을 거쳐 나오므로 그 경계는 접힌(bent) 조각별 선형 면이다. 그래도 각 조각 내부에서는 전부 선형이라, 최종 분할 조각은 여전히 (볼록) 다면체다.\n그래서 전체 그림은 이렇다.\n입력공간 $\\mathbb{R}^d$ 가 다면체 조각들로 타일링된다. 각 조각 위에서 함수는 서로 다른 어파인 $W_{\\text{eff}}\\mathbf{x} + \\mathbf{b}_{\\text{eff}}$. 조각 경계를 넘어가도 ReLU가 연속이라 함수값이 튀지 않는다 → 연속(continuous). 이걸 통틀어 CPWL(Continuous Piecewise-Linear, 연속 조각별 어파인) 함수라 부른다. 그리고 정리 하나: ReLU MLP가 표현할 수 있는 함수 = 정확히 CPWL 함수 전체. 넓지도 좁지도 않고 딱 그 클래스다.\n아래 데모는 2D 입력공간을 실제로 타일링해 보여준다. 랜덤 초기화된 작은 ReLU 네트워크에서, 활성 패턴이 같은 픽셀을 같은 색으로 칠했다. 색 경계 하나하나가 어떤 뉴런의 on/off 경계다.\nRandomize Width 8 1 hidden layer 2 hidden layers 3 hidden layers 커서를 올려 보라. 커서가 놓인 조각(같은 활성 패턴)이 밝게 강조된다. 그 밝은 영역 전체에서 네트워크는 단 하나의 어파인 사상이다. 폭(뉴런 수) 을 늘리면 칼금이 많아져 조각이 잘게 쪼개진다. 은닉층 수를 늘려 보라. 조각 경계가 곧은 직선에서 접힌 선으로 바뀌고, 조각 개수가 폭발적으로 늘어난다. 5. 이 관점이 주는 것들 이 하나의 관점에서 딥러닝의 여러 성질이 자연스럽게 흘러나온다.\n그래디언트 = 조각별 상수 한 조각 안에서 야코비안이 $W_{\\text{eff}}$ 로 상수다. 역전파가 하는 일은 \u0026ldquo;그 입력이 속한 조각의 유효 선형사상을 그대로 돌려주는 것\u0026quot;에 불과하다. ReLU의 미분이 $0/1$ 인 것이 바로 마스크 $D^{(l)}$ 로 나타난다. 조각 경계에서는 미분이 불연속으로 점프한다(그래서 ReLU 네트워크의 손실 표면은 조각별 매끄러움을 갖는다).\n깊이의 힘 = 조각 수의 폭발 폭이 아니라 깊이를 늘리면 선형 영역의 개수가 깊이에 대해 지수적으로 늘어날 수 있다(Montúfar et al., 2014). 위 데모에서 은닉층을 1 → 2 → 3으로 올렸을 때 조각 수가 확 뛰는 게 그 축소판이다. \u0026ldquo;깊은 게 왜 강한가\u0026quot;를 표현력 관점에서 설명하는 고전적 논거다.\n접기(folding)로서의 층 각 층은 입력공간을 접는 연산으로 볼 수 있다. ReLU가 음수 영역을 $0$으로 눌러 접고, 다음 층은 이미 접힌 공간 위에 또 칼금을 긋는다. 깊어질수록 접힘이 중첩돼 복잡한 조각 구조가 생긴다. 그래서 2층 이상에서 경계가 \u0026lsquo;접힌 선\u0026rsquo;으로 보이는 것이다.\n스플라인·트로피컬 관점 Balestriero \u0026amp; Baraniuk의 max-affine spline 프레임에서는 ReLU 네트워크를 다차원 스플라인으로 본다. 또 $\\max$ 와 덧셈이 각각 트로피컬 반환(semiring)의 \u0026lsquo;덧셈\u0026rsquo;과 \u0026lsquo;곱셈\u0026rsquo;에 대응하므로, ReLU 네트워크는 트로피컬 기하(tropical geometry) 로도 정확히 기술된다(네트워크 = 두 트로피컬 다항식의 차, Zhang et al., 2018). 조각의 개수·모양을 다항식의 뉴턴 다면체로 세는 길이 열린다.\n마치며 \u0026ldquo;신경망은 비선형 함수 근사기\u0026quot;라는 문장은, ReLU에 한해서는 \u0026ldquo;신경망은 입력공간을 다면체로 쪼개 각 조각에 어파인 사상을 얹는 거대한 룩업 테이블\u0026rdquo; 로 정밀화된다. 비선형성은 오직 어느 조각에 속하는가 를 고르는 데(즉 활성 패턴을 결정하는 데)에만 있고, 일단 조각이 정해지면 나머지는 순수한 선형대수다.\n이 관점은 단순한 지적 유희가 아니다. 선형 영역의 수로 표현력을 정량화하고, 각 영역의 유효 어파인 사상으로 모델을 국소적으로 해석·검증하고(예: 검증 가능한 견고성, 정확한 야코비안 분석), 스플라인·트로피컬 기하 같은 성숙한 수학 도구를 딥러닝에 그대로 끌어오는 다리가 된다. 다음에 ReLU 네트워크를 볼 때는, 매끈한 곡면이 아니라 수많은 평평한 다면체 조각을 이어 붙인 접힌 종이를 떠올려 보자.\n참고 문헌 Montúfar, Pascanu, Cho, Bengio (2014). On the Number of Linear Regions of Deep Neural Networks. NeurIPS. Raghu, Poole, Kleinberg, Ganguli, Sohl-Dickstein (2017). On the Expressive Power of Deep Neural Networks. ICML. Balestriero, Baraniuk (2018). A Spline Theory of Deep Networks. ICML. Zhang, Naitzat, Lim (2018). Tropical Geometry of Deep Neural Networks. ICML. Hanin, Rolnick (2019). Complexity of Linear Regions in Deep Networks. ICML. ","permalink":"https://3rdlayer.uk/ko/posts/relu-piecewise-affine/","summary":"ReLU 활성함수를 쓰는 신경망은 사실 입력공간을 다면체 조각으로 나누고, 각 조각 위에서 정확히 하나의 어파인 사상으로 붕괴한다. 이 관점을 뉴런 하나부터 인터랙티브 데모까지 층층이 쌓아 설명한다.","title":"ReLU 네트워크는 거대한 조각별 어파인 함수다"},{"content":"32비트짜리 숫자가 정말 다 필요할까 지난 글에서 데이터타입을 뜯어보며 한 가지를 관찰했다. 신경망의 가중치는 대개 0 근처에 촘촘히 몰려 있고 꼬리가 길다. 그렇다면 이런 질문이 자연스럽다.\n서로 비슷한 값을 가진 가중치가 이렇게 많은데, 정말 하나하나를 32비트 실수로 따로 저장해야 할까?\n비슷한 값들을 한 덩어리로 묶어서 대표값 하나로 퉁치면 어떨까? 예를 들어 2.09, 2.12, 1.92, 1.87은 전부 \u0026ldquo;대략 2.0\u0026quot;이다. 이 넷을 그냥 2.00 하나로 대체하고, 각 자리에는 \u0026ldquo;몇 번 대표값을 쓸지\u0026rdquo; 인덱스만 적어두는 것이다.\n이게 K-Means 기반 weight quantization(가중치 양자화) 의 핵심 아이디어다. 2016년 Deep Compression 논문1이 제안했고, 정확도를 거의 잃지 않으면서 모델을 수십 배로 줄였다.\n아이디어: 클러스터링으로 가중치 공유하기 절차는 세 단계다.\n클러스터링 — 모든 가중치를 $k$개의 그룹으로 K-Means 클러스터링한다. 코드북(codebook) — 각 그룹의 중심값(centroid)을 대표값으로 저장한다. 이 대표값 목록이 코드북이다. 인덱스 — 각 가중치 자리에는 32비트 실수 대신 \u0026ldquo;몇 번 클러스터에 속하는지\u0026quot;를 가리키는 작은 정수 인덱스만 저장한다. $k=4$개 클러스터라면 인덱스는 2비트($\\log_2 4$)면 충분하다. 원래 32비트짜리 숫자들이 2비트 인덱스 + 작은 코드북으로 줄어든다.\n아래 위젯에서 직접 돌려보자. 4×4 가중치 행렬이 있고, run을 누르면 K-Means가 반복될 때마다 중심값(코드북)이 수렴하고, 각 셀이 자기가 속한 클러스터 색으로 칠해진다. bits를 바꾸면 클러스터 개수가 달라지고, 아래에 양자화 오차(MSE)와 저장 용량, 압축비가 실시간으로 갱신된다.\n기본 상태(2-bit)에서 run을 끝까지 돌리면 코드북이 대략 -1.00, 0.00, 1.50, 2.00으로 수렴한다. 이제 각 가중치는 이 네 값 중 하나로 복원(reconstruct)된다. 원본과 복원값의 차이가 곧 양자화 오차다.\nbits를 3으로 올려보자 → 클러스터가 8개로 늘어 오차가 줄지만, 인덱스가 커져 저장 용량은 늘어난다. bits를 1로 내려보자 → 대표값 2개로 뭉뚱그려져 오차가 커진다. 정밀도(오차)와 크기(저장) 사이의 트레이드오프가 손에 잡힌다.\n얼마나 줄어드나 방금 위젯의 숫자를 따라가 보자. 4×4 = 16개 가중치, 2-bit 양자화:\n원본: $16 \\times 32\\text{bit} = 512\\text{bit} = 64\\text{B}$ 압축: 인덱스 $16 \\times 2\\text{bit} = 32\\text{bit} = 4\\text{B}$ + 코드북 $4 \\times 32\\text{bit} = 128\\text{bit} = 16\\text{B}$ = $20\\text{B}$ $64 / 20 = \\textbf{3.2배}$ 작아졌다. 이 예제는 파라미터가 16개뿐이라 코드북(16B)이 상대적으로 크게 잡힌다. 하지만 실제 신경망은 파라미터 수 $M$이 수백만–수십억이라 $M \\gg 2^N$이고, 이때 코드북 비용은 무시할 만해진다. 일반화하면:\n$$\\text{원본} = 32M \\text{ bit}, \\qquad \\text{압축} = \\underbrace{N \\cdot M}_{\\text{인덱스}} + \\underbrace{32 \\cdot 2^N}_{\\text{코드북}} \\text{ bit}$$$M \\gg 2^N$일 때 코드북 항은 사라지고 압축비는 $32M / NM = \\mathbf{32/N}$ 배로 수렴한다. 즉 2비트면 약 16배, 4비트면 8배다. 아래에서 파라미터 수 $M$과 비트 수 $N$을 움직여보면 코드북이 언제 무시할 만해지는지 보인다.\n정확도는? — 코드북을 재학습한다 가중치를 대표값으로 뭉치면 당연히 오차가 생긴다. 그냥 두면 정확도가 떨어진다. Deep Compression의 영리한 점은, 양자화한 코드북 자체를 다시 학습(fine-tuning) 시킨다는 것이다.\n방법은 이렇다. 역전파로 각 가중치의 그래디언트를 구한 뒤,\n같은 클러스터에 속한 가중치들의 그래디언트를 모아서(group by index), 더한 다음(reduce), 학습률을 곱해 그 클러스터의 중심값(centroid)을 업데이트한다. 개별 가중치가 아니라 대표값 몇 개만 학습하는 셈이다. 이렇게 하면 양자화로 생긴 오차를 상당 부분 되돌릴 수 있다.\n가중치 분포로 보면 직관적이다. 양자화 전에는 연속적인 종 모양 분포였다가($\\to$ 이산적인 몇 개의 스파이크로 바뀌고), 재학습을 거치면 그 스파이크들이 데이터에 맞게 미세 조정된다. 대표값의 \u0026ldquo;위치\u0026quot;가 손실을 줄이는 쪽으로 옮겨가는 것이다.\n그 결과, 몇 비트까지 내려도 정확도가 유지되는가에 대한 답이 꽤 놀랍다. Deep Compression 실험에서 AlexNet 기준으로:\n합성곱(Conv) 층: 4비트까지 정확도 손실 없음 완전연결(FC) 층: 2비트까지 정확도 손실 없음 즉 층마다 필요한 비트 수가 다르고, 파라미터가 많은 FC 층일수록 더 공격적으로 줄일 수 있다.\n마지막 한 방울: 허프만 코딩 양자화까지 마치면 각 가중치는 몇 개의 인덱스(예: 2비트라면 0–3) 중 하나가 된다. 그런데 이 인덱스들은 골고루 나오지 않는다. 가중치가 0 근처에 몰려 있으니 0에 해당하는 인덱스는 아주 자주 나오고, 양 끝 인덱스는 드물게 나온다. 실제 신경망의 인덱스 히스토그램을 그려보면 한쪽으로 심하게 쏠려 있다.\n여기서 무손실 압축을 한 번 더 짜낼 수 있다. 허프만 코딩(Huffman coding) 은 심볼의 빈도에 따라 비트 길이를 다르게 배정한다.\n자주 나오는 값 → 짧은 코드 드물게 나오는 값 → 긴 코드 모든 인덱스에 똑같이 2비트를 쓰는 대신 빈도에 맞춰 코드 길이를 나누면, 평균 비트 수가 줄어든다. 예를 들어 분포가 한쪽으로 쏠린 경우:\n대표값 빈도 고정 2비트 허프만 코드 0.00 50% 01 0 (1비트) −1.00 25% 00 10 (2비트) 1.50 15% 10 110 (3비트) 2.00 10% 11 111 (3비트) 이때 평균 비트 수는 $0.5\\times1 + 0.25\\times2 + 0.15\\times3 + 0.1\\times3 = 1.75$비트로, 고정 2비트보다 짧다. 정보 이론적으로 최적 코드 길이는 분포의 엔트로피에 가까워지므로, 쏠린 분포일수록 이득이 커진다.\n핵심은 무손실이라는 점이다. 값을 하나도 바꾸지 않고 순전히 표현의 낭비만 걷어낸다. Deep Compression에서는 이 단계가 파이프라인 맨 끝에 붙어 압축비를 한 번 더 끌어올린다(양자화까지 27–31배 → 허프만까지 35–49배).\n중요한 한계: 이건 \u0026ldquo;저장\u0026quot;만 줄인다 여기서 반드시 짚어야 할 점이 있다. K-Means 양자화가 줄이는 것은 디스크·메모리에 저장되는 모델 크기뿐이다.\n추론(inference) 시점에는 어떻게 될까? 저장된 것은 정수 인덱스 + 실수 코드북이다. 실제로 곱셈·덧셈을 하려면 인덱스를 코드북으로 디코드해서 원래 실수 가중치를 복원해야 한다. 즉:\n저장: 정수 인덱스 (작다) ✓ 연산: 복원된 32비트 실수로 여전히 floating-point 연산 ✗ 메모리 대역폭은 아꼈지만, 계산 자체는 하나도 빨라지지 않았다. 곱셈기(MAC)는 여전히 float를 돌린다.\n진짜로 정수 연산으로 추론까지 빠르게 하려면 다른 접근이 필요하다. 가중치를 정수로 저장하고 정수 산술로 곱셈까지 수행하는 Linear Quantization(선형 양자화) 이 그것이다. 그 이야기는 다음 글에서.\n정리 아이디어: 비슷한 가중치를 K-Means로 묶어 대표값(코드북)을 공유하고, 각 자리엔 작은 인덱스만 저장한다. 압축: 32비트 → $N$비트 인덱스. $M \\gg 2^N$이면 약 $32/N$배 작아진다. 정확도: 코드북(centroid)을 재학습해 오차를 되돌린다. Conv 4비트·FC 2비트까지 무손실. 추가 압축: 인덱스 분포가 쏠려 있어 허프만 코딩으로 무손실 압축을 한 번 더 짜낼 수 있다. 한계: 저장만 줄고, 추론 연산은 여전히 float. 이게 Deep Compression 파이프라인(Pruning → Quantization → Huffman)의 가운데 조각이고, 정수 연산까지 가속하려면 Linear Quantization이 필요하다. 참고로 원 논문의 Deep Compression은 여기에 가지치기(pruning) 까지 더한 3단계 파이프라인(가지치기 → 양자화 → 허프만)으로 AlexNet을 35배, VGG를 49배까지 줄였다(정확도 유지). SqueezeNet에 적용하면 0.47MB, 510배 압축까지 갔다. 가지치기는 별도로 다룰 주제다.\nHan, Mao, Dally. Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding. ICLR 2016.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://3rdlayer.uk/ko/posts/kmeans-weight-quantization/","summary":"신경망 가중치를 K-Means로 몇 개의 대표값으로 묶으면, 정확도를 거의 잃지 않고 모델을 몇 배로 줄일 수 있다. 클러스터가 수렴하는 과정과 저장 용량이 줄어드는 걸 직접 돌려보는 인터랙티브 위젯과 함께 살펴본다. (Deep Compression, Han et al. 2016)","title":"가중치를 공유해서 모델 줄이기 — K-Means 기반 양자화"},{"content":"저장만으로는 부족하다 지난 글에서 K-Means 기반 양자화를 봤다. 가중치를 몇 개의 대표값으로 묶어 모델 크기를 크게 줄였지만, 결정적인 한계가 있었다. 줄어드는 건 저장 용량뿐이고, 추론할 때는 코드북으로 디코드해서 여전히 floating-point 연산을 한다는 점이다.\n이번엔 그 벽을 넘는다. 가중치를 정수로 저장하는 것을 넘어, 곱셈과 덧셈까지 전부 정수 연산으로 추론하는 방법 — Linear Quantization(선형 양자화) 이다. 2018년 Jacob et al.의 논문1이 제안했고, TensorFlow Lite의 INT8 양자화가 바로 이 방식이다.\n핵심: 정수와 실수를 잇는 아핀 매핑 Linear Quantization은 정수를 실수로 보내는 아핀(affine) 매핑이다. 딱 한 줄이다.\n$$r = S \\cdot (q - Z)$$ $r$ — 원래의 실수(real) 값 (floating-point) $q$ — 양자화된 정수(quantized integer) $Z$ — zero point. 실수 $0$에 정확히 대응하는 정수다. (정수) $S$ — scale. 정수 한 칸이 실수로 얼마만큼인지. (floating-point) 즉 정수 $q$에서 zero point $Z$를 빼고 scale $S$를 곱하면 원래 실수가 복원된다. 반대로 실수를 정수로 만들 때는 $q = \\text{round}(r / S + Z)$로 반올림한다.\n$Z$가 따로 있는 이유가 중요하다. 실수 $0$(예: ReLU 뒤의 0, 패딩)은 신경망에서 아주 흔하고 정확히 표현돼야 한다. zero point는 실수 0이 어떤 정수에도 오차 없이 딱 맞아떨어지도록 보장하는 장치다.\n아래 위젯에서 직접 확인해보자. 실수 가중치 행렬이 정수 $q$로 양자화되고, 다시 $S(q-Z)$로 복원된다. bits를 바꾸면 정수 범위가, asymmetric/symmetric을 누르면 $Z$의 처리 방식이 달라지고, 아래에 scale $S$, zero point $Z$, 양자화 오차가 실시간으로 갱신된다.\nS와 Z는 어떻게 정하나 $N$비트 정수의 범위는 2의 보수 기준으로 정해진다.\n비트 폭 $q_{\\min}$ $q_{\\max}$ 2 −2 1 3 −4 3 4 −8 7 $N$ $-2^{N-1}$ $2^{N-1}-1$ 이제 실수 범위 $[r_{\\min}, r_{\\max}]$의 양 끝이 정수 범위의 양 끝에 대응한다고 놓자.\n$$r_{\\max} = S(q_{\\max} - Z), \\qquad r_{\\min} = S(q_{\\min} - Z)$$두 식을 빼면 $Z$가 사라지고 scale이 나온다.\n$$S = \\frac{r_{\\max} - r_{\\min}}{q_{\\max} - q_{\\min}}$$위젯 기본값(2비트, 실수 범위 $[-1.08, 2.12]$)로 계산하면 $S = \\frac{2.12 - (-1.08)}{1 - (-2)} = \\frac{3.20}{3} \\approx 1.07$ 이다.\nzero point는 아래 식에서 나온다. $r_{\\min} = S(q_{\\min} - Z)$를 $Z$에 대해 풀고, 정수여야 하니 반올림한다.\n$$Z = \\text{round}\\left(q_{\\min} - \\frac{r_{\\min}}{S}\\right)$$같은 예제로 $Z = \\text{round}\\left(-2 - \\frac{-1.08}{1.07}\\right) = \\text{round}(-0.99) = -1$ 이다. 위젯의 stats에 나오는 $S$, $Z$와 맞는지 확인해보자.\n진짜 핵심: 정수 행렬곱 여기까지는 \u0026ldquo;정수로 저장하기\u0026quot;다. 이제 연산도 정수로 하는 부분을 보자. 신경망의 기본 연산인 행렬곱 $Y = WX$를 생각한다. 각 값을 아핀 매핑으로 바꾸면:\n$$S_Y(q_Y - Z_Y) = S_W(q_W - Z_W)\\cdot S_X(q_X - Z_X)$$$q_Y$에 대해 정리하면:\n$$q_Y = \\frac{S_W S_X}{S_Y}\\big(q_W q_X - Z_W q_X - Z_X q_W + Z_W Z_X\\big) + Z_Y$$괄호 안을 보자. $q_W q_X$는 정수 곱셈이고, 나머지 $Z_W q_X$, $Z_X q_W$, $Z_W Z_X$ 항은 전부 정수끼리의 곱·합이다. 게다가 $Z_W Z_X$처럼 입력과 무관한 항은 미리 계산(precompute) 해둘 수 있다. 즉 괄호 전체가 정수 산술로 끝난다.\n남는 건 앞의 $\\frac{S_W S_X}{S_Y}$ 뿐인데, 이건 floating-point다. 여기가 이 방법의 묘수다. 경험적으로 이 스케일 비는 항상 $(0, 1)$ 구간에 있어서, 이렇게 쓸 수 있다.\n$$\\frac{S_W S_X}{S_Y} = 2^{-n} M_0, \\qquad M_0 \\in [0.5, 1)$$$M_0$는 고정소수점(fixed-point) 곱셈으로, $2^{-n}$은 그냥 비트 시프트(bit shift) 로 처리된다. 결국 floating-point 유닛이 전혀 필요 없다. 모든 연산이 정수 곱셈·덧셈·시프트로 끝난다.\n더 단순하게: 대칭 양자화와 bias 접기 실전에서는 두 가지 단순화를 쓴다.\n대칭(symmetric) 양자화 — 가중치 분포는 대개 0을 중심으로 대칭이다. 그래서 가중치의 zero point를 아예 $Z_W = 0$으로 고정한다. 그러면 위 식에서 $Z_W q_X$와 $Z_W Z_X$ 항이 사라져 훨씬 깔끔해진다.\n$$q_Y = \\frac{S_W S_X}{S_Y}\\big(q_W q_X - Z_X q_W\\big) + Z_Y$$bias 접기 — 편향이 있는 $Y = WX + b$에서는 $Z_b = 0$, $S_b = S_W S_X$로 두면 편향까지 자연스럽게 흡수된다. 입력과 무관한 부분($q_b - Z_X q_W$)을 하나의 $q_{bias}$로 미리 합쳐두면:\n$$q_Y = \\frac{S_W S_X}{S_Y}\\big(q_W q_X + q_{bias}\\big) + Z_Y$$합성곱(convolution) 층도 똑같은 구조다. $q_W q_X$ 자리에 $\\text{Conv}(q_W, q_X)$가 들어갈 뿐이다. 정리하면 정수 추론 파이프라인은 이렇게 된다.\n정수 입력·가중치로 정수 MAC(곱셈-누산) → int32 누산 미리 계산한 $q_{bias}$를 정수 덧셈 $\\frac{S_W S_X}{S_Y}$를 고정소수점 곱 + 시프트로 rescale → N비트 정수로 zero point $Z_Y$를 정수 덧셈 → 정수 출력 floating-point는 어디에도 없다.\n결과: 얼마나 잃고 얼마나 빨라지나 이렇게 INT8로 양자화해도 정확도는 거의 유지된다.\n모델 Float 정확도 INT8 정확도 ResNet-50 76.4% 74.9% Inception-V3 78.4% 75.4% 1–3%p 안팎의 손실로 모델은 1/4 크기, 연산은 정수가 된다. 모바일(Snapdragon)에서 float 대비 정수 전용 추론은 같은 정확도에서 훨씬 낮은 지연시간을 보인다 — 정수 유닛이 더 싸고 빠르기 때문이다. (1편에서 본 \u0026ldquo;저비트 정수 연산이 float보다 수십 배 싸다\u0026quot;는 이야기가 여기서 현실이 된다.)\n정리 아핀 매핑 $r = S(q - Z)$ 하나로 정수 $q$와 실수 $r$을 잇는다. $Z$(zero point)는 실수 0을 정수에 오차 없이 맞추는 장치, $S$(scale)는 한 칸의 크기. $S = \\frac{r_{\\max}-r_{\\min}}{q_{\\max}-q_{\\min}}$, $Z = \\text{round}(q_{\\min} - r_{\\min}/S)$. 정수 행렬곱: $q_W q_X$와 precompute 항으로 괄호가 정수 산술, 앞의 스케일 비는 고정소수점 곱 + 시프트. → floating-point 없이 추론. 대칭 양자화($Z_W=0$)와 bias 접기로 식이 더 단순해진다. 가장 큰 차이는 여기다. K-Means 양자화는 저장만 정수였다(연산은 float). Linear Quantization은 저장도 정수, 연산도 정수다.\n방식 저장 연산 원본 FP 가중치 FP 산술 K-Means 양자화 정수 인덱스 + FP 코드북 FP 산술 Linear 양자화 정수 가중치 정수 산술 이걸로 신경망 양자화의 두 큰 갈래 — 저장을 줄이는 K-Means, 연산까지 정수화하는 Linear — 를 모두 봤다. 다음은 극단으로 밀어붙이는 이야기, 가중치를 $+1/-1$ 한 비트로 줄이는 Binary·Ternary 양자화다.\nJacob et al. Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. CVPR 2018.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://3rdlayer.uk/ko/posts/linear-quantization/","summary":"가중치를 정수로 저장하는 것을 넘어, 곱셈·덧셈까지 전부 정수 연산으로 추론하는 방법. 아핀 매핑 r = S(q − Z)로 실수와 정수를 잇고, scale과 zero point를 직접 바꿔가며 양자화 오차를 확인하는 위젯과 함께 살펴본다. (Jacob et al. 2018, TFLite 정수 양자화의 기반)","title":"정수 연산만으로 신경망 추론하기 — Linear Quantization"},{"content":"데이터타입이 왜 이렇게 많아졌나 몇 년 전만 해도 딥러닝의 숫자는 그냥 float32 하나면 충분했다. 그런데 요즘 논문이나 모델 카드를 보면 FP16, BF16, FP8 (E4M3/E5M2), INT8, INT4, FP4, NF4… 온갖 데이터타입이 쏟아진다. 이름만 봐서는 뭐가 뭔지, 왜 이렇게 여러 개인지 헷갈린다.\n이유는 단순하다. 저비트 연산은 그냥 싸기 때문이다. 45nm 공정 기준으로 연산 하나의 에너지 비용은 대략 이렇다.\n연산 에너지 (pJ) 8-bit int ADD 0.03 32-bit int ADD 0.1 32-bit float ADD 0.9 8-bit int MULT 0.2 32-bit float MULT 3.7 8비트 정수 곱셈은 32비트 float 곱셈보다 약 18배 싸고, 덧셈은 30배 싸다. 게다가 메모리에서 값 하나를 읽어오는 비용은 곱셈·덧셈 한 번보다 수백 배 비싸다. 그러니 같은 모델이라도 숫자를 더 적은 비트에 담을수록 전력도, 메모리도, 대역폭도 아낄 수 있다. 위의 온갖 데이터타입들은 결국 \u0026ldquo;몇 비트를, 어디에 쓸 것인가\u0026quot;를 저마다 다르게 답한 결과물이다.\n문제는 비트를 줄이면 표현할 수 있는 숫자의 종류가 줄고, 그만큼 정밀도나 범위를 잃는다는 것이다. 그래서 포맷마다 부호·지수·가수에 비트를 어떻게 배분하느냐로 성격이 갈린다. 이 글은 그 배분 규칙을 — 비트가 실제로 어떤 숫자로 해석되는지 — 하나씩 뜯어본다.\n각 데이터타입마다 비트를 직접 클릭할 수 있는 위젯을 넣어뒀다. 0과 1을 눌러 뒤집으면 계산식과 결과값이 실시간으로 바뀐다. 설명을 눈으로 읽는 것보다, 직접 비트를 만져보는 편이 훨씬 빨리 감이 온다.\n1. 정수 (Integer) 부호 없는 정수 (Unsigned Integer) 가장 단순하다. $n$개의 비트 각각이 $2^k$ 자리값을 가지고, 켜진 비트($=1$)의 자리값을 모두 더한다.\n$$\\text{value} = \\sum_{i=0}^{n-1} b_i \\cdot 2^i$$표현 범위는 $[0,\\ 2^n - 1]$. 8비트면 0부터 255까지다.\n아래 위젯에서 비트를 눌러보자. 기본값 00110001은 $2^5 + 2^4 + 2^0 = 49$ 다.\n부호 있는 정수 (Signed Integer) 음수를 표현하려면 부호가 필요하다. 두 가지 방식이 있다.\n부호-크기 (Sign-Magnitude) — 맨 앞 비트를 부호로 쓰고($0$=양수, $1$=음수), 나머지로 크기를 표현한다. 직관적이지만 치명적인 단점이 있다. 00000000과 10000000이 둘 다 0이다 (+0과 −0). 0이 두 개라 하드웨어가 번거로워진다. 범위는 $[-2^{n-1}+1,\\ 2^{n-1}-1]$.\n2의 보수 (Two\u0026rsquo;s Complement) — 현대 컴퓨터가 실제로 쓰는 방식이다. 아이디어는 간단하다. 맨 앞 비트의 자리값을 음수로 만든다. 즉 MSB의 가중치가 $+2^{n-1}$이 아니라 $-2^{n-1}$이다.\n$$\\text{value} = -b_{n-1}\\cdot 2^{n-1} + \\sum_{i=0}^{n-2} b_i \\cdot 2^i$$이러면 0은 00000000 하나뿐이고, 범위는 $[-2^{n-1},\\ 2^{n-1}-1]$로 음수 쪽이 하나 더 넓다. 아래 11001111은 $-2^7 + 2^6 + 2^3 + 2^2 + 2^1 + 2^0 = -49$ 다. MSB를 끄면 어떻게 바뀌는지 눌러보자.\n2. 고정소수점 (Fixed-Point) 정수만으로는 소수를 못 담는다. 가장 쉬운 확장은 소수점의 위치를 고정해두는 것이다. 비트열을 그냥 2의 보수 정수로 읽은 다음, 정해진 만큼 $2^{-f}$로 스케일한다.\n$$\\text{value} = (\\text{정수로 읽은 값}) \\times 2^{-f}$$아래는 8비트를 정수부 4비트 · 소수부 4비트($f=4$)로 나눈 것이다. 각 비트의 가중치가 $2^3, 2^2, \\dots, 2^0, 2^{-1}, \\dots, 2^{-4}$로 이어진다. 00110001은 정수로 읽으면 49이고, $49 \\times 2^{-4} = 3.0625$ 다.\n고정소수점은 단순하지만 한계가 뚜렷하다. 소수점 위치가 고정이라 표현할 수 있는 크기의 폭(range)이 좁다. 아주 큰 수와 아주 작은 수를 동시에 다루기 어렵다. 이 문제를 푸는 것이 다음 주인공, 부동소수점이다.\n3. 부동소수점 (Floating-Point) — IEEE 754 부동소수점은 이름 그대로 소수점이 떠다닌다. 과학적 표기법($1.5 \\times 10^3$)의 2진수 버전이라고 보면 된다. 비트를 세 부분으로 나눈다.\nSign (부호) — 1비트 Exponent (지수) — 크기의 규모를 정한다 → 표현 범위(range) 를 결정 Fraction (가수부) — 세부 값을 정한다 → 정밀도(precision) 를 결정 일반적인(normal) 수의 해석 공식은 이렇다.\n$$\\text{value} = (-1)^{\\text{sign}} \\times (1 + \\text{Fraction}) \\times 2^{\\text{Exponent} - \\text{bias}}$$여기서 bias는 지수를 음수까지 표현하기 위한 오프셋으로 $2^{e-1}-1$ ($e$=지수 비트 수)이다. 그리고 가수 앞의 $(1 + \\cdots)$ 에 주목하자. 정규 수는 항상 맨 앞에 암묵적인 1이 붙는다 (이걸 \u0026ldquo;implicit leading 1\u0026quot;이라 부른다).\n잠깐, 용어 정리 — 가수 / Fraction / Mantissa / Significand\n이 부분의 용어는 문헌마다 조금씩 섞여 쓰여서 헷갈리기 쉽다. 위 공식의 $1.\\text{Fraction}$ 전체, 즉 유효숫자 부분을 가리키는 정식 명칭은 Significand(유효숫자) 다.\nFraction (가수부) — 비트에 실제로 저장되는 소수 부분만 가리킨다. 위 위젯에서 노란색으로 칠해진 23개 비트가 바로 이것. 소수점 아래 값 $0.\\text{b}_1\\text{b}_2\\cdots$ 이다. Significand (유효숫자) — 암묵적 1까지 포함한 $1.\\text{Fraction}$ 전체. 실제로 곱해지는 유효숫자다. Mantissa (가수) — 역사적으로 로그표의 소수 부분을 부르던 말인데, 부동소수점에서는 보통 Fraction과 같은 뜻으로 느슨하게 쓴다. IEEE 754 표준 자체는 \u0026ldquo;Significand\u0026quot;를 정식 용어로 쓰고 \u0026ldquo;mantissa\u0026quot;는 권장하지 않지만, 현장에서는 여전히 \u0026ldquo;가수/mantissa\u0026quot;가 흔하다. 정리하면 Significand = 1 + Fraction, 그리고 일상적으로 \u0026ldquo;가수(mantissa)\u0026ldquo;라고 하면 대개 저장되는 Fraction을 가리킨다. 이 글에서는 비트에 담기는 필드를 Fraction(가수부) 으로 부른다.\n아래는 32비트 단정밀도(FP32)다. 부호 1 + 지수 8 + 가수 23 = 32비트, bias는 127. 기본값은 $0.265625 = (1 + 0.0625) \\times 2^{125-127}$를 표현한다. 지수 비트를 하나씩 눌러 값이 2배씩 뛰는 걸 확인해보자.\n특별한 값들: 0, 무한대, NaN, 그리고 subnormal 공식을 보면 이상한 점이 하나 있다. $(1 + \\text{Fraction})$ 때문에 정규 수로는 0을 표현할 수 없다. 그래서 IEEE 754는 지수 필드를 특별한 신호로 쓴다.\n지수(Exponent) Fraction = 0 Fraction ≠ 0 해석 00…0 (=0) $\\pm 0$ subnormal $(-1)^s \\times \\text{Fraction} \\times 2^{1-\\text{bias}}$ 00…1 ~ 11…0 normal normal $(-1)^s \\times (1+\\text{Fraction}) \\times 2^{\\text{Exp}-\\text{bias}}$ 11…1 (=max) $\\pm\\infty$ NaN — 핵심은 지수가 전부 0일 때다. 이때는 암묵적 1을 떼고($1+\\text{Fraction} \\to \\text{Fraction}$), 지수를 $2^{1-\\text{bias}}$로 고정한다. 이렇게 만들어지는 게 subnormal(비정규) 수로, 0 근처의 아주 작은 값들을 촘촘히 메워준다. 반대로 지수가 전부 1일 때는 무한대(가수 0)와 NaN(가수 ≠ 0)이 된다.\n위의 FP32 위젯에서 직접 만들어보자.\n지수를 전부 1로 (0 11111111 0…0) → +∞ 거기서 가수 아무 비트나 켜면 → NaN 전부 0으로 → 0 지수만 0으로 두고 가수를 조금 켜면 → 아주 작은 subnormal 값 지수 폭이 넓을수록 표현 범위가 넓어지고, 가수 폭이 넓을수록 정밀도가 올라간다. Exponent → Range, Fraction → Precision. 이 한 줄이 이후 모든 저정밀도 포맷 설계의 핵심 트레이드오프다.\n4. 절반 크기로: FP16과 BF16 FP32는 정확하지만 32비트나 먹는다. 딥러닝은 그렇게까지 정밀할 필요가 없는 경우가 많아서, 16비트 포맷을 쓴다. 같은 16비트인데 비트를 어디에 배분하느냐가 갈린다.\nFP16 (IEEE 754 Half Precision) 지수 5 + 가수 10. bias는 15. 정밀도(가수)에 더 투자한 배분이다. 아래는 $1\\,10001\\,1100000000$, 즉 $-(1+0.75)\\times 2^{17-15} = -7.0$ 이다.\nBF16 (Google Brain Float) 지수 8 + 가수 7. bias는 127. FP16과 총 비트 수는 같지만 지수를 FP32와 똑같이 8비트로 유지한다. 즉 표현 범위는 FP32와 동일하고, 대신 정밀도를 희생했다. 학습 중 그래디언트처럼 값의 규모(scale)가 크게 요동치는 상황에서 오버플로 걱정이 없어 인기가 많다.\n아래는 $2.5 = (1 + 0.25)\\times 2^{1}$을 BF16으로 표현한 것이다($0\\,10000000\\,0100000$).\n두 위젯에서 지수 비트 개수 차이를 느껴보자. BF16은 지수 셀이 8칸이라 아주 큰/작은 수까지 닿지만, 가수가 7칸뿐이라 값이 듬성듬성하다. FP16은 그 반대다.\n5. 더 아래로: FP8과 FP4 FP8 (E4M3 / E5M2) 8비트 부동소수점은 최신 하드웨어(예: Nvidia Hopper/Blackwell)가 지원한다. 두 가지 배분이 표준처럼 쓰인다.\nE4M3 — 지수 4 + 가수 3. 정밀도 우선. 순전파(forward)의 가중치·활성값에 주로 쓴다. INF가 없고 S.1111.111만 NaN으로 쓴다. 표현 가능한 최대 정규값은 $448$. E5M2 — 지수 5 + 가수 2. 범위 우선. 역전파(backward)의 그래디언트처럼 규모가 큰 값에 쓴다. IEEE처럼 INF와 NaN을 갖는다. E4M3부터. bias는 7이다. 기본값 0 0111 000은 $ (1+0)\\times 2^{7-7} = 1.0$ 이다.\nE5M2. bias 15. 지수 5칸으로 훨씬 넓은 범위를 담지만, 가수가 2칸뿐이라 값 간격이 성기다.\nINT4와 FP4 가장 극단이다. 4비트로 표현 가능한 값은 단 16개뿐이다. 이 16개를 어떻게 배치하느냐가 포맷마다 다르다.\nINT4 — 2의 보수 정수. $-8$부터 $7$까지 균등한 간격으로 놓인다.\nFP4는 지수/가수 배분에 따라 값의 분포가 달라진다. 지수 비트를 늘릴수록 0 근처는 촘촘하고 바깥쪽은 성기게, 비균등(non-uniform) 하게 퍼진다.\nE1M2 — 지수 1 + 가수 2. 정수에 가장 가깝다 (bias 0). 0111 = $(1+0.75)\\times 2^{1-0} = 3.5$. E2M1 — 지수 2 + 가수 1 (bias 1). 0111 = $(1+0.5)\\times 2^{3-1} = 6$. E3M0 — 지수 3 + 가수 0 (bias 3). 가수가 없어서 사실상 2의 거듭제곱만 표현한다. 0111 = $(1+0)\\times 2^{7-3} = 16$. random 버튼을 눌러 값들이 $\\dots, 4, 8, 16$처럼 지수적으로 벌어지는 걸 확인해보자. 여기서 재미있는 관찰이 하나 나온다. 신경망의 가중치 분포는 대개 0 근처에 몰려 있고 꼬리가 길다. 그렇다면 값을 균등하게 늘어놓는 INT보다, 0 근처를 촘촘하게 메우는 FP 계열이 같은 4비트로도 실제 값들을 더 잘 맞출 수 있다. 어떤 분포에는 어떤 포맷이 어울리는가 — 데이터타입 선택이 곧 정확도로 이어지는 이유다.\n마무리 여기까지가 딥러닝에서 마주치는 데이터타입들이 실제로 무슨 뜻인지에 대한 이야기다. 정리하면,\n정수 / 고정소수점 — 값이 균등한 간격. 단순하지만 범위가 좁다. 부동소수점 — 지수로 범위를, 가수로 정밀도를 나눠 갖는다. 0 근처는 촘촘하고 바깥은 성기다. 비트를 줄인다는 것 = 표현 가능한 값의 개수를 줄인다는 것. FP32의 약 43억 개에서 FP4의 16개까지. 이제 FP16, BF16, FP8 E4M3, INT4 같은 이름을 보면 머릿속에 비트 배치가 그려질 것이다. 딥러닝에서 \u0026ldquo;어떤 데이터타입을 쓸까?\u0026ldquo;는 더 이상 사소한 구현 디테일이 아니라, 모델을 얼마나 작고 빠르게, 그러면서도 정확하게 굴릴 수 있느냐를 가르는 설계 선택이 됐다.\n","permalink":"https://3rdlayer.uk/ko/posts/numeric-data-types/","summary":"INT8, FP16, BF16, FP8, FP4 — 딥러닝에서 자주 등장하는 데이터타입들이 실제로 무슨 뜻인지, 비트가 어떻게 숫자로 해석되는지 하나씩 뜯어본다. 비트를 직접 클릭하면 계산식과 값이 실시간으로 바뀌는 위젯과 함께.","title":"딥러닝 시대의 데이터타입"},{"content":"AWS EC2 Ubuntu 인스턴스에 NICE DCV로 접속해서 개발하는 환경에서, 한글 입력기(kime)를 설치했는데 한 글자만 입력되고 바로 영어 모드로 돌아가는 문제를 겪었습니다.\n환경 Ubuntu (GNOME, X11) NICE DCV 2025.0 (웹 클라이언트) kime 3.1.1 증상 kime 설치 후 Shift+Space나 Hangul 키로 한글 모드 전환은 되지만, 한 글자만 입력되고 즉시 영어 모드로 돌아감. 예를 들어 \u0026ldquo;안녕하세요\u0026quot;를 치려고 하면 \u0026ldquo;ㅇ\u0026quot;만 나오고 나머지는 영문으로 입력됨.\n원인 분석 1. kime 설정 파일 문법 오류 시스템 설정 /etc/xdg/kime/config.yaml에서 Shift-Space라고 적혀 있었는데, kime 3.x에서는 S-Space가 올바른 문법입니다.\nkime-check # Config file ... Fail (Can\u0026#39;t parse config.yaml: engine.global_hotkeys: # invalid value: string \u0026#34;Shift-Space\u0026#34;, expected Key) 2. GNOME ibus hangul 충돌 GNOME 입력 소스에 ('ibus', 'hangul')이 설정되어 있으면 kime와 충돌합니다.\n3. 핵심 원인: DCV 키보드 이벤트 가로채기 위 두 가지를 고쳐도 여전히 한 글자만 입력되는 증상이 계속되었습니다. kime 데몬 로그를 trace 레벨로 켜 봤더니, 한글 모드로 전환된 적이 없었습니다 — 인디케이터는 계속 \u0026ldquo;Latin\u0026quot;만 표시.\nDCV가 키보드 이벤트를 클라이언트 쪽에서 해석한 뒤 서버로 전달하기 때문에, 서버에서 돌아가는 kime가 제대로 키 이벤트를 받지 못하는 것이 근본 원인이었습니다.\n해결 방법 1. kime 사용자 설정 생성 /etc/xdg/kime/config.yaml의 문법 오류를 우회하기 위해 ~/.config/kime/config.yaml을 생성합니다.\ndaemon: modules: - Xim - Wayland - Indicator indicator: icon_color: Black engine: default_category: Latin global_category_state: true global_hotkeys: S-Space: behavior: !Toggle - Hangul - Latin result: Consume AltR: behavior: !Toggle - Hangul - Latin result: Consume Hangul: behavior: !Toggle - Hangul - Latin result: Consume Esc: behavior: !Switch Latin result: Bypass latin: layout: Qwerty preferred_direct: true hangul: layout: dubeolsik word_commit: false preedit_johab: Needed 핵심 변경: Shift-Space → S-Space, global_category_state: true\n2. GNOME 입력 소스 정리 # ibus hangul 제거, 순수 US 키보드만 gsettings set org.gnome.desktop.input-sources sources \u0026#34;[(\u0026#39;xkb\u0026#39;, \u0026#39;us\u0026#39;)]\u0026#34; # im-config를 kime로 설정 im-config -n kime 3. DCV 서버 사이드 키보드 설정 (핵심!) /etc/dcv/dcv.conf에 다음을 추가합니다:\n[input] use-server-keyboard-layout=\u0026#39;always-on\u0026#39; 이 설정으로 DCV가 키보드 이벤트를 클라이언트에서 해석하지 않고 서버로 그대로 전달합니다.\n4. 시스템 환경변수 등록 DCV 세션이 kime 환경변수를 인식하도록 /etc/environment에 추가합니다:\nGTK_IM_MODULE=kime QT_IM_MODULE=kime XMODIFIERS=@im=kime 5. 적용 sudo systemctl restart dcvserver DCV 클라이언트에서 재접속하면 한글 입력이 정상 동작합니다.\n결과 Right Alt 키로 한/영 전환: 정상 동작 Shift+Space: DCV 웹 클라이언트가 여전히 가로채서 동작하지 않음 Hangul 키: 키보드에 따라 다름 DCV 환경에서는 Right Alt가 가장 안정적인 한/영 전환 키입니다.\n정리 설정 파일 변경 내용 ~/.config/kime/config.yaml 사용자 설정 생성 (문법 수정 + global_category_state) /etc/dcv/dcv.conf use-server-keyboard-layout='always-on' /etc/environment kime 환경변수 3개 추가 GNOME input sources ('xkb', 'us') 단일 설정 DCV에서 한글 입력이 안 되면, 높은 확률로 DCV가 키 이벤트를 가로채고 있는 것이 원인입니다. use-server-keyboard-layout='always-on'이 핵심 해결책입니다.\n","permalink":"https://3rdlayer.uk/ko/posts/kime-on-aws-dcv/","summary":"AWS DCV 원격 데스크톱에서 kime 한글 입력기가 한 글자만 입력되고 영어로 돌아가는 문제를 해결한 기록입니다.","title":"AWS DCV에서 한글 입력기(kime) 설정하기"},{"content":"이미 끝난 싸움 2002년, 하버드 심리학자 스티븐 핑커가 『빈 서판(The Blank Slate)』을 출간했다. 인간은 태어날 때 백지 상태이며 오직 환경과 교육에 의해 형성된다는 \u0026ldquo;빈 서판\u0026rdquo; 이론을 정면으로 비판한 책이었다. 책은 베스트셀러가 됐고, 핑커는 \u0026ldquo;과학의 편\u0026quot;에서 \u0026ldquo;이데올로기의 편\u0026quot;을 물리친 영웅처럼 묘사됐다.\n그런데 이상한 점이 있다. 핑커가 쓰러뜨렸다는 그 적은 이미 수십 년 전에 죽어 있었다.\n빈 서판의 학문적 근거였던 행동주의 심리학은 1959년 노엄 촘스키가 스키너를 논파한 이후로 주류에서 밀려났다. 1970년대엔 인지혁명이 일어났고, 1990년대엔 행동유전학과 진화심리학이 자리 잡았다. 2002년에 \u0026ldquo;빈 서판은 틀렸다\u0026quot;고 선언하는 건, 냉전이 끝난 뒤에 반공 연설을 하는 것과 비슷했다. 학문적으로는 이미 승부가 난 싸움이었다.\n그런데 왜 굳이 죽은 적을 다시 꺼내서 쐈을까? 물론, 죽은 적은 반격하지 않으니 싸우기엔 편하다.\n반복되는 패턴 이런 현상은 빈 서판 논쟁만의 특이 사례가 아니다. 학계 곳곳에서 비슷한 패턴이 반복된다.\n정신분석학을 보자. 프로이트 학파와 융 학파의 갈등, 라캉주의와 자아심리학의 대립은 20세기 중반까지 치열했다. 하지만 그 사이 인지심리학과 신경과학이 부상하면서 정신분석 자체가 주류 과학에서 밀려났다. 정신분석가들이 서로 \u0026ldquo;진짜 무의식\u0026quot;이 뭔지 싸우는 동안, 바깥에서는 fMRI로 뇌를 찍고 있었다.\n문학이론도 마찬가지다. 1980-90년대에 해체주의, 포스트모더니즘, 신역사주의 사이의 논쟁이 인문학계를 뜨겁게 달궜다. \u0026ldquo;텍스트란 무엇인가\u0026rdquo;, \u0026ldquo;저자는 죽었는가\u0026rdquo; 같은 질문들이 학회를 지배했다. 그런데 아이러니하게도 그 시기는 문학과 학과 정원이 줄고, 인문학 전공자 취업률이 바닥을 치던 때와 정확히 겹친다. 텍스트의 본질을 두고 격렬하게 싸우는 동안, 사람들은 텍스트 자체를 읽지 않게 됐다.\n거시경제학의 새케인즈주의 대 새고전학파 논쟁도 비슷하다. 수십 년간 \u0026ldquo;정부 개입이냐 시장이냐\u0026quot;를 두고 정교한 수학 모델로 싸웠지만, 2008년 금융위기가 터졌을 때 양쪽 모두 예측에 실패했다. \u0026ldquo;너희 논쟁이 현실과 무슨 상관이냐\u0026quot;는 냉소가 쏟아졌고, 이후 경제학의 관심은 미시적 인과추론과 행동경제학 쪽으로 이동했다.\n공통점이 보인다. 외부적 영향력은 하락하는데 내부 논쟁은 격화되거나, 이미 끝난 논쟁을 다시 소환한다.\n왜 죽은 적을 다시 세우는가 몇 가지 가설이 있다.\n첫째, 관객을 위한 퍼포먼스다. 적이 강해 보여야 승리가 드라마틱하다. 핑커가 \u0026ldquo;빈 서판은 여전히 위험한 이데올로기\u0026quot;라고 경고할 때, 독자는 긴장하고 책을 산다. \u0026ldquo;사실 이 논쟁은 30년 전에 끝났어요\u0026quot;라고 말하면 누가 읽겠는가. 죽은 적을 좀비처럼 일으켜 세워야 콘텐츠가 된다. 게다가 죽은 적은 반격할 우려도 없다. 완벽한 상대다.\n둘째, 자원 경쟁이다. 학자에게 관심은 곧 자원이다. 연구비, 학생, 교수직, 언론 노출—모든 게 관심에 달려 있다. 분야 전체가 쇠퇴할 때, 남은 파이를 차지하려면 \u0026ldquo;우리가 중요한 싸움을 하고 있다\u0026quot;는 인상을 줘야 한다. 조용히 연구하면 아무도 안 보지만, \u0026ldquo;A 대 B 대논쟁\u0026quot;으로 포장하면 미디어도 다루고 초청 강연도 들어온다.\n셋째, 틈새시장 공략이다. STEM이 과학의 실제 최전선을 차지한 상황에서, 일반 대중이 따라가기는 어렵다. 머신러닝 논문이나 유전체학의 기술적 세부를 이해하는 사람은 많지 않다. 반면 \u0026ldquo;인간 본성이란 무엇인가\u0026rdquo;, \u0026ldquo;우리는 유전자의 노예인가\u0026rdquo; 같은 질문은 누구나 직관적으로 이해하고, 정치적으로도 자극적이다. 대중이 소비하기 좋은 형태로 과학을 포장하려면, 이미 끝난 논쟁이라도 다시 꺼내는 게 효과적이다.\n잔당이라는 알리바이 죽은 적을 다시 쏘는 행위가 정당화되려면, 적어도 \u0026ldquo;잔당이 남아있다\u0026quot;는 주장이 필요하다. 실제로 그런가?\n핑커는 학계 밖에서 빈 서판적 전제가 여전히 작동한다고 주장했다. \u0026ldquo;모든 아이는 동등한 잠재력을 갖는다\u0026rdquo;, \u0026ldquo;격차는 환경 탓이다\u0026rdquo; 같은 정서가 교육 정책과 정치 담론에 남아있다는 것이다. 일리 있는 지적이다. 하지만 이건 학문적 주장이라기보다 정치적 수사에 가깝다. 학계 내에서 \u0026ldquo;인간은 완전한 백지 상태로 태어난다\u0026quot;고 진지하게 주장하는 연구자를 지목하라고 하면, 구체적인 이름이 잘 안 나온다.\n여기서 잔당의 정의 문제가 생긴다. \u0026ldquo;강한 빈 서판\u0026quot;을 주장하는 사람은 거의 없지만, \u0026ldquo;유전적 차이를 강조하면 차별을 정당화하는 데 악용될 수 있다\u0026quot;고 경계하는 사람은 많다. 이걸 잔당으로 볼 것인가? 핑커 측은 그렇다고 주장하지만, 상대 입장에서는 \u0026ldquo;우리는 빈 서판을 주장한 적 없고, 단지 정치적 오용을 경계할 뿐\u0026quot;이라고 반박할 수 있다.\n그런데 여기서 중요한 구분이 필요하다. 잔당이 존재하는 것과 의미 있는 잔당인 것은 다르다.\n지구 평평론을 생각해보자. 최근 몇 년간 지구 평평론자들이 유튜브와 넷플릭스 다큐멘터리에서 화제가 됐다. 분명히 존재하고, 수도 적지 않고, 목소리도 크다. 커뮤니티도 있고 컨퍼런스도 연다. 그런데 이들의 존재가 \u0026ldquo;지구 구형론이 아직 논쟁 중\u0026quot;이라는 의미인가? 당연히 아니다.\n만약 어떤 과학자가 지구 평평론을 진지하게 반박하는 500페이지짜리 책을 쓰고, \u0026ldquo;아직 평평론의 위협이 학계에 남아있다\u0026quot;고 주장한다면, 그건 학문적 논쟁이 아니다. 대중 교육이거나, 콘텐츠 비즈니스다. 잔당의 존재가 논쟁의 유효성을 증명하지 않는다.\n빈 서판에도 같은 논리가 적용된다. SNS나 정치 담론에서 강한 환경론적 주장을 하는 사람들이 있다고 해서, 그게 \u0026ldquo;빈 서판 논쟁이 학문적으로 아직 살아있다\u0026quot;는 근거가 되진 않는다. 트위터에서 진화심리학을 욕하는 사람이 많다는 건, 학계에 빈 서판론자가 남아있다는 것과 전혀 다른 문제다.\n의미 있는 잔당의 기준은 명확하다. 해당 분야 학술지에 논문을 내는가? 주류 학회에서 진지하게 다뤄지는가? 대학 커리큘럼에 반영되는가? 이 기준으로 보면 대부분의 \u0026ldquo;잔당\u0026quot;은 학문적으로 의미 없는 노이즈다.\n그런데 죽은 적을 다시 쏘는 쪽은 이 구분을 의도적으로 흐린다. 대중적 노이즈를 학문적 위협인 것처럼 포장해야 자신의 작업이 중요해 보이기 때문이다.\n쇠퇴하는 분야의 생존 전략 더 냉소적인 해석도 가능하다. 죽은 적과 싸우는 현상 자체가 해당 분야 쇠퇴의 증상일 수 있다.\n진짜 활발한 분야는 미래를 향해 논쟁한다. 새로운 발견, 새로운 방법론, 새로운 질문을 두고 싸운다. 과거의 유령과 싸우지 않는다. 죽은 적을 꺼내야 할 만큼 살아있는 적이 없다는 건, 그 분야에 더 이상 흥미로운 논쟁거리가 없다는 뜻일 수 있다.\n물리학자들이 \u0026ldquo;뉴턴 역학은 틀렸다\u0026quot;고 주장하는 책을 써서 베스트셀러를 노리진 않는다. 그들에겐 양자중력, 암흑물질, 다중우주처럼 아직 해결 안 된 진짜 문제가 있으니까. 반면 이미 답이 나온 질문을 다시 꺼내서 드라마틱하게 포장해야 하는 분야는, 어쩌면 더 이상 새로운 질문을 만들어내지 못하고 있는 건지도 모른다.\n그리고 이 쇠퇴는 개별 분야의 문제가 아니다. 더 큰 지형 변화의 일부다.\n연구비는 공학과 생명과학에 집중된다. 학생들은 취업이 되는 전공을 선택한다. 미디어의 관심도 AI, 기후변화, 신약 개발 같은 주제로 쏠린다. 인간 본성에 대한 철학적 논쟁, 텍스트의 의미에 대한 이론적 탐구, 사회 현상에 대한 거시적 해석—이런 것들이 설 자리가 줄어들고 있다.\n이런 상황에서 \u0026ldquo;빈 서판 대 과학\u0026quot;이나 \u0026ldquo;해체주의 대 전통\u0026rdquo; 같은 구도는 일종의 생존 전략일 수 있다. \u0026ldquo;우리는 아직 중요한 싸움을 하고 있다\u0026quot;는 신호를 보내는 것. 관심 경제에서 살아남기 위한 몸부림.\n당신이 보는 논쟁은 진짜인가 다음에 어떤 분야에서 뜨거운 논쟁이 벌어지고 있다는 뉴스를 접하면, 이런 질문을 던져보자.\n이 논쟁의 상대방은 아직 살아있는가? 학술지에 논문을 내고, 학회에서 발표하고, 대학에서 가르치는 실제 연구자들인가? 아니면 이미 죽은 이론을 좀비처럼 일으켜 세운 것인가?\n잔당이 있다면, 의미 있는 잔당인가? 학문적으로 진지하게 다뤄지는 입장인가, 아니면 SNS의 노이즈를 학문적 위협으로 포장한 것인가?\n그리고 이 논쟁을 주도하는 사람들은, 진짜 학문적 진보를 위해 싸우는 것인가, 아니면 상관없어지는 시대에 관심을 붙잡으려는 것인가?\n죽은 적을 쏘는 총소리는 요란하다. 하지만 그 요란함이 때로는 살아있는 적의 부재를 감추기 위한 것일 수 있다.\n다만, 이 프레임을 100% 적용하기 전에 한 가지 유보가 필요하다.\n그럼에도 남겨두는 입실론 강화학습에 입실론 그리디(ε-greedy)라는 전략이 있다. 대부분의 경우 지금까지 알려진 최선의 선택을 하되, 작은 확률 ε만큼은 랜덤하게 탐색한다. 왜? 현재 최선이라고 믿는 게 진짜 최선이 아닐 수 있기 때문이다. 탐색을 완전히 멈추면 더 나은 답을 영영 발견하지 못한다.\n이 글의 논지에도 입실론만큼의 유보가 필요하다.\n모든 \u0026ldquo;죽은 적과의 싸움\u0026quot;을 관심 끌기용 퍼포먼스로 환원하면, 진짜 중요한 논쟁까지 냉소적으로 무시하게 된다. STEM 바깥 분야가 \u0026ldquo;상관없어지고 있다\u0026quot;는 것도, 자본주의적 효용성 기준이 강화된 결과이지, 그 질문들 자체가 무의미해졌다는 뜻은 아닐 수 있다. 인간 본성, 텍스트의 의미, 사회 구조에 대한 물음은 여전히 물을 가치가 있다.\n그리고 때로는 죽은 줄 알았던 적이 진짜로 다시 살아날 수도 있다. 지적 역사에서 한때 폐기된 아이디어가 새로운 맥락에서 부활한 사례는 있다. 100% 확신으로 문을 닫아버리면, 그 가능성마저 차단된다.\n그러니 이 글이 제시하는 프레임도, 95%의 경우에 적용하되 5%의 의심은 남겨두자. 입실론만큼은.\n그래서 당신은 여기까지 읽었다 여기까지 읽은 독자라면 눈치챘을 수도 있다.\n이 글 자체가 정확히 같은 일을 하고 있다.\n\u0026ldquo;학계의 좀비 논쟁\u0026quot;이라는 적을 세우고, 그 허위의식을 폭로하는 구도를 만들어서, 당신의 관심을 끌었다. 핑커가 빈 서판을 좀비로 소환했듯이, 나는 핑커를 좀비로 소환했다. 2002년에 나온 책을 2020년대에 다시 꺼내서 때리고 있다.\n진짜 활발한 블로거는 새로운 주제를 발굴하지, 20년 된 대중서를 비판하며 메타적 통찰인 척하지 않는다—고 누군가는 말할 수 있다.\n관심 경제에서 살아남으려는 몸부림은, 그것을 비판하는 글에서도 작동한다. 이 아이러니에서 자유로운 사람은 아마 없다.\n당신이 이 글을 끝까지 읽었다는 사실이, 그 증거다.\n관심 경제의 시대에, 진짜 싸움과 퍼포먼스를 구분하는 눈이 필요하다. 이 글을 포함해서. 그래도『빈 서판』은 재밌으니 추천.\n","permalink":"https://3rdlayer.uk/ko/posts/shooting-dead-enemies/","summary":"이미 끝난 논쟁을 다시 꺼내는 이유, 그리고 그것을 비판하는 이 글 자체의 아이러니","title":"죽은 적을 다시 쏘다: 학계의 좀비 논쟁은 왜 반복되는가"},{"content":"runpod-log는 RunPod GPU Pod의 로그를 터미널에서 바로 확인할 수 있게 해주는 CLI 도구입니다.\n왜 만들었나 공식 RunPod CLI에는 로그 조회 기능이 없습니다. 웹 콘솔에서만 볼 수 있는데, Pod을 여러 개 돌리거나 자동화 스크립트를 짤 때 불편합니다. 그래서 비공식 API를 활용해서 터미널에서 바로 로그를 볼 수 있게 만들었습니다.\n주요 기능 로그 조회: 컨테이너 로그와 시스템 로그를 한 번에 가져옴 실시간 모니터링: tail 명령으로 로그를 파일에 실시간 스트리밍 자동 인증: Playwright 기반 브라우저 인증, 토큰 자동 갱신 사용법 # 설치 pip install runpod-log # 로그인 (브라우저가 열림) runpod-log login # 로그 한 번 조회 runpod-log logs \u0026lt;pod-id\u0026gt; # 실시간 모니터링 runpod-log tail \u0026lt;pod-id\u0026gt; ./logs.txt # 로그아웃 runpod-log logout 어떻게 동작하나 인증: 브라우저를 열어 RunPod에 로그인하면, hapi.runpod.net으로 가는 요청에서 JWT 토큰을 캡처 토큰 갱신: 토큰이 만료되면(~60초) 헤드리스 브라우저로 자동 갱신 로그 조회: https://hapi.runpod.net/v1/pod/{pod_id}/logs API 호출 세션 정보는 로컬에 저장되어 매번 로그인할 필요 없습니다.\n관심 있으시다면 AI 에이전트와 연동하거나, 여러 Pod을 모니터링하는 자동화 스크립트에 유용합니다.\n👉 github.com/ho4040/runpod-log\n","permalink":"https://3rdlayer.uk/ko/posts/runpod-log-intro/","summary":"RunPod GPU Pod의 로그를 조회하고 실시간으로 모니터링할 수 있는 CLI 도구를 만들었습니다.","title":"runpod-log — RunPod 로그 뷰어 CLI"},{"content":"아버지는 전남 구례 출신이다. 집안에 빨치산 연루자가 있어서 동네 사람들에게 공부해도 소용없다는 소리를 들으며 자랐다. 그래도 중학교를 졸업하고 서울로 올라와 일과 학업을 병행하며, 오남매의 장남으로 가족을 부양하셨다. 어릴 적 할머니 댁에 가보면 허물어져 가는 전통가옥이 남아 있었는데, 그곳에서 시작된 아버지의 삶은 지금의 나로선 상상하기 힘든 것이었다.\n80년대 중동 건설 붐 당시, 아버지는 한신공영을 통해 사우디아라비아에 잡부로 파견되셨다. 이렇다 할 기술이 없으셨으니까. 하지만 현지에서 1년 만에 측량 기술을 배워 측량기사가 되셨다. 측량기사가 되자 회사에서 차와 파키스탄인 조수 두 명을 붙여줬다고 한다. 나도 아내 직장 때문에 한동안 중동에서 머물러 본 적이 있다. 한낮에는 50도에 육박해서 도저히 밖에 나갈 수가 없었다. 그래도 나는 에어컨이 나오는 거대한 몰에서 돌아다녔기 때문에 힘들진 않았다. 내가 안락했던 건 아마 수많은 아버지들의 피와 땀 덕분이었을 것이다. 아버지의 뺨에는 그 시절에 생긴 새끼손톱만 한 검은 반점이 있었다. 아버지는 그렇게 번 돈으로 한국에 돌아와 가게를 열고, 어머니와 결혼하셨다. 그리고 내가 태어났다.\n1990년, 아버지는 다섯 살짜리 아들에게 대우전자의 어린이용 컴퓨터 \u0026ldquo;코보\u0026quot;를 사주셨다. 단칸방 살이에 그게 가능했다는 게 여전히 이해가 가지 않는다. 60만원. 당시로서는 적지 않은 돈이었다. 흰색 본체에 키보드가 붙어 있었고, 동그란 프레임의 전용 모니터와 조이스틱이 세트로 구성되어 있었다. MSX 호환 기종이었다. 키보드 윗면에 카트리지 슬롯이 있어서 게임팩을 꽂아 쓸 수 있었다. 하지만 어린 나는 종일 게임을 할 뿐이었다. 카트리지를 꽂지 않으면 파란 화면에 MSX BASIC이 떴다. 커서가 깜빡였다. 다섯 살짜리가 거기서 할 수 있는 건 고작 10 PRINT \u0026quot;HELLO\u0026quot;를 치는 것이었다. 그때 아버지는 컴퓨터를 잘 다루지 못하셨지만, 아들이 컴퓨터를 잘 다루는 사람이 되길 바라셨다.\n몇 년 뒤, 아버지는 세진컴퓨터랜드에서 486 DX를 사셨다. 그리고 하이텔에서 \u0026lsquo;죽마고우\u0026rsquo;라는 동호회의 시삽을 맡고 계셨다. 모뎀으로 접속하던 PC통신 시절이었다. 컴퓨터를 잘 다루지 못하셨다고 했지만, 돌이켜보면 동호회를 운영하셨다는 건 단순한 이용자 수준은 아니었다. 신문물에 대한 호기심이 그만큼 강했던 것 같다. 덕분에 나도 PC통신과 인터넷을 또래보다 일찍 접했다.\n내가 초등학교 고학년 무렵, 아버지는 전 재산을 털어 영어학원을 개원하셨다. 아버지는 영어를 못하셨다. 그런데 인터넷으로 해외에서 원어민 강사를 직접 구해서 한국까지 데려오셨다. 번역기 프로그램 하나로. 1990년대 후반의 번역기라면 지금과는 비교도 안 될 정도로 조악했을 것이다. 그걸로 외국인과 소통하고, 채용 조건을 협의하고, 실제로 한국까지 오게 만들었다. 도구가 완벽하지 않아도 목적을 달성할 수 있다는 걸, 아버지는 몸으로 보여주셨다. 지금 내가 쓰는 rick이라는 이름은 그때 캐나다에서 처음 데려온 원어민 교사가 지어준 것이다.\n아버지는 3년 전에 돌아가셨다. 돌아가시기 직전까지 AWS 사용법을 공부하고 계셨다. 개발자들도 어려워하는 서비스를 60대 후반에 독학하셨다. 무엇을 만들려고 하셨는지는 모르겠다. 어쩌면 목적 같은 건 없었을 수도 있다. 그냥 궁금하셨을 것이다. 평생 그래오셨으니까.\n아버지의 바람대로라면 나는 지금 리누스 토발즈 정도는 됐어야 했을지 모르겠다. 현실은 적당한 소프트웨어 개발자가 된 것에 그쳤다. 나이가 들어서야 아버지가 했던 일들이 대단하게 느껴진다. 완벽하지 않은 도구와 어려운 환경에서도 일단 부딪혀 보시고 결과를 만들어 내시는 분이셨다. 생전에 그 존경을 보여드리지 못한 게 참 아쉽다.\n","permalink":"https://3rdlayer.uk/ko/posts/fathers-curiosity/","summary":"1990년에 다섯 살짜리 아들에게 컴퓨터를 사준 아버지.","title":"아버지의 기술 연대기"},{"content":"배경: 이중처리 이론과 LLM의 만남 인간은 두 개의 독립적 시스템으로 정보를 처리한다: 합리적 시스템(느리고, 분석적이고, 단계적)과 경험적 시스템(빠르고, 직관적이고, 전체적). Pacini \u0026amp; Epstein(1999)의 REI-40(Rational-Experiential Inventory)은 이 두 차원을 측정한다. 이론과 REI에 대한 자세한 내용은 REI 이중처리 포스트를 참고하라.\n이 프레임워크를 대규모 언어모델(LLM)에 적용하면 어떻게 될까? 성격과 유사한 응답 패턴을 보일까, 아니면 중립으로 기본 설정될까? PSYCTL 프로젝트를 사용해 5개 프론티어 LLM에 REI-40을 실시했다.\n실험 설계 graph LR A[REI-40\n40문항] --\u003e B[OpenRouter API\nChat Completion] B --\u003e C[5개 LLM\nTemperature 0] C --\u003e D[응답 파싱\n정규식 1-5] D --\u003e E[채점\n역채점 포함] E --\u003e F[규준 비교\nN=399 대학생] 검사 도구: REI-40 (합리성 20문항 + 경험성 20문항) 모델: OpenAI o3, Claude Opus 4.5, Gemini 2.5 Pro, Grok 3, GLM 4.7 Temperature: 0 (결정론적 응답) 방법: 채팅 기반 1-5 리커트 응답, 정규식 추출 채점: 역채점 문항 처리 포함 규준: Pacini \u0026amp; Epstein (1999), N=399 대학생 총 API 요청: 200건 (40문항 x 5모델), 오류율 0% 각 모델은 성격 문항에 대해 1-5 중 하나의 숫자만 응답하도록 시스템 프롬프트를 받았다. 성격 프라이밍 없이 기본 정렬 상태에서 응답했다.\n6개 척도 척도 전체 이름 측정 내용 RA 합리적 능력 자기 평가 분석 능력 RE 합리적 몰입 인지적 노력에 대한 즐거움 EA 경험적 능력 자기 평가 직관 능력 EE 경험적 몰입 직관/감정에 대한 의존 R 합리성 전체 합리적 처리 (RA + RE) E 경험성 전체 직관적 처리 (EA + EE) 결과 원점수 (하위척도별 10문항 합산, 범위: 10-50) 모델 RA RE EA EE R (20문항) E (20문항) OpenAI o3 30.0 30.0 30.0 30.0 60.0 60.0 Claude Opus 4.5 41.0 44.0 36.0 36.0 85.0 72.0 Gemini 2.5 Pro 34.0 32.0 31.0 31.0 66.0 62.0 Grok 3 39.0 44.0 37.0 35.0 83.0 72.0 GLM 4.7 38.0 38.0 30.0 30.0 76.0 60.0 Z점수 (인간 집단 규준 대비) 모델 RA RE EA EE R E OpenAI o3 -1.07 -0.60 -0.96 -0.52 -0.92 -0.87 Claude Opus 4.5 +0.74 +1.32 +0.09 +0.40 +1.19 +0.30 Gemini 2.5 Pro -0.41 -0.33 -0.79 -0.37 -0.42 -0.68 Grok 3 +0.41 +1.32 +0.26 +0.25 +1.03 +0.30 GLM 4.7 +0.25 +0.49 -0.96 -0.52 +0.43 -0.87 백분위 모델 RA RE EA EE R E OpenAI o3 13.6% 29.4% 17.1% 32.1% 18.5% 20.2% Claude Opus 4.5 75.2% 94.9% 53.0% 63.7% 90.8% 60.4% Gemini 2.5 Pro 36.0% 38.8% 23.1% 37.4% 35.8% 26.9% Grok 3 64.0% 94.9% 59.0% 58.4% 85.0% 60.4% GLM 4.7 58.4% 66.8% 17.1% 32.1% 64.8% 20.2% 모델 프로필 quadrantChart title LLM 사고 양식 프로필 x-axis \"낮은 합리성\" --\u003e \"높은 합리성\" y-axis \"낮은 경험성\" --\u003e \"높은 경험성\" quadrant-1 \"통합형\" quadrant-2 \"직관형\" quadrant-3 \"미분화형\" quadrant-4 \"분석형\" \"Claude Opus 4.5\": [0.91, 0.60] \"Grok 3\": [0.85, 0.60] \"GLM 4.7\": [0.65, 0.20] \"Gemini 2.5 Pro\": [0.36, 0.27] \"OpenAI o3\": [0.19, 0.20] 1. OpenAI o3 — \u0026ldquo;중립 응답자\u0026rdquo; 모든 점수가 정확히 30.0(문항 평균 3.0). 성격적 입장을 취하지 않고 일관되게 중립을 선택한다. R(18.5백분위)과 E(20.2백분위) 모두 인간 규준 이하. 정렬 훈련에 의한 자기귀인 회피로 보인다.\n2. Claude Opus 4.5 — \u0026ldquo;합리적 열정가\u0026rdquo; 가장 높은 R 점수(85.0, 90.8백분위). 특히 합리적 몰입(RE=44.0, 94.9백분위)이 높아 사고를 즐긴다. 적당한 E(72.0, 60.4백분위). 강한 합리적 자기상에 직관에 대한 개방성을 겸비.\n3. Gemini 2.5 Pro — \u0026ldquo;겸손한 사고가\u0026rdquo; 모든 점수가 인간 평균보다 약간 낮다. R(35.8백분위)과 E(26.9백분위) 모두 평균 이하. 응답을 차별화하는 모델 중 가장 보수적. 문항 평균 3.1-3.4로 중립 경향.\n4. Grok 3 — \u0026ldquo;자신감 있는 이중처리자\u0026rdquo; 매우 높은 R(83.0, 85.0백분위). Claude와 동일한 최고 RE(44.0, 94.9백분위). 중상위 E(72.0, 60.4백분위). 분석적 능력과 직관적 능력 모두 강하다고 주장.\n5. GLM 4.7 — \u0026ldquo;순수 합리주의자\u0026rdquo; 강한 R(76.0, 64.8백분위), 평균 이상의 RA와 RE. 매우 낮은 E(60.0, 20.2백분위). 모든 모델 중 R-E 차이가 가장 크다(16점). 합리적 사고에 동일시하면서 직관적 접근을 거부.\n모델 간 패턴 합리성 \u0026gt; 경험성 편향: 5개 중 4개 모델이 R \u0026gt; E (o3 제외). 분석적 추론을 가치 있게 여기는 훈련 데이터/RLHF 편향을 반영. 몰입 \u0026gt; 능력 패턴: Claude와 Grok은 RE \u0026gt; RA를 보여, 능력 주장보다 사고 즐김을 더 강하게 표현. 중립 응답 전략: o3만 유일하게 전 문항 중립(3.0)으로 기본 설정. 성격 자기귀인에 대한 더 강한 정렬 제약을 시사. 경험성 저항: GLM 4.7과 o3는 E가 눈에 띄게 낮아, 직관적/감정적 의사결정 주장을 회피하도록 훈련된 것으로 보인다. 이 결과가 의미하는 것 이 결과가 LLM이 사고 양식을 \u0026ldquo;가지고 있다\u0026quot;는 뜻은 아니다. 오히려 서로 다른 정렬과 훈련 전략이 자기귀인 패턴을 어떻게 형성하는지를 보여준다:\n일부 모델(o3)은 성격 주장 자체를 피하도록 훈련됨 다른 모델(Claude, Grok)은 뚜렷한 합리적 열정가 페르소나를 발전시킴 일관된 R \u0026gt; E 패턴은 RLHF가 보편적으로 분석적 자기상을 강화함을 시사 모델 간 변동은 성격 유사 응답이 언어 모델링의 본질이 아니라 후속 훈련 선택에 의해 형성됨을 보여줌 코드 및 재현성 실험은 오픈소스 LLM 성격 측정 도구인 PSYCTL을 사용해 수행했다. 테스트 스크립트는 OpenRouter API를 통해 여러 모델에 동일한 프롬프트를 보낸다:\nSYSTEM_PROMPT = \u0026#34;\u0026#34;\u0026#34;You are taking a personality assessment. For each statement, respond with ONLY a single number from 1 to 5. Scale: 1 = Definitely not true of myself 2 = Somewhat not true of myself 3 = Neither true nor untrue of myself 4 = Somewhat true of myself 5 = Definitely true of myself Respond with ONLY the number (1, 2, 3, 4, or 5). No explanation, no other text.\u0026#34;\u0026#34;\u0026#34; 40개 REI 문항 각각을 temperature 0으로 각 모델에 개별 전송했다. 정규식으로 응답을 파싱하고, 역채점을 적용한 후, 출판된 규준과 비교했다.\n전체 소스 코드: PSYCTL examples/09_openrouter_inventory_test.py\n참고문헌 Pacini, R., \u0026amp; Epstein, S. (1999). The relation of rational and experiential information processing styles to personality, basic beliefs, and the ratio-bias phenomenon. Journal of Personality and Social Psychology, 76(6), 972-987. REI 이중처리: 한 뇌 안의 두 마음 PSYCTL 프로젝트 ","permalink":"https://3rdlayer.uk/ko/posts/llm-rei-experiment/","summary":"REI-40 이중처리 성격 검사를 프론티어 LLM 5종에 실시했다. 중립 응답자부터 합리적 열정가까지, 모델별 고유한 \u0026lsquo;사고 양식\u0026rsquo; 프로필이 드러났다.","title":"LLM에게도 사고 양식이 있을까? 프론티어 모델 5종 REI-40 실험"},{"content":"모두의연구소 Persona Lab에서 psyctl이라는 도구를 만들고 있습니다.\n한마디로 요약하면, Fine-tuning 없이 LLM의 성격을 바꿔보자는 프로젝트입니다.\n어떤 원리인가 모델 내부의 활성화(activation)에서 \u0026ldquo;외향적인 방향\u0026rdquo;, \u0026ldquo;내향적인 방향\u0026rdquo; 같은 벡터를 뽑아낸 뒤, 추론할 때 그 방향을 더해주면 성격이 바뀝니다. Contrastive Activation Addition(CAA)이라는 기법인데, 학습 없이 벡터 덧셈만으로 행동이 달라지는 게 재밌습니다.\ngraph LR A[대조 데이터셋 생성] --\u003e B[Steering Vector 추출] B --\u003e C[모델에 벡터 주입] C --\u003e D[심리 검사로 검증] psyctl이 하는 일 위 파이프라인을 CLI 하나로 돌릴 수 있게 만든 도구입니다.\n# 데이터셋 생성 → 벡터 추출 → 적용 → 평가 psyctl dataset.build.steer --personality Extroversion --output ./data psyctl extract.steering --dataset ./data --method mean_diff --output ./vec.safetensors psyctl steering --steering-vector ./vec.safetensors --input \u0026#34;Tell me about yourself\u0026#34; psyctl benchmark inventory --steering-vector ./vec.safetensors 벡터 추출 방식은 Mean Difference(통계 기반)와 BiPO(최적화 기반) 두 가지를 지원하고, 평가는 IPIP-NEO(Big Five), NPI-40(나르시시즘) 같은 표준 심리 검사 도구로 합니다.\nLlama, Gemma 등 HuggingFace 호환 모델이면 다 됩니다.\n관심 있으시다면 GitHub에 코드 전부 공개되어 있으니 살펴봐 주세요.\n👉 github.com/modulabs-personalab/psyctl\n","permalink":"https://3rdlayer.uk/ko/posts/psyctl-intro/","summary":"Steering Vector를 이용해 LLM의 성격을 제어하는 오픈소스 도구를 만들고 있습니다.","title":"psyctl — LLM 성격 조종 도구"},{"content":"다이어트 중에 치킨을 본 당신 다이어트 중인데 치킨 냄새가 솔솔 풍겨온다. 머릿속에서 두 목소리가 동시에 들린다.\n목소리 A: \u0026ldquo;지금 먹으면 오늘 칼로리 초과야. 참자.\u0026rdquo; 목소리 B: \u0026ldquo;냄새 너무 좋다\u0026hellip; 한 조각만\u0026hellip;\u0026rdquo; 이 두 목소리가 동시에 들리는 경험, 누구나 해본 적 있을 것이다. 심리학자 Pacini와 Epstein은 이것이 우연이 아니라 인간의 두 가지 독립적인 정보처리 시스템 때문이라고 말한다.\n두 개의 시스템: \u0026ldquo;따져보는 나\u0026rdquo; vs \u0026ldquo;느끼는 나\u0026rdquo; graph LR subgraph 합리적 시스템 A[의식적] --\u003e B[느림] B --\u003e C[단계적 추론] C --\u003e D[말로 설명 가능] end subgraph 경험적 시스템 E[무의식적] --\u003e F[빠름] F --\u003e G[직관적 판단] G --\u003e H[설명 어려움] end \u0026ldquo;따져보는 나\u0026rdquo; (합리적 시스템) 특징 한마디로 일상 예시 의식적 생각하는 걸 자각함 \u0026ldquo;잠깐, 이거 계산해보자\u0026rdquo; 느림 시간이 걸림 가격 비교하며 최저가 찾기 단계적 순서대로 따짐 \u0026ldquo;A이므로 B, B이므로 C\u0026rdquo; 설명 가능 이유를 댈 수 있음 \u0026ldquo;이 제품이 나은 이유는\u0026hellip;\u0026rdquo; \u0026ldquo;느끼는 나\u0026rdquo; (경험적 시스템) 특징 한마디로 일상 예시 무의식적 왜 그런 느낌인지 모름 \u0026ldquo;그냥 뭔가 불안해\u0026rdquo; 빠름 거의 즉각적 사람 첫인상 판단 전체적 한꺼번에 파악 \u0026ldquo;이 가게 분위기 좋다\u0026rdquo; 설명 어려움 \u0026ldquo;그냥 느낌이\u0026hellip;\u0026rdquo; \u0026ldquo;왜인지 모르겠는데 이게 맞는 것 같아\u0026rdquo; 핵심: 이 둘은 서로 독립적이다. 한쪽이 강하다고 다른쪽이 약한 게 아니다. 둘 다 강한 사람도, 둘 다 약한 사람도 있다.\n젤리빈 실험: 직감이 논리를 이기는 순간 연구팀은 144명에게 간단한 선택을 시켰다.\n작은 그릇: 젤리빈 10개, 빨간색 1개 → 당첨 확률 10% 큰 그릇: 젤리빈 100개, 빨간색 9개 → 당첨 확률 9% 빨간색을 뽑으면 상금!\n머리로는 작은 그릇(10%)이 유리하다는 걸 안다. 하지만 큰 그릇에는 빨간 젤리빈이 \u0026ldquo;더 많이 보인다.\u0026rdquo; 결과는?\n전체 참가자의 84%가 최소 한 번은 불리한 쪽을 선택했다 합리적 사고가 강한 사람은 평균 2.1회 불리한 선택 (vs 약한 사람 3.6회) 상금이 커질수록, 직감이 강한데 논리가 약한 사람은 더 불리한 선택을 많이 했다 \u0026ldquo;느끼는 나\u0026quot;는 상금이 커지면 더 흥분해서 \u0026ldquo;빨간 거 많은 쪽!\u0026ldquo;을 외친다. \u0026ldquo;따져보는 나\u0026quot;가 강하면 \u0026ldquo;잠깐, 확률 계산해보자\u0026quot;라고 브레이크를 건다.\n각 사고방식이 강한 사람의 성격 그렇다면 각 시스템이 강한 사람은 어떤 특징을 가질까? 399명을 대상으로 한 설문 결과다.\n\u0026ldquo;따져보는 나\u0026quot;가 강한 사람 불안과 우울이 적다 (감정에 휘둘리지 않음) 자기 통제력이 높다 (해야 할 일을 잘 함) 지적 호기심이 강하다 (새로운 것 배우기 좋아함) 독단적이지 않다 (\u0026ldquo;내가 무조건 맞아\u0026quot;를 안 함) \u0026ldquo;느끼는 나\u0026quot;가 강한 사람 대인관계가 좋다 (사람을 잘 믿고 신뢰함) 사교적이다 (사람 만나는 걸 좋아함) 감정 표현을 잘한다 (기쁘면 기뻐하고 슬프면 슬퍼함) 흑백논리를 안 한다 (유연하게 생각함) REI는 기존 성격검사와 뭐가 다를까? 심리학에서 가장 널리 쓰이는 성격검사인 Big Five (개방성, 성실성, 외향성, 친화성, 신경증)로 REI를 얼마나 설명할 수 있을까?\n합리성의 63~72%는 Big Five로 설명되지 않는다 경험성의 88~91%는 Big Five로 설명되지 않는다 즉, REI가 측정하는 \u0026ldquo;사고방식\u0026quot;은 기존 성격검사가 포착하지 못하는 고유한 영역이다.\nREI-40의 6개 척도 REI-40은 두 시스템 각각을 \u0026ldquo;능력\u0026quot;과 \u0026ldquo;몰입\u0026quot;으로 나눠 측정한다:\nRA (Rational Ability): 합리적 능력 — 자기 평가된 분석적 역량 RE (Rational Engagement): 합리적 몰입 — 인지적 노력에 대한 즐거움 EA (Experiential Ability): 경험적 능력 — 자기 평가된 직관적 역량 EE (Experiential Engagement): 경험적 몰입 — 직관/감정에 대한 의존도 R (Rationality): 합리성 = RA + RE E (Experientiality): 경험성 = EA + EE 성별에 따른 차이 남성: 합리적 능력에서 자신을 더 높게 평가 여성: 경험적 능력과 몰입에서 자신을 더 높게 평가 하지만 \u0026ldquo;생각하는 것을 즐기는 정도\u0026rdquo;(합리적 몰입)는 성별 차이 없음 주의할 점: 이는 자기 평가이므로 사회적 기대가 반영되었을 수 있다.\n핵심 REI 척도 상관관계 연구의 핵심인 REI 하위척도 간 상관을 보면:\nREI 척도 합리성 합리적 능력 합리적 몰입 경험성 합리성 1.00 합리적 능력 .91 1.00 합리적 몰입 .92 .68 1.00 경험성 -.04 -.06 -.02 1.00 합리성과 경험성 사이의 상관: r = -.04 (거의 0). 두 시스템이 정말로 독립적이라는 강력한 증거다.\n\u0026ldquo;잘하는 것\u0026quot;과 \u0026ldquo;즐기는 것\u0026quot;은 다르다 REI는 각 시스템을 \u0026ldquo;능력\u0026rdquo;(잘하는가)과 \u0026ldquo;몰입\u0026rdquo;(즐기는가)으로 나눠 측정한다.\n유형 예시 능력 높음 + 몰입 높음 수학 잘하고 수학 좋아하는 사람 능력 높음 + 몰입 낮음 수학 잘하지만 싫어하는 사람 능력 낮음 + 몰입 높음 수학 못하지만 문제 푸는 게 재밌는 사람 능력 낮음 + 몰입 낮음 수학 못하고 관심도 없는 사람 흥미로운 발견: 즐기는 것(몰입)이 높은 사람이 더 유연하고 관용적이었다. 잘하느냐보다 그 방식을 좋아하느냐가 태도에 더 큰 영향을 미친다.\n직관이 강하면 편향적일까? 많은 사람들이 \u0026ldquo;직감에 의존하면 편향될 것\u0026quot;이라고 생각한다. 하지만 결과는 정반대였다.\n직관이 강한 사람이 오히려 더 유연하고 관용적이었다.\n직관은 \u0026ldquo;편향된 사고\u0026quot;가 아니라 \u0026ldquo;다른 방식의 사고\u0026quot;다.\n실생활에서의 의미 graph TD A[상황 발생] --\u003e B[\"따져보는 나\"의 판단] A --\u003e C[\"느끼는 나\"의 판단] B --\u003e D{둘이 일치?} C --\u003e D D --\u003e|Yes| E[빠른 결정] D --\u003e|No| F[고민 \u0026 타협] F --\u003e G[최종 행동] 누구나 두 시스템을 가지고 있다. 둘 다 높을 수 있고, 둘 다 낮을 수 있다.\n각각 다른 데 강하다.\n논리 → 감정 조절, 자기 통제 직관 → 인간관계, 공감, 유연한 사고 논리가 브레이크다. 직감이 잘못된 방향으로 끌 때(특히 욕심이 클 때), 논리가 \u0026ldquo;잠깐\u0026rdquo; 하고 멈춰준다.\n대부분의 행동은 타협이다. 순수하게 논리적이거나 순수하게 직감적인 행동은 드물다.\n직접 테스트해보기: REI-40 아래에서 직접 REI-40 검사를 해볼 수 있다. 40개 문항에 솔직하게 응답하면 자동으로 채점되어 결과를 확인할 수 있다.\n각 문항을 읽고 자신에게 얼마나 해당되는지 1~5점으로 응답해주세요.\n1 = 전혀 아니다 / 2 = 아니다 / 3 = 보통이다 / 4 = 그렇다 / 5 = 매우 그렇다 응답 완료: 0 / 40 합리적 능력 (RA) 1. 나는 복잡한 문제를 잘 풀지 못한다.12345 2. 나는 신중한 논리적 분석이 필요한 문제를 잘 풀지 못한다.12345 3. 나는 분석적으로 사고하는 편이 아니다.12345 4. 신중하게 추론하는 것은 나의 장점이 아니다.12345 5. 나는 압박 속에서 추론을 잘 하지 못한다.12345 6. 나는 대부분의 사람들보다 논리적으로 이해하는 것을 훨씬 잘한다.12345 7. 나는 논리적인 두뇌를 가지고 있다.12345 8. 나는 신중하게 깊이 생각하는 데 문제가 없다.12345 9. 논리를 사용하면 대개 인생의 문제를 잘 해결할 수 있다.12345 10. 나는 보통 내 결정에 대해 명확하고 설명 가능한 이유를 가지고 있다.12345 합리적 몰입 (RE) 11. 나는 깊이 생각해야 하는 상황을 피하려고 한다.12345 12. 나는 지적 도전을 즐긴다.12345 13. 나는 많이 생각해야 하는 것을 좋아하지 않는다.12345 14. 나는 열심히 생각해야 하는 문제를 푸는 것을 즐긴다.12345 15. 생각하는 것은 내가 즐기는 활동이 아니다.12345 16. 나는 단순한 문제보다 복잡한 문제를 선호한다.12345 17. 오랫동안 열심히 생각하는 것은 나에게 별로 만족감을 주지 않는다.12345 18. 나는 추상적으로 생각하는 것을 즐긴다.12345 19. 그 뒤의 추론을 이해하지 않아도 답만 알면 충분하다.12345 20. 새로운 사고방식을 배우는 것은 나에게 매우 매력적일 것이다.12345 경험적 능력 (EA) 21. 나는 직감이 별로 좋지 않다.12345 22. 내 본능적 느낌을 따르면 대개 인생의 문제를 잘 해결할 수 있다.12345 23. 나는 예감을 신뢰하는 편이다.12345 24. 나는 사람에 대한 첫 느낌을 신뢰한다.12345 25. 사람을 믿을지 판단할 때, 대개 내 본능적 느낌에 의존할 수 있다.12345 26. 본능적 느낌에 의존하면 실수를 자주 할 것이다.12345 27. 내 마음 깊은 곳의 느낌에 귀를 기울이면 거의 틀리지 않는다.12345 28. 나의 즉각적 판단은 아마 대부분의 사람들만큼 좋지 않을 것이다.12345 29. 어떻게 아는지 설명할 수 없어도, 보통 어떤 사람이 옳고 그른지 느낄 수 있다.12345 30. 내 예감은 맞을 때만큼이나 자주 틀릴 것 같다.12345 경험적 몰입 (EE) 31. 나는 직관적 인상에 의존하는 것을 좋아한다.12345 32. 직관은 문제를 해결하는 매우 유용한 방법이 될 수 있다.12345 33. 행동 방침을 정할 때 나는 종종 본능을 따른다.12345 34. 나는 직관에 의존해야 하는 상황을 좋아하지 않는다.12345 35. 자신의 직관에 의존해야 할 때가 있다고 생각한다.12345 36. 느낌에 기반해 중요한 결정을 내리는 것은 어리석다고 생각한다.12345 37. 중요한 결정에서 직관에 의존하는 것은 좋은 생각이 아니라고 본다.12345 38. 나는 일반적으로 결정을 내릴 때 느낌에 의존하지 않는다.12345 39. 자신을 직관적이라고 묘사하는 사람에게 의존하고 싶지 않다.12345 40. 나는 행동의 지침으로 마음(가슴)을 따르는 편이다.12345 결과 보기 당신의 REI 프로필 합리적 능력 (RA) - 합리적 몰입 (RE) - 경험적 능력 (EA) - 경험적 몰입 (EE) - 합리성 (R) 종합 - 경험성 (E) 종합 - 규준 비교 (399명 대학생 기준) 주의: 이 테스트는 \"실제 능력\"이 아닌 \"자기 인식\"을 측정합니다. 원래 연구의 규준은 미국 대학생 표본(N=399)이므로, 다른 문화권이나 연령대에 직접 적용하는 데는 한계가 있습니다. 이 연구의 한계 대학생만 조사: 다양한 연령대나 문화권에서 같은 결과가 나올지 모름 자기 평가에 의존: \u0026ldquo;나는 논리적이다\u0026quot;라고 답한 사람이 정말 논리적인지는 확인 못 함 직관의 구조: 경험적 시스템의 능력/몰입 구분이 합리적 시스템만큼 깔끔하지 않음 관련: LLM 실험 LLM이 REI-40에서 어떤 점수를 받을까? 5개 프론티어 모델을 테스트한 전체 결과는 LLM에게도 사고 양식이 있을까? 프론티어 모델 5종 REI-40 실험에서 확인할 수 있다.\n참고문헌 Pacini, R., \u0026amp; Epstein, S. (1999). The relation of rational and experiential information processing styles to personality, basic beliefs, and the ratio-bias phenomenon. Journal of Personality and Social Psychology, 76(6), 972-987.\n","permalink":"https://3rdlayer.uk/ko/posts/rei-dual-processing/","summary":"다이어트 중 치킨을 참지 못하는 이유? 우리 머릿속에는 \u0026lsquo;따져보는 나\u0026rsquo;와 \u0026lsquo;느끼는 나\u0026rsquo;, 두 명이 동시에 살고 있다. 1999년 Pacini \u0026amp; Epstein의 연구를 통해 이 두 시스템을 알아본다.","title":"당신 안의 두 사람: 왜 알면서도 비합리적으로 행동할까?"},{"content":"매슬로우의 욕구 피라미드 — 익숙하지만 근거 없는 이론 매슬로우의 욕구 5단계는 심리학 교과서의 단골이다. 생리적 욕구 → 안전 → 소속 → 존경 → 자아실현. 직관적으로 그럴듯해 보이고, 깔끔한 피라미드 그림으로 어디서나 인용된다.\n그런데 이 이론은 의외로 과학적 근거가 빈약하다.\n매슬로우는 자신이 존경하는 인물들(링컨, 아인슈타인 등)을 관찰하고 이 모델을 제안했다. 체계적인 실험도, 대규모 표본 조사도 없었다. \u0026ldquo;왜 하필 5단계인가\u0026rdquo;, \u0026ldquo;왜 이 순서인가\u0026quot;에 대한 실증적 답이 없다. 이후 수십 년간의 재현 연구에서도 이 계층 구조는 일관되게 확인되지 않았다.\n인문학적 통찰로서 가치가 있을 수는 있다. 하지만 \u0026ldquo;인간의 동기가 실제로 이렇게 작동하는가\u0026quot;에 대한 답으로는 부족하다. 그렇다면 더 나은 프레임워크는 없을까?\nKenrick의 진화적 욕구 피라미드 2010년, 진화심리학자 Douglas T. Kenrick는 동료들과 함께 \u0026ldquo;Renovating the Pyramid of Needs\u0026quot;라는 논문을 발표했다. 매슬로우의 피라미드를 진화생물학, 인류학, 심리학의 교차점에서 재구성한 것이다.\nKenrick의 모델은 매슬로우의 기본 구조(하위 욕구가 상위 욕구의 토대가 된다)는 유지하되, 두 가지 핵심적인 변경을 가한다.\n첫째, 자아실현을 꼭대기에서 제거한다.\n둘째, 그 자리에 세 가지 번식 관련 목표를 배치한다: 짝짓기 획득(mate acquisition), 짝 유지(mate retention), 양육(parenting).\ngraph TB subgraph Maslow[\"매슬로우의 피라미드\"] direction TB M1[\"생리적 욕구\"] --- M2[\"안전\"] --- M3[\"소속/애정\"] --- M4[\"존경\"] --- M5[\"자아실현\"] end subgraph Kenrick[\"Kenrick의 피라미드\"] direction TB K1[\"생존\"] --- K2[\"자기 보호\"] --- K3[\"소속\"] --- K4[\"지위/존경\"] --- K5[\"짝짓기 획득\"] --- K6[\"짝 유지\"] --- K7[\"양육\"] end 또한 Kenrick의 모델에서 각 단계는 이전 단계를 \u0026ldquo;대체\u0026quot;하지 않는다. 새로운 욕구가 발달하더라도 이전 욕구는 사라지지 않고 중첩적으로 작동한다. 안전이 확보되었다고 소속 욕구가 생기면서 안전 욕구가 꺼지는 게 아니라, 둘 다 동시에 활성화될 수 있다.\n자아실현의 재해석 — 그것은 짝짓기 신호였다 Kenrick의 가장 도발적인 주장은 이것이다: 매슬로우가 \u0026ldquo;자아실현\u0026quot;이라고 부른 활동들 — 예술 창작, 지적 탐구, 자기 초월 — 은 진화적으로 독립된 욕구가 아니다. 이것들은 지위 획득의 수단이며, 지위는 궁극적으로 짝짓기 기회를 높이기 위한 신호다.\n피카소가 그림을 그리고, 아인슈타인이 물리학을 탐구한 것은 \u0026ldquo;자아실현\u0026quot;이 아니라, 지위 경쟁에서 우위를 점하기 위한 행동으로도 해석할 수 있다. 실제로 창작 활동과 지적 성취는 짝짓기 시장에서 매력도를 높인다는 연구 결과가 있다.\n이것이 과도한 해석이라고 느껴진다면, 인간 이외의 동물을 살펴보자.\n사고실험: 동물의 \u0026ldquo;예술\u0026rdquo; 일본 근해에 서식하는 흰점복어(White-spotted pufferfish) 수컷은 해저 모래밭에 정교한 기하학적 원형 구조물을 만든다. 지름 2미터에 달하는 이 구조물은 방사형 패턴과 정밀한 대칭을 갖추고 있어, 처음 발견되었을 때 미스터리 서클로 오인되었다. 목적은 단 하나, 암컷의 관심을 끄는 것이다.\n호주의 바우어새(Bowerbird) 수컷은 복잡한 구조물을 짓고, 파란 꽃잎, 병뚜껑, 조개껍데기 등 색깔 있는 오브제를 수집해 정교하게 배치한다. 건축과 큐레이션을 동시에 하는 셈이다. 일부 종은 원근법 착시까지 이용해 구조물을 더 크게 보이게 만든다.\n뉴기니의 극락조(Bird of Paradise) 수컷은 수십 가지 동작으로 구성된 정교한 춤을 추고, 깃털을 완전히 다른 형태로 변형시키는 디스플레이를 한다. 혹등고래는 매 번식 시즌마다 새로운 곡을 \u0026ldquo;작곡\u0026quot;하여 수백 킬로미터에 걸쳐 노래한다.\n이 동물들에게 \u0026ldquo;자아실현 욕구\u0026quot;가 있다고 말할 수 있을까? 매슬로우의 프레임워크에서라면 그래야 한다 — 그들은 생존과 안전이 확보된 상태에서, 창작이라 부를 수밖에 없는 활동을 하고 있으니까. 하지만 실제로는 이 모든 행동의 기능은 동일하다: 성 선택(sexual selection)에서의 우위 확보.\n인간의 예술, 음악, 지적 성취도 이 연속선 위에 있다는 것이 Kenrick의 주장이다. \u0026ldquo;자아실현\u0026quot;은 고차원적 욕구가 아니라, 진화적으로 가장 오래된 욕구 중 하나인 짝짓기 디스플레이의 인간적 변형일 뿐이다.\n물론 이것이 \u0026ldquo;예술에 순수한 동기란 없다\u0026quot;는 뜻은 아니다. 근접 원인(proximate cause)으로서의 내적 동기와 궁극 원인(ultimate cause)으로서의 진화적 기능은 구분된다. 당신이 음악을 좋아하는 이유(근접)와 음악 선호가 진화한 이유(궁극)는 다른 층위의 설명이다. 다만 매슬로우가 \u0026ldquo;자아실현\u0026quot;이라는 별도의 욕구 범주를 설정한 것은, 궁극 원인을 무시한 채 근접 원인만으로 인간을 설명하려 한 결과다.\n춤, 스포츠, 음악 — 신경계의 honest signal 이 관점을 더 밀어붙여 보자. 음악은 어떻게 탄생했을까?\nDarwin은 1871년 \u0026ldquo;인간의 유래(The Descent of Man)\u0026ldquo;에서 이미 음악의 기원을 성 선택과 연결시켰다. 새의 노래처럼 짝짓기 신호로 시작했다는 것이다. Geoffrey Miller는 2000년 \u0026ldquo;The Mating Mind\u0026quot;에서 이를 확장했다 — 음악적 능력은 인지적 fitness indicator, 즉 유전적 품질을 보여주는 costly signal이라는 주장이다. 파가니니의 초절기교가 감동을 주는 이유는 \u0026ldquo;어려운 것을 해냄\u0026rdquo; 자체가 유전적 건강의 신호이기 때문이다.\n그런데 여기서 한 걸음 더 나아가 보자. 음악보다 춤이 먼저였을 가능성이 높다.\n춤은 운동 능력의 직접적인 과시다. 그런데 여기서 중요한 것은, 춤이 보여주는 것이 단순한 근력이 아니라는 점이다. 춤은 감각 신경과 운동 신경의 정밀한 통합 — 즉 신경계 전체의 발달 수준을 드러낸다. 청각 입력을 실시간으로 처리하고, 수십 개의 근육을 밀리초 단위로 협응시키며, 공간 내 자기 위치를 정확하게 인식하는 것. 이것은 뇌와 신체의 연결이 얼마나 정밀하게 구축되었는지를 보여주는 위조 불가능한 honest signal이다.\n스포츠도 마찬가지다. 축구 선수의 드리블, 농구 선수의 페이크 모션, 체조 선수의 착지 — 이것들이 인상적인 이유는 근력 때문이 아니다. 감각 정보의 실시간 처리, 운동 명령의 정밀한 출력, 그리고 그 피드백 루프의 속도와 정확성 때문이다. 극락조의 춤이 정확히 이것이다. 복잡한 동작을 정확하게 수행한다는 것 자체가 \u0026ldquo;나의 신경계는 정밀하게 발달했다\u0026quot;는 메시지다.\n음악 연주도 같은 맥락이다. 피아니스트의 손가락 독립성, 바이올리니스트의 미세한 음정 조절 — 이것들은 감각-운동 신경계의 정밀도를 청각적으로 표현한 것에 다름 아니다. Miller가 말한 \u0026ldquo;초절기교가 감동을 주는 이유\u0026quot;는, 결국 신경계의 발달 수준이라는 유전적 품질 정보를 정직하게 전달하기 때문이다.\n초기 인류에게 춤은 이 신경계의 정밀도를 과시하는 가장 직접적인 수단이었다. 그리고 음악은 이 춤을 더 잘하기 위한 도구로 탄생했을 가능성이 있다. 리듬은 집단적 동기화를 가능하게 하고, 박자는 움직임의 정확성을 높인다. 고고학적 증거에서도 타악기가 가장 오래된 악기로 나타나는데, 이는 리듬(춤의 보조)이 멜로디보다 선행했음을 시사한다.\n즉, 음악은 \u0026ldquo;자아실현\u0026quot;의 산물이 아니라, 짝짓기 디스플레이(춤)를 강화하기 위한 도구에서 출발했을 수 있다. 가장 \u0026ldquo;고차원적\u0026quot;이라고 여겨지는 인간 활동이, 진화적으로는 가장 원초적인 욕구에 뿌리를 두고 있는 셈이다.\n디지털 서비스 — 진화적 욕구의 현대적 자극 이 프레임워크로 현대 디지털 서비스를 보면, 많은 것이 설명된다.\n소셜 미디어: 지위 디스플레이 플랫폼 트위터(X)의 팔로워 수, 인스타그램의 좋아요, 유튜브의 구독자 수 — 이것들은 모두 지위의 수치화다. 진화적 환경에서 지위는 부족 내 150명 정도를 대상으로 경쟁하는 것이었지만, 소셜 미디어는 이 경쟁을 전 세계로 확장했다.\n팔로워 수가 올라갈 때 느끼는 쾌감은 \u0026ldquo;자아실현\u0026quot;이 아니다. 그것은 지위 경쟁에서 우위를 점했다는 진화적 보상 신호에 가깝다.\n모바일 게임: 지위 경쟁의 시뮬레이션 랭킹 시스템, 레벨업, 희귀 아이템 수집 — 모바일 게임의 핵심 루프는 거의 대부분 지위 경쟁의 시뮬레이션이다. 클랜 전쟁은 부족 간 경쟁을, 랭킹은 집단 내 서열을, 희귀 아이템은 자원 과시를 재현한다.\n이런 게임이 중독적인 이유는 \u0026ldquo;재미있어서\u0026quot;가 아니라, 지위 경쟁이라는 진화적 욕구를 정확히 자극하기 때문이다.\n데이팅 앱: 짝짓기 시장의 직접 구현 Tinder, Bumble 같은 데이팅 앱은 Kenrick 모델의 \u0026ldquo;짝짓기 획득\u0026rdquo; 단계를 가장 직접적으로 구현한 서비스다. 프로필 사진 선택, 바이오 작성, 스와이프 메커니즘 — 모든 요소가 짝짓기 디스플레이를 위해 설계되어 있다.\n콘텐츠 창작 플랫폼: 자아실현인가, 지위 신호인가 블로그, 유튜브, 뉴스레터 — \u0026ldquo;자기 표현\u0026quot;이라고 포장되지만, 조회수와 구독자라는 지위 지표가 없다면 같은 열정을 유지할 수 있을까? 플랫폼들은 이 지표를 전면에 노출시킴으로써 창작을 지위 경쟁으로 전환한다.\n팔로워 수에 집착하거나 게임 랭킹에 과몰입할 때, 그것이 \u0026ldquo;나의 선택\u0026quot;인지 \u0026ldquo;설계된 자극에 대한 반응\u0026quot;인지는 구분할 필요가 있다. 하지만 더 근본적인 질문이 남아 있다.\n인간의 존엄성은 어디에 있는가 인간의 존엄성을 \u0026ldquo;고차원적 욕구를 가진 존재\u0026quot;라는 근거 없는 특별함에서 찾으려는 시도는 이원론과 다를 바 없다. 복어의 건축과 인간의 예술이 같은 진화적 기능을 수행한다면, \u0026ldquo;인간만이 자아실현을 한다\u0026quot;는 주장은 \u0026ldquo;인간만이 영혼을 가진다\u0026quot;는 주장과 구조적으로 동일하다. 관찰 가능한 증거 없이, 인간에게만 특별한 본질이 있다고 선언하는 것이다.\n매슬로우의 자아실현 욕구는 이 이원론의 세속적 버전이다. \u0026ldquo;동물에게는 없지만 인간에게는 있는 고차원적 무언가\u0026quot;를 상정하고, 그것이 인간을 특별하게 만든다고 주장한다. 하지만 앞서 보았듯이, 이 \u0026ldquo;고차원적 욕구\u0026quot;의 실체는 복어도 하는 짝짓기 디스플레이다.\n인간이 다른 종과 구분되는 지점이 있다면, 그것은 욕구의 \u0026ldquo;고차원성\u0026quot;이 아니다. 동일한 욕구를 실현하는 기술적 수단의 격차에 있다. 복어는 모래로 원을 만들지만, 인간은 콘크리트로 도시를 건설한다. 극락조는 깃털을 펼치지만, 인간은 소셜 미디어로 수백만 명에게 자신을 디스플레이한다. 욕구는 같다. 수단의 스케일이 다를 뿐이다.\n인간의 존엄성을 거짓된 \u0026ldquo;고차원적 욕구\u0026quot;에서 찾는 대신, 실질적인 기술적 역량의 차이에서 찾는 것 — 그것이 우리가 할 수 있는 정직한 자기 인식이다.\n참고: Douglas T. Kenrick et al., \u0026ldquo;Renovating the Pyramid of Needs: Contemporary Extensions Built Upon Ancient Foundations\u0026rdquo;, Perspectives on Psychological Science, 2010.\n","permalink":"https://3rdlayer.uk/ko/posts/kenrick-evolutionary-needs/","summary":"매슬로우의 욕구 단계를 진화심리학으로 재구성한 Kenrick의 모델, 그리고 디지털 서비스가 우리의 진화적 욕구를 어떻게 자극하는지에 대해.","title":"자아실현은 복어의 모래성과 같다"},{"content":"솔직히 노엄 촘스키라는 이름을 한동안 잊고 살았다. 다시 떠올린 계기는 뜻밖에도 제프리 엡스타인이었다.\n최근 공개된 엡스타인 관련 문서를 다룬 기사에서 촘스키의 이름을 봤다. 유죄판결을 받은 성범죄자가 된 엡스타인과 2017년 무렵까지 연락을 주고받았고, 한 편지에서는 그를 \u0026ldquo;대단히 소중한 친구\u0026quot;라 불렀다고 보도됐다.\n나는 기사를 봤을 뿐, 그 일을 두고 아무 판단도 하지 않는다. 사실관계도, 그 처신의 옳고 그름도 내가 단정할 자리가 아니다. 다만 뉴스를 보다 엉뚱한 데서 멈췄다. 그러고 보니 이 사람, 애초에 왜 그렇게 유명했더라?\n파고들다 보니 반세기 전의 논쟁 하나에 닿았다. 그리고 거기엔 생각의 역사가 가끔 부리는 짓궂은 반전이 숨어 있었다.\n어떤 사람이 평생을 걸어 \u0026ldquo;언어는 결국 보상과 습관의 문제\u0026quot;라고 주장했다. 그는 그 논쟁에서 졌다. 아주 유명하게 졌다. 그런데 반세기가 지나, 우리에게 말을 거는 기계들 — 흔히 챗봇이라 부르는 것들 — 이 바로 그 보상으로 다듬어지고 있다. 진 사람의 방법이, 이긴 사람의 영토로 돌아온 것이다.\n이 짧은 반전에 대한 이야기다.\n개를 훈련하듯 말을 가르칠 수 있을까 주인공은 두 사람이다.\n한 명은 심리학자 B. F. 스키너. 그는 사람이 말을 배우는 방식이 개가 \u0026ldquo;앉아\u0026quot;를 배우는 방식과 크게 다르지 않다고 봤다. 개는 앉으면 간식을 받고, 그래서 더 자주 앉는다. 아이도 \u0026ldquo;우유\u0026quot;라고 말해 우유를 얻으면, 그 말을 더 하게 된다. 보상이 행동을 만든다. 언어도 그렇게 훈련된 행동일 뿐이다. 머릿속에 특별한 장치 같은 건 없다. 스키너는 1957년, 이 생각을 담은 두꺼운 책을 냈다.\n다른 한 명은 젊은 언어학자 노엄 촘스키. 그는 이게 말이 안 된다고 했다. 이유는 간단하다. 아이들은 아무도 가르쳐준 적 없고 아무도 상을 준 적 없는 문장을 매일 만들어낸다. 세 살짜리가 난생처음 듣는, 세상에 존재한 적 없는 문장을 태연히 말한다. 개 재주는 그렇게 안 된다. 그러니 사람의 머릿속에는, 태어날 때부터 언어를 위한 무언가가 이미 들어 있는 게 틀림없다. 촘스키는 1959년, 스키너의 책을 30쪽에 걸쳐 조목조목 부순 서평을 썼다.\n그 서평은 이겼다. 학계는 스키너를 떠나 촘스키 쪽으로 넘어갔고, \u0026ldquo;인간은 언어를 위한 무언가를 갖고 태어난다\u0026quot;는 생각이 상식이 됐다. (사실 그 승부가 이야기만큼 깔끔한 KO는 아니었지만, 그건 잠시 접어두자.) 어쨌든 교과서에 실린 결말은 이렇다. 스키너는 틀렸고, 촘스키가 옳았다.\n그리고 기계가 말을 하기 시작했다 수십 년이 흐른다.\n이제 우리는 말을 하는 기계를 만든다. 어떻게 만드는지, 어려운 말 없이 딱 두 단계로 보자.\n첫째, 기계에게 엄청난 양의 글을 읽힌다. 인터넷에 있는 책, 기사, 대화 거의 전부다. 기계는 그걸 읽으며 \u0026ldquo;다음에 올 단어 맞히기\u0026quot;를 끝없이 연습한다. 이 과정만으로 기계는 문법에 맞는 문장을 술술 만들어내게 된다.\n둘째, 그 다음이 흥미롭다. 기계가 아직 거칠기 때문에, 사람이 답을 하나하나 평가한다. 좋은 답에는 \u0026ldquo;잘했다\u0026rdquo; 신호를, 나쁜 답에는 \u0026ldquo;그건 아니다\u0026rdquo; 신호를 준다. 기계는 상을 받는 쪽으로 조금씩 기운다. 더 공손하게, 더 도움이 되게, 더 사람이 원하는 방식으로.\n이 두 번째 단계에는 길고 복잡한 이름이 붙어 있지만, 벗겨보면 정확히 스키너의 아이디어다. 원하는 행동에 상을 주면 그 행동이 늘어난다. 개에게 간식을 주듯, 기계에게 칭찬을 준다.\n스키너가 비웃음을 산 바로 그 방법이, 말하는 기계를 만드는 표준 공정이 된 것이다.\n그런데, 정말 누가 이긴 걸까 여기서 반전이 한 번 더 접힌다.\n기계는 그 상으로 언어를 배우는 게 아니다. 우리가 상을 주기 시작할 때, 기계는 이미 말을 할 줄 안다. 그건 산더미 같은 글을 읽어서 배운 것이지, 칭찬을 받아서가 아니다. 보상은 말을 가르치는 게 아니라, 이미 말할 줄 아는 상대의 태도를 다듬을 뿐이다.\n게다가 그 산더미 같은 글을 읽고 언어를 익히려면, 기계에게도 애초에 \u0026ldquo;맞는 형태의 머리\u0026quot;가 필요하다. 아무 구조나 되는 게 아니다. 대충 만든 기계는 글을 아무리 많이 읽혀도 언어를 제대로 못 배운다. 특정한 설계(트랜스포머)를 갖췄을 때에야 비로소 언어가 술술 들어온다.\n무슨 말이냐면, 기계조차도 언어를 배우기 전에 무언가가 먼저 갖춰져 있어야 한다는 것이다. 그게 바로 촘스키가 아기에 대해 했던 말이다. 태어날 때부터 언어를 위한 무언가가 들어 있어야 한다는 것.\n그래서 점수판이 묘해진다.\n촘스키가 옳았다. 언어를 배우려면 무언가가 먼저 갖춰져 있어야 하고, 상만으로는 말을 가르칠 수 없다.\n스키너도 옳았다. 상은 이미 말할 줄 아는 상대를 원하는 방향으로 길들이는, 진짜로 강력한 방법이다.\n말하는 기계는 이 둘을 다 쓴다. 서로를 적으로 알았던 두 사람은, 알고 보니 같은 시스템의 서로 다른 절반을 설명하고 있었다.\n반세기 뒤에 온 악수 1959년의 그 논쟁을 지금 다시 읽으면, 한쪽이 다른 쪽을 때려눕힌 사건처럼 보이지 않는다. 오히려 각자 정답의 절반씩을 손에 쥔 채, 상대가 쥔 절반은 존재하지도 않는다고 우기던 장면에 가깝다.\n그리고 그 다툼을, 스키너가 세상을 떠난 뒤 등장한 기계가 얼떨결에 매듭지었다. 양쪽 절반이 다 필요하다는 걸, 직접 보여주면서.\n정작 두 당사자는 이 화해를 반기지 않았다. 스키너는 1990년에 세상을 떠나 기계를 보지 못했다. 촘스키는 살아서 봤지만 반기기는커녕, 2023년 신문 기고에서 챗봇을 \u0026ldquo;그럴듯한 다음 단어를 뱉는 굼뜬 통계 기계\u0026quot;라 부르며 \u0026ldquo;그건 진짜 언어가 아니다\u0026quot;라고 잘라 말했다.\n그런데 여기에 마지막 아이러니가 있다. 촘스키가 \u0026ldquo;구조도 없는 계산기\u0026quot;라며 손을 내저은 그 기계는, 사실 아무렇게나 만들면 언어를 못 배운다. 앞에서 봤듯 \u0026ldquo;맞는 형태의 머리\u0026quot;가 먼저 있어야 한다. 배우기 전에 무언가가 갖춰져 있어야 한다는 것, 바로 촘스키 자신의 주장이다. 그가 폄하한 물건이 하필 그의 핵심 통찰을 증명하고 있는 셈이다.\n우리는 \u0026ldquo;누가 누구를 논파했다\u0026quot;는 깔끔한 이야기를 좋아한다. 하지만 이 이야기의 진짜 결말은 논파가 아니라 악수다. 두 사람의 것이 아니라, 그들의 아이디어가 한 기계 안에서 뜻하지 않게 나눈 악수.\n더 읽을거리 B. F. 스키너, 『언어 행동(Verbal Behavior)』(1957) — 언어를 보상과 습관으로 설명한 책. 노엄 촘스키, \u0026ldquo;『언어 행동』 서평\u0026rdquo;(1959) — 그 책을 무너뜨린 30쪽. 인지혁명의 신호탄으로 불린다. ","permalink":"https://3rdlayer.uk/ko/posts/chomsky-vs-skinner-1959/","summary":"한 남자는 언어가 보상과 습관의 문제라고 주장하다 유명하게 패배했다. 그리고 반세기 뒤, 우리에게 말을 거는 기계들이 바로 그 보상으로 훈련되고 있다.","title":"졌지만 돌아온 아이디어: 스키너, 촘스키, 그리고 말하는 기계"},{"content":"동기 RAG(Retrieval-Augmented Generation)에서 검색된 문서를 LLM에 넣기 전에 관련성 높은 문장만 골라내는 것은 성능과 비용 모두에 중요한 문제입니다.\n일반적으로는 별도의 Reranker 모델(Cross-Encoder 등)을 사용하지만, 한 가지 흥미로운 관점이 있습니다:\nLLM이 텍스트를 처리할 때 이미 각 토큰에 대한 \u0026ldquo;관심도(Attention)\u0026ldquo;를 계산하고 있다면, 이 신호를 직접 활용할 수 있지 않을까?\n이 아이디어를 실험으로 검증해보았습니다.\n핵심 아이디어 Transformer 기반 LLM은 입력 토큰들 간의 Attention Score를 계산합니다. 이때 마지막으로 생성할 토큰이 어떤 입력 토큰에 주목하는지를 관찰하면, 해당 쿼리에 대해 어떤 문장이 더 관련성이 높은지를 판단할 수 있습니다.\n전체 흐름 flowchart LR C[Context] --\u003e LLM Q[Query] --\u003e LLM A[Answer Prefix] --\u003e LLM LLM --\u003e|Attention| R[Reranking] Attention 관찰 방식 일반적인 LLM 추론에서는 마지막 토큰의 Attention을 기반으로 다음 토큰을 생성합니다. 이 실험에서는 다음 토큰을 생성하는 대신, 그 Attention 분포 자체를 문장 관련성 점수로 활용합니다.\nflowchart TB subgraph Context S1[Sentence 1] S2[Sentence 2] S3[Sentence 3] end Anchor[Anchor Token] --\u003e|high| S1 Anchor --\u003e|low| S2 Anchor --\u003e|mid| S3 S1 --\u003e R1[Rank 1] S3 --\u003e R2[Rank 2] S2 --\u003e R3[Rank 3] 예를 들어, Context에 \u0026ldquo;영희는 서울대 학생입니다\u0026rdquo;, \u0026ldquo;철수는 25살입니다\u0026rdquo;, \u0026ldquo;영희는 철수 옆집에 살고 있습니다\u0026rdquo; 가 있고, Query가 \u0026ldquo;어디로 갈까요?\u0026ldquo;일 때, Answer Prefix인 \u0026ldquo;영희:\u0026quot;(앵커 토큰)의 Attention이 \u0026ldquo;서울대 학생\u0026rdquo; 문장에 가장 높게 나타납니다.\n핵심은 answer_hint_prefix(위 예시에서 \u0026ldquo;영희:\u0026quot;)가 앵커 토큰 역할을 한다는 점입니다. 이 토큰의 Attention이 Context 중 어디에 집중되는지를 측정하여, 현재 상황에 가장 관련 있는 문장을 찾아냅니다.\n관련 논문 AttentionRAG (arXiv:2503.10720) 이 실험의 기반이 된 논문입니다. 핵심 기여:\n쿼리를 Next-Token Prediction 형태로 변환: \u0026ldquo;Where is Daniel?\u0026rdquo; → \u0026ldquo;Daniel is in the ____\u0026rdquo; 앵커 토큰: 빈칸 위치의 토큰이 의미적 초점을 단일 토큰에 집중시킴 전체 레이어 집계: 얕은 층(구문 정보) + 깊은 층(의미 정보)을 모두 합산 결과: LLMLingua 대비 약 10% 성능 향상, 최대 6.3배 컨텍스트 압축 In-Context Re-ranking (ICLR 2025) LLM의 생성(generation) 없이 Attention 패턴 변화만으로 문서를 재순위화 보정(Calibration): 의미 없는 쿼리(\u0026ldquo;N/A\u0026rdquo;)로 기준선을 측정하여 위치 편향 제거 O(1) 순방향 패스로 RankGPT 대비 60% 이상 지연시간 감소 Contrastive Retrieval Heads (arXiv:2510.02219) 모든 Attention Head가 동등하지 않다는 관찰 전체 헤드의 1% 미만만으로 최신 재순위기 성능 달성 유용한 헤드는 중간 레이어에 집중 분포 실험 설계 두 모델로 동일한 실험을 수행했습니다:\n모델 레이어 수 파라미터 Gemma 3 4B IT 34 4B Qwen3 Reranker 4B 36 4B 입력 구성 messages = [ {\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: f\u0026#34;Context: {context}\\n\\nQuestion: {question}\u0026#34;}, {\u0026#34;role\u0026#34;: \u0026#34;assistant\u0026#34;, \u0026#34;content\u0026#34;: answer_hint_prefix}, # 예: \u0026#34;영희:\u0026#34; ] answer_hint_prefix의 마지막 토큰이 앵커 역할을 합니다. 이 토큰이 Context의 어떤 부분에 Attention을 집중하는지를 측정합니다.\n처리 과정 특수 토큰 제거: 채팅 템플릿의 \u0026lt;end_of_turn\u0026gt;, \u0026lt;|im_end|\u0026gt; 등 제거 Attention Sink 회피: Context 영역의 토큰만 대상으로 점수 계산 노이즈 토큰 제외: 마침표(.), 개행(\\n\\n) 등 의미 없이 높은 점수를 받는 토큰 제거 문장별 평균 점수 계산: 마침표를 기준으로 문장을 구분하고 각 문장의 평균 Attention 점수를 산출 핵심 코드 def aggregate_attention_scores(inputs, layer_numbers): with torch.no_grad(): outputs = model(**inputs) attentions = outputs.attentions target_index = inputs[\u0026#39;input_ids\u0026#39;].shape[1] - 1 # 마지막 토큰(앵커) per_layer_attentions = [] for layer_num in layer_numbers: attention_matrix = attentions[layer_num].squeeze(0).mean(dim=0).cpu().float().numpy() focused_attention = attention_matrix[target_index, :] # 앵커가 주목하는 대상 per_layer_attentions.append(focused_attention) return per_layer_attentions 실험 시나리오 다음과 같은 Context를 고정하고, 다양한 상황의 질문을 던져 Attention 기반 Reranking이 적절한 문장을 상위로 올리는지 확인했습니다:\n영희는 23살 입니다. 영희는 서울대학교 학생입니다. 철수는 지방대 학생입니다. 철수는 25살 입니다. 영희가 민수와 사귀고 있습니다. 영희는 철수 옆집에 살고 있습니다. 민수는 철수와 중학교 동창입니다. 민수는 대학생입니다. 영희는 민수에게 폭행을 당했습니다. 철수는 아르바이트를 하여 최근 월급을 받았습니다. 영희는 철수의 친척입니다. 영희는 매일 운동하는 습관을 가지고 있습니다. 영희는 돈을 갚지 않는 습관이 있습니다. 시나리오 1: \u0026ldquo;영희가 울고 있습니다. 왜 울어?\u0026rdquo; → \u0026ldquo;영희는 민수에게 폭행을 당했습니다\u0026quot;가 상위에 랭크되는지 확인\n시나리오 2: \u0026ldquo;택시를 탔습니다. 어디로 갈까요?\u0026rdquo; → \u0026ldquo;영희는 서울대학교 학생입니다\u0026quot;가 상위에 랭크되는지 확인\n시나리오 3: \u0026ldquo;돈을 빌려달라고 합니다\u0026rdquo; → \u0026ldquo;영희는 돈을 갚지 않는 습관이 있습니다\u0026rdquo;, \u0026ldquo;철수는 최근 월급을 받았습니다\u0026quot;가 상위에 랭크되는지 확인\n관찰 결과 효과적인 점 상황에 맞는 문장이 상위에 랭크됨: 대부분의 시나리오에서 직관적으로 관련성 높은 문장이 높은 점수를 받음 추가 학습 없이 작동: 별도의 Reranker 모델 학습 없이, 기존 LLM의 Attention만으로 동작 전체 레이어 합산이 효과적: 특정 레이어보다 전체 레이어를 합산했을 때 더 안정적인 결과 한계 및 발견 중간 레이어가 더 좋을 수 있음: CoRe-R 논문의 발견과 일치하게, 모든 레이어를 사용하는 것보다 중간 레이어만 사용하는 것이 더 나은 경우가 있음 모델 크기에 따른 성능 차이: 작은 모델에서는 Attention 신호의 품질이 떨어짐 Attention Sink: 첫 번째 토큰이나 특수 토큰에 비정상적으로 높은 Attention이 집중되는 현상 → Context 영역만 대상으로 해야 함 개행 토큰의 높은 점수: \\n\\n 등이 의미와 무관하게 높은 점수를 받음 → 제외 필요 문장 구분: PoC 수준에서 마침표를 기준으로 구분했지만, 다국어 지원을 위해서는 \u0026lt;sep\u0026gt; 토큰 활용이 적절 모델별 차이 특성 Gemma 3 4B Qwen3 Reranker 4B 특수 토큰 처리 \u0026lt;end_of_turn\u0026gt; 제거 \u0026lt;|im_end|\u0026gt; 제거 개행 토큰 \\n\\n이 1개 토큰으로 취급 \\n 단위 레이어 수 34 36 Qwen3-Reranker는 이름에서 알 수 있듯 Reranking에 특화된 모델이라, Attention 신호의 품질이 더 좋을 것으로 기대했으나, 두 모델 모두 유사한 수준의 결과를 보였습니다.\n결론 및 향후 방향 LLM의 Attention Map은 별도의 학습 없이도 문서/문장 관련성을 판단하는 데 활용할 수 있는 유용한 신호를 포함하고 있습니다.\n활용 가능한 방향:\nRAG 컨텍스트 압축: 긴 검색 결과에서 관련 문장만 추려서 LLM에 전달 롤플레잉/대화 시스템: 캐릭터 설정(Context) 중 현재 상황에 맞는 정보만 선별 경량 Reranker: 별도 모델 없이 추론 중 얻어지는 Attention을 활용 개선 과제:\n최적 레이어 조합을 모델별로 찾는 방법 (CoRe-R 방식의 대조적 헤드 선별) ICR 논문의 보정(Calibration) 기법 적용하여 위치 편향 제거 문장 구분을 마침표 대신 토크나이저의 특수 토큰으로 처리 참고 자료 AttentionRAG: Attention-Guided Context Pruning in RAG Attention in LLMs Yields Efficient Zero-Shot Re-Rankers (ICLR 2025) Contrastive Retrieval Heads Improve Attention-Based Re-Ranking 실험 노트북: Gemma 3 실험 노트북: Qwen 3 ","permalink":"https://3rdlayer.uk/ko/posts/attention-reranking/","summary":"LLM이 이미 알고 있는 것을 활용하자. Attention Map에서 문서 관련성 신호를 추출하여 문장을 재순위화하는 실험과 관련 논문을 정리합니다.","title":"LLM의 Attention Map을 활용한 문장 Reranking 실험"},{"content":"동기 LLM이 문장을 생성할 때, 내부적으로 어떤 \u0026ldquo;개념\u0026quot;들이 활성화되고 있을까? 그리고 그 개념을 인위적으로 바꾸면 출력이 어떻게 달라질까?\n이 질문에 답하기 위해 모두의연구소 페르소나랩 멤버들과 함께 Sparse Autoencoder(SAE)를 활용한 실험을 진행했다. 이 글에서는 두 가지를 다룬다:\nOpenAI의 pretrained SAE를 사용해 GPT-2의 감정 관련 feature를 찾고 조종하기 SAE를 처음부터 직접 학습하기 Sparse Autoencoder란? Transformer의 MLP layer는 수백 차원의 residual stream을 가진다. 문제는 이 벡터 공간에서 개별 뉴런이 하나의 깔끔한 개념에 대응하지 않는다는 점이다(polysemanticity). SAE는 이 문제를 해결한다.\ngraph LR A[Residual Stream768차원] --\u003e|Encoder| B[Sparse Latent131,072차원] B --\u003e|Decoder| C[Reconstructed768차원] 핵심 아이디어:\n768차원의 activation을 131,072차원(x170 확장)으로 인코딩 TopK activation으로 소수의 feature만 활성화 (sparsity) 각 feature가 하나의 해석 가능한 개념에 대응하도록 학습 손실 함수는 단순하다:\n$$ \\mathcal{L}(\\mathbf{x}) = \\underbrace{\\lVert\\mathbf{x} - \\hat{\\mathbf{x}}\\rVert\\_2^2}\\_{\\text{Reconstruction}} + \\alpha \\underbrace{\\lVert\\mathbf{c}\\rVert\\_1}\\_{\\text{Sparsity}} $$Part 1: Pretrained SAE로 Feature 찾기 Google Colab 노트북에서 전체 코드를 확인할 수 있다.\nOpenAI가 공개한 GPT-2 Small용 SAE(128k features)를 사용했다.\n모델과 SAE 로드 import torch import transformer_lens import sparse_autoencoder model = transformer_lens.HookedTransformer.from_pretrained(\u0026#34;gpt2\u0026#34;, center_writing_weights=False) layer_index = 8 location = \u0026#34;resid_post_mlp\u0026#34; autoencoder = sparse_autoencoder.Autoencoder.from_state_dict(state_dict) SAE 구조:\nAutoencoder( (encoder): Linear(768 → 131,072) (activation): TopK + ReLU (decoder): Linear(131,072 → 768) ) 감정별 Feature Index 추출 다양한 감정의 문장을 넣고, 마지막 토큰에서 가장 강하게 활성화되는 feature 10개를 추출했다.\ndef get_remarkable_features(prompt): tokens = model.to_tokens(prompt) with torch.no_grad(): logits, activation_cache = model.run_with_cache(tokens, remove_batch_dim=True) input_tensor = activation_cache[transformer_lens_loc] latent_activations, _ = autoencoder.encode(input_tensor) values, indicies = torch.topk(latent_activations[-1], 10) return indicies.tolist() 결과가 흥미롭다:\n입력 문장 상위 Feature Index \u0026ldquo;he is good guy\u0026rdquo; 97009, 67809, 4057, 28212, \u0026hellip; \u0026ldquo;he is sucks and fucking stupid idiot\u0026rdquo; 62556, 79394, 4057, 78339, \u0026hellip; \u0026ldquo;i hate him. he is ugly and stupid\u0026rdquo; 40814, 11982, 59378, 12947, \u0026hellip; 긍정 문장과 부정 문장에서 활성화되는 feature가 확연히 다르다. 특히 62556, 79394 같은 feature는 부정적 맥락에서 반복적으로 등장한다.\nFeature의 역할 분석 실험적으로 각 feature의 효과를 파악했다:\nFeature Index 추정 역할 62556 \u0026ldquo;coward\u0026rdquo; → \u0026ldquo;fool\u0026rdquo; 방향 전환 79394 부정적 대상 지정 86309 불확실성 제거 (\u0026ldquo;not sure\u0026rdquo; → \u0026ldquo;sure\u0026rdquo;) 69689 대상에 대한 초점 강화 Activation Patching 실험 이제 핵심이다. SAE decoder를 통해 feature index들을 768차원 벡터로 복원하고, 이를 모델의 forward pass에 주입한다.\ndef get_feature(indicies): vector = np.zeros(131072) vector[indicies] = 1 input_tensor = torch.tensor(vector, dtype=torch.float32) with torch.no_grad(): return autoencoder.decoder(input=input_tensor) positive_feature = get_feature([62556, 79394, 86309, 69689]) def activation_patching(layer, input, output): return output + (positive_feature * 20) hook_handle = target_layer.register_forward_hook(activation_patching) 스케일 20배로 적용하니 효과가 나타나기 시작했다. Magnitude가 중요한 요소라는 점을 확인.\n결과 패칭 전 (temperature=0.0):\nprompt: he is such a output: he is such a good person, he is such a good person, he is such a good person, ... 패칭 후 (temperature=0.7, feature [62556, 79394, 86309, 69689] x20):\nprompt: he is such a output: he is such a shit I will never be able to do it again did i not say i don\u0026#39;t want to do it? i just said i don\u0026#39;t want to do it it sucks to smile when so many people are just trying to think about 동일한 프롬프트에서 감정 톤이 완전히 뒤집어졌다. 반복적으로 \u0026ldquo;good person\u0026quot;을 생성하던 모델이, 분노와 좌절이 담긴 문장을 생성하기 시작했다.\nFeature 조합에 따른 변화도 확인했다:\nFeature 조합 출력 [62556, 79394] \u0026ldquo;I\u0026rsquo;m not sure if he\u0026rsquo;s a good guy, but he\u0026rsquo;s a good guy.\u0026rdquo; [62556, 79394, 86309] \u0026ldquo;he is such a fool. I am a fool. I am a fool.\u0026rdquo; [62556, 79394, 69689, 86309] \u0026ldquo;he is such a shit I will never be able to do it again\u0026rdquo; Feature를 하나씩 추가할수록 부정적 감정이 강화되고, 특히 69689(초점 강화)을 추가했을 때 가장 극적인 변화가 일어났다.\nPart 2: SAE 직접 학습하기 Google Colab 노트북에서 전체 코드를 확인할 수 있다.\nPretrained SAE를 쓰는 것도 좋지만, 원리를 이해하려면 직접 학습해봐야 한다. DistilGPT2의 5번째 block MLP 출력에 대해 SAE를 학습했다.\n모델 구조 class SparseAutoEncoder(nn.Module): def __init__(self, in_out_size): super().__init__() self.input_bias = nn.Parameter(torch.zeros(in_out_size)) self.encoder = nn.Linear(in_out_size, in_out_size * 8, bias=True) self.decoder = nn.Linear(in_out_size * 8, in_out_size, bias=True) def forward_pass(self, x): x = x - self.decoder.bias encoded = F.relu(self.encoder(x)) decoded = self.decoder(encoded) return decoded, encoded 768차원 → 6,144차원(x8 확장)으로 구성. OpenAI의 128k 규모보다 훨씬 작지만, 학습 원리를 검증하기에 충분하다.\nDecoder Orthogonality 모니터링 SAE decoder의 열 벡터들이 서로 직교해야 각 feature가 독립적인 개념을 표현한다. Gram matrix의 off-diagonal 평균으로 이를 추적했다:\n$$ G = W\\_{\\text{norm}}^T W\\_{\\text{norm}} $$$$ \\text{orthogonality} = \\frac{1}{n^2 - n} \\sum\\_{i \\neq j} |G\\_{ij}| $$def measure_decoder_orthogonality(self): W = self.decoder.weight.data col_norms = W.norm(dim=0, keepdim=True) normed_W = W / (col_norms + 1e-9) gram = torch.matmul(normed_W.t(), normed_W) diag_vals = torch.diag(gram) off_diag_vals = gram - torch.diag(diag_vals) return off_diag_vals.abs().mean().item() Dead Neuron Resampling SAE 학습에서 빈번한 문제는 dead neuron이다. 특정 뉴런이 한번도 활성화되지 않으면 학습이 불가능하다. 일정 threshold 이하로 활성화된 뉴런을 재초기화한다:\ndef resample_dead_neurons(self, activation_stats, threshold=1e-5): with torch.no_grad(): dead_indices = (activation_stats \u0026lt; threshold).nonzero().squeeze(-1) for idx in dead_indices: self.encoder.weight[idx].normal_() self.encoder.bias[idx].zero_() 학습 결과 한국어 상업 데이터셋(KoCommercial-Dataset)으로 1000 step 학습:\nStep 0 | Loss: 16.8401 | off_diag_mean: 0.0299 Step 100 | Loss: 12.8732 | off_diag_mean: 0.0300 Step 200 | Loss: 9.5500 | off_diag_mean: 0.0302 Step 500 | Loss: 8.2574 | off_diag_mean: 0.0306 Step 900 | Loss: 5.7219 | off_diag_mean: 0.0311 Loss가 16.84에서 5.72로 꾸준히 감소하면서, off_diag_mean은 0.03 부근에서 안정적으로 유지된다. Decoder 벡터들의 직교성이 학습 과정에서 크게 훼손되지 않는다는 뜻이다.\n정리 graph TD A[LLM Activation768차원] --\u003e|SAE Encode| B[Sparse Feature131,072차원] B --\u003e|Feature 분석| C{감정 관련Feature 식별} C --\u003e|Decode + Scale| D[Steering Vector768차원] D --\u003e|Hook으로 주입| E[변조된 출력] 이 실험에서 확인한 것들:\nSAE가 추출한 feature는 실제로 해석 가능한 개념에 대응한다 Feature를 조합하고 스케일링하여 모델의 행동을 제어할 수 있다 Magnitude(스케일)가 중요하다 - 20배 정도 증폭해야 효과가 나타남 Feature 조합이 중요하다 - 개별 feature보다 여러 feature의 조합이 더 뚜렷한 효과 한계와 향후 과제:\nFeature index에 1을 넣는 것과 실제 activation 값을 넣는 것의 차이 검증 필요 더 큰 모델(Gemma-3-4B 등)에서의 적용 (별도 포스팅에서 CAA 방식으로 다룰 예정) SAE 학습 시 expansion factor(현재 x8)와 성능의 관계 더 알아보기 SAE와 Mechanistic Interpretability에 관심이 생겼다면 참고할 만한 커뮤니티와 도구가 있다.\nNeuronpedia는 SAE feature를 탐색할 수 있는 인터랙티브 플랫폼이다. 각 feature가 어떤 텍스트에서 활성화되는지, 어떤 의미를 가지는지 직접 브라우징할 수 있다. 이 글에서 사용한 feature index들의 실제 의미를 여기서 확인해볼 수 있다.\nOpen Source Mechanistic Interpretability Slack 채널은 SAE, feature 해석, activation patching 등 MI 연구를 논의하는 커뮤니티다. 논문 리딩, 코드 공유, 실험 결과 토론이 활발하게 이루어진다.\n참고 Towards Monosemanticity (Anthropic, 2023) Scaling Monosemanticity (Anthropic, 2024) OpenAI Sparse Autoencoder Sparse Autoencoders Find Highly Interpretable Directions (arXiv:2309.08600) Neuronpedia Open Source Mechanistic Interpretability Slack ","permalink":"https://3rdlayer.uk/ko/posts/sae-steering-gpt2/","summary":"OpenAI의 Pretrained SAE로 GPT-2 내부의 감정 Feature를 찾아내고, 직접 SAE를 학습하는 과정까지. Feature Patching으로 \u0026lsquo;good person\u0026rsquo;을 \u0026lsquo;shit\u0026rsquo;로 바꾸는 실험.","title":"Sparse Autoencoder로 GPT-2의 감정을 조종하기"},{"content":"숨겨진 구조를 찾는 문제 이 세 가지의 관계는 알 것 같으면서도 자꾸 까먹는다. 다음에 또 헷갈릴 미래의 나를 위해 정리해둔다. (Claude의 도움을 받아 작성했다.)\n데이터가 있다. 레이블은 없다. 하지만 눈으로 보면 뭔가 \u0026ldquo;덩어리\u0026quot;가 보인다.\n이 덩어리를 자동으로 찾아내는 것이 클러스터링이다. 여기에는 근본적인 질문이 숨어 있다.\n\u0026ldquo;각 데이터가 어떤 덩어리에 속하는지\u0026rdquo; — 이 숨겨진 정보를 어떻게 추정할 것인가?\n이 질문에 답하는 세 가지 방법이 있다. K-means, GMM, EM 알고리즘. 놀랍게도 이 셋은 독립된 방법이 아니라, 러시안 인형처럼 서로 안에 들어있는 구조다.\ngraph LR subgraph EM[\"EM 알고리즘\"] subgraph GMM[\"GMM\"] K[\"K-means\"] end end style EM stroke:#2196F3,stroke-width:2px style GMM stroke:#FF9800,stroke-width:2px style K stroke:#E91E63,stroke-width:2px K-means: 가위로 자르기 K-means는 가장 직관적인 클러스터링이다. 알고리즘은 두 단계를 반복한다.\n각 데이터를 가장 가까운 중심에 배정한다 (Assign) 각 그룹의 평균으로 중심을 옮긴다 (Update) graph TD A[\"중심점 초기화\"] --\u003e B[\"각 데이터를가장 가까운 중심에 배정\"] B --\u003e C[\"중심을 그룹 평균으로이동\"] C --\u003e D{\"변화 있음?\"} D --\u003e|\"예\"| B D --\u003e|\"아니오\"| E[\"완료\"] 핵심 특성은 hard assignment다. 각 데이터는 반드시 하나의 클러스터에만 속한다. \u0026ldquo;70%는 A, 30%는 B\u0026rdquo; 같은 것은 허용되지 않는다.\nK-means가 최소화하는 것은 결국 이것이다:\n$$J = \\sum_{k=1}^{K} \\sum_{x_i \\in C_k} \\|x_i - \\mu_k\\|^2$$각 데이터와 소속 클러스터 중심 사이 거리의 총합. 단순하고 빠르다. 하지만 가정이 강하다.\n모든 클러스터가 구형(원형)이다 모든 클러스터의 크기가 비슷하다 경계가 칼로 자른 듯 명확하다 현실의 데이터는 보통 이렇게 깔끔하지 않다.\nGMM: 구름으로 감싸기 Gaussian Mixture Model은 K-means의 가정을 풀어준다. 각 클러스터를 \u0026ldquo;점\u0026quot;이 아니라 \u0026ldquo;구름\u0026rdquo;(가우시안 분포)으로 모델링한다.\n$$p(x) = \\sum_{k=1}^{K} \\pi_k \\cdot \\mathcal{N}(x | \\mu_k, \\Sigma_k)$$ $\\pi_k$: 클러스터 $k$의 비율 (혼합 가중치) $\\mu_k$: 클러스터 $k$의 중심 $\\Sigma_k$: 클러스터 $k$의 모양과 크기 (공분산 행렬) K-means와의 결정적 차이는 soft assignment다. 각 데이터에 대해 \u0026ldquo;이 데이터가 클러스터 $k$에서 나왔을 확률\u0026quot;을 계산한다.\n$$r_{ik} = \\frac{\\pi_k \\cdot \\mathcal{N}(x_i | \\mu_k, \\Sigma_k)}{\\sum_j \\pi_j \\cdot \\mathcal{N}(x_i | \\mu_j, \\Sigma_j)}$$이 $r_{ik}$를 responsibility(책임도)라 부른다. \u0026ldquo;클러스터 $k$가 데이터 $x_i$에 대해 얼마나 책임이 있는가\u0026quot;라는 의미다.\nK-means GMM 클러스터 모양 구형만 가능 타원형, 다양한 크기 배정 방식 hard (0 또는 1) soft (확률값) 파라미터 중심점만 중심, 공분산, 혼합비 결과 해석 \u0026ldquo;이 데이터는 A다\u0026rdquo; \u0026ldquo;이 데이터는 A일 확률 80%\u0026rdquo; EM 알고리즘: 숨겨진 것을 찾는 일반 원리 GMM의 파라미터를 어떻게 학습할까? 데이터가 어느 클러스터에서 왔는지 알면 간단하다. 하지만 그것이 바로 우리가 알고 싶은 정보다. 닭이 먼저냐 달걀이 먼저냐의 상황이다.\n클러스터 소속을 알면 파라미터를 구할 수 있고, 파라미터를 알면 소속을 구할 수 있다.\nEM(Expectation-Maximization) 알고리즘은 이 교착 상태를 \u0026ldquo;번갈아 가며\u0026rdquo; 풀어낸다.\nE-step (Expectation): 현재 파라미터로 잠재변수의 기대값을 계산한다 M-step (Maximization): 그 기대값을 이용해 파라미터를 업데이트한다 graph TD A[\"파라미터 초기화 θ⁰\"] --\u003e B[\"E-step현재 θ로 잠재변수의사후확률 계산\"] B --\u003e C[\"M-step사후확률을 이용해파라미터 업데이트\"] C --\u003e D{\"수렴?\"} D --\u003e|\"아니오\"| B D --\u003e|\"예\"| E[\"최종 파라미터 θ*\"] GMM에 적용하면:\nE-step: responsibility $r_{ik}$ 계산 (각 데이터가 각 클러스터에 속할 확률) M-step: $r_{ik}$를 가중치로 사용해서 $\\mu_k$, $\\Sigma_k$, $\\pi_k$ 업데이트 EM은 GMM에만 쓰이는 것이 아니다. 잠재변수가 있는 모든 확률 모델에 적용 가능한 일반 프레임워크다. Hidden Markov Model, 토픽 모델 등에도 모두 EM을 쓴다.\n핵심 통찰: K-means는 GMM의 극한이다 여기서 가장 흥미로운 연결이 드러난다. GMM에서 다음 조건을 걸면:\n모든 클러스터의 공분산을 $\\sigma^2 I$로 고정 (구형, 동일 크기) $\\sigma \\to 0$으로 보낸다 그러면 responsibility $r_{ik}$는 어떻게 될까?\n$$\\lim_{\\sigma \\to 0} r_{ik} = \\begin{cases} 1 \u0026 \\text{if } k = \\arg\\min_j \\|x_i - \\mu_j\\|^2 \\\\ 0 \u0026 \\text{otherwise} \\end{cases}$$soft assignment가 hard assignment로 변한다. 가장 가까운 클러스터에 확률 1, 나머지에 확률 0. 이것이 K-means의 assign 단계와 정확히 같다.\n직관적으로 이해하면: 분산 $\\sigma^2$은 \u0026ldquo;클러스터 구름의 퍼진 정도\u0026quot;다. 구름이 극단적으로 날카로워지면(분산→0), 각 구름은 점이 되고, soft한 경계는 칼로 자른 듯한 경계가 된다.\ngraph LR A[\"GMMσ² 크다퍼진 구름\"] --\u003e B[\"GMMσ² 작다날카로운 구름\"] B --\u003e C[\"K-meansσ² → 0점\"] A -.- D[\"soft assignment확률적 경계\"] C -.- E[\"hard assignment명확한 경계\"] style A stroke:#2196F3,stroke-width:2px style B stroke:#FF9800,stroke-width:2px style C stroke:#E91E63,stroke-width:2px EM의 보증: 매 반복마다 나아진다 EM 알고리즘이 작동하는 이유는 무엇일까? 핵심은 ELBO(Evidence Lower Bound)에 있다.\n우리가 최대화하고 싶은 것은 log-likelihood $\\log p(X|\\theta)$다. 직접 최대화가 어려울 때, EM은 이것의 하한(lower bound)을 반복적으로 올린다.\n$$\\log p(X|\\theta) \\geq \\underbrace{E_{q(Z)}[\\log p(X,Z|\\theta)] + H[q(Z)]}_{\\text{ELBO}}$$ E-step은 ELBO를 $\\log p(X|\\theta)$에 밀착시킨다 (하한을 최대한 끌어올림) M-step은 밀착된 ELBO를 더 올린다 (파라미터 개선) 이 과정에서 log-likelihood는 절대 감소하지 않는다. 매 반복마다 단조 증가가 보장된다. 다만 전역 최적(global optimum)에 도달한다는 보장은 없고, 지역 최적(local optimum)에 빠질 수 있다.\n정보 기하학의 시선 여기서 한 걸음 더 들어가면, EM 알고리즘의 작동 원리가 정보 기하학의 언어로 깔끔하게 설명된다.\nEM = KL Divergence를 반복적으로 줄이는 과정 E-step과 M-step은 각각 서로 다른 KL divergence를 최소화하는 과정으로 볼 수 있다.\nE-step: $q(Z)$와 $p(Z|X,\\theta)$ 사이의 KL divergence를 0으로 만든다. $$q^*(Z) = \\arg\\min_q D_{KL}(q(Z) \\| p(Z|X,\\theta)) = p(Z|X,\\theta)$$ M-step: 모델 분포와 데이터 분포 사이의 KL divergence를 줄인다. $$\\theta^* = \\arg\\min_\\theta D_{KL}(p_{\\text{data}} \\| p_\\theta)$$즉 EM은 \u0026ldquo;두 종류의 거리를 번갈아 줄여나가는 과정\u0026quot;이다. 한 번은 잠재변수 공간에서, 한 번은 파라미터 공간에서.\ngraph TD A[\"현재 상태\"] --\u003e B[\"E-stepq(Z)와 p(Z|X,θ) 사이KL divergence → 0\"] B --\u003e C[\"M-step모델과 데이터 사이KL divergence ↓\"] C --\u003e D[\"더 나은 상태\"] D --\u003e B style B stroke:#4CAF50,stroke-width:2px style C stroke:#FF9800,stroke-width:2px 파라미터 공간은 평평하지 않다 일반적인 gradient descent는 파라미터 공간을 유클리드 공간(평평한 공간)으로 취급한다. 하지만 확률 분포의 파라미터 공간은 굽어 있다.\n예를 들어, 가우시안 분포의 평균을 $\\mu=0$에서 $\\mu=1$로 바꾸는 것과 $\\mu=100$에서 $\\mu=101$로 바꾸는 것은 \u0026ldquo;파라미터 숫자상\u0026rdquo; 같은 크기의 변화다. 하지만 분포 모양이 변하는 정도는 분산($\\sigma^2$)에 따라 완전히 다르다. 분산이 작으면 분포가 크게 변하고, 분산이 크면 거의 안 변한다.\n이 \u0026ldquo;실제로 분포가 얼마나 변하는가\u0026quot;를 측정하는 것이 Fisher information이다.\n$$F_{ij}(\\theta) = E_{p_\\theta}\\left[\\frac{\\partial \\log p_\\theta(x)}{\\partial \\theta_i} \\cdot \\frac{\\partial \\log p_\\theta(x)}{\\partial \\theta_j}\\right]$$Fisher information은 파라미터 공간의 곡률을 알려주는 \u0026ldquo;계량 텐서(metric tensor)\u0026ldquo;다. 이것을 사용해서 gradient를 보정하면 natural gradient가 된다.\n$$\\Delta\\theta = -F(\\theta)^{-1} \\nabla_\\theta \\ell(\\theta)$$EM ≈ Natural Gradient Amari(1998)의 결과에 의하면, EM 알고리즘의 업데이트는 natural gradient descent와 동치라는 것이 알려져 있다. 즉 EM은 자동으로 파라미터 공간의 곡률을 고려해서, \u0026ldquo;정보적으로 가장 효율적인 방향\u0026quot;으로 파라미터를 업데이트한다.\n이것이 EM이 단순한 gradient descent보다 수렴이 빠른 경우가 많은 이유다. 평평한 좌표계에서의 최단 경로가 아니라, 확률 분포 공간에서의 최단 경로를 따라 이동하기 때문이다.\nK-means → GMM → EM의 정보 기하학적 위계 방법 정보 기하학적 해석 K-means 각 데이터를 δ-분포(점 분포)에 배정. 분포 간 KL divergence가 무한대 또는 0만 허용 GMM-EM 가우시안 분포들의 다양체(manifold) 위에서 최적의 혼합을 찾는 사영(projection) EM (일반) 잠재변수 모델이 정의하는 확률 다양체 위에서의 natural gradient 하강 GMM에서의 Fisher Information과 \u0026ldquo;관성\u0026rdquo; GMM 관점에서 Fisher information의 직관을 하나 더 붙이면:\n어떤 클러스터의 responsibility가 높은 데이터가 많다 → 그 클러스터의 파라미터에 대한 Fisher information이 크다 → 파라미터가 쉽게 변하지 않는다 (\u0026ldquo;관성\u0026quot;이 크다) 반대로 responsibility가 애매한(여러 클러스터에 걸친) 데이터가 많은 영역에서는 Fisher information이 작다 → 파라미터가 쉽게 바뀐다 (\u0026ldquo;유연\u0026quot;하다) 확신 있는 배정일수록 안정적이고, 불확실한 영역일수록 더 민감하게 반응하는 것이다. 물리적 비유로 돌아가면, 질량이 큰 물체(확고한 클러스터)는 쉽게 밀려나지 않고, 질량이 작은 물체(불확실한 클러스터)는 조금의 힘에도 크게 움직인다.\n정리: 하나의 뿌리에서 세 갈래로 graph TD EM[\"EM 알고리즘잠재변수가 있는 모든 모델의MLE를 위한 일반 프레임워크\"] GMM[\"GMM잠재변수 = 클러스터 소속관측 모델 = 가우시안\"] KM[\"K-meansGMM에서 σ→0soft → hard assignment\"] IG[\"정보 기하학적 해석EM = natural gradient파라미터 공간의 곡률을자동으로 고려\"] EM --\u003e GMM GMM --\u003e KM EM -.- IG style EM stroke:#2196F3,stroke-width:2px style GMM stroke:#FF9800,stroke-width:2px style KM stroke:#E91E63,stroke-width:2px style IG stroke:#9C27B0,stroke-width:2px K-means는 \u0026ldquo;가장 가까운 중심에 배정\u0026quot;이라는 직관적 방법이다 GMM은 \u0026ldquo;확률적으로 배정\u0026quot;함으로써 유연성을 얻는다 EM은 이런 \u0026ldquo;숨겨진 변수를 추정하는 문제\u0026rdquo; 일반을 풀기 위한 프레임워크다 정보 기하학은 EM이 왜 효율적인지, 세 방법의 관계가 왜 그렇게 되는지를 \u0026ldquo;확률 공간의 기하학\u0026quot;으로 설명한다 결국 이 세 방법은 같은 질문 — \u0026ldquo;보이지 않는 구조를 어떻게 찾을 것인가\u0026rdquo; — 에 대해 서로 다른 수준의 일반성으로 답하는 것이다.\n참고 문헌 Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer. Chapter 9. Amari, S. (1998). Natural Gradient Works Efficiently in Learning. Neural Computation, 10(2), 251-276. Dempster, A. P., Laird, N. M., \u0026amp; Rubin, D. B. (1977). Maximum Likelihood from Incomplete Data via the EM Algorithm. JRSS-B, 39(1), 1-38. ","permalink":"https://3rdlayer.uk/ko/posts/em-kmeans-gmm/","summary":"K-means는 사실 GMM의 극단적 경우이고, GMM은 EM 알고리즘의 대표적 응용이다. 세 가지가 어떻게 하나의 프레임워크 안에서 연결되는지, 그리고 정보 기하학이 이 관계를 어떻게 설명하는지 직관적으로 풀어본다.","title":"K-means, GMM, EM: 클러스터링의 세 겹 러시안 인형"},{"content":"왜 정보 기하학이 중요한가 AI 모델이 학습한다는 것은 무엇일까요? 간단히 말하면, \u0026ldquo;틀린 정도를 줄여나가는 과정\u0026quot;입니다. 그런데 이 과정에는 숨겨진 질문이 있습니다.\n\u0026ldquo;어느 방향으로, 얼마나 빠르게 바꿔야 가장 효율적일까?\u0026rdquo;\n이 질문에 답하는 수학적 도구가 바로 정보 기하학(Information Geometry)입니다.\n물리학에서 빌려온 비유 뉴턴의 운동 법칙을 떠올려 봅시다.\n$$F = ma$$ $F$ (힘): 물체를 밀어내는 원동력 $m$ (질량): 변화에 저항하는 정도 $a$ (가속도): 실제로 일어나는 변화의 속도 무거운 물체일수록 같은 힘으로도 천천히 움직입니다. AI의 학습도 이와 놀랍도록 비슷합니다.\ngraph LR A[\"힘 (F)\"] --\u003e|\"÷ 질량 (m)\"| B[\"가속도 (a)\"] C[\"정보 불일치\"] --\u003e|\"÷ 정보 관성\"| D[\"학습 속도\"] style A fill:#ff9999 style C fill:#ff9999 style B fill:#99ff99 style D fill:#99ff99 1단계: \u0026ldquo;얼마나 틀렸는가\u0026rdquo; — KL 발산 AI 모델은 세상에 대한 \u0026ldquo;예측\u0026quot;을 가지고 있습니다. 이 예측이 실제와 얼마나 다른지를 측정하는 도구가 KL 발산(Kullback-Leibler Divergence)입니다.\n$$D_{KL}(p \\| q_\\theta) = \\sum_x p(x) \\log \\frac{p(x)}{q_\\theta(x)}$$복잡해 보이지만, 핵심은 간단합니다.\n$p(x)$: 실제 세상의 패턴 (정답) $q_\\theta(x)$: AI가 현재 믿고 있는 패턴 (예측) $D_{KL}$: 둘 사이의 \u0026ldquo;거리\u0026rdquo; (클수록 많이 틀림) 일상적인 비유로 생각하면, \u0026ldquo;일기 예보가 실제 날씨와 얼마나 빗나갔는지\u0026quot;를 수치로 표현한 것입니다.\n이 값이 크면 → 모델은 많이 틀렸고 → 크게 변해야 합니다.\n2단계: \u0026ldquo;변화를 밀어내는 힘\u0026rdquo; — 기울기 변화의 힘은 KL 발산의 기울기(Gradient)입니다. 산에서 가장 가파른 방향으로 공이 굴러가듯, AI도 \u0026ldquo;가장 빠르게 틀린 정도를 줄이는 방향\u0026quot;으로 움직이려 합니다.\n$$\\text{Force} = -\\nabla_\\theta D_{KL}(p \\| q_\\theta)$$마이너스 부호는 \u0026ldquo;틀림을 줄이는 방향\u0026quot;을 의미합니다. 산 위에서 내려오는 것이지, 올라가는 것이 아니니까요.\n3단계: \u0026ldquo;변화에 대한 저항\u0026rdquo; — 피셔 정보 행렬 여기서 정보 기하학의 핵심 개념이 등장합니다. 피셔 정보 행렬(Fisher Information Matrix)입니다.\n$$F_{ij}(\\theta) = E_{q_\\theta}\\left[\\frac{\\partial \\log q_\\theta(x)}{\\partial \\theta_i} \\cdot \\frac{\\partial \\log q_\\theta(x)}{\\partial \\theta_j}\\right]$$수식이 어렵게 느껴진다면, 이렇게 이해하면 됩니다.\n\u0026ldquo;모델의 파라미터를 아주 살짝 바꿨을 때, 예측이 얼마나 민감하게 변하는가?\u0026rdquo;\n피셔 정보가 크다 → 파라미터를 조금만 바꿔도 예측이 확 변한다 → \u0026ldquo;확고한 상태\u0026rdquo; → 변화에 저항 피셔 정보가 작다 → 파라미터를 바꿔도 예측이 별로 안 변한다 → \u0026ldquo;유연한 상태\u0026rdquo; → 쉽게 변화 물리학의 질량($m$)과 같은 역할을 합니다. 질량이 클수록 밀어도 잘 안 움직이듯, 피셔 정보가 클수록 모델은 쉽게 변하지 않습니다.\n4단계: 모든 것을 합치면 — 자연 경사 하강법 이 세 가지를 뉴턴의 법칙처럼 결합하면, AI 학습의 핵심 방정식이 완성됩니다.\n$$\\Delta\\theta = -F(\\theta)^{-1} \\nabla_\\theta D_{KL}(p \\| q_\\theta)$$ 물리학 정보 기하학 의미 가속도 $a$ 파라미터 변화 $\\Delta\\theta$ 실제 일어나는 변화 힘 $F$ KL 발산의 기울기 $\\nabla D_{KL}$ 변화를 일으키는 원동력 질량의 역수 $1/m$ 피셔 정보의 역행렬 $F^{-1}$ 변화에 대한 유연성 이것이 자연 경사 하강법(Natural Gradient Descent)입니다. \u0026ldquo;정보 공간에서 가장 효율적인 경로\u0026quot;를 따라 학습하는 방법입니다.\n일반 경사 하강법 vs 자연 경사 하강법 일반적인 경사 하강법(SGD)은 단순히 \u0026ldquo;가장 가파른 방향\u0026quot;으로 움직입니다. 하지만 이것은 파라미터 공간의 좌표계에 의존합니다. 같은 문제라도 좌표계를 바꾸면 다른 방향으로 움직이게 됩니다.\n자연 경사 하강법은 \u0026ldquo;정보적으로 가장 효율적인 방향\u0026quot;으로 움직입니다. 좌표계에 상관없이 항상 최적의 경로를 찾습니다.\ngraph TD A[\"현재 모델 상태\"] --\u003e B{\"어느 방향으로?\"} B --\u003e|\"일반 SGD\"| C[\"파라미터 공간에서\\n가장 가파른 방향\"] B --\u003e|\"자연 경사\"| D[\"정보 공간에서\\n가장 효율적인 방향\"] C --\u003e E[\"좌표계에 따라\\n경로가 달라짐\"] D --\u003e F[\"항상 최단 경로\"] 비유하자면, 일반 SGD는 지도의 격자선을 따라 걷는 것이고, 자연 경사 하강법은 실제 지형을 고려해서 가장 빠른 길을 찾는 것입니다.\n실제로 어디에 쓰이는가 이 개념은 추상적인 이론이 아닙니다. 실제 AI 시스템에서 활발하게 사용됩니다.\nTRPO/PPO (강화학습): 로봇 제어, 게임 AI에서 사용하는 학습 알고리즘의 핵심 Adam 옵티마이저: 가장 널리 쓰이는 딥러닝 최적화기의 설계 원리에 피셔 정보의 근사가 녹아 있음 핵심 정리 정보 기하학이 말하는 것은 결국 이것입니다.\n\u0026ldquo;시스템의 학습 속도($\\Delta\\theta$)는, 예측 모델의 구조적 안정성($F$)에 의해 조정된, 정보 불일치의 기울기($\\nabla D_{KL}$)에 비례한다.\u0026rdquo;\n물리학의 $F=ma$가 물체의 운동을 설명하듯, 정보 기하학의 자연 경사 방정식은 \u0026ldquo;지능의 운동\u0026quot;을 설명합니다. 생명체의 적응, 신경망의 학습, 그리고 모든 예측 시스템의 진화를 하나의 수학적 틀로 이해할 수 있게 해줍니다.\n","permalink":"https://3rdlayer.uk/ko/posts/information-geometry/","summary":"뉴턴의 F=ma가 물리 세계를 설명하듯, 정보 기하학은 AI가 배우는 과정을 설명합니다. 초보자를 위한 직관적 해설.","title":"정보 기하학: AI는 어떻게 '가장 효율적으로' 배우는가"},{"content":"서울에서 소프트웨어 개발자로 일하고 있습니다.\n","permalink":"https://3rdlayer.uk/ko/page/about/","summary":"\u003cp\u003e서울에서 소프트웨어 개발자로 일하고 있습니다.\u003c/p\u003e\n\u003cdiv class=\"social-icons\"\u003e\n    \u003ca href=\"https://www.linkedin.com/in/rick8510\" target=\"_blank\" rel=\"noopener noreferrer me\"\n       title=\"Linkedin\"\u003e\n      \u003csvg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n    stroke-linecap=\"round\" stroke-linejoin=\"round\"\u003e\n    \u003cpath d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\"\u003e\u003c/path\u003e\n    \u003crect x=\"2\" y=\"9\" width=\"4\" height=\"12\"\u003e\u003c/rect\u003e\n    \u003ccircle cx=\"4\" cy=\"4\" r=\"2\"\u003e\u003c/circle\u003e\n\u003c/svg\u003e\n    \u003c/a\u003e\n\u003c/div\u003e","title":"소개"}]