P-stage2 [Day1]
수업내용
(1강) 인공지능과 자연어 처리 (자연어처리 역사(현재까지))
http://vivekbardhan.blogspot.com/2007/06/communication-theory.html
애초에 encoding이 내가 어떤 물체를 설명할 때 그 물체를 설명할 수 있는 어떠한 형태로 가공해서 내보내는거고 decoding은 그 정보를 받아 본인의 정보로 복원하는 과정이다.
간단하게 할 수 있는건 단어에 벡터를 치환해서 사용하는 자연어 단어 임베딩. 학습할 때는 해당 단어가 나온 여러 문장들로 그 단어의 뜻을 유추하는 방식으로 한다. 간단하게 할 수 있는게 저 Word2Vec인데 같은 뜻을 가지고 뒤에 조사만 다른것도 서로 독립된 vocab으로 관리(잘못한, 잘못되어진,..)되어 한 글자씩 쪼개서 분석하는 FastText가 나왔다.
하지만 이것도 완전한 문장을 주면 그 문장 안에서 단어의 뜻을 유추 못하는 문제가 생김. 이게 무슨말이냐면 같은 단어도 다른 문장에 따라 완전히 다른 뜻으로 해석해야 하는데, 같은 단어도 다른 여러 문장들로 학습하다보니 뜻이 모호해지고 제대로 해석을 못하는 경우가 생긴다. 그래서 언어 모델이 생겼다. RNN이나 transformer 같은거.
앞에 단어가 들어온 순서대로 입력받고 출력받아 그걸 입력으로 받는 시계열 방식의 RNN이 생겨나 많은 인기를 얻고, 중요한 정도에 따라 정보를 받아들이는 attention, 이렇게 rnn기반에 attention을 넣어 만들어진 attention모델에서 차례대로 입력받으니 속도가 너무 느려서 한번에 받도록 만든 transformer. 이렇게 만들어진 transformer가 성능이 너무 좋아서 이를 기반으로 만들어진 다양한 transformer 파생작들. 원래의 transformer를 기반으로 만들어진 BERT를 시작으로 다양한 파생작들..
목표
알고리즘 안풀리는 문제 풀기, 1등 코드 해석하기
행동
알고리즘 문제 풀려고 여러 방면으로 생각해도 도저히 풀리지가 않는다. 하지만 답을 보면 자괴감이 너무 강하게 들 것 같아 안보고 있다.
1등 코드를 보니 모든 코드를 def 안에 넣고 매 epoch를 돌릴때마다 del, cuda empty cash를 진행하며 메모리 최적화를 해주고 있다. 또 지금은 mixup 부분을 보고있는데 간단하게 되는게 아니고 cuda의 다른 메소드들을 섞어서 써야 하는것 같다.
지금 보고있는 부분
https://pytorch.org/docs/stable/amp.html
없으면 안되는 엄청 중요한 그런건줄 알았는데 최적화와 gradient가 0으로 수렴되서 사라지는 문제를 다루는 것 같다.
회고
내일은 일찍 일어나보자. Django도 공부해서 나도 서비스까지 배포한 앱 하나정도는 만들어야 한다.