Transformer 논문 스터디 준비로 이번 주 강의를 못 들었어서
오늘은 미뤄둔(?) 강의를 모두 들었다.
논문 공부하면서 개념들을 익혔었기 때문에
강의 듣는 것은 비교적 수월하였다.
실습 코드는 아직 다 못봤는데
살짝 보니 퀄리티가 좋아서
내일 아침에는 그거 분석하면서 돌려보고
또 기본 과제 마무리하고 해야할 것 같다.
오늘 마무리 지으려 했었는데
한번 쉬었다가 다시 하려니 힘드네
무리하진 말아야지.
아, 그리고 오늘 다행히도 level2 팀 구성이 마무리됐다.
프로젝트에 정말 관심 있는 분들만 모인 것 같아서
기대가 되고 또 내가 기여할 부분에 대해서도 많은 기대가 된다.
집중해서 좋은 결과를 내고 싶다.
그리고 오늘 멘토님과 짧은 상담도 했다.
멘토님께서 여러모로 신경써주시려고 한 점이 감사했다.
앞으로도 함께 활동하면서 많은 부분을 배우고 싶다.
마무리는 역시나 학업 정리.
말로 풀어 설명하신 부분 중에서
내게 필요하다 싶은 부분을 따로 적어놨었다.
RNN
time step t에 대해 어떤 task에 예측값이 필요한 경우에는 이 ht를 입력으로 해서
추가적인 layer인 output layer를 만들고
그 output layer의 linear transformation matrix인
Why를 곱함으로써 최종 output인 yt를 구할 수 있게 됩니다.
그리고 이렇게 선형변환을 해서 얻어진 output vector는
저희가 가령 binary classification을 수행하게 되면
이 output vector의 차원은 1차원인 scalar 값이 되고
여기에 추가로 sigmoid 함수를 적용해서
binary classification의 확률값을 예측값으로 계산하게 되고
multiclass classfication을 수행하는 경우에는
이 yt가 클래스 개수만큼의 dimension을 가지는 vector가 나와서
추가로 softmax 레이어를 통과해서 저희가 분류하고자 하는
class와 동일한 개수 만큼의 확률 분포를 얻을 수 있게 됩니다.
이렇게 추가적으로 넣어줄 입력이 따로 없는 경우에는
간단히 이 동일한 RNN 모델의 입력으로는
같은 사이즈의 벡터나 행렬, 텐서가 들어가되
모두 그 값이 0으로 채워진 그러한 형태의 입력을 주게 됩니다.
RNN은 다양한 길이를 가질 수 있는 sequence 데이터에 특화된 유연한 형태의 딥러닝 모델 구조가 되고요
오리지날 RNN 혹은 이를 Vanila RNN이라고 부르고
학습시의 gradient vanishing 혹은 explosioin 문제가 있어서 실제로는 많이 사용되지는 않고요.
LSTM이나 GRU를 실제 많이 사용하고 그 방법들에서
cell state vector 혹은 hidden state vector를 각 step에서 업데이트 하는 과정이
기본적으로 덧셈에 기반한 연산이기 때문에 이러한 gradient vanishing 혹은 explosion 문제를 피하고
longterm dependency 문제를 해결할 수 있는 그러한 방법이 됩니다.
SeqtoSeq
decoder의 hidden state vector가 encoder의 hidden state vector 각각과 내적의 연산을 수행하게 되고요.
Attention scores - 내적에 기반한 유사도라고 생각할 수 있고요
이 값들을 softmax를 통과시켜서
각각의 encoder hidden state에 대응하는 확률값을 계산해줄 수 있는 입력 vector 혹은 logit vector로 생각하면
그러면 이 값은(확률값) 결국 이 encoder hidden state에 부여되는 어떤 가중치로써 사용이되고요.
그러면 이 encoder hidden state의 vector에 대해서 이 가중치 set를 적용해서 가중평균을 구할 수가 있고
그 가중평균으로써 나오는 하나의 encoding vector를 구할 수가 있게 됩니다.
즉, 이것이 바로 decoder hidden state vector를 사용해서 저희가 이 당시에 필요로 하는 정보는
각 encoder hiddens state vector의 (attention distribution) 확률값만큼의 정보를 필요로 한다는 것을 의미하게 됩니다.
그러면 여기서 나온 이 attetion module의 output이라 볼 수 있는
이 encoder hidden state vector의 가중평균의 vector는 저희가 또 context vector라고도 부르고요.
그러면 우리는 이 과정에서 attention module을 정의할 수 있게 되고
그 attention module은 기본적으로
입력은 decoder hidden state value 하나와 그리고
이 encoder hidden state value 이 set가 attention module의 입력으로 들어가게 되고요
그러면 이 attention module의 출력으로 나오게 되는 것은
이 encoder hidden state value의 가중평균된 vector 한 개가 output으로 나오게 됩니다.
그러면 이렇게 만들어진 vector는 앞서 계산한 decoder hiddens state vector와
이 context vector, attention module의 output vector가 함께 concat이 되어서
output layer의 입력으로 들어가고요 그로부터 다음으로 나올 단어를 저희가 예측하게 됩니다.
합이 1인 형태의 그 어떤 상태적인 가중치로 나오는 이 vector, 즉 softmax의 output이 되겠죠
이 합이 1인 형태의 가중치를 저희는 attention vector라고 부릅니다.
이 decoder rnn의 hidden state vector의 역할을 생각해보면
저희는 이 vector가 해당 time step에서의 output layer에 들어가는
입력으로 사용됨과 동시에
이 단어는 입력 sequence에서 주어지는 각 word 별로의 encoding vector 중
어떤 단어 vector를 저희가 중점적으로 가져와야할지 가중치를 결정해주는 두 가지 역할을 수행하게 됩니다.
encoder 단에서 주어진 vector에서의 정보를 잘못 가져온 경우
이 attention 가중치를 적절히 원하는 정보가 선택될 수 있도록
그런 형태로 이 hidden state vector가 다시 back propagation에 의한 학습 과정이 진행이 됩니다.
실제로 다음에 등장하는 이 단어, 즉 이 단어들은 각 time step 마다
ground truth의 단어들을 입력으로 넣어주고 있습니다. 그런데 가령 학습 초반이나
저희가 decoder 에서의 time step에서의 예측을 잘못한 경우,
이런 경우라 하더라도 저희는 전 단계에서 예측을 잘못했다 하더라도
다음 time step에서는 ground truth 올바른 ground truth의 단어를 입력으로 넣어주게 됩니다.
오늘도 감사한 하루였다. 지치지 않게 밸런스를 잘 맞춰보자. 감사하다:)
'느린 일지 > 부스트캠프 AI Tech 4기' 카테고리의 다른 글
[학습 일지 / day 21] 아, 이거 되는구나 (0) | 2022.10.18 |
---|---|
[학습 일지 / day 20] 새로움 (3) | 2022.10.15 |
[학습 일지 / day18] 발표 (0) | 2022.10.12 |
[학습 일지 / day 17] git 학습 및 스터디 준비 (0) | 2022.10.11 |
[학습 일지 / day 16] 탈 (0) | 2022.10.11 |