티스토리 뷰

대망의 마지막 수업... ㅜㅜ 중간에 듣다가 못 알아먹겠어서 처음으로 다시 돌아가서 듣는 바람에 애초 계획했던 시간의 2-3배가 걸렸지만 포기하지 않고 계속 들은 나 칭찬해!! 

 

마지막 수업은 아직도 남은 NLP의 한계에 대해서 다루는 시간이었다. 총 8개의 한계에 대해서 다뤘음. 

 

1. 모든 task에 적용가능하며 좋은 성능을 내는 하나의 architecture 가 없다. 

이미지 에서는 거의 CNN 이 dominant 한 양상인데 NLP 에서는 하나의 아키텍쳐가 없고, task 마다 잘 작동하는 아키텍쳐 다 따로 있음 (LSTM, GRU, RNN .... )

 

-> Dynamic Memory Network 로 해결!

지난 수업 중에 Dynamic Memory network 나왔을 때, 하나의 아키텍쳐를 가지고 마지막 layer (softmax) 만 수정해서 Question anwering에도 쓰고, Sentiment analysis도 했음. 

 

2. Joint Many-task Learning

 

 

3. No zero shot predictions 

 

우선 제로 샷이 뭔지를 보자. 예를 들어서 5개의 동물 이미지를 보고 각각의 동물을 classify하는 과제가 있다고 하자. 이 때, 데이터셋의 불균형으로 트레이닝 동안에 단 4개의 동물에 대한 내용만을 학습했다고 하자 (하지만 유효한 label 은 여전히 5개임). 트레이닝 과정 중에 나오지 않은 이미지가 테스트 중에 나왔다면 이 모델을 이 동물을 제대로 맞출 수 있을까? 이걸 가능하게 하는 게 바로 제로 샷이다. 트레이닝 중에 한번도 보지 못한 내용을 테스트 할 때 제대로 하게 하는 것. 

 

이제 이 제로 샷을 Question answering 에 도입한다고 해보자. 다른 NLP task 와 마찬가지로 모든 단어는 word embed 된다. 문제는 이 Q&A 모델이 테스트 셋을 대상으로 answer 을 predict 할 때, 이 answer 에 해당하는 단어는 training set에서 본 단어에 대해서만 국한될 것이라는 것이다.  즉 트레이닝 때 한번도 보지 못한 단어가 테스트 문제의 답이라면, 이 모델은 이 단어를 답변으로 predict하지 않을 것이라는 것 (솔직히 이해가 잘 안 되는데... 이런건가? Q&A 에서의 핵심은 질문에 대한 답을 할 때, 인풋 문장과 질문 문장의 벡터간 유사도를 기반으로 답을 하는건데, 아예 처음 보는 단어라면 이 단어의 벡터는 아직 학습이 안 됐기 때문에 문장 간의 유사도가 높게 나올리가 없음.) 

 

근데 어떤 모델이 자기가 한번도 보지 못한 단어에 대해서는 답변을 채택하지 못한다면 상당히 reliable 하지 않은 모델이라고 할 수 있다. 

 

-> Mixture model of softmax and pointers 로 해결! 

문장의 질문에 대한 답을 찾는 모델은 2가지 선택이 있는거임. Vocabulary 를 Softmax 에 돌려서 가장 높은 단어를 선택하거나 (질문과의 유사도 기반) 아니면 pointer 를 통해서 문장에 있는 질문 중 하나의 단어 (혹은 구)를 그대로 copy하는 거임. 아니면 이 2개의 probability를 합쳐서 선택할 수도 있고. 

 

4. Duplicate word representations 

이건 진짜 무슨 문제인건지 모르겠음... 

 

5. Question have input indepedent representations 

지난 수업에 Question answering 할 때도 배웠지만, Question 을 embedding 할 때는 단순히 질문의 모든 단어를 벡터로 임베드 했었음. 근데 사실 질문은 어떤 상황이냐에 따라 그 의미가 달라지는데도 불구하고 주어진 document 와 독립적으로 문장을 임베드하는 것은 한계가 있다. (예를 들어서, May I cut you? 라는 질문은 주어진 document 에서 칼이라는 단어가 나왔냐 아니냐에 따라 다르게 해석될 수 있다).

 

-> 해결방법은 다시 봐야 이해될 듯.

 

6. RNNs are slow

그렇다. NLP classifier 를 만들면서 느낀 거지만 RNN 이나 LSTM 을 트레이닝하는 건 진짜 오래 걸린다. CNN 학습시킬 때 너무 빨라서 놀랐던 기억이 있다..

 

-> 그렇다면, CNN (parallelism 덕분에 매우 빠름) 과 RNN (현재 상태 업데이트를 위해서 이 전의 상태를 반영하기 때문에 long memory) 의 장점을 합치자! 

우선 RNN 이 느린 것은 parallelizable 하지 않기 때문이다. 즉, 현재 상태 업데이트를 하기 위해서는 previous hidden state 이 필요하기 때문에 이게 계산될 때까지 기다려야지만 current hidden state 를 계산할 수 있다. 즉 병렬 계산이 안 되고 직렬 계산이기 때문에 느릴 수 밖에 없는 것.. 반면 CNN 은 n 개의 consecutive inputs 값만 있으면 병렬적으로 계산이 가능하다. (필터는 사실상 모든 input 에 대해 필터의 weight 을 곱하는 matrice 계산이기 때문에 병렬 처리 가능함.) 

그렇다면, current hidden state 를 계산하기 위해 previous hidden state 를 쓰는 것이 아니라, previous input vector 를 쓴다면?! Input vector 는 이미 다 pre-trained 된 벡터 값이기 때문에 매트릭스 곱으로 처리 가능해진다! (매트릭스 곱 만만세) 그렇게 되면 상당히 빠르게 training 이 가능해진다. 

 

근데 일단 매트릭스 곱이라서 빠르긴 하지만 Cuda가 있어야지 단순히 파이썬 행렬 곱으로는 엄청 큰 효과를 기대하기 어렵다고 함 (왠지는 잘 모르겠다) 

 

7. Architecture search is slow 

Deep learing 연구자들의 경우, 어떤 task 에 맞는 architecture 를 만드는 데만 시간이 너무 오래 걸린다 (여기서 아키텍쳐란, 예를 들어 CNN 이라고 치면 필터 갯수, 필터 크기, 스트라이드 크기, 이 모든 것을 포함한 CNN layer 의 갯수 ... 등을 말함). 

 

-> 2017년 연구에는 각 task에 맞는 아키텍쳐를 스스로 결정하는 AI model 을 만드려는 연구가 있었다 ( ㄷㄷ .. ) 일단 어떤 task에 대한 샘플 아키텍쳐를 만든 다음에 이 모델의 child network  를 학습시킨다. 이 학습된 모델의 정확도를 가지고 back progate해서 parameters update. 근데 이걸 reinforcement learning 을 통해서 했다고 함. 

 

======

한 학기동안 수고 하셨습니다! 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함