--- tags: 'peer-session' --- # 210908 피어세션 - 모더레이터 : 강석민 # 할 내용 - NLP 트렌드를 주제로 최근 주목 받고 있는 NLP 마스터클래스 - 학습정리 - 과제정리 - 그외 등등 ## 학습 정리 ## RNN - RNN에서는 기울기 폭발, 기울기 소실 문제가 있다. - 기울기 폭발은 그라데이션 클리핑을 통해 해결한다 - 기울기 소실은 LSTM을 통해 해결한다. - LSTM에서도 그라데이션 클리핑을 활용한다. ## Seq2Seq & Attention - Seq2Seq : 문장을 통해 문장을 생성하는 신경망 - RNN에 기반한 Seq2Seq 모델은 다음과 같은 문제가 발생 - 하나의 벡터에 정보를 담으려 하니 정보손실이 발생 - Attention은 문장 생성 시 입력된 문장을 참고하여 출력 - 디코더의 출력과 각 인코더의 출력을 내적하여 각 단어의 Attention 기여도를 계산함 - 계산된 Attention Output과 디코더를 내적하여 결과를 출력 - 평가 및 실전에는 이 결과값을 다음 디코더의 인풋값으로 넣지만, 학습시에는 정답라벨에서 가져와서 인풋값으로 넣음. ⇒ 이를 Teacher forcing이라 함 - Teacher Forcing이 학습이 빠른 장점은 있지만, Ground에서는 Teacher forcing을 사용하지 않은 경우와 더 유사하기 때문에, 처음에는 Teacher Forcing을 사용하여 학습하고, 이후에 Teacher forcing을 사용하지 않고 학습하는 방법도 있음 - Attention의 장점 - 기계번역에서 성능향상 - 긴 문장에 대한 병목현상 해결 - 신경망이 스스로 순서를 학습 ## 피어세션 정리 - 과제에 대한 피드백 - forward와 train 코드가 서로 다르다 - forward에서만 view or reshape를 사용한 경우 - forward와 train 둘다 reshape를 사용한 경우 - view와 reshape? - contiguous => 강제적으로 물리적 위치를 바꿔버린다. - reshape() == contiguous().view() - 과제의 Question - 해쉬를 사용하여 메모리 사용량을 줄이자. - 멘토님 : 다 합치는게 더 편할 것이다. - torch cuda amp => 기존 Tensor은 float32를 사용하는데 굳이 float32를 사용하지 않아도 되는 텐서들을 16으로 autocast하여 연산량을 줄일 수 있다. - LSTM의 성능 개선 방식은 세 가지가 존재한다. - LSTM 층 쌓기 - Dropout ⇒ 수평이 아닌 수직으로 - LSTM drop의 수직적, 수평적 적용 - [가중치 공유](https://velog.io/@dscwinterstudy/%EB%B0%91%EB%B0%94%EB%8B%A5%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-%EB%94%A5%EB%9F%AC%EB%8B%9D2-6%EC%9E%A5#653-%EA%B0%80%EC%A4%91%EC%B9%98-%EA%B3%B5%EC%9C%A0)⇒ encoder, decoder가 하는 역할이 비슷하기 때문에, 가중치를 공유하여 파라미터 수는 줄이고 성능은 개선할 수 있음 - LSTM이 기울기 소멸문제는 완화해주지만, 기울기 폭팔 문제는 해결해주지 않음. - 이를 완화하기 위해 gradient Clapping을 사용한다.