텍스트 분류를 위한 Adversarial Training

 최근 뉴럴 네트워크 모델 중에 가장 흥미롭다고 극찬받는 GAN 이라는게 있다. discriminator와 generator networks 두 개를 가지고 학습하는데, 하나는 더 잘 분류하기 위한 네트워크이고 하나는 더 잘 속이기 위한 네트워크로 이를 동시에 학습하면서 정확도를 높인다.

 이 모델을 텍스트 분류에도 적용해봤다는 논문이 바로 Adversarial Training Methods for Semi-Supervised Text Classification [link]. 방식은 다음과 같이 LSTM 네트워크 (분류니까 many-to-one) 두 개를 놓는다:


 (a) 네트워크는 원래대로 실제 데이터를 학습하고,(b) 네트워크는 속이기 위한 가짜를 생성하는데, 논문 Eq.(2) 수식을 보면 \(y\)가 레이블이고 \(x\)는 입력이며 \(r_{adv}\) 이 adversarial noise 값이다.

 이 때 adversarial noise 값은 \(\epsilon\) 보다 작은 범위의 변화이나, 이게 왜 잘 작동할 것 같냐면 원본 텍스트에서 의미는 달라지나 기계가 봤을 땐 거의 똔똔일 것 같은 가짜를 만드는거다. 이걸 보자마자 상당히 가치있는 내용이라는 생각이 들었다. 그 다음으로 semi-supervised learning을 위한 virtual adversarial training이 Eq.(3)(4)(5) 등에 소개되어 있다.


 테스트 데이터는 영화 리뷰 데이터를 사용하였는데 이게 텍스트에 감성이 담겨있어 기계가 해결하기 묘한 데이터라 실험에 적합하다 판단했기 때문이라고 추측한다. 코드나 그런건 Github에 공개되어있진 않다.

평균, 분산, 그리고 표준편차

이산확률변수 \(X = x_1, x_2, \cdots, x_n\) 일 때, 각 확률 \(P = p_1, p_2, \cdots, p_n\)의 합은 \(\displaystyle\sum_{i=0}^n p_i = 1\) 이 된다. 이산확률변수의 평균(기대값)은 \(E(x) = \displaystyle\sum_{i=0}^n x_ip_i\)로 정의된다. 보통 통계에서는 mean 이라고 하며 우리가 아는 그 평균이다. 가령, 10, 20, 30의 평균을 구해라 이러면 각 변수의 확률은 1/3이 되니까, \(\frac{10 + 20 + 30}{3}\)과 같이 식이 간소화 된다. 분산은 각 변수에 mean 값을 뺀 제곱에 확률 값을 곱한 것의 합으로 정의되는데 \(V(x) = \displaystyle\sum_{i=0}^n (x_i - m)^2p_i\), 값이 작으면 조밀하고 크다면 퍼져 있다라고 이해할 수 있다. 마지막으로 표준편차는 분산에 sqrt를 씌우면 되는데 \(\sigma(x) = \sqrt{\displaystyle\sum_{i=0}^n (x_i - m)^2p_i}\) 평균으로부터 얼마나 떨어져 있는지를 나타내는 값이 된다.

그러면 예를 들어보자, 웹사이트 방문자 모집단 체류 시간을 모아서 2d plotting 하면 분포를 눈으로 볼 수 있겠고 (이것만 보더라도 알 수 있는게 많음), 평균, 분산, 표준편차를 구하면 어떤 사용자가 이질적인 성향을 보이는지 등을 추적 할 수 있게 된다.