모바일 앱 환경에서는 latex 수식이 깨져 나타나므로, 가급적 웹 환경에서 봐주시길 바랍니다.
Regularization 토픽 이전 글에서 우리는 CNN에 대해서 살펴보았다.
https://kyteris0624.tistory.com/35
Deep dive into Deep learning part 13. CNN (1)
"모바일 앱 환경에서는 latex 수식이 깨져 나타나므로, 가급적 웹 환경에서 봐주시길 바랍니다." 오늘부터는 CNN에 대해 이야기를 해보고자 한다. 먼저 CNN의 역사에 대해 간단하게 이야기해볼까 한
kyteris0624.tistory.com
여기서 Image data는 고정된 길이의 data이다. 즉, image data의 크기 (shape)은 바뀌지 않는다.
하지만 'sequence'가 있는 데이터는 가변형 길이의 data이다.
time step $t$에 따라 data가 input으로 들어오며 이때 data의 shape은 크기가 달라질 수도 있다.
예를 들어 하나의 문단을 생각해보자.
"나는 오늘 점심에 햄버거를 먹었다. 햄버거는 맛있다. 하지만 치킨을 더 좋아한다."
위와 같이 순서가 있는 데이터 ('sequence data')는 "나는", "오늘", "점심에" ~ "좋아한다."가 time step에 따라 순차적으로 model에 들어온다. 그리고 각각의 단어들의 길이도 다르고, 문장들의 길이도 다르다.
이처럼 '언어'는 순서가 있는 가변길이의 데이터이다.
그리고 순서가 있기 때문에 특정한 위치에 있는 표현의 의미들을 잘 이해하기 위해서는 해당 단어의 앞과 뒤를 잘 살펴봐야 한다. 이를 우리는 문맥/맥락을 잘 살핀다라고 이야기한다.
여기서 하나의 중요한 가설이 나오는데 '단어의 의미는 주변 단어들에 의해 형성된다.' ( = '비슷한 문맥에서 등장하는 단어들은 비슷한 의미를 가진다.') 라는 분포 가설 (Distributed hypothesis)이다.
현재의 자연어 처리 (NLP)는 이 언어학적 가설에 근거하고 있다.
그리고 위와 같이 sequence data를 처리하는데 특화된 Neural network가 Recurrent neural network (RNN)이다.
언어가 대표적인 sequence data이기 때문에 대다수 sequence model의 예시는 language model이다.
이후에 자세하게 살펴보겠지만, 위 단어 (NLP 분야에선 token이라 한다.) 들도 우리는 전부 숫자로 바꿔주어야 한다.
컴퓨터가 연산할 수 있는 형태는 결국 '숫자'뿐이기 때문이다. 정확하게는 벡터로 변환해주는 벡터화 작업을 거치고 Neural network의 input으로 집어넣는다. 이를 우리는 Embedding이라고 한다.
과거에는 단순하게 one-hot embedding을 진행하였으나, Word2Vec 이후로 Embedding 과정도 학습을 통해 진행한다.
Word2Vec은 Sparse vector를 dense vector로 바꿔준 word embedding의 시작이다. 역사적 중요성이 크므로, RNN 시리즈에서 한 번 다루도록 하겠다.
다음은 자연어 처리 (NLP) 알고리즘의 발전 동향을 시간 순서로 정리한 것이다.
위에서 보면 알 수 있듯이 RNN은 그 시작이 상당히 오래되었다.
우리는 위 도표에 나와있는 모델 중 GPT1 / BERT 까지 살펴볼 예정이다. 현재 화제가 되고 있는 ChatGPT는 GPT-3를 소폭 발전시킨 GPT-3.5를 기반으로 하고 있는 무료 모델과 GPT-4를 기반으로 하고 있는 유료 모델이 있다.
또한 얼마 전 구글에서 ChatGPT와 같은 AI형 챗봇 Bard 한국어 서비스를 시작하여 화제가 되고 있는데 여담이지만 GPT-3.5보다 한국어 성능은 확실히 좋은 것 같다. (GPT-4보다 좋은지는 잘 모르겠다..)
또 위 도표를 보면 RNN-based와 Attention-Based로 나뉘는데 Attention mechnism은 지금 딥러닝에서 가장 기본적인 알고리즘이 되었다. 2017년 Transformer ('Attention is all you need')가 Attention mechanism만으로 기계 번역 모델을 구현하여 당시 기준으로 가장 좋은 성능을 자랑했고, 이후에는 이 Transformer를 발전시키거나 다른 Task (eg. Computer vision, Generative model etc..)에 적용하는 방향, 혹은 Transformer의 Encoder나 Decoder 부분을 또는 둘 다 활용해 개발한 모델 (예를 들어, BERT는 Transformer의 Encoder를 활용한 모델이며, GPT는 Transformer의 Decoder를 활용한 모델이다.) 등이 나오는 방향으로 발전이 이뤄져 왔고 지금도 그러하다.
어쩄든 현재 Transformer는 딥러닝을 공부하는 사람이라면 몰라서는 안 되는 모델이 되었고 그 밑바닥에 깔린 알고리즘이 Attention mechanism이다.
이에 대해서도 자세하게 살펴보도록 하겠다.
우선 오늘은 간단하게 하나의 개념만 이야기하고 마치자.
* Markov condition
앞서 단어는 주변 문맥에 의해 의미가 결정된다는 분포 가설을 이야기하였다.
여기서는 일단 이 주변 문맥을 해당 단어 이전에 나온 단어들로 제한하겠다.
그렇다면 현재 time step $t$의 단어는 $1, 2, \cdots, t-1$의 단어들에 의해 의미가 결정될 것이다.
즉 $t$번째에 어떤 단어가 나타날 확률을 $p(x_t)$라 한다면 이를 더 정확히 표현하면, $p(x_t|x_1, \cdots, x_{t-1})$이 될 것이다.
우리가 갖고 있는 문장이 총 t개의 단어가 정해진 순서대로 나열된 것이라 하면 결국 해당 문장이 등장할 확률은 $p(x_1, x_2, \cdots, x_t)$가 될 것이다.
이때, 우리는 이 확률을 다음과 같이 표현할 수 있다.
$p(x_1, \cdots, x_t) = p(x_1) \times p(x_2|x_1) \times p(x_3 |x_1, x_2) \cdots p(x_t | x_1, \cdots, x_{t-1})$
그런데 사실 $t$가 100이라면, 첫 번째 등장한 단어부터 99번째 등장한 단어까지 모두 영향을 받는다고 할 수 있을까?
위 확률분포를 계산하는 것이 타당할까?
앞에 등장한 2개의 단어에만 영향을 받는다고 modeling할 수는 없을까? 앞에 등장한 n개 ($n << t$)의 단어에만 영향을 받는다고 할 수 없을까? 만약 2개의 단어에만 영향을 받는다면 $t$번째 time step에서의 단어는 $t-1, t-2$의 단어에만 의존하고 나머지 $t-3, t-4, \cdots, 1$의 단어와는 (조건부) 독립일 것이다.
즉, 미래는 시간적으로 최근의 과거를 고려했을 때, 먼 과거와는 조건부 독립이다.
이것을 우리는 Markov condition이라고 한다.
앞에서 예시로 든 문장 "나는 오늘 점심에 햄버거를 먹었다."를 생각해보자.
총 $5$개의 단어 (토큰) 로 이뤄진 문장이므로 $x_1, x_2, \cdots, x_5$까지 길이가 5인 text sequence이다.
결국 Neural network는 $p(x_1, \cdots, x_5)$가 등장할 확률을 추론해내야 한다.
위 확률은 만약 이전의 $2$개의 토큰까지만 고려한다면, $p(x_1), p(x_2|x_1), p(x_3|x_2, x_1), p(x_4|x_3, x_2), p(x_5|x_4, x_3)$의 곱으로 이뤄져 있고, 결국 각각의 단어가 등장할 확률, 조건부 확률등을 계산할 필요가 있다.
그리고 이러한 확률 연산을 하는 것이 결국 RNN 계열의 모델들에서 parameters가 하는 역할이다.
그래서 $p(x_1, \cdots, x_5)$을 모델은 output으로 내놓고 그 확률이 높고 이 문장이 실제 training dataset에 존재한다면, 모델은 좋은 결과를 내놓은 것이고, 그 확률이 낮은데 이 문장이 실제 training dataset에 존재하거나, 그 확률이 높은데 이 문장이 실제 training dataest에 존재하지 않는다면 모델은 아직 학습이 부족한 것이다.
결국 Lagnguage model은 text sequence의 joint probability를 estimate하는 것이다.
'Deep dive into Deep learning' 카테고리의 다른 글
Deep dive into Deep learning part 22 : RNN(3) (2) | 2023.05.31 |
---|---|
Deep dive into Deep learning part 21 : RNN (2) (0) | 2023.05.26 |
Deep dive into Deep learning part 19 : Regularization(4) - Updated (2) | 2023.05.16 |
Deep dive into Deep learning part 18 : Regularization (3) - Updated (0) | 2023.05.11 |
Deep dive into deep learning part (17) : Regularization(2) -Updated (0) | 2023.05.07 |
댓글