[KT Aivle 3기 AI] 9주차. 언어지능 딥러닝
KT Aivle School 3기 AI 9주차. 언어지능 딥러닝
- 강사 : 김정훈 강사님
- 주제 : 언어지능 딥러닝
- 내용 :
- RNN(Recurrent Neural Network)에 대한 직관적인 이해 및 실습
- LSTM(Long Short Term Memory)과 GRU(Gated Recurrent Unit)에 대한 직관적인 이해 및 실습
- Bidirectional Layer와 Conv1D에 대한 직관적인 이해 및 실습
- 자연어 처리 방법에 대한 이해 및 실습
- Text Classification과 Text Generation에 대한 직관적인 이해 및 실습
- Seq2Seq에 대한 직관적인 이해 및 실습
🌟 9주차
9주차는 언어지능 딥러닝을 배웠다. 자연어 처리에 대한 것과 이를 처리하기 위해 Sequence 모델들에 대해서 이해하고 실습할 수 있었다. 정말 많은 것들을 배울 수 있었다. + 추가로 정리하기
💡 38일차 TIL (03/27[월])
🌟 인공지능 개발자로서 꼭 필요한 능력!
- 딥러닝의 구조를 기능적으로 해석하고 이해할 줄 알아야 한다!
- 결국 구조를 이해하고 파악하고 있다면, 어떤 언어나 라이브러리 등 문법만 간단히 익히면 사용할 수 있다!
✅ RNN(Recurrent Neural Network)
- RNN(Recurrent Neural Network)에 대해서 이해하고 실습해보았다.
- RNN은 시계열 데이터를(순서가 있는 데이터) 잘 학습하던 최초의 딥러닝 모델이다!
✔️ RNN의 핵심!
- 과거의 (정돈된) 정보와 현재의 (raw) 정보를 동시에 고려하여, 모델의 목적에 맞는 Representation을 하여 새로운 특징을 제작해낸다.
- 위의 과정을 ‘일관된 규칙으로 반복’할 수 있다.
- 시점이 달라져도, 정보를 추출하는 규칙은 동일하다 → 시점이 달라도, 중요하게 판단해야할 정보만을 추출한다. (같은 weight를 사용한다!)
✨ + RNN의 특징들
- RNN은 초기 시점의 정보를 굉장히 빠르게 잊어버린다.
- 최근 정보를 더 잘 기억한다.
- tanh를 믿고 사용하자. 그렇지 않으면 Gradient가 난리난다.
- RNN Layer를 Hidden Layer라고 하는데, 시점별 정보를 언급하고 싶을 때는 ‘Hidden State’라는 표현을 사용한다. → t 시점의 Hidden State : $H^t$
loss를 mae로 사용하는 경우, ‘급격한 학습을 막는데’ 종종 사용이 된다.
return_sequences
옵션에 대해서..- RNN 다음 레이어는 ‘모든 시점의 정보’를 전부 고려하도록 해라
- ⇒
return_sequences=True
: 모든 시점에서 제작한 특징값들을 다음 레이어로 다 넘겨라.
- ⇒
- RNN이 제작한 정보 중, ‘맨 마지막 시점만’(최신 정보를 더 중하게) 다음 레이어가 고려하도록 하고 싶다.
- ⇒
return_sequences=False
: 맨 마지막 시점의 특징값들만 다음 레이어로 넘겨라.
- ⇒
- RNN 다음 레이어는 ‘모든 시점의 정보’를 전부 고려하도록 해라
✅ 기타
✔️ 시계열 데이터를 바라볼 때
- Trend 확인
- Cycle 확인
✔️ 데이터 종류별 shape
- Tabular.shape : [n rows, n cols]
- Image.shape : [#, H, W, C]
- Sequence.shape : [#, timestepsize, features]
💡 39일차 TIL (03/28[화])
오늘은 어제 배운 RNN에 대한 이해를 바탕으로 LSTM과 GRU에 대한 직관적인 이해를 했다.
✅ LSTM (Long Short Term Memory)
- RNN의 금붕어 문제 일부 해결
- LSTM은 RNN을 계승한 모델!
- LSTM = RNN의 구조적 특징 + Memory + Memory Managing
- LSTM = RNN의 구조적인 특징을 전부 가지고 있으면서 + '기억을 생성하고, 유지하고, 보수하는' 장치가 달려있다.
- 눈여겨 볼 점 : Gating 기법 (Sigmoid)
- 가중치 개수는 RNN의 4배
- LSTM은 똑똑하고 무거운 금붕어다.
✨ + LSTM의 특징들
- Cell State 와 Hidden State가 존재
- ✔️ Cell State는 Memory역할을 함
- Forget Gate : Sigmoid를 통과하여 기억에 대한 강도를 조절
- Input Gate : Cell State에 기록할 가치가 있는지 조절
- Update Cell State : Old + Net
- 현 시점의 기억 = 과거의 기억 * Forget Gate + 기억의 후보 * Input Gate
- $C_t = f_t \cdot C_{t-1} + i_t \cdot \tilde{C}_t$
- New Hidden State : from Memory & from Now
- $h_t = o_t \cdot tanh(C_t)$
- $o_t = \sigma(W_0[h_{t-1}, x_t] + b_0)$
- $tanh(C_t)$ : 통합된 기억을 -1 ~ 1로 squeeze
- Normalize : 규격을 맞춘다.
- Hidden State 규격 (RNN)
✅ GRU (Gated Recurrent Unit)
- Gating 기법을 정돈 함
- Cell State (Memory) + Hidden State를 통합 ⇒ Hidden State 자체가 Memory의 역할
- 과거의 기억과 현재의 기억을 일정 비율로 가져온다. (Update Gate ($z_t$))
- 가중치 개수는 RNN의 3배
- LSTM 대비 모델의 무게는 75%이나, LSTM과 성능이 비슷하다!
✨ + GRU의 특징들
- Reset Gate : LSTM의 Forget Gate와 비슷
- $r_t = \sigma(W_z \cdot [h_{t-1}, x_t])$
- Update Gate : 과거의 기억과 현재의 기억을 일정 비율로 가져온다. 비율 ($z_t$) 생성.
- $z_t = \sigma(W_z \cdot [h_{t-1}, x_t])$
- Current Memory : LSTM의 Input Gate와 비슷
- $\tilde{h_t} = tanh(W \cdot [r_t * h_{t-1}, x_t])$
- New Hidden State : from Old & from Now
- 과거의 기억과 현재의 기억을 일정 비율로 가져온다.
- $h_t = (1 - z_t) * h_{t-1} + z_t * \tilde{h_t}$
✅ RNN, LSTM, GRU 비교 표
RNN | LSTM | GRU | |
---|---|---|---|
가중치 개수 | 한 세트 당 | RNN의 4배 | RNN의 3배 |
Memory | X | O | O |
✅ 기타
✔️ 기호에 대한 의미
- $\bar{y}$ : y bar 평균
- $\hat{y}$ : y hat 예측/추론
- $\tilde{y}$ : y tilde y가 될 수 있는 후보 (candidate)
✔️ 각 task별 특징에 대해 이해해야 한다.
언어에 대한 예시로는 한국어와 영어의 특징을 들 수 있다.
- 한국어는 조사가 있기 때문에 순서가 상관이 없다.
- ex) 너는 이거 못하지, 너는 못하지 이거, 이거 너는 못하지, 못하지 너는 이거, …
- 영어는 위치가 품사를 정한다.
- ex) I will skin you. I water plant.
💡 40일차 TIL (03/29[수])
오늘은 수업 외적으로 강사님께서 우리가 나아가야할 방향성에(취업을 위한) 대해서 많은 말씀을 해주셨다.. 정말 감사드립니다!!
오늘은 Bidirectional Layer와 Conv1D에 대한 직관적인 이해를 하고, 실습해보았다.
✅ Bidirectional Layer
- 양방향으로 살펴보는 구조를 가지고 있다.
- 정방향 : 최신 정보를 ‘과거의 맥락’을 고려하여 반영
- 역방향 : 첫 시점의 정보를 ‘미래의 맥락’을 고려하여 반영
- ⇒ 모든 시점의 맥락을 고려하여 정보를 추출할 수 있음
모델 구조상 Flatten해서 모든 시점을 살펴보는 것이 의미가 있을 것?
✅ Conv1D
- LSTM은 모든 시점이 고려됨
- Conv1D는 관찰하는 시점 외에는 관심이 없다.
- 시점을 축소하는 역할을 가짐
- 그래서 먼저 Conv1D로 시점을 축소한 다음, LSTM이나 GRU, Bidirectional Layer 등등에 넣어줌으로써, 해당 모델들의 단점이었던 오래된 정보들에 대해 까먹게되는 현상을 보완할 수 있다.
💡 41일차 TIL (03/30[목])
- [Text Classification 실습 진행한 코드!]
- 자연어 처리 방법에 대한 이해 및 실습을 진행
- Text Classification과 Text Generation에 대한 직관적인 이해 및 실습을 진행
- ✔️ 자연어 처리의 뼈대
- Tokenize
- Embedding
- Modeling
✅ Text Classification & Embedding
- ✔️ 예전 방법
- Bag of Words : index를 지정 (+ 등장 횟수를 count 해서 많은 순)
- Tf idf : ~
- ⇒ 예전 방법의 의미!
- 어떻게든 '숫자'로 변환했다. → 계산이 가능
- 너무 sparse 하다 (죄다 0 투성이)
- ✔️ Word Embedding
- 예전 방법은 사람 관점에서 전처리 했다. 그래서 조금 더 기계 관점으로 전처리 한 방법.
- Tokenize = (word) token : idx (
Tokenize()
) - Text Sequence → Index Sequence (
tk.texts_to_sequences()
) - 문장 길이를 통일 (
pad_sequences()
)- padding, truncate
- 보편적으로는 앞에 붙이고, 앞을 살린다(뒤를 자른다)
tensorflow.keras.prepocessing.sequence.pad_sequences
의 truncate default 값은 앞을 자르는 것이다 (truncate='pre'
)
- Tokenize = (word) token : idx (
- ✔️ Embedding Layer에서 학습이 될 숫자로 바꿔준다(Vector) → 이 값도 학습을 통해 업데이트
- 성능에 도움? : 긍/부 분류하에 의미 있음
- 의미분석? : 가능성은 열림 (어학적 의미는 X)
- ✨ Word Embedding 에는
- word2vec
- Doc2vec
- Elmo
- FastText
💡 42일차 TIL (03/31[금])
- Seq2Seq에 대한 직관적인 이해 및 실습을 진행했다.
- Attention과 Transformer에 대해서도 배우고 싶었는데 못배워서 아쉬웠다.. 혼자 공부해봐야지!
✅ Seq2Seq
- Sequence to Sequence : Sequence를 입력 받아서 Sequence를 내보낸다.
- Encoder와 Decoder 구조를 가지고 있다.
- Encoder에서 Context를 정보를 가지고 있는 Hidden State를 생성하고, 이를 Decoder의 initial state로 넘겨준다.
- sos : start of sentence(speach) → 지시용 토큰
- eos : end of sentence(speach) → 모델이 사람에게 알려주는 것
- ✔️ 교사 강요(Teacher Forcing)
- 학습 할 때는, 모델의 예측 값은 무시하고 실제 정답 만을 다음 Sequence로 넘겨준다.
This post is licensed under CC BY 4.0 by the author.