트랜스포머를 활용한 자연어처리_1
- 글을 들어가기 앞서, 개발 공부를 잘하는 방법 -
1. 처음배울때 : 기본쌓기
2. 기본이 쌓이면 : 지식강화(다지기)
3. 주기적으로 : 역량강화 + 내가 필요한 지식들 메모하기
* 프로그래밍 언어나 프레임워크, 라이브러리를 배울땐 : 공식사이트가 제일 정확함 *
https://pytorch.org/docs/stable/index.html
https://pytorch.org/tutorials/
* git nation 의 리스트 참조 *
- 리액트 공부나 유닛테스트에 관심이있다면 Ken.C dodds 분의 블로그 참조
- 리액트 쿼리를 배우고있다면 공식문서 + Dominik dorfmeister 의 블로그 읽어보기
--> 공식문서 + 명성있는 지식인의 블로그 함께 보며 공부하기
트랜스포머 소개
- 트랜스포머가 등장하기전, NLP에서는 순환신경망구조 (LSTM)가 최고수준의 성능을 달성했음. 이 구조는 NLP작업, 음성처리, 시계열작업에 널리 사용되었고, 지금도 사용중.
- 자연어처리 NLP : 인공지능 모델을 활용하여 사람의 언어를 모방하는 모든 분야를 말함
- 트랜스포머 : 모델링 패러다임을 바꿈. 순환을 모두 없애고 셀프 어텐션이라는 특별한 형태의 어텐션에 전적으로 의지하게된것.(신경망의 같은층에있는 모든상태에대해 어텐션을 작동시키는 방식)
NLP의 전이학습
- 전통적인 지도학습과 비교하면, 전이학습은 다양한 작업에서 적은양의 레이블 데이터로 훨씬 효과적으로 훈련하는 높은품질의 모델을 만듬.
- 컴퓨터 비전에서는 imageNet같은 대규모 데이터셋을 이용하는 전이학습이 표준이 됐지만, NLP에서는 유사한 사전훈련을 정의하지못함. -> 2018년쯤, OpenAI 연구원들이 감성분류작업에 비지도 사전훈련에서 추출한 특성을 사용한 방식(https://arxiv.org/abs/1704.01444 )을 소개. -> ULMFit가 등장
사전훈련
- 이전단어를 바탕으로 다음단어를 예측하는것 = 언어모델링 이라고 함
- 이 작업은 레이블링된 데이터가 필요하지않으며, 위키피디아등의 풍부한 텍스트 활용
GPT
- 트랜스포머 아키텍처의 디코더부분만 사용하고, ULMFiT같은 언어모델링 방법을 사용
BERT
- 트랜스포머 아키텍처의 인코더부분을 사용하고 마스크드언어 모델링 이라는 특별한 형태의 언어 모델링을 사용
- 마스크드언어 모델링의 목표는 텍스트에서 랜덤하게 마스킹된 단어를 예측하는것
호환되지 않는 프레임워크 사용의 문제를 해결하기위해 : 허깅페이스 트랜스포머 존재
https://github.com/huggingface/transformers
one-stage detections
Retinanet
- 기존 detection알고리즘에서 classifier의 loss로 사용되던 cross entropy loss에서 변형된'focal loss' 제안함 .-> class imbalance 문제가 발생
- class imbalance : 학습시 두가지문제 야기 : 1) 대부분의sample이easy negative, 즉 모델이class를 예측하기쉬 운sample이기때문에 유용한 기여를 하지못해 학습이 비효율적으로 진행됨 2) easy negative의수가 압도적으로 많기때문에 학습에 끼치는 영향력이 커져 모델의 성능이 하락
Retinanet : 하나의 backbone network와 2개의 subnetwork(각각 classification과 boudingbox regression을 수행)로 구성
https://arxiv.org/abs/1708.02002
https://gaussian37.github.io/dl-concept-focal_loss/
반드시 읽어볼 모델 논문들
R-CNN -> OverFeat -> Fast R-CNN -> Faster R-CNN -> OHEM -> YOLO v1 -> SSd ->( R-FCN) -> YOLO v2 -> Feature Pyramid Net(FPN) -> TOLO v3 -> RefineDet -> Cascade R-CNN -> M2det
https://github.com/hoya012/deep_learning_object_detection