5강 / 20강
신뢰도 — 부하마다 무게가 다르다
자르는 대신 목소리 크기를 조절한다
명부에 적힌 부하들이 다 같은 무게일 리 없습니다. 어떤 부하는 ARACNe 가 아주 강한 증거로 붙였고, 어떤 부하는 겨우 문턱을 넘겼습니다.
보통이라면 문턱을 정해서 자릅니다. 신뢰도 0.5 미만은 버린다는 식으로요. 그런데 이 방식에는 못난 구석이 있습니다 — 0.49 와 0.51 사이에 무슨 큰 차이가 있다고 하나는 통째로 버리고 하나는 온전히 살릴까요?
VIPER 는 자르는 대신 가중치를 씁니다. 재판에서 증인마다 신빙성이 다르듯, 확실한 부하의 증언은 크게, 미심쩍은 부하의 증언은 작게 반영합니다. 아무도 쫓아내지 않지만 아무나 같은 목소리를 내지도 못합니다.
①은 레귤론 안에서의 상대 크기, ②는 가중평균을 내기 위한 정규화입니다.
Python
브라우저에서 실행
가중치가 실제로 하는 일
VIPER 의 활성 점수는 결국 부하들의 증언을 가중평균한 것입니다. 아주 거칠게 적으면 이렇게 생겼습니다.
활성 ≈ Σ ( 가중치 × MoR × 시그니처 ) / Σ 가중치
가중치가 큰 부하가 이상하게 움직이면 점수가 크게 흔들리고, 가중치가 작은 부하는 어떻게 움직이든 점수가 별로 안 흔들립니다. 미심쩍은 정보가 결론을 뒤집지 못하게 하는 장치예요.
🎮 목소리 크기를 직접 조절해 보세요
부하 여섯의 신뢰도를 슬라이더로 바꿔 보세요. 오른쪽의 목소리 막대가 따라 변하고, 그 아래에 그 레귤론의 유효 크기가 나옵니다. 한 부하만 신뢰도를 아주 높이면 유효 크기가 1 에 가까워집니다 — 부하가 여섯이어도 실제로는 한 명이 결정하는 명부가 되는 것입니다.
부하가 25개여도 하나가 압도하면 사실상 부하 1개짜리 레귤론입니다.
Python
브라우저에서 실행
🤔 확인 문제
VIPER 가 신뢰도가 낮은 부하 유전자를 버리지 않고 가중치를 낮추는 이유로 옳지 않은 것은?
해설 신뢰도가 낮은 부하가 더 중요하지는 않습니다. 가중치의 취지는 “약한 것도 약한 만큼만 말하게 하자” 이지, 약한 것을 우대하자는 게 아닙니다.
🤔 확인 문제
어떤 레귤론에 부하가 30개 있는데 그중 하나의 신뢰도가 1.0 이고 나머지 29개는 모두 0.02 입니다. 이 레귤론의 성격은?
해설 가중치가 한쪽으로 쏠리면 유효 크기가 급격히 줄어듭니다. 부하 수 30 은 겉보기 숫자일 뿐, 실제로는 한 명의 증언에 결론이 달려 있습니다.
🤔 확인 문제
어떤 상사의 레귤론에서 부하 X 의 likelihood 가 0.5, 다른 상사의 레귤론에서 부하 Y 의 likelihood 가 0.5 입니다. 옳은 해석은?
해설 likelihood 는 그 레귤론 안에서 MI 가 가장 큰 부하를 1 로 두고 환산한 값입니다. 기준선이 상사마다 다르므로 상사를 건너뛰어 비교하면 안 됩니다.