---
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을 사용한다.