뉴런 하나를 실제로 설명했다고 확신하려면 무엇이 필요할까? 뉴런의 활성화가 일관된 패턴을 보인다면 좋은 신호이고, 서로 무관한 개념이 뒤섞여 보인다면 나쁜 신호일 것이다.

닉 카마라타(Nick Cammarata)의 최근 글은 중요하고 타당한 점을 짚는다. 과거에는 뉴런이 다의적(polysemantic)이라고 너무 성급하게 단정하는 경우가 있었다. 하지만 활성화 사례를 더 자세히 살펴보면 그 이면에 단순한 패턴이 있는 경우도 많다. 이 때문에 다의성이 실제보다 과장되기도 했다. 이는 우리가 반영해야 할 좋은 지적이다. 하지만 이것만으로 대부분의 뉴런이 무엇을 하는지 이해한다고 볼 수는 없다. 해석 가능성 문제가 해결됐다거나, 예상보다 훨씬 쉬운 문제라는 점을 보여주는 결과도 아니다.

뉴런을 설명하려면 무엇이 필요한가

모든 뉴런을 설명하는 단순한 패턴이 실제로 존재하는지부터 불분명하다.[[1]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fngs17z2os9qf) 설령 뉴런의 활성화 사례에 들어맞는 단순한 패턴이 있더라도, 그 설명이 옳다는 뜻은 아니다.[[2]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fnni4ropjmkyi)

어떤 뉴런을 가장 강하게 활성화하는 사례를 살펴봤더니 다음과 같은 문장뿐이라고 해보자. “푸들 프레드가 자전거를 타고 거리를 쌩쌩 달렸다. ‘와, 개가 자전거를 탈 수 있는 줄은 몰랐네!’ 내가 외쳤다.” 가장 강하게 활성화하는 사례만 보면 뉴런이 단일한 의미를 가진 것처럼 오해하기 쉽다. 그래서 활성화 강도가 상위 20%인 사례를 확인했더니, 이번에는 “존은 자전거를 타고 갔고 그의 개는 뒤따라갔다” 같은 문장이 나온다. 가장 약한 활성화도 살펴보면 자전거는 없어도 개에 관한 사례가 많다. “개가 거리를 느릿느릿 걸어갔다”와 같은 문장이다. 이 증거만으로 이 뉴런이 단일한 의미를 가지며 그 의미가 ‘자전거를 타는 개’라고 결론 내릴 수 있을까?

그렇지 않다고 본다. 활성화 사례만 봤을 때 뉴런을 해석할 수 있다고 느끼게 하는 인상이 크게 빗나갈 수 있는 이유가 몇 가지 있다. 첫째, 뉴런을 활성화하는 모든 사례가 어떤 패턴에 들어맞더라도, 그 패턴에 들어맞는 모든 사례가 뉴런을 활성화한다는 뜻은 아니다. 뉴런은 사실 맑은 날 자전거를 탄 개에만 활성화되지만 그 조건을 알아채지 못했을 수도 있다. 이는 자동 해석 논문에서 꽤 큰 문제로 드러났다.[[3]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fnh7ppsem21nl)

실제로 X에 활성화되는 것처럼 보이는 뉴런이, 간결하게 설명하기 어려운 X의 아주 특정한 하위 집합에만 활성화되는 일은 흔하다. 그 뉴런이 X에 해당하는 모든 사례에서 항상 활성화되도록 강제하면 모델 성능이 저하될 수 있다.

둘째, 활성화 강도에도 실제로 중요한 정보가 들어 있을 수 있다. 뉴런이 강하게 활성화되는지 약하게 활성화되는지가 핵심일 수 있다. 어떤 활성화가 강해야 하고 약해야 하는지 예측하기 어렵다면 설명의 중요한 부분을 놓친 것일 수 있다. 지금까지 본 결과를 바탕으로 한 최선의 추정은 뉴런의 약한 활성화를 제거해도 모델 성능이 상당히 저하된다는 것이다. 따라서 약한 활성화를 완전히 무시해도 된다고 생각하지 않는다.[[4]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fnvnhijb7v72)

시뮬레이션 점수로 뉴런 설명을 평가해야 한다

뉴런을 이해했다고 말하려면 사례가 그럴듯해 보이는 것만으로는 부족하다. 모델 성능을 떨어뜨리지 않는 방식으로 뉴런을 시뮬레이션할 수 없다면, 그 뉴런을 제대로 이해했다고 보기 어렵다. 그러려면 “개가 실제로 자전거를 타고 있으면 4.5점, 개와 자전거가 함께 있지만 타고 있지는 않으면 3.2점”과 같은 평가 기준을 작성해야 한다. 그런 다음 이 기준을 입력 사례와 비교하고, 실제 뉴런의 값 대신 시뮬레이션한 값을 넣는다. 이 과정에서 모델 성능이 크게 저하된다면 설명이 틀렸다는 뜻이다.

닉의 글은 시뮬레이션 점수가 지나치게 까다로워 실제로 중요하지 않은 것까지 설명하도록 요구한다고 주장한다. 하지만 이는 원래 자동 해석 논문에서 사용한, 상관관계에 기반한 시뮬레이션 점수가 상당히 부실했기 때문에 생기는 문제라고 본다. (a) 다운스트림 쿨백-라이블러(KL) 발산을 측정하고 (b) 큰 데이터셋으로 점수를 매기면 사실상 해결된다. KL 발산은 활성화 값을 세심하게 구간화해야 하는 문제도 깔끔하게 피한다.[[5]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fn32295nrnqda)

문장 수준의 정보가 어떤 문장부호 토큰에 저장되는지, 또는 트럼프 뉴런의 활성화 강도가 트럼프의 크기에 따라 어떻게 달라지는지가 모델의 행동에 실제로 중요하지 않다면 KL 발산은 그런 차이에 불이익을 주지 않는다. 반대로 그 차이가 매우 중요하다면 설명을 요구하는 것이 당연하다. 관계가 단순하지만 중요하지 않은 것이라면 설명이 크게 복잡해지지 않는다. 하지만 모델 작동에 필수적인 관계가 실제로 복잡하다면, 그 사실을 아는 편이 낫다.

이 점수 산정 방식을 처음부터 적용했다면 다의적 뉴런에 대한 설명 중 일부가 애초에 부실하다는 사실도 알아챘을 것이다. 예를 들어 닉이 V자형 물체 뉴런에 대한 부실한 다의적 설명의 사례로 든 자동차와 개의 설명은 낮은 점수를 받았을 것이다. V자형 물체를 많이 놓칠 뿐 아니라, 둥근 개와 자동차에도 잘못 활성화될 것이기 때문이다.[[6]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fn3lwcxt1qlrc)

시뮬레이션 KL 지표가 완벽하다고 생각하지는 않는다.[[7]](https://www.lesswrong.com/posts/Dkh7pXKjoNWkkxQDz/neural-networks-are-not-already-clean#fnvlf19ziapld) 지표에 지나치게 의존해서는 안 된다는 주장에도 공감한다. 다만 이 지표는 앞서 설명한 두 가지 실패 유형을 포착한다. 활성화 사례를 살펴보는 것만으로는 알아채기 매우 어렵지만, 실제로는 둘 다 중요하다. 또한 기본적인 인상 점검이 실패할 수 있는 두 가지 이유를 모두 반영한다.

뉴런 설명만으로는 신경망을 이해할 수 없다

뉴런을 설명하는 일은 신경망이 무엇을 하는지 완전히 이해하기 위한 과정의 일부일 뿐이다. 궁극적으로 모델의 작동 방식을 이해하려면 뉴런 사이에서 일어나는 계산도 알아야 한다. 하지만 이는 매우 어려우며, 현재까지는 잘 이뤄지지 않고 있다. 뉴런 사이의 회로를 찾으려 한 기존 연구에서는 여전히 비교적 크고 복잡한 회로가 발견된다. 이런 회로에는 혼란스러운 중복이 많은 경우가 있으며, 모델 행동의 분산 대부분을 설명하지 못한다.

현재로서는 개념이 중첩(superposition)된 형태로 저장되고, 다층 퍼셉트론(MLP)이 그 중첩된 특징에 대해 연산하면서 뉴런 하나당 하나보다 많은 계산을 수행하기 때문이라는 설명이 가장 타당해 보인다.

모든 요소를 분리하고 중첩 상태의 계산이 어떻게 작동하는지 알아내, 궁극적으로 신경망에서 깔끔하고 이해하기 쉬운 회로를 찾을 수 있기를 바란다. 하지만 해석 가능성 분야는 역사적으로 엄밀성이 부족해 난관에 부딪히곤 했다. 실제 이해 수준을 과장하는데도 멋져 보이는 결과에 집중한 탓이다. 정성적인 사례와 이해를 뒷받침하는 엄밀한 논증 사이에서 적절한 균형을 찾는 일은 우리에게 달려 있다.

  1. 원문 각주에서 어떤 사람이 콜로라도와 Tornado(토네이도 일반이 아니라 파이썬 라이브러리)에 활성화되는 뉴런을 발견했다. 이 둘을 아우르는 단순한 단일 의미 설명을 떠올리기 어렵다. 더 넓게 보면, 뉴런을 꽤 오래 들여다보고 가능한 설명을 고민한 뒤에도 대부분의 뉴런은 설명하기 어렵다는 것이 경험상 맞다.
  2. 원문 각주에서 말하는 것은 패턴이 뉴런을 활성화하는 모든 사례에 적용된다는 뜻이다. 그렇다고 해서 그 패턴에 들어맞는 모든 사례에서 뉴런이 활성화된다는 뜻은 아니다. X가 Y와 일치하는 것과 Y가 X와 일치하는 것은 같은 관계가 아니다.
  3. 원문 각주에서 자동 해석 논문의 수정 절차가 이 문제를 해결하는 데 충분히 만족스럽지는 않았다고 본다. 다음 절에서 설명하는 시뮬레이션보다 근본적으로 덜 만족스럽다. 수정 절차는 공격자가 관련된 반례 입력을 모두 찾아내는 데 의존하기 때문이다.
  4. 원문 각주에서 곧 더 구체적인 결과를 공유할 수 있기를 바란다고 밝혔다. 현재는 이 글을 최대한 빨리 내는 데 우선순위를 두고 있다. 여기서 얻은 결과가 닉의 결과와 달라 놀랐으며, 차이가 생긴 원인을 추적해볼 가치가 있어 보인다.
  5. 원문 각주에서 손실 변화량보다 다운스트림 KL 발산이 더 적절하다고 본다. 일부 뉴런을 잘못 모델링한 손실을 다른 뉴런을 모델링하는 방식으로 상쇄해 오히려 손실을 개선할 수 있다면 매우 부적절하기 때문이다. 실제로 이런 상황은 가정에 그치지 않는다는 것이 경험상 확인됐다.
  6. 원문 각주에서 뉴런 하나가 네트워크 전체에 미치는 영향은 매우 작으므로 절대적인 수치는 매우 작을 것으로 예상한다고 설명한다. 그래도 다른 뉴런과 비교해 어떤 설명이 상대적으로 큰 영향을 주는지 살펴볼 수 있고, 한 번에 많은 뉴런을 제거할 수도 있다.
  7. 원문 각주에서 예를 들면 크기가 다른 모델을 비교하기가 꽤 어렵다고 설명한다.