Monday, August 6, 2018

논문 - Neural Arithmetic Logic Units



Neural Arithmetic Logic Units이라는 제목의 논문입니다. 딥마인드와 옥스포드에서 나온 이 논문은 "Arithmetic Logic", 즉 사칙연산과 같은 기초적인 연산을 수행하는 유닛을 제안합니다.

이 논문에서 제안하는 NALU는 좀 특별한데, 레이어의 유형이라고 볼 수도 있고 레이어의 activation function에 해당한다고도 볼 수 있습니다. NALU를 이용하면 사칙연산과 지수, 로그 함수를 모델링할 수 있습니다. 그런데, 뉴럴넷이 이미 아주 복잡한 함수까지 모방하지 않냐고 반문할수도 있습니다.

기존 연구와의 차이를 살펴봅시다. 일반적인 딥 뉴럴 넷은 결국은 아주 복잡한 형태의 regression 모델이고 학습 데이터를 근거로 하여 $f: X \rightarrow Y$ 의 맵핑을 근사합니다. 이미지 등 많은 경우에 이 $x$는 고차원 벡터지만 이 근사과정의 원리는 $x$가 1차원일때랑 차이가 없습니다.


이 함수는 $x \in [0, 1] $의 데이터를 이용했습니다. 그런데 이렇게 학습된 뉴럴넷으로 $x=-10$이나 $x=1000$ 같은 입력을 넣으면 잘 될까요? 아뇨, 폭망합니다.

아래 그림은 아마 $-1 < x < 1 $ 의 범위에서 사인 함수를 근사한 결과같군요. 학습 데이터 바깥에서는 저렇게 되버립니다.


이를 다르게 표현하면, 사실 일반적인 뉴럴넷은 숫자를 세는 능력이 없습니다. 5 이하의 숫자끼리 더하는 법을, 3+4=7, 2+3=5, .. 등의 데이터로 열심히 가르치고나서  8 + 2=? 하면 망한다는거죠. 실제로 망하나요? 이 논문 섹션 1.1에 나온 그림 1을 보니, 그보다 더 쉬운 작업도 망하는군요,  $f(x)=x$를 가르치려고 했지만 이마저 extraploate에 실패합니다. 무려 15종류의 activation function을 시험했지만 다 망합니다.




이를 해결하기 위해 이 논문에서는 NALU를 소개하는데요, 그 전에 NALU의 근간이 되는 NAC(Neural Accumulator)를 먼저 소개합니다.

NAC


그림만으론 설명이 완벽하지 않지만 글에 잘 써있고, 원리는 간단합니다.

NAC는 parameterised unit입니다. 근데 이 파라미터의 사용이 사실상 거의 레이어에 가깝습니다. 일단 NAC의 파라미터는 $\mathbf{W}$입니다.
이 $\mathbf{W}$는 특정 레이어의 액티베이션 $y$에 추가로 붙는 affine transform이에요. 그런데, 일단 $\mathbf{W}$의 값이 $\{-1, 0, 1\}$이길 바란다고 합니다. 왜냐면 그렇게하면, affine transform의 $\mathbf{W} y$(논문을 따라서 표기는 행렬과 벡터처럼 했지만 벡터와 벡터의 곱이라고 생각합니다) 결과가 $\mathbf{W}$의 성분의 합(1이랑 곱한애들), 차(-1이랑 곱한애들), 혹은 무시(0이랑 곱한애들)가 될테니까요.

이런 특징을 강제하기 위해 결과적으로 2페이지 하단처럼 $\mathbf{W}$를 정의합니다.

$$\mathbf{W} = \tanh(\mathbf{\hat{W}} \odot \sigma(\mathbf{\hat{M}})) $$

알파벳을 보면 $\mathbf{\hat{W}}$에다가 마스킹을 적용한거라고 이해할 수 있습니다. 이렇게 하면 결과가 대체로 -1, 0, 1에 매우 가깝게 나오게 되면서도 값이 미분가능하므로 Gradient descent를 이용할 수 있습니다.


NALU

NAC를 잘 이해했다면 NALU는 간단합니다. 일단, 방금 NAC로 아마도 덧셈과 뺄셈을 수행하는 유닛을 구현한것같습니다. 그러면 곱셈과 나눗셈은 어떻게 하느냐? 똑같은 과정을 옆에 병렬로 연결해주고, 대신 그 앞뒤에 $\log()$와 $\exp()$를 달아주면 됩니다.


그런데 여기에서 각각의 element가 덧셈/뺄샘 vs. 곱/나눗셈 중 무엇을 수행하게 될지를 골라야하므로.. 하나의 게이트 값 $g$를 양쪽에 $g$, $1-g$로 적용해서 둘 중에 하나만 수행되도록 하겠습니다.  정리하면...

$$\mathbf{W} = \tanh(\mathbf{\hat{W}}) \odot \sigma(\mathbf{\hat{M}}) $$
이고, NAC의 출력은 다음과 같습니다.
$$\mathbf{a} = \mathbf{W}\mathbf{x}$$
예를들어 W가 32개라면 얘도 32개겠죠.
그리고 $\log$, $\exp$를 거치는, 즉 곱과 나눗셈을 수행하는, 변형된 NAC입니다. (이 식에 약간의 의문점이 있습니다.)
$$\mathbf{m} = \exp{\mathbf{W}(\log |\mathbf{x} + \epsilon |)} $$
얘도 마찬가지로 32개죠.
이제 32개의 게이트를 이용해 {+ -} vs {* /}를 결정합니다. 이 과정에서 $\mathbf{G}$라는 매개변수가 추가됩니다.
$$g = \sigma({\mathbf{G}x})$$
최종적으로 이 NALU의 출력은 아래와 같습니다.
$$\mathbf{y}=\mathbf{g} \odot \mathbf{a} + (1-\mathbf{g})\odot \mathbf{m}$$

(좀 더 생각해봐야하는데, 위에서 변형된 NAC가 최종적으로 곱, 나눗셈, 지수연산이 가능하다고 하는데 이게 잘 이해가 안가는군요. $\textbf{x}$가 NALU의 입력인데, 얘는 항상 log 함수를 거치는데.. $\mathbf{W}$의 성분이 1이면 ... ??? 합과 곱을 exp, log로 사용한다는 원리는 쉬운데 이 구현이 왜 이런지 막상 따지니 헷갈려요. )

실험 결과

이번에도 실험결과는 생략합니다. RL관련은 제가 잘 모르지만 다른 실험을 보면 아주 직관적으로 잘 이해할 수 있게 설계했고, NALU는 extrapolate이 필요한 사칙연산 등등 연산을 아주 훌륭하게 수행합니다.








Sunday, August 5, 2018

독서 - 이영도 - 오버더초이스

굉장한 작품이다. 서사, 서술, 주제 모두 훌륭하다. 무거우면서 유쾌하고 진지하지만 재미있다.  역시 이영도는 배신하지 않는다. 다만 스토리는 여러번 당신의 뒷통수를 칠테니 주의하시길. 

Friday, August 3, 2018

논문 - A Structured Self-attentive Sentence Embedding



https://arxiv.org/abs/1703.03130 입니다. ICLR 2017이군요. 아주 간단히 요약하겠습니다.

목적

문장벡터 (sentence embedding)을 구합니다.

방법

Bi-LSTM과 self-attention을 이용합니다. Bi-LSTM이야 워낙 널리 쓰이니 self-attention이 포인트죠. 기존에는 단어의 representation 에 평균을 내는 방식같은걸 간단하게 썼었는데 (물론 더 복잡한것도 있습니다) 각각 문장의 어떤 부분을 봐야할지를 현명하게 결정하여 더 문장을 잘 요약해보자! 하는것입니다. 

Self-attention

일반적으로, 각 히든 레이어의 피쳐맵 혹은 피쳐벡터 $\mathbf{h}$가 있을 때 여기에서 어떤 부분에 집중해야 할지(attention)를, $\mathbf{h}$ 자기 자신을 기반으로 정하는거죠. 

논문의 2.1 부분을 봅시다.

<Bi-LSTM>


문장 $S$는 모종의 word embedding의 나열로 나타낼 수 있습니다.

$$S = (\mathbf{w_1}, \mathbf{w_2}, ... \mathbf{w_n})$$

여기에서 단어 하나는 각각 $d$차원 벡터입니다. 따라서 $S$는 ($n$-by-$d$) 차원이 되는군요.

여기에 Bi-LSTM을 적용합니다. 그러면 word embedding의 나열이 hidden vector의 나열로 바뀝니다. 그 결과가  $H$입니다.

$$H = (\mathbf{h_1}, \mathbf{h_2}, ... \mathbf{h_n})$$


<Self-attention>


Self-attention은 이 $H$를 기반으로합니다. 일단 $H$는 $n$-by-$2u$ 크기의 행렬입니다. $n$이 단어 갯수고 $2u$가 각 히든 유닛의 차원이지요. 이제 이 $2u$ 차원의 벡터를 $d_a$ 차원의 벡터로 바꿔줍니다. $d_a$는 하이퍼파라미터로 우리가 임의로 정해야합니다. 히든유닛 벡터를 어느정도 압축해야 좋을지 잘 고민해봐야겠죠. $W_{s1}$은 학습되는 weights가 되구요.

$$W_{s1} H^T$$

일반적인 행렬곱입니다. 이 결과에 tanh를 적용하여 결과를 [-1, 1] 사이로 압축합니다. 이 선택이 이론상 정당화되는건 아니지만 장점이 몇가지 있습니다. 일단 비선형성이고, 값의 범위를 제한해줘서 좋은점이 있는데 이는 식 (8, 9) 근처에 잘 나와있습니다. tanh(0) == 0이라서, 단어 수가 $n$보다 짧은 경우에 0벡터를 넣으면 최종적으로 attention 행렬 $A$도 0이 나오게 되어 그부분을 완전 무시한 representation $M$을 구할 수 있는건데요, 근데 지인에게 물어보니 이런 특징은 그닥 필요없고 걍 0벡터는 마스킹해서 처리하는것같기도 합니다.

$$tanh(W_{s1} H^T)$$

지금 상태가 $d_a$ 차원 벡터의 나열로 되어있죠. 여기에 *벡터* $\mathbf{w_{s2}}$를 다시 곱합니다. 이렇게하면 결과로 길이가 n인, 즉 단어수와 같은 길이를 갖는 벡터가 나오게 됩니다. 이 벡터도 학습이 필요한 weights입니다.

$$W_{s2}tanh(W_{s1} H^T)$$

마지막으로,  softmax를 적용해서 이 전체 합이 1이 되도록 합니다. 이 결과가  $a$ 입니다. 논문의 식 (5)입니다.

$$a = softmax(W_{s2}tanh(W_{s1} H^T))$$

이렇게 하면 a라는 벡터가 나오죠. 이 벡터는 히든유닛의 나열인 $H$에 element-wisely 곱해질거에요. 그 결과 히든유닛의 나열은 해당 작업의 '중요성'이 반영된 representation이 됩니다.

그런데, 목적에 따라 각각 다른 단어에 집중(attention)할 필요가 있습니다. 따라서 $a$같은걸 여러개 구해야해요. 논문의 표기로는 $r$개를 구하게 됩니다. 그러려면  *벡터* $\mathbf{w_{s2}}$ 대신에  *행렬* $W_{s2}$을 적용하면 됩니다. 그 결과도 행렬 $A$가 나오게 되구요. (식 (6))

길게 풀어썼는데, 논문에서 사실 간단히 요약합니다. 식 6은 바이어스가 없는 레이어 2개짜리 MLP를 적용한거라구요.


최종적으로, 이 가중치, 혹은 attention 행렬을 적용한 결과로 우리는 sentence embedding 행렬을 얻습니다.  $A$는 $r$-by-$n$, $H$는 $n$-by-$2u$ 행렬인데, 따라서 이를 곱한 결과는 단어수에 관계없이 $r$-by-$2u$ 크기의 행렬이 됩니다.

$$M = AH$$

식 (6, 7)은 M이 무의미한 값을 학습하지 않도록 regularise하는 내용입니다.

<모델 전체>

식을 보고나면 그림 1이 잘 이해가 됩니다. 지금까지 설명한 과정으로 $ M$을 구했고 여기에 fully-connected layer가 붙는군요. 최종적으로는 sentiment analysis작업을 수행합니다.




attention을 그대로 원래 단어에 적용하면 모델이 어떤 단어를 보고 작업을 수행하는지 잘 알 수 있습니다.



그 외의 실험 결과와 다른 내용은 논문을 직접 참고하시길 바랍니다.


독서 - 김영미 - 세계는 왜 싸우는가?

체첸, 이스라엘/팔레스타인, 파키스탄, 아프가니스탄, 동티모르... 책이 발간된 2011년에도, 현재에도 지구 여기저기에서는 전쟁이 일어나고있습니다. 두말할나위없이 비인간적인 일이지요. 왜 싸우는걸까요? 이 질문에 아주 무성의하고 정확하게 대답할 수 있습니다. 영토, 돈, 욕망때문이죠. 그러나 20세기 말, 21세기 초에 일어나고 있는 전쟁과 갈등에 좀 더 촛점을 맞추자면, 20세기 초중반이후 서구의 강대국들이 식민지와 제국주의를 포기하면서 똥을 싸놓고 갔기 때문이죠. 물론 해방 직후의 독재자가 조연으로 등장하기도 합니다.

왜 싸우는지는 단순합니다. 다만 이렇게 많은 나라가, 이렇게 처참하고 비인간적으로 싸우고 있다는 것을 상기하는 측면에서 읽어보기를 권합니다. 내용상으로는 약간의 비약이나 왜곡이 있을 수도 있습니다.

사실, 남북한이 대치중인 우리나라 상황도 크게 다를것 없지않나합니다. 

Wednesday, August 1, 2018

독서 - 강원국 - 대통령의 글쓰기:

대통령의 글쓰기는 국민의 정부와 참여 정부시절 청와대에서 연설문을 쓰던 강원국씨가 쓴 책입니다. 그런데 제가 기대한 내용과 달리 주로 두 대통령 아래서 연설문을 쓰며 겪은 일을 적은 수기에 가까운 책이네요. 흥미위주로 읽기엔 좋습니다. 책 관련 신문기사를 길게 늘인 내용이라고 보시면 되겠습니다. 

따라서 귀찮으시면 그냥 신문기사를 몇 개 검색해서 읽고 끝내도 괜찮습니다. 글쓰기나 연설문에 관심이 있는 사람이 꼭 봐야할 책은 아닌것같고, 오히려 김대중 대통령과 노무현 대통령에 관심이 많다면 재미있게 읽을듯 합니다. 

실제로 책을 산사람들도 대부분 같은 이유로 샀을것같네요.


독서 - 당신들의 대한민국 2

당신들의 대한민국 2는 박노자의 첫번째 책 <당신들의 대한민국>과 크게 다르지 않습니다. 책도 2006년 1월에 나왔으니 1편이 나온지 5년 뒤에 나온 셈인데, 2018년 중순의 시점에서 보면 2001년이나 2006년이나 비슷하죠. 물론 참여정부에서 이명박정부로 정권이 바뀌는 등 차이가 있었습니다만요.

2편의 네가지 주제 대략 -권위주의 -종교 -대학 -병영국가 대한민국 -민족주의 -북한 -진보 입니다. 전체적인 감상평은 1편과 비슷하니 지난 포스트를 참고하셔도 좋습니다.

저자가 학생 및 교수로서 대학교에 오래 있다보니 1편과 마찬가지로 대학 이야기가 제법 나오는데, 안타깝게도 최근에 나온 웹툰 <슬픈 대학원생의 초상>에서 그리는 최근 한국 대학원의 현실과 크게 다르지 않더군요.

1, 2편 모두 두껍지 않아서 같이 사서 읽으셔도 괜찮습니다. 알라딘, 예스24등 중고 서적으로 사면 두 권에 만원도 안하네요.