머신러닝 및 딥러닝
-
torch의 데이터 분산 연산(DP 와 DDP)머신러닝 및 딥러닝 2022. 3. 25. 19:27
torch parallelism Pytorch 를 사용해 모델을 학습하다 보면 여러가지 병렬화를 사용합니다. 병렬화를 사용하는 이유는 크게 2가지로 나눠볼 수 있습니다. 학습을 더 빨리 끝내기 위해 모델이 너무 커서 이를 분할하여 GPU에 올리기 위해 이번 블로그 글은 1. 학습을 더 빨리 끝내기 위해 사용할 수 있는 방법중 하나인 학습에 사용할 데이터를 병렬화 를 알아보도록 하겠습니다. torch.nn.DataParallel Single node 와 multi-GPU 에서 공작하는 multi-thread 모듈입니다. 이에 대한 동작방법을 그림으로 알아보겠습니다. 먼저 순전파 (Forward Pass) 입니다. Forward Pass 설명의 용이성을 위해 여기선 GPU의 갯수를 4개로 하고 master ..
-
Dialogflow머신러닝 및 딥러닝 2022. 3. 10. 23:50
최근 의도 분류기(Intent Classification) 를 실험해보고 이용해 볼 일이 생겨 의도 분류기로 사용할 수 있는 구글의 Dialogflow 를 어떻게 이용할 수 있는지 적어보려고 합니다. Dialogflow 는 2016년에 기존 챗봇 빌더 시장에서 가장 유명한 플랫폼인 api.ai 를 구글이 인수하여 기존의 우수한 대화식 인터페이스는 살리고 구글의 강력한 머신러닝을 추가하여 만든 챗봇 빌더 플랫폼 입니다. Dialogflow 는 영어뿐아니라 한국어, 중국어, 우크라이나어 등 다양한 언어를 지원 가능하며 더 많은 언어도 추가적으로 업데이트할 예정이라고 합니다.(하지만 영어를 가장 잘 지원하긴 합니다.) 어떤 경우에 사용할 수 있을까? 단순한 작업의 경우 코드를 직접 구성하지 않아도 되기 때문에..
-
Tokenizer에 종류머신러닝 및 딥러닝 2022. 3. 1. 21:03
단어 단위로 Tokenize 글자단위로 Tokenize 하위 단위로 Tokenize 단어 단위로 Tokenize 장점 : 가장 간단하다(space 단위로 tokenize 를 하면 되니까) 단점 비슷한 단어끼리 의미를 공유하는 단어의 의미가 없어지게 된다. 단어가 굉장히 많기 때문에 거의 무한개의 토큰수가 생성된다. 토큰수를 한정하면 vocab에 해당 단어가 없을 경우 OOV가 되기 때문에 실제로 굉장히 뜻이 다른 단어지만 같은 Representaion으로 표현된다. 글자 단위로 Tokenize 장점 : 가장 적은 vocab 사이즈로 모든 표현이 가능하다. 단점 : 각각의 토큰의 의미를 거의 가지지 않는다. 모델의 입력으로 들어가게 될 때 굉장히 긴 sequence로 들어가기 제약이 많다. subword ..
-
클라우드 환경에서 딥러닝 모델을 띄울 때 주의해야 할점과 나의 환경머신러닝 및 딥러닝 2021. 8. 31. 21:52
1. 우선 위 그림처럼 pid 7060 이 killed 된것을 볼 수 있다.(참고로 환경은 ubuntu 18.04 버전이다.) 이런 경우 디스크(RAM) 프로세스 혹은 모델이 너무 커서 운영체제가 kill 명령어를 입력한 것이다. 따라서 더 좋은 instance로 바꾸는 작업을 해줘야한다. (참고로 도커를 사용한다면 이런것도 뜨지 않고 화면이 멈추는 경우도 자주 등장한다. 아마 RAM이 터져서 렉이 걸리는 거 같다. 따라서 이 경우도 더 좋은 instance로 변경해줘야 한다. 회사한테는 미안하지만 내 시간을 절약하기 위해선 우선 좋은 인스턴스를 할당 받아 내 코드 문제는 아니라는 것을 확인하는 방법으로 시간을 절약하는 방법이 가장 좋은 방법이다.) 2. 우분투 "ubuntu-drivers not fou..
-
BlenderBot 2.0 : An open source chatbot that builds long-term memory and searches the internet머신러닝 및 딥러닝 2021. 7. 19. 17:57
Long-term 메모리를 가지고 있으며 internet에 접근할 수 있는 능력을 가진 챗봇. 멀티턴에 대하여 long-term 메모리에 대해서 현재 존재하는 모델들을 능가하는 성능을 보임. 또한 일관성도 증가 되었고 지식도 더 많은 것을 알 수 있음. 모델은 대화 도중에 얻은 적절한 topic을 long-term memory store에 저장하고 long-term 대화 세션에 참여할때 이를 사용한다. 대화 도중 모델은 자신만의 검색쿼리를 생성하여 인터넷에 검색할 수 있고 관련 텍스트를 읽고 반응을 할 수 있다.
-
ROUGE머신러닝 및 딥러닝 2021. 7. 16. 21:40
ROUGE가 요약 모델의 성능을 평가 하는 방법 Recall-Oriented Understudy for Gisting Evaluation 의 준말 텍스트 요약, 기계번역 등 자연어 생성 모델의 성능 평가 지표 시스템 요약(모델 생성 요약): the cat was found under the bed 참조 요약(Gold standard, 대개 사람이 직접 만든 요약): the cat was under the bad 만약 모델의 성능 평가를 위해 개별 단어 에만 집중한다면 모델이 생헝한 시스템요약과 사람이 만들어 놓은 참조 요약 간 겹치는 단어는 단 6개 뿐이다. 그러나 이 6이라는 숫자는 성능 지표(metric)로 바로 사용하기에 적합하지 않은 수이다. 따라서 정략적 지표로 사용할 수 있는 값을 얻기 위해 ..
-
서브워드 토크나이저머신러닝 및 딥러닝 2021. 1. 23. 21:55
기계에 아무리 많은 단어들을 학습시킨다고 하여도 신조어와 단어사이즈의 한계등으로 인하여 Out-Of-Vocabularay가 발생한다. 이를 해결하기 위해서 서브워드 분리작업이라는 것이 만들어 졌다. 서브워드 분리 작업은 하나의 단어는 더 작은 단위의 의미있는 여러 서브워드들의 조합으로 구성된 경우가 많기 때문에, 하나의 단어를 여러 서브워드로 분리해서 단어를 인코딩 및 임베딩 하겠다는 의도를 가진 작업이다. 이를 통해 OOV, 희귀 단어, 신조어 문제를 완화 시킬 수 있다. 이런 서브워드 토크나이저에는 대표적으로 Sentencepiece 알고리즘과 BPE를 활용한 WordPiece가 있다. BPE(Byte Pair Encoding) BPE는 1994년에 제안된 데이터 압축 알고리즘으로 연속적으로 가장 많..
-
Pytorch에서는 왜 항상 optimizer.zero_grad()를 해줄까?머신러닝 및 딥러닝 2021. 1. 17. 19:06
바로 질문에 대한 답을 말씀드리자면 "Pytorch에서는 gradients값들을 추후에 backward를 해줄때 계속 더해주기 때문"에 우리는 항상 backpropagation을 하기전에 gradients를 zero로 만들어주고 시작을 해야합니다. 이렇게 gradients을 더해주는 방식은 RNN을 학습시킬때 매우 편리한 방식입니다. 따라서 매번 loss.backward()를 호출할때 초기설정은 매번 gradient를 더해주는 것으로 설정되어있습니다. 그렇기 때문에 학습 loop를 돌때 이상적으로 학습이 이루어지기 위해선 한번의 학습이 완료되어지면(즉, Iteration이 한번 끝나면) gradients를 항상 0으로 만들어 주어야 합니다. 만약 gradients를 0으로 초기화해주지 않으면 gradie..