예시가 몇 장 없을 때 프로토타입을 안정시키는 방법
서로 겹치지 않는 support episode를 여러 개 모아 평균하는 Multi-Episode Prototypical Networks가 DeFACTO 센서 데이터에서 one-shot 결정을 어떻게 안정시키는지 읽어봅니다.
원문 논문 보기
Robust Prototypical Networks for Few-Shot Sensor Fault Diagnosis는 arXiv에 2609.12287 번호로 공개된 논문입니다. 원문은 제목 아래 연결된 링크에서 볼 수 있습니다. 이 논문이 내세우는 주장은 한 문장으로 정리됩니다. 서로 겹치지 않는 support episode를 여러 개 모아 prototype의 평균을 최종 대표점으로 쓰면, 인코더 구조를 바꾸지 않고도 아주 적은 예시에서의 결정을 안정시킬 수 있다는 것입니다.
제가 이 논문에서 가장 흥미롭게 본 부분은 방법이 놀랍도록 단순하다는 점입니다. 구조를 새로 짜거나 학습 방식을 뒤집는 이야기가 아니기 때문입니다. 이미 있는 prototypical network 위에 평균을 한 번 더 얹는 선택만으로 흔들림을 줄이겠다고 말하는데, 이런 단순한 제안은 보통 두 가지 반응을 낳죠. 너무 당연해서 굳이 논문으로 쓸 필요가 있느냐는 반응과, 당연해 보이는 것이 실제로는 왜 되는지 따져봐야 한다는 반응입니다. 저는 후자에 가깝게 읽었습니다. 센서 고장처럼 예시가 몇 장 없을 수밖에 없는 현장에서는 평균 한 번의 차이가 운영의 밤을 바꾸기도 하니까요.
왜 센서 고장은 항상 예시가 부족할까
공장에서 센서를 보다 보면 정상 데이터는 차고 넘치는데 고장 데이터는 늘 모자랍니다. 기계가 잘 돌아가는 시간이 대부분이라서 그렇고, 고장이 나면 빨리 고치느라 파형을 길게 모아두기 어렵기 때문입니다. 그래서 새로운 고장 유형이 나타나면 엔지니어는 종종 몇 장의 캡처본만 들고 판단을 시작합니다. 이 파형은 바이어스인가, 드리프트인가, 아니면 단순한 노이즈인가 같은 질문을 말이죠.
그렇다면 이런 상황을 기계학습으로 어떻게 돕는 것이 자연스러울까요. 고장마다 수천 장을 모아 분류기를 처음부터 학습시키는 방식은 현장의 속도와 잘 맞지 않습니다. 고장이 날 때마다 대규모 데이터를 기다릴 수는 없으니까요. 그래서 few-shot 학습이 센서 모니터링에서 자주 거론되는데, 적은 예시만으로 새로운 클래스를 가려내겠다는 발상 자체는 현장의 필요와 잘 맞습니다. 문제는 그 적은 예시가 주는 정보가 워낙 얇다는 데 있습니다. 한 장이 우연히 이상한 구간을 잘라낸 것이라면, 그 한 장을 기준으로 삼은 판단은 통째로 기울어집니다.
저는 그래서 이 논문의 문제의식을 현장의 언어로 읽었습니다. 예시가 부족한 것은 어쩔 수 없으니 받아들이되, 부족한 예시가 만드는 흔들림을 어떻게 다룰 것인가가 남는다는 것이죠. 논문은 이 흔들림을 prototype의 분산 문제로 부릅니다. 클래스마다 대표점을 하나 찍는데, 그 대표점을 만드는 재료가 한두 장뿐이라 매번 위치가 달라진다는 것입니다.

평균 하나로 클래스를 대표한다는 발상이 흔들리는 지점
Prototypical network의 그림은 처음 보면 참 단정합니다. 각 클래스의 support 예시를 인코더에 넣어 벡터로 바꾸고, 그 벡터들의 평균을 구해 prototype으로 삼습니다. 이후 들어오는 쿼리는 어느 prototype에 가장 가까운지를 보고 클래스를 정하죠. 평균이라는 연산이 주는 안정감 때문에 이 구조는 오랫동안 few-shot의 기준선으로 쓰였습니다.
그런데 예시가 한 장뿐인 one-shot에서는 이 단정한 그림이 조금 다르게 보입니다. 평균이라고 부르지만 실제로 평균할 대상이 하나밖에 없으니, 그 한 장의 우연이 그대로 대표점이 되기 때문입니다. 센서 파형에서는 이 우연이 더 자주 생깁니다. 같은 드리프트 고장이라도 어디서 잘랐는지, 그날 공장의 진동이 어땠는지, 센서 자체의 떨림이 섞였는지에 따라 벡터가 조금씩 움직이는데, 한 장만 있으면 그 움직임을 가늠할 방법이 없습니다.
제가 이 지점에서 멈칫했던 이유는 평균이라는 말이 주는 안도감이 실제와 다르기 때문입니다. 평균은 보통 여러 개를 모아 흔들림을 누그러뜨리는 연산인데, one-shot에서는 모을 것이 없어서 이름만 평균인 셈이죠. 그렇다면 구조를 더 복잡하게 만들지 않고도 모을 것을 늘릴 방법은 없을까요. 논문은 바로 이 질문에서 출발합니다.
여러 번 뽑은 평균을 다시 평균하면 무엇이 달라질까
논문이 제안하는 Multi-Episode Prototypical Networks, 줄여서 MEPN의 답은 이름 그대로입니다. 서로 겹치지 않는 support episode를 여러 개 뽑고, 각 episode에서 prototype을 구한 뒤, 그 prototype들의 평균을 최종 대표점으로 씁니다. 인코더는 그대로 두고, 대표점을 만드는 과정에만 평균을 한 겹 더 얹는 것이죠. 생각해보면 사람도 비슷하게 배웁니다. 한 번 본 낯선 소리로 단정하지 않고, 몇 번 더 들어본 뒤에 전체적인 인상을 잡는 일종의 천천히 모으는 판단처럼요.
이 차이가 생각보다 중요합니다. 단일 episode에서는 한 장의 운이 결과를 좌우하지만, 열 개의 episode에서 각각 구한 대표점을 다시 평균하면 어느 한 장의 운이 전체를 끌고 가기 어려워지기 때문입니다. 분산이 줄어든다는 말이 바로 이 현상을 가리킵니다. 각각의 prototype은 여전히 흔들리지만, 그 흔들림들이 서로 다른 방향으로 움직인다면 모아놓은 평균은 가운데에 가깝게 머무릅니다.
여기서는 조금 조심해서 읽을 필요가 있습니다. episode를 여러 개 모은다는 것은 결국 더 많은 샘플을 본다는 뜻이라서, 좋아진 것이 당연한 것 아니냐는 의문이 바로 생기기 때문입니다. 논문도 이 의문을 알고 있어서 뒤에 같은 예산에서의 비교를 따로 두는데, 그 이야기는 잠시 뒤에 다시 다루겠습니다. 우선은 구조 자체가 무엇을 바꾸는지부터 머릿속에 그려두면 됩니다.

인코더를 바꾸지 않고 분산만 낮춘다는 말의 의미
저는 이 숫자보다 그 뒤의 구조가 더 중요하다고 봅니다. MEPN이 인코더 구조를 바꾸지 않는다는 대목이 특히 그렇습니다. 보통 성능을 올리겠다고 하면 더 큰 인코더, 더 복잡한 거리 계산, 더 정교한 학습 규칙을 떠올리기 쉬운데, 이 논문은 그 길을 가지 않았기 때문입니다. 같은 인코더로 같은 벡터를 만들되, 마지막에 대표점을 정하는 방식만 바꾼 것이죠.
실제 시스템 관점에서 보면 이 선택은 꽤 실용적입니다. 인코더를 바꾸면 학습부터 서빙까지 손댈 곳이 한꺼번에 늘어나는데, 대표점을 구하는 방식만 바꾸면 기존 파이프라인에 얹기가 훨씬 수월하기 때문입니다. 저희가 새로운 AI 아키텍처를 볼 때도 benchmark 숫자만 보지는 않습니다. 실제로 무엇이 바뀌었고, 그 변화가 시스템에서 어떤 비용 구조를 만드는지를 함께 봅니다. 그런 눈으로 보면 인코더를 그대로 둔다는 것은 도입 비용을 낮추는 결정에 가깝습니다.
물론 바꾸지 않았다는 말이 아무것도 하지 않았다는 뜻은 아닙니다. 분산을 낮추는 일은 겉으로 조용해 보여도 결정 경계를 안정시키는 효과가 있습니다. 쿼리가 두 prototype의 한가운데 근처에 떨어졌을 때, 대표점이 조금만 움직여도 답이 바뀌는데, 평균된 대표점은 그 움직임의 폭을 줄여주니까요. 센서처럼 클래스 사이가 미세한 파형 차이로 갈리는 영역에서는 이 작은 안정이 체감될 수 있습니다.
다섯 가지 고장을 가려내는 시험장은 어떻게 생겼을까
그렇다면 이 아이디어는 어디에서 시험됐을까요. 논문은 DeFACTO 센서 데이터셋 위에서 다섯 개 클래스를 가르는 five-way 분류를 수행합니다. 실제 산업 측정값에 합성된 바이어스와 드리프트, 스파이크와 노이즈 고장을 얹어서 만든 설정인데, 정상 흐름 위에 네 가지 이상 징후가 섞인 시험장이라고 이해하면 됩니다. 완전히 인위적인 파형이 아니라 실제 측정값에서 출발했다는 점이 마음에 듭니다. 공장의 떨림과 계절에 따른 baseline 이동 같은 현실의 지저분함이 조금이라도 남아 있기 때문입니다.
여기서 재미있는 질문이 생깁니다. 왜 하필 바이어스와 드리프트, 스파이크와 노이즈일까요. 현장에서 오래 일한 분들은 바로 감이 오실 텐데요. 바이어스는 영점 틀어짐처럼 전체가 위아래로 어긋나는 경우, 드리프트는 서서히 기우는 경우, 스파이크는 순간적으로 튀는 경우, 노이즈는 전반적으로 지저분해지는 경우에 가깝기 때문입니다. 어느 날 아침에 갑자기 경보가 울렸을 때 엔지니어가 가장 먼저 떠올리는 후보들이기도 하죠. 그래서 저는 이 구성을 단순한 합성 목록이 아니라 현장의 오답 노트처럼 읽었습니다.
논문은 per-episode one-shot 조건, 즉 각 episode에서는 클래스당 한 장만 주는 설정에서 N_agg가 10인 경우를 중심으로 봅니다. 한 번에 한 장씩 보고 열 번 모으는 셈인데, 단일 episode 기준선과 비교하면 100번의 독립적인 반복에서 분명한 우위를 보였다고 보고합니다. 100번을 반복했다는 대목은 좋게 봤습니다. one-shot 실험은 뽑기에 따라 결과가 출렁이기 쉬워서 한두 번의 승리는 믿기 어려운데, 반복 횟수를 명시한 것은 그 출렁임을 의식했다는 신호이기 때문입니다.

한 장씩 열 번 모으면 한 번에 열 장과 같을까
앞에서 미뤄둔 질문으로 돌아올 차례입니다. 한 장씩 열 번을 모아 평균한 것이 좋아 보인다면, 처음부터 열 장을 한꺼번에 주는 것과 무엇이 다를까요. 상식적으로 보면 열 장이라는 예산이 같으니 비슷해야 할 것 같고, 실제로 논문이 같은 예산 비교를 해보면 MEPN과 K가 10인 ProtoNet은 통계적으로 구분하기 어렵다고 보고합니다. 저는 이 결과를 논문에서 가장 정직한 대목으로 꼽고 싶습니다. 새로운 방법이 고정된 예산에서는 더 배우는 것이 아니라, 흩어진 조각을 모아 같은 곳에 도달하는 것이라는 점을 스스로 밝히고 있기 때문입니다.
이 차이는 생각보다 중요합니다. 만약 MEPN이 같은 열 장을 보고도 훨씬 뛰어났다면, 어딘가에 숨은 학습 이점이 있다는 뜻이 되어 해석이 복잡해지기 때문입니다. 반대로 차이가 사라진다는 것은 좋아진 이유가 단순해졌다는 뜻인데, prototype을 누적했기 때문이라는 설명과 딱 맞아떨어집니다. 겉으로 보면 힘이 빠지는 결과 같지만, 메커니즘을 확인하는 실험으로는 오히려 깔끔합니다.
그렇다면 이 방법은 아무것도 아닌 것일까요. 저는 그렇게 보지 않습니다. 현장에서는 열 장을 한꺼번에 깔끔하게 모으기가 어려운 경우가 많기 때문입니다. 고장 파형이 하루에 한 장씩 일주일에 걸쳐 들어오거나, 설비마다 조금씩 다른 조건에서 찍힌 경우가 그런 예인데요. 이런 조각들을 버리지 않고 모아 평균한다는 발상은 예산이 같다는 가정보다 현실에 가깝습니다. 한 번에 열 장을 달라는 방법보다, 들어오는 대로 모아 쓰는 방법이 운영과 잘 맞는 것이죠.

같은 예산에서 차이가 사라진다는 결과를 어떻게 읽어야 할까
표면적으로 보면 단순합니다. 실제로는 그렇지 않습니다. 같은 예산에서 차이가 사라졌다는 말은 해석하기에 따라 전혀 다른 이야기가 되기 때문입니다. 어떤 분은 분산 감소 외에는 배운 것이 없다고 읽을 수도 있고, 어떤 분은 분산 감소야말로 few-shot에서 가장 먼저 해결해야 할 문제라고 읽을 수도 있습니다. 저는 후자에 가깝습니다. 예시가 아주 적을 때 모델이 흔들리는 이유 중 상당 부분이 대표점의 불안정에서 오는데, 그 부분을 건드렸다는 것만으로도 실용적인 가치가 있기 때문입니다.
여기서는 실험을 과장하지 않는 태도가 중요합니다. N_agg가 10인 one-shot 누적 결과가 단일 episode보다 좋았다는 것과, 고정된 열 장 예산에서는 기존 방법과 비슷했다는 것은 함께 읽어야 합니다. 앞의 결과만 따로 떼어내면 마치 적은 데이터로 마법을 부린 것처럼 보이지만, 뒤의 결과가 그 마법의 정체를 설명해주기 때문입니다. 마법이 아니라 누적이라는 것이죠. 논문이 이 두 결과를 나란히 놓은 것은 독자에게 올바른 인과를 쥐여주는 선택이었습니다.
개인적으로는 100번 반복이라는 조건이 이 해석을 돕는다고 봅니다. one-shot은 어떤 한 장이 걸리느냐에 따라 이야기가 완전히 달라지는데, 반복을 많이 하면 운의 영역과 방법의 영역이 조금씩 갈라지기 때문입니다. 물론 반복 횟수가 많다고 해서 모든 우연이 사라지는 것은 아닙니다. 그래도 단일 시도에서 얻은 인상적인 숫자보다는 훨씬 조심스러운 근거가 됩니다.

공장에서 이 방식을 꺼내 쓰면 무엇이 편해질까
좋은 건 알겠는데, 이걸 실제로 어떻게 서빙할까요. 실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. MEPN은 학습 때 무거운 장치를 더하지 않으니 서빙 그래프를 크게 뜯어고칠 필요가 없고, 고장이 몇 장씩 들어올 때마다 episode를 쌓아 대표점을 갱신하는 흐름으로 그려볼 수 있기 때문입니다. 예를 들어 월요일에 드리프트 파형 한 장, 수요일에 같은 설비의 드리프트 한 장이 들어오면 그때마다 prototype을 하나씩 만들고 평균에 합치는 방식이죠. 밤사이 공시가 늦게 도착해도 예측 라인이 멈추면 안 되는 것처럼, 공장에서도 고장 예시가 늦게 도착해도 진단 라인은 돌아가야 합니다.
운영 측면에서 보면 이 차이는 상당히 큽니다. 기존에 열 장을 모아두는 전처리에 의존하면, 아홉 장까지는 기다리는 시간이 되는데, 들어오는 대로 누적하는 방식은 중간 상태에서도 어설프게나마 답을 낼 수 있기 때문입니다. 물론 중간 상태의 답이 충분히 좋은지는 별개의 문제라서, 몇 개를 모았을 때 경보를 울릴지는 임계값 설계가 필요합니다. 다만 구조 자체가 점진적인 개선을 허용한다는 점은 현장 친화적입니다.
또 하나 현장에서 마음에 드는 점은 설명의 단순함입니다. 문제가 생겼을 때 엔지니어에게 왜 이렇게 판단했는지를 말해야 하는데, 여러 episode의 대표점을 평균했기 때문이라는 설명은 비교적 곧게 전달되기 때문입니다. 복잡한 가중치나 조건부 분기보다 평균이라는 말이 현장 회의에서 덜 흔들리죠. 저는 그래서 이 방법을 연구실 점수 이상으로 평가하고 싶었습니다. 운영의 아침을 지켜주는 종류의 단순함이기 때문입니다.
어디까지 믿고 어디부터 의심해야 할까
여기까지 읽고 이 방법이 만능처럼 느껴지셨다면, 잠시 속도를 늦추는 것이 좋습니다. 논문이 보여준 것은 DeFACTO 위의 five-way 설정에서, 정해진 네 가지 합성 고장을 다룰 때의 이야기이기 때문입니다. 실제 공장에는 합성 목록에 없는 고장이 더 많고, 센서가 노후되면서 baseline 자체가 움직이는 경우도 있습니다. 합성 고장이 현실의 지저분함을 흉내 내기는 하지만, 현실을 대신하지는 못하죠.
저는 특히 episode가 서로 겹치지 않는다는 가정이 현장에서 얼마나 깨끗하게 지켜질지를 보고 싶습니다. 이상적인 실험에서는 episode를 겹치지 않게 나눌 수 있지만, 고장 예시가 몇 장 없을 때는 서로 다른 episode가 같은 구간의 파형을 조금씩 공유하거나, 같은 설비의 같은 날에 찍힌 것일 수 있기 때문입니다. 그렇게 되면 흔들림들이 서로 다른 방향으로 움직인다는 가정이 약해지고, 평균의 힘도 줄어듭니다. 겹치지 않게 모으는 일이 생각보다 손이 많이 가는 작업일 수 있다는 것이죠.
또 하나 짚을 점은 거리 계산과 인코더의 역할입니다. MEPN은 대표점을 안정시키지만, 벡터 자체가 고장을 잘 가리지 못하면 평균해도 부족한 것은 마찬가지입니다. 바이어스와 드리프트처럼 느리게 움직이는 변화를 인코더가 제대로 잡지 못한다면, 열 번을 모아도 어딘가 뭉개진 중심만 얻을 수 있기 때문입니다. 그래서 저는 이 방법을 인코더 개선과 경쟁하는 아이디어가 아니라, 인코더가 어느 정도 갖춰졌을 때 그 위에서 흔들림을 다듬는 아이디어로 읽었습니다.

다음에 보면 좋을 질문은 아직 남아 있습니다
제가 앞으로 보고 싶은 것은 이 평균이 어디까지 확장되는지입니다. N_agg를 10보다 늘리면 안정이 계속 좋아질까요, 아니면 어느 지점부터는 더 모아도 남는 것이 없을까요. 합성 고장 네 가지가 아니라 실제 현장에서 새로 나타난 미지의 고장에서는 같은 그림이 그려질까요. episode 사이에 시간 간격이 길어져 설비 상태가 바뀌면, 오래된 prototype을 어느 비중으로 잊어야 할까요. 이런 질문들은 논문이 풀지 않은 것들이지만, 논문 덕분에 물을 수 있게 된 것들이기도 합니다.
그렇다면 사람의 역할은 무엇일까요. 저는 이 질문이 센서 진단에서는 특히 크게 남는다고 봅니다. 대표점이 안정됐다고 해서 경보를 자동으로 끄고 켤 수 있는 것은 아니기 때문입니다. 어느 정도의 불확실성에서는 사람에게 넘기고, 어떤 패턴이 쌓이면 새로운 클래스로 등록할지를 정하는 것은 여전히 엔지니어의 판단에 가깝습니다. MEPN 같은 방법은 그 판단을 대신하는 것이 아니라, 판단의 재료가 되는 대표점을 덜 흔들리게 만드는 쪽에 가깝죠.
이 논문이 남기는 구체적인 생각은 하나로 정리됩니다. 예시가 적을 때 급한 것은 더 큰 모델이 아니라 덜 흔들리는 대표점이라는 것입니다. 서로 겹치지 않는 조각들을 버리지 않고 모아 평균한다는 발상은 화려하지 않지만, 고장이 몇 장씩 도착하는 공장의 리듬과는 잘 맞습니다. 다음에 센서 경보가 울리고 손에 쥔 파형이 몇 장 없을 때, 저는 이 단순한 평균을 먼저 떠올릴 것 같습니다.
참고 자료
- Robust Prototypical Networks for Few-Shot Sensor Fault Diagnosis · arxiv.org
리뷰 원문